@sitepong/fastnode 0.2.0 → 0.2.1

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.
Files changed (63) hide show
  1. package/dist/actions/index.cjs +27 -6
  2. package/dist/actions/index.cjs.map +1 -1
  3. package/dist/actions/index.mjs +27 -6
  4. package/dist/actions/index.mjs.map +1 -1
  5. package/dist/cert/index.d.cts +3 -3
  6. package/dist/cert/index.d.ts +3 -3
  7. package/dist/{cert-DtYDJBjG.d.ts → cert-e5GAgAPb.d.ts} +1 -1
  8. package/dist/{cert-6m1R8UeW.d.cts → cert-uLLdb5a7.d.cts} +1 -1
  9. package/dist/cli/index.cjs +27 -6
  10. package/dist/cli/index.cjs.map +1 -1
  11. package/dist/cli/index.d.cts +1 -1
  12. package/dist/cli/index.d.ts +1 -1
  13. package/dist/cli/index.mjs +27 -6
  14. package/dist/cli/index.mjs.map +1 -1
  15. package/dist/client/index.cjs +27 -6
  16. package/dist/client/index.cjs.map +1 -1
  17. package/dist/client/index.d.cts +1 -1
  18. package/dist/client/index.d.ts +1 -1
  19. package/dist/client/index.mjs +27 -6
  20. package/dist/client/index.mjs.map +1 -1
  21. package/dist/deliver/index.d.cts +2 -2
  22. package/dist/deliver/index.d.ts +2 -2
  23. package/dist/{index-Ce-WMV7c.d.cts → index-BN0iWhuw.d.cts} +1 -1
  24. package/dist/{index-CQKpbHZt.d.ts → index-BNP7Bpu5.d.ts} +1 -1
  25. package/dist/{index-CsFIp7OO.d.ts → index-BbY_H_f6.d.ts} +1 -1
  26. package/dist/{index-AD8QXY1T.d.cts → index-BgHagzj1.d.cts} +1 -1
  27. package/dist/{index-KCB2q1-8.d.cts → index-BjkOUQcQ.d.cts} +1 -1
  28. package/dist/{index-D2z7RiAM.d.ts → index-BwwpAlk2.d.ts} +5 -0
  29. package/dist/{index-Kq3rbG0u.d.ts → index-C2YLoFVl.d.ts} +1 -1
  30. package/dist/{index-CojSGJ7m.d.ts → index-CEldrbyz.d.ts} +1 -1
  31. package/dist/{index-CMH_GpN9.d.cts → index-CdfgEZwh.d.cts} +5 -0
  32. package/dist/{index-BW8wQUGC.d.cts → index-Clyf4-lu.d.cts} +1 -1
  33. package/dist/{index-CCs5irG7.d.cts → index-CtydPNxA.d.cts} +1 -1
  34. package/dist/{index-CQd4bo3G.d.cts → index-DHxi-QPC.d.cts} +3 -3
  35. package/dist/{index-DZaPkUnC.d.ts → index-Di4Ic0EE.d.ts} +3 -3
  36. package/dist/{index-BWK-T2-S.d.cts → index-DrCOh0Vh.d.cts} +1 -1
  37. package/dist/{index-BpiEBPVd.d.ts → index-EKU_G1G5.d.ts} +1 -1
  38. package/dist/{index-CdYdwxpQ.d.cts → index-XsMsVc3O.d.cts} +1 -1
  39. package/dist/{index-CLsvyTkh.d.ts → index-jeI44Q5G.d.ts} +1 -1
  40. package/dist/{index-D82CmjMP.d.ts → index-mddpvrRX.d.ts} +1 -1
  41. package/dist/index.cjs +148 -9
  42. package/dist/index.cjs.map +1 -1
  43. package/dist/index.d.cts +40 -13
  44. package/dist/index.d.ts +40 -13
  45. package/dist/index.mjs +148 -9
  46. package/dist/index.mjs.map +1 -1
  47. package/dist/lane/index.cjs +27 -6
  48. package/dist/lane/index.cjs.map +1 -1
  49. package/dist/lane/index.mjs +27 -6
  50. package/dist/lane/index.mjs.map +1 -1
  51. package/dist/match/index.d.cts +4 -4
  52. package/dist/match/index.d.ts +4 -4
  53. package/dist/pem/index.d.cts +2 -2
  54. package/dist/pem/index.d.ts +2 -2
  55. package/dist/pilot/index.d.cts +2 -2
  56. package/dist/pilot/index.d.ts +2 -2
  57. package/dist/precheck/index.d.cts +2 -2
  58. package/dist/precheck/index.d.ts +2 -2
  59. package/dist/produce/index.d.cts +2 -2
  60. package/dist/produce/index.d.ts +2 -2
  61. package/dist/sigh/index.d.cts +2 -2
  62. package/dist/sigh/index.d.ts +2 -2
  63. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/client/auth.ts","../../src/client/srp.ts","../../src/client/apple-session.ts","../../src/client/request.ts","../../src/resources/certificates.ts","../../src/resources/profiles.ts","../../src/resources/bundle-ids.ts","../../src/resources/devices.ts","../../src/resources/apps.ts","../../src/resources/builds.ts","../../src/resources/beta-groups.ts","../../src/resources/capabilities.ts","../../src/resources/app-store-versions.ts","../../src/resources/app-screenshots.ts","../../src/resources/review-submissions.ts","../../src/resources/app-info.ts","../../src/resources/app-info-localizations.ts","../../src/resources/app-store-review-details.ts","../../src/resources/beta-testers.ts","../../src/resources/beta-app-review-submissions.ts","../../src/resources/beta-app-review-details.ts","../../src/resources/beta-invitations.ts","../../src/resources/beta-licenses.ts","../../src/resources/app-previews.ts","../../src/resources/app-preview-sets.ts","../../src/resources/app-prices.ts","../../src/resources/territories.ts","../../src/resources/age-rating-declarations.ts","../../src/resources/app-categories.ts","../../src/resources/app-encryption-declarations.ts","../../src/resources/idfa-declarations.ts","../../src/resources/pre-release-versions.ts","../../src/resources/review-submission-items.ts","../../src/resources/users.ts","../../src/resources/user-invitations.ts","../../src/resources/in-app-purchases.ts","../../src/resources/game-center-detail.ts","../../src/resources/xcode-metrics.ts","../../src/client/portal.ts","../../src/client/iris.ts","../../src/client/index.ts"],"names":["choice","phone","code","createHash","detail","id"],"mappings":";;;;;AAWA,IAAM,kBAAA,GAAqB,IAAA;AAC3B,IAAM,sBAAA,GAAyB,GAAA;AAExB,IAAM,eAAN,MAAmB;AAAA,EAChB,MAAA;AAAA,EACA,YAAA,GAA8B,IAAA;AAAA,EAC9B,SAAA,GAAY,CAAA;AAAA,EAEpB,YAAY,MAAA,EAAqB;AAC/B,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,MAAM,QAAA,GAA4B;AAChC,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AACxC,IAAA,IAAI,IAAA,CAAK,YAAA,IAAgB,GAAA,GAAM,IAAA,CAAK,YAAY,EAAA,EAAI;AAClD,MAAA,OAAO,IAAA,CAAK,YAAA;AAAA,IACd;AACA,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACtB;AAAA,EAEA,MAAM,OAAA,GAA2B;AAC/B,IAAA,MAAM,WAAW,IAAA,CAAK,GAAA;AAAA,MACpB,IAAA,CAAK,OAAO,QAAA,IAAY,sBAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,UAAA,GACzB,+BAAA,GACA,oBAAA;AAEJ,IAAA,MAAM,MAAM,MAAM,WAAA,CAAY,IAAA,CAAK,MAAA,CAAO,YAAY,OAAO,CAAA;AAC7D,IAAA,MAAM,MAAM,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAMxC,IAAA,IAAI,GAAA,GAAM,IAAI,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,QAAA,GAAW,EAAC,GAAI,EAAE,GAAA,EAAK,MAAA,EAAQ,EAC9D,kBAAA,CAAmB;AAAA,MAClB,GAAA,EAAK,OAAA;AAAA,MACL,GAAA,EAAK,KAAK,MAAA,CAAO,KAAA;AAAA,MACjB,GAAA,EAAK;AAAA,KACN,CAAA,CACA,WAAA,CAAY,GAAA,GAAM,EAAE,CAAA,CACpB,iBAAA,CAAkB,GAAA,GAAM,QAAQ,CAAA,CAChC,WAAA,CAAY,QAAQ,CAAA;AAEvB,IAAA,IAAI,IAAA,CAAK,OAAO,QAAA,EAAU;AACxB,MAAA,GAAA,GAAM,GAAA,CAAI,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,IAC1C;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,MAAM,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA;AAEtC,IAAA,IAAA,CAAK,YAAY,GAAA,GAAM,QAAA;AACvB,IAAA,OAAO,IAAA,CAAK,YAAA;AAAA,EACd;AAAA,EAEA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,YAAA,GAAe,IAAA;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AAAA,EACnB;AACF;AC5DA,IAAM,MAAA,GAAS,MAAA;AAAA,EACb;AASF,CAAA;AACA,IAAM,MAAA,GAAS,EAAA;AAIf,SAAS,SAAS,GAAA,EAAqB;AACrC,EAAA,IAAI,GAAA,GAAM,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA;AACzB,EAAA,IAAI,GAAA,CAAI,MAAA,GAAS,CAAA,KAAM,CAAA,QAAS,GAAA,GAAM,GAAA;AACtC,EAAA,OAAO,IAAI,WAAA,EAAY;AACzB;AAEA,SAAS,WAAW,GAAA,EAAqB;AACvC,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,KAAK,CAAA;AAC/B;AAEA,SAAS,MAAA,CAAO,GAAW,SAAA,EAA2B;AACpD,EAAA,OAAO,UAAA,CAAW,SAAS,CAAA,CAAE,MAAA,CAAO,WAAW,CAAC,CAAC,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AACjE;AAEA,SAAS,MAAA,CAAO,GAAW,SAAA,EAA2B;AACpD,EAAA,OAAO,WAAW,SAAS,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,OAAO,KAAK,CAAA;AACrD;AAEA,SAAS,MAAA,CAAO,IAAA,EAAc,GAAA,EAAa,GAAA,EAAqB;AAC9D,EAAA,IAAI,GAAA,KAAQ,IAAI,OAAO,EAAA;AACvB,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,IAAA,GAAO,IAAA,GAAO,GAAA;AACd,EAAA,OAAO,MAAM,EAAA,EAAI;AACf,IAAA,IAAI,GAAA,GAAM,OAAO,EAAA,EAAI;AACnB,MAAA,MAAA,GAAU,SAAS,IAAA,GAAQ,GAAA;AAAA,IAC7B;AACA,IAAA,GAAA,GAAM,GAAA,GAAM,EAAA;AACZ,IAAA,IAAA,GAAQ,OAAO,IAAA,GAAQ,GAAA;AAAA,EACzB;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,CAAA,CAAE,SAAA,EAAmB,CAAA,EAAA,GAAc,IAAA,EAA+C;AACzF,EAAA,MAAM,IAAA,GAAO,SAAS,CAAC,CAAA;AAGvB,EAAA,MAAM,IAAA,GAAO,CAAA,IAAO,IAAA,CAAK,MAAA,GAAS,IAAI,CAAA,IAAM,CAAA,CAAA;AAE5C,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,IAAA,IAAI,MAAM,MAAA,EAAW;AACrB,IAAA,MAAM,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,SAAS,CAAC,CAAA;AACnD,IAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM;AACtB,MAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,IAC1E;AACA,IAAA,MAAA,IAAU,GAAA,CAAI,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,MAAM,CAAA,GAAI,IAAA;AAAA,EAC7C;AAEA,EAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA;AACvC,EAAA,OAAO,MAAA,CAAO,IAAA,GAAO,MAAM,CAAA,GAAI,CAAA;AACjC;AAIO,IAAM,YAAN,MAAgB;AAAA,EACb,CAAA;AAAA,EACA,CAAA;AAAA,EACA,OAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACR,CAAA;AAAA,EACQ,CAAA,GAAmB,IAAA;AAAA,EACnB,CAAA,GAAmB,IAAA;AAAA,EAC3B,CAAA,GAAmB,IAAA;AAAA,EACnB,KAAA,GAAuB,IAAA;AAAA,EAEvB,WAAA,CAAY,QAAgB,IAAA,EAAM;AAChC,IAAA,IAAI,KAAA,KAAU,IAAA,EAAM,MAAM,IAAI,MAAM,kCAAkC,CAAA;AACtE,IAAA,IAAA,CAAK,CAAA,GAAI,MAAA;AACT,IAAA,IAAA,CAAK,CAAA,GAAI,MAAA;AACT,IAAA,IAAA,CAAK,OAAA,GAAU,QAAA;AACf,IAAA,IAAA,CAAK,CAAA,GAAI,EAAE,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA,EAAG,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA;AAE/C,IAAA,IAAA,CAAK,CAAA,GAAI,OAAO,IAAA,GAAO,WAAA,CAAY,GAAG,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA;AAEvD,IAAA,IAAA,CAAK,CAAA,GAAI,SAAS,MAAA,CAAO,IAAA,CAAK,GAAG,IAAA,CAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EAClD;AAAA,EAEA,mBAAA,GAA8B;AAC5B,IAAA,OAAO,IAAA,CAAK,CAAA;AAAA,EACd;AAAA,EAEA,iBACE,QAAA,EACA,QAAA,EACA,KAAA,EACA,GAAA,EACA,sBAA+B,KAAA,EACf;AAChB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,GAAO,GAAG,CAAA;AAG5B,IAAA,IAAI,EAAA,GAAK,IAAA,CAAK,CAAA,KAAM,EAAA,EAAI,OAAO,KAAA;AAE/B,IAAA,IAAI,CAAA;AACJ,IAAA,IAAI,mBAAA,EAAqB;AACvB,MAAA,CAAA,GAAI,IAAA,CAAK,QAAA,CAAS,QAAA,EAAU,KAAK,CAAA;AAAA,IACnC,CAAA,MAAO;AACL,MAAA,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,QAAA,EAAU,KAAK,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,CAAA,GAAI,EAAE,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA,EAAG,IAAA,CAAK,GAAG,GAAG,CAAA;AAC7C,IAAA,IAAI,CAAA,KAAM,IAAI,OAAO,KAAA;AAGrB,IAAA,MAAM,KAAK,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,CAAA,EAAG,KAAK,CAAC,CAAA;AACnC,IAAA,IAAI,IAAA,GAAA,CAAQ,EAAA,GAAK,IAAA,CAAK,CAAA,GAAI,MAAM,IAAA,CAAK,CAAA;AACrC,IAAA,IAAI,IAAA,GAAO,EAAA,EAAI,IAAA,IAAQ,IAAA,CAAK,CAAA;AAC5B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,CAAA,GAAI,CAAA,GAAI,CAAA;AACzB,IAAA,IAAA,CAAK,IAAI,QAAA,CAAS,MAAA,CAAO,MAAM,GAAA,EAAK,IAAA,CAAK,CAAC,CAAC,CAAA;AAC3C,IAAA,IAAA,CAAK,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,CAAA,EAAG,KAAK,OAAO,CAAA;AAGpC,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,IAAA,CAAK,OAAA,EAAS,KAAK,CAAA,EAAG,IAAA,CAAK,CAAC,CAAA,GAAI,EAAE,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,CAAA,EAAG,KAAK,CAAC,CAAA;AAC7E,IAAA,MAAM,GAAA,GACJ,QAAA,CAAS,IAAI,CAAA,GACb,MAAA,CAAO,QAAA,EAAU,IAAA,CAAK,OAAO,CAAA,GAC7B,KAAA,GACA,IAAA,CAAK,CAAA,GACL,MACA,IAAA,CAAK,CAAA;AACP,IAAA,MAAM,KAAA,GAAQ,WAAW,GAAG,CAAA;AAC5B,IAAA,IAAA,CAAK,CAAA,GAAI,WAAW,IAAA,CAAK,OAAO,EAAE,MAAA,CAAO,KAAK,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA;AAG5D,IAAA,MAAM,WAAW,UAAA,CAAW,IAAA,CAAK,IAAI,IAAA,CAAK,CAAA,GAAI,KAAK,CAAC,CAAA;AACpD,IAAA,IAAA,CAAK,KAAA,GAAQ,QAAA;AAAA,MACX,MAAA,CAAO,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,OAAO,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,MAAA,CAAO,KAAK,CAAC;AAAA,KACvE;AAEA,IAAA,OAAO,IAAA,CAAK,CAAA;AAAA,EACd;AAAA,EAEQ,KAAA,CAAM,QAAA,EAAkB,QAAA,EAAkB,KAAA,EAAuB;AACvE,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,MAAA,GAAS,CAAA,KAAM,IAAI,GAAA,GAAM,EAAA;AAC5C,IAAA,MAAM,KAAA,GAAQ,OAAO,CAAA,EAAG,QAAQ,IAAI,QAAQ,CAAA,CAAA,EAAI,KAAK,OAAO,CAAA;AAC5D,IAAA,OAAO,MAAA,CAAO,OAAO,MAAA,CAAO,IAAA,GAAO,QAAQ,KAAA,EAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACjE;AAAA,EAEQ,QAAA,CAAS,WAAmB,KAAA,EAAuB;AAEzD,IAAA,MAAM,WAAW,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA,CAAE,SAAS,EAAE,CAAA;AAC9C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,QAAA,GAAW,SAAA,EAAW,KAAK,OAAO,CAAA;AACvD,IAAA,OAAO,OAAO,IAAA,GAAO,MAAA,CAAO,QAAQ,KAAA,EAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EAC1D;AACF,CAAA;AAIO,SAAS,WAAA,CACd,QAAA,EACA,IAAA,EACA,UAAA,EACA,WACA,QAAA,EACQ;AACR,EAAA,IAAI,CAAC,CAAC,KAAA,EAAO,QAAQ,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,EAAG;AACzC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,QAAQ,CAAA,YAAA,CAAc,CAAA;AAAA,EACjE;AAGA,EAAA,IAAI,gBAAiC,UAAA,CAAW,QAAQ,EAAE,MAAA,CAAO,QAAQ,EAAE,MAAA,EAAO;AAElF,EAAA,IAAI,aAAa,QAAA,EAAU;AAEzB,IAAA,aAAA,GAAgB,aAAA,CAAc,SAAS,KAAK,CAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,UAAA,CAAW,aAAA,EAAe,IAAA,EAAM,UAAA,EAAY,WAAW,QAAQ,CAAA;AACxE;;;AC9KA,IAAM,SAAA,GAAY,wCAAA;AAClB,IAAM,eAAA,GAAkB,sDAAA;AACxB,IAAM,cAAA,GAAiB,0FAAA;AAoEhB,IAAM,4BAAA,GAAN,cAA2C,KAAA,CAAM;AAAA,EACtD,WAAA,CAAY,SAAwB,UAAA,EAA+B;AACjE,IAAA,KAAA,CAAM,OAAO,CAAA;AADqB,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAElC,IAAA,IAAA,CAAK,IAAA,GAAO,8BAAA;AAAA,EACd;AAAA,EAHoC,UAAA;AAItC;AAOO,SAAS,mBAAA,CAAoB,MAAW,OAAA,EAA8B;AAC3E,EAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAGvC,EAAA,IAAI,IAAA,CAAK,eAAe,IAAA,EAAM;AAC5B,IAAA,MAAM,OAAA,GAAU,KAAK,UAAA,IAAc,iEAAA;AACnC,IAAA,MAAM,UAAA,GAAa,OAAA,EAAS,iBAAA,IAAqB,EAAC;AAClD,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,MAAA,MAAM,IAAI,4BAAA;AAAA,QACR,GAAG,OAAO;;AAAA,0BAAA,EAA4B,UAAA,CAAW,CAAC,CAAA,CAAE,OAAO;AAAA,EACxD,WAAW,CAAC,CAAA,CAAE,QAAQ,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC;;AAAA,qFAAA,CAAA;AAAA,QAEhD;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,IAAI,MAAM,OAAO,CAAA;AAAA,EACzB;AAGA,EAAA,IAAA,CAAK,IAAA,CAAK,UAAA,IAAc,EAAA,EAAI,QAAA,CAAS,2BAA2B,CAAA,EAAG;AACjE,IAAA,MAAM,IAAI,4BAAA;AAAA,MACR,CAAA,EAAG,KAAK,UAAU,CAAA,kGAAA,CAAA;AAAA,MAClB,OAAA,EAAS,qBAAqB;AAAC,KACjC;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,UAAA,KAAe,CAAA,EAAG;AAC5C,IAAA,MAAM,MAAM,IAAA,CAAK,UAAA,IAAc,KAAK,YAAA,IAAgB,CAAA,uBAAA,EAA0B,KAAK,UAAU,CAAA,CAAA,CAAA;AAC7F,IAAA,MAAM,IAAI,MAAM,GAAG,CAAA;AAAA,EACrB;AACF;AASA,eAAsB,WAAW,MAAA,EAIH;AAC5B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,KAAU,MAAM;AAAA,EAAC,CAAA,CAAA;AAEpC,EAAA,GAAA,CAAI,+BAA+B,CAAA;AACnC,EAAA,MAAM,UAAA,GAAa,MAAM,eAAA,EAAgB;AAEzC,EAAA,MAAM,UAAU,MAAM,KAAA,CAAM,GAAG,SAAS,CAAA,kBAAA,EAAqB,UAAU,CAAA,CAAA,EAAI;AAAA,IACzE,OAAA,EAAS,EAAE,YAAA,EAAc,mBAAA;AAAoB,GAC9C,CAAA;AACD,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,OAAO,CAAA;AAEhD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,iBAAiB,CAAA;AACpD,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,sBAAsB,CAAA;AAC9D,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,UAAU,WAAA,EAAa;AACzB,IAAA,GAAA,CAAI,uBAAuB,CAAA;AAC3B,IAAA,QAAA,GAAW,eAAA,CAAgB,QAAA,CAAS,MAAA,EAAQ,EAAE,GAAG,WAAW,CAAA;AAAA,EAC9D;AAEA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,CACzC,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAA,CAAE,UAAA,CAAW,KAAK,CAAA,GAAI,CAAA,EAAG,CAAC,CAAA,EAAA,EAAK,CAAC,CAAA,CAAA,CAAA,GAAM,CAAA,EAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CACjE,IAAA,CAAK,IAAI,CAAA;AAEZ,EAAA,GAAA,CAAI,iCAAiC,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,MAAA,CAAO,OAAO,MAAA,CAAO,QAAA,EAAU,UAAA,EAAY,SAAA,EAAW,QAAQ,CAAA;AAE5F,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,SAAS,EAAE,GAAG,WAAA,EAAa,GAAG,SAAS,OAAA,EAAQ;AAAA,IAC/C,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,MAAM,QAAA,CAAS,IAAA;AAAA,IACf,UAAA;AAAA,IACA,WAAW,MAAA,CAAO;AAAA,GACpB;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iDAAA,EAAoD,MAAA,CAAO,KAAK,CAAA,kBAAA,CAAoB,CAAA;AAAA,EACtG;AACA,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,MAAM,iHAAiH,CAAA;AAAA,EACnI;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,GAAA,CAAI,4BAA4B,CAAA;AAChC,IAAA,MAAM,UAAwB,EAAE,GAAG,SAAA,EAAW,iBAAA,EAAmB,EAAC,EAAE;AACpE,IAAA,MAAM,eAAA,CAAgB,SAAS,GAAG,CAAA;AAClC,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAQ;AAAA,EACtC;AAEA,EAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AAC3B,IAAA,GAAA,CAAI,qCAAqC,CAAA;AACzC,IAAA,MAAM,SAAA,GAAY,MAAM,uBAAA,CAAwB,SAAS,CAAA;AACzD,IAAA,OAAO,EAAE,IAAA,EAAM,WAAA,EAAa,OAAA,EAAS,WAAW,SAAA,EAAU;AAAA,EAC5D;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAA,CAAS,MAAM,CAAA,GAAA,EAAM,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,IAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAClH;AAGA,eAAe,wBAAwB,OAAA,EAAoD;AACzF,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,CAAA,EAAI,EAAE,OAAA,EAAS,2BAAA,CAA4B,OAAO,CAAA,EAAG,CAAA;AACvF,EAAA,MAAM,IAAA,GAAO,MAAM,CAAA,CAAE,IAAA,EAAK;AAE1B,EAAA,MAAM,uBAAuB,IAAA,CAAK,mBAAA,IAAuB,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,IAC5E,IAAI,CAAA,CAAE,EAAA;AAAA,IAAI,oBAAoB,CAAA,CAAE,kBAAA;AAAA,IAAoB,UAAU,CAAA,CAAE;AAAA,GAClE,CAAE,CAAA;AAIF,EAAA,MAAM,SAAA,GAAY,KAAK,gBAAA,KAAqB,IAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,YAAA,EAAc,MAAA,IAAU,CAAA;AAEhD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAY,YAAA,GAAe,QAAA;AAAA,IACjC,UAAA;AAAA,IACA;AAAA,GACF;AACF;AAMA,eAAsB,eAAe,KAAA,EAInB;AAChB,EAAA,MAAM,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,aAAA,CAAA,EAAiB;AAAA,IACvC,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,2BAAA,CAA4B,MAAM,OAAO,CAAA,EAAG,gBAAgB,kBAAA,EAAmB;AAAA,IAC7F,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,aAAa,EAAE,EAAA,EAAI,KAAA,CAAM,OAAA,EAAQ,EAAG,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,OAAO;AAAA,GACvF,CAAA;AACH;AASA,eAAsB,oBAAoB,KAAA,EAOhB;AACxB,EAAA,MAAM,GAAA,GAAM,KAAA,CAAM,KAAA,KAAU,MAAM;AAAA,EAAC,CAAA,CAAA;AAEnC,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI,KAAA,CAAM,WAAW,QAAA,EAAU;AAC7B,IAAA,IAAA,GAAO,GAAG,SAAS,CAAA,kCAAA,CAAA;AACnB,IAAA,IAAA,GAAO,IAAA,CAAK,UAAU,EAAE,YAAA,EAAc,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK,EAAG,CAAA;AAAA,EAC9D,CAAA,MAAO;AACL,IAAA,IAAI,MAAM,OAAA,IAAW,IAAA,EAAM,MAAM,IAAI,MAAM,yCAAyC,CAAA;AACpF,IAAA,IAAA,GAAO,GAAG,SAAS,CAAA,0BAAA,CAAA;AACnB,IAAA,IAAA,GAAO,KAAK,SAAA,CAAU;AAAA,MACpB,YAAA,EAAc,EAAE,IAAA,EAAM,KAAA,CAAM,IAAA,EAAK;AAAA,MACjC,WAAA,EAAa,EAAE,EAAA,EAAI,KAAA,CAAM,OAAA,EAAQ;AAAA,MACjC,IAAA,EAAM,MAAM,IAAA,IAAQ;AAAA,KACrB,CAAA;AAAA,EACH;AAEA,EAAA,GAAA,CAAI,wBAAwB,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,IAAA,EAAM;AAAA,IAClC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,EAAE,GAAG,2BAAA,CAA4B,MAAM,OAAO,CAAA,EAAG,gBAAgB,kBAAA,EAAmB;AAAA,IAC7F;AAAA,GACD,CAAA;AACD,EAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,IAAA,MAAM,GAAA,GAAM,MAAM,SAAA,CAAU,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AACnD,IAAA,MAAM,IAAA,GAAA,CAAQ,GAAA,EAAK,cAAA,IAAkB,GAAA,EAAK,iBAAiB,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,CAAE,OAAO,CAAA,CAAE,OAAO,OAAO,CAAA;AACxG,IAAA,MAAM,IAAI,MAAM,IAAA,CAAK,IAAA,CAAK,IAAI,CAAA,IAAK,CAAA,qBAAA,EAAwB,SAAA,CAAU,MAAM,CAAA,CAAA,CAAG,CAAA;AAAA,EAChF;AAEA,EAAA,MAAM,OAAA,GAAwB;AAAA,IAC5B,GAAG,KAAA,CAAM,OAAA;AAAA,IACT,OAAA,EAAS,EAAE,GAAG,KAAA,CAAM,OAAA,CAAQ,SAAS,GAAG,YAAA,CAAa,SAAA,CAAU,OAAO,CAAA,EAAE;AAAA,IACxE,mBAAmB;AAAC,GACtB;AACA,EAAA,MAAM,aAAa,OAAO,CAAA;AAC1B,EAAA,MAAM,eAAA,CAAgB,SAAS,GAAG,CAAA;AAClC,EAAA,OAAO,OAAA;AACT;AAGA,eAAe,eAAA,CAAgB,SAAuB,GAAA,EAA2C;AAC/F,EAAA,MAAM,oBAAoB,OAAO,CAAA;AACjC,EAAA,MAAM,UAAA,GAAa,MAAM,qBAAA,CAAsB,OAAO,CAAA;AACtD,EAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,IAAA,KAAA,MAAW,OAAO,UAAA,EAAY;AAC5B,MAAA,GAAA,CAAI,CAAA,OAAA,EAAK,GAAA,CAAI,OAAO,CAAA,EAAA,EAAK,GAAA,CAAI,QAAQ,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA,EACF;AACA,EAAA,OAAA,CAAQ,iBAAA,GAAoB,UAAA;AAC5B,EAAA,GAAA,CAAI,CAAA,aAAA,EAAgB,OAAA,CAAQ,SAAS,CAAA,CAAE,CAAA;AACzC;AAQA,eAAsB,iBAAiB,MAAA,EAAmD;AACxF,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,KAAA,IAAS,OAAA,CAAQ,GAAA;AACpC,EAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,aAAA;AAEpC,EAAA,MAAM,MAAA,GAAS,MAAM,UAAA,CAAW,EAAE,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,QAAA,EAAU,MAAA,CAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,CAAA;AAC9F,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,WAAA,EAAa,OAAO,MAAA,CAAO,OAAA;AAE/C,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,MAAA;AAC/B,EAAA,MAAM,SAAS,SAAA,CAAU,mBAAA;AAEzB,EAAA,IAAI,SAAA,CAAU,SAAS,QAAA,EAAU;AAC/B,IAAA,GAAA,CAAI,sEAAsE,CAAA;AAC1E,IAAA,GAAA,CAAI,0GAA0G,CAAA;AAC9G,IAAA,MAAM,QAAQ,MAAM,QAAA,CAAS,CAAA,iBAAA,EAAoB,SAAA,CAAU,UAAU,CAAA,aAAA,CAAe,CAAA;AACpF,IAAA,IAAI,KAAA,CAAM,WAAA,EAAY,KAAM,KAAA,EAAO;AACjC,MAAA,GAAA,CAAI,uCAAuC,CAAA;AAC3C,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAA,CAAE,kBAAkB,CAAA,CAAE,CAAA;AACzF,MAAA,MAAMA,OAAAA,GAAS,MAAM,QAAA,CAAS,gBAAgB,CAAA;AAC9C,MAAA,MAAMC,MAAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAA,CAASD,OAAAA,EAAQ,EAAE,CAAA,GAAI,CAAC,CAAC,CAAA,IAAK,OAAO,CAAC,CAAA;AACvE,MAAA,MAAM,cAAA,CAAe,EAAE,OAAA,EAAS,OAAA,EAASC,OAAM,EAAA,EAAI,IAAA,EAAMA,MAAAA,CAAM,QAAA,EAAiB,CAAA;AAChF,MAAA,GAAA,CAAI,CAAA,aAAA,EAAgBA,MAAAA,CAAM,kBAAkB,CAAA,CAAE,CAAA;AAC9C,MAAA,MAAMC,QAAO,MAAM,QAAA,CAAS,CAAA,iBAAA,EAAoB,SAAA,CAAU,UAAU,CAAA,aAAA,CAAe,CAAA;AACnF,MAAA,OAAO,oBAAoB,EAAE,OAAA,EAAS,IAAA,EAAAA,KAAAA,EAAM,QAAQ,OAAA,EAAS,OAAA,EAASD,MAAAA,CAAM,EAAA,EAAI,MAAMA,MAAAA,CAAM,QAAA,IAAmB,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAAA,IACpI;AACA,IAAA,OAAO,mBAAA,CAAoB,EAAE,OAAA,EAAS,IAAA,EAAM,OAAO,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,CAAA;AAAA,EACnF;AAGA,EAAA,GAAA,CAAI,sEAAsE,CAAA;AAC1E,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAMA,MAAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,IAAA,GAAA,CAAI,CAAA,2BAAA,EAA8BA,MAAAA,CAAM,kBAAkB,CAAA,CAAE,CAAA;AAC5D,IAAA,MAAMC,QAAO,MAAM,QAAA,CAAS,CAAA,iBAAA,EAAoB,SAAA,CAAU,UAAU,CAAA,aAAA,CAAe,CAAA;AACnF,IAAA,OAAO,oBAAoB,EAAE,OAAA,EAAS,IAAA,EAAAA,KAAAA,EAAM,QAAQ,OAAA,EAAS,OAAA,EAASD,MAAAA,CAAM,EAAA,EAAI,MAAMA,MAAAA,CAAM,QAAA,IAAmB,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AAAA,EACpI;AACA,EAAA,GAAA,CAAI,uCAAuC,CAAA;AAC3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,CAAA,EAAA,EAAK,CAAA,GAAI,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,CAAC,CAAA,CAAE,kBAAkB,CAAA,CAAE,CAAA;AACzF,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,gBAAgB,CAAA;AAC9C,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAA,CAAS,MAAA,EAAQ,EAAE,CAAA,GAAI,CAAC,CAAC,CAAA,IAAK,OAAO,CAAC,CAAA;AACvE,EAAA,MAAM,cAAA,CAAe,EAAE,OAAA,EAAS,OAAA,EAAS,MAAM,EAAA,EAAI,IAAA,EAAM,KAAA,CAAM,QAAA,EAAiB,CAAA;AAChF,EAAA,GAAA,CAAI,CAAA,aAAA,EAAgB,KAAA,CAAM,kBAAkB,CAAA,CAAE,CAAA;AAC9C,EAAA,MAAM,OAAO,MAAM,QAAA,CAAS,CAAA,iBAAA,EAAoB,SAAA,CAAU,UAAU,CAAA,aAAA,CAAe,CAAA;AACnF,EAAA,OAAO,mBAAA,CAAoB,EAAE,OAAA,EAAS,IAAA,EAAM,QAAQ,OAAA,EAAS,OAAA,EAAS,KAAA,CAAM,EAAA,EAAI,MAAM,KAAA,CAAM,QAAA,IAAmB,KAAA,EAAO,KAAA,EAAO,KAAK,CAAA;AACpI;AAEA,SAAS,4BAA4B,OAAA,EAA+C;AAClF,EAAA,MAAM,IAA4B,EAAE,oBAAA,EAAsB,OAAA,CAAQ,UAAA,EAAY,QAAQ,kBAAA,EAAmB;AACzG,EAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,CAAA,CAAE,uBAAuB,IAAI,OAAA,CAAQ,SAAA;AAC5D,EAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,MAAM,IAAI,OAAA,CAAQ,IAAA;AACtC,EAAA,MAAM,IAAI,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAChF,EAAA,IAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA,GAAI,CAAA;AACrB,EAAA,OAAO,CAAA;AACT;AAIA,eAAe,MAAA,CACb,IAAA,EAAc,QAAA,EAAkB,UAAA,EAAoB,WAAmB,QAAA,EACmC;AAC1G,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,CAAU,IAAI,CAAA;AACjC,EAAA,MAAM,CAAA,GAAI,OAAO,mBAAA,EAAoB;AACrC,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,GAAG,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAEvD,EAAA,MAAM,WAAA,GAAsC;AAAA,IAC1C,cAAA,EAAgB,kBAAA;AAAA,IAChB,kBAAA,EAAoB,gBAAA;AAAA,IACpB,oBAAA,EAAsB,UAAA;AAAA,IACtB,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,IAAI,SAAA,EAAW,WAAA,CAAY,QAAQ,CAAA,GAAI,SAAA;AAGvC,EAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,YAAA,CAAA,EAAgB;AAAA,IACtD,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,WAAA;AAAA,IACT,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,CAAA,EAAG,OAAA,EAAS,WAAA,EAAa,IAAA,EAAM,SAAA,EAAW,CAAC,KAAA,EAAO,QAAQ,GAAG,CAAA;AAAA,IACpF,QAAA,EAAU;AAAA,GACX,CAAA;AACD,EAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAA,EAAK;AACpC,EAAA,IAAI,QAAA,CAAS,aAAA,EAAe,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,aAAa,CAAC,CAAA,CAAE,CAAA;AAEzG,EAAA,MAAM,EAAE,WAAW,UAAA,EAAY,IAAA,EAAM,SAAS,CAAA,EAAG,IAAA,EAAM,CAAA,EAAG,QAAA,EAAS,GAAI,QAAA;AACvE,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAA;AAC1C,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,IAAA,EAAM,QAAQ,CAAA;AAGpC,EAAA,MAAM,oBAAoB,WAAA,CAAY,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,IAAI,QAAQ,CAAA;AAG9E,EAAA,MAAM,KAAK,MAAA,CAAO,gBAAA,CAAiB,IAAA,EAAM,iBAAA,CAAkB,SAAS,KAAK,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,KAAK,CAAA,EAAG,CAAA,CAAE,QAAA,CAAS,KAAK,GAAG,IAAI,CAAA;AACzH,EAAA,IAAI,EAAA,KAAO,KAAA,EAAO,MAAM,IAAI,MAAM,iCAAiC,CAAA;AACnE,EAAA,MAAM,KAAK,MAAA,CAAO,KAAA;AAGlB,EAAA,MAAM,eAAA,GAAkB,EAAE,GAAG,WAAA,EAAY;AACzC,EAAA,IAAI,QAAA,EAAU,eAAA,CAAgB,YAAY,CAAA,GAAI,QAAA;AAE9C,EAAA,MAAM,WAAA,GAAc,MAAM,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,0CAAA,CAAA,EAA8C;AAAA,IACxF,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,eAAA;AAAA,IACT,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,WAAA,EAAa,IAAA;AAAA,MACb,CAAA;AAAA,MACA,IAAI,MAAA,CAAO,IAAA,CAAK,IAAI,KAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,MAC5C,EAAA,EAAI,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,KAAK,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAA,GAAI,EAAA;AAAA,MACrD,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,IACD,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AAAE,IAAA,IAAA,GAAO,MAAM,YAAY,IAAA,EAAK;AAAA,EAAG,CAAA,CAAA,MAAQ;AAAE,IAAA,IAAA,GAAO,EAAA;AAAA,EAAI;AAE5D,EAAA,OAAO;AAAA,IACL,QAAQ,WAAA,CAAY,MAAA;AAAA,IACpB,IAAA;AAAA,IACA,OAAA,EAAS,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAAA,IACzC,SAAA,EAAW,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,uBAAuB,CAAA,IAAK,EAAA;AAAA,IAC/D,IAAA,EAAM,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK;AAAA,GAC3C;AACF;AAIA,eAAe,aAAa,OAAA,EAAsC;AAChE,EAAA,MAAM,CAAA,GAAI,MAAM,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA,UAAA,CAAA,EAAc,EAAE,OAAA,EAAS,gBAAA,CAAiB,OAAO,CAAA,EAAG,CAAA;AACtF,EAAA,MAAA,CAAO,OAAO,OAAA,CAAQ,OAAA,EAAS,YAAA,CAAa,CAAA,CAAE,OAAO,CAAC,CAAA;AACxD;AAEA,eAAe,oBAAoB,OAAA,EAAsC;AACvE,EAAA,MAAM,YAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACxF,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,eAAA,EAAiB,EAAE,OAAA,EAAS,EAAE,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,kBAAA,EAAmB,EAAG,CAAA;AACvG,EAAA,IAAI,IAAI,EAAA,EAAI;AACV,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,MAAM,IAAA,EAAM,YAAA,EAAc,OAAA,CAAQ,SAAA,GAAY,KAAK,IAAA,CAAK,YAAA;AAC5D,IAAA,IAAI,IAAA,EAAM,UAAU,UAAA,EAAY,OAAA,CAAQ,SAAS,MAAA,CAAO,IAAA,CAAK,SAAS,UAAU,CAAA;AAAA,EAClF;AACF;AAIA,eAAe,sBAAsB,OAAA,EAAmD;AACtF,EAAA,MAAM,YAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AACxF,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,+DAAA,EAAiE;AAAA,MACvF,OAAA,EAAS,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAQ,kBAAA;AAAmB,KAC1D,CAAA;AACD,IAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,OAAO,EAAC;AACrB,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,MACnC,EAAA,EAAI,EAAE,EAAA,IAAM,EAAA;AAAA,MACZ,KAAA,EAAO,EAAE,KAAA,IAAS,EAAA;AAAA,MAClB,OAAA,EAAS,EAAE,OAAA,IAAW,EAAA;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,IAAW;AAAA,KACxB,CAAE,CAAA;AAAA,EACJ,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAC;AAAA,EACV;AACF;AAEA,eAAe,eAAA,GAAmC;AAChD,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,cAAc,CAAA;AACtC,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,EAAA,IAAI,CAAC,IAAA,EAAM,cAAA,EAAgB,MAAM,IAAI,MAAM,mCAAmC,CAAA;AAC9E,EAAA,OAAO,IAAA,CAAK,cAAA;AACd;AAEA,SAAS,iBAAiB,OAAA,EAA+C;AACvE,EAAA,MAAM,IAA4B,EAAE,oBAAA,EAAsB,OAAA,CAAQ,UAAA,EAAY,QAAQ,kBAAA,EAAmB;AACzG,EAAA,IAAI,OAAA,CAAQ,SAAA,EAAW,CAAA,CAAE,uBAAuB,IAAI,OAAA,CAAQ,SAAA;AAC5D,EAAA,IAAI,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,MAAM,IAAI,OAAA,CAAQ,IAAA;AACtC,EAAA,MAAM,IAAI,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAChF,EAAA,IAAI,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA,GAAI,CAAA;AACrB,EAAA,OAAO,CAAA;AACT;AAEA,SAAS,aAAa,OAAA,EAA0C;AAC9D,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,GAAA,IAAO,OAAA,CAAQ,YAAA,IAAe,IAAK,EAAC,EAAG;AAChD,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA;AACtC,IAAA,IAAI,GAAG,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA;AAAA,EAC5B;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,eAAA,CAAgB,MAAc,SAAA,EAA2B;AAChE,EAAA,MAAM,IAAA,GAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACvE,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,OAAO,IAAA,EAAM;AACX,IAAA,MAAM,KAAA,GAAQ,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,SAAS,CAAA,EAAA,EAAK,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,CAAA;AACrE,IAAA,MAAM,OAAOE,UAAAA,CAAW,MAAM,EAAE,MAAA,CAAO,KAAK,EAAE,MAAA,EAAO;AACrD,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,KAAA,MAAW,QAAQ,IAAA,EAAM;AACvB,MAAA,IAAI,SAAS,CAAA,EAAG;AAAE,QAAA,QAAA,IAAY,CAAA;AAAA,MAAG,CAAA,MAAO;AAAE,QAAA,QAAA,IAAY,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,EAAA;AAAI,QAAA;AAAA,MAAO;AACpF,MAAA,IAAI,YAAY,IAAA,EAAM;AAAA,IACxB;AACA,IAAA,IAAI,QAAA,IAAY,MAAM,OAAO,KAAA;AAC7B,IAAA,OAAA,EAAA;AAAA,EACF;AACF;AAEA,eAAe,cAAc,OAAA,EAAkC;AAC7D,EAAA,MAAM,EAAA,GAAK,gBAAgB,EAAE,KAAA,EAAO,QAAQ,KAAA,EAAO,MAAA,EAAQ,OAAA,CAAQ,MAAA,EAAQ,CAAA;AAC3E,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,CAAA,KAAM;AAAE,IAAA,EAAA,CAAG,QAAA,CAAS,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,MAAA,EAAA,CAAG,KAAA,EAAM;AAAG,MAAA,CAAA,CAAE,CAAA,CAAE,MAAM,CAAA;AAAA,IAAG,CAAC,CAAA;AAAA,EAAG,CAAC,CAAA;AAC1F;;;AC5fA,IAAM,eAAA,GAAkB,uCAAA;AACxB,IAAM,eAAA,GAAkB,4CAAA;AAExB,IAAM,WAAA,GAAc,CAAA;AACpB,IAAM,kBAAA,GAAqB,GAAA;AAC3B,IAAM,cAAA,GAAiB,GAAA;AAEvB,IAAM,yBAAA,GAA4B,IAAA;AAE3B,IAAM,oBAAA,GAAN,cAAmC,KAAA,CAAM;AAAA,EAC9C,WAAA,CACE,OAAA,EACO,MAAA,EACA,MAAA,GAAyC,EAAC,EACjD;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAHN,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,sBAAA;AAAA,EACd;AAAA,EALS,MAAA;AAAA,EACA,MAAA;AAKX;AAEO,IAAM,cAAA,GAAN,cAA6B,oBAAA,CAAqB;AAAA,EACvD,YAAmB,UAAA,EAAoB;AACrC,IAAA,KAAA,CAAM,CAAA,0BAAA,EAA6B,UAAU,CAAA,CAAA,CAAA,EAAK,GAAG,CAAA;AADpC,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AAEjB,IAAA,IAAA,CAAK,IAAA,GAAO,gBAAA;AAAA,EACd;AAAA,EAHmB,UAAA;AAIrB;AAEO,IAAM,gBAAN,MAAoB;AAAA,EACjB,OAAA;AAAA,EACA,YAAA;AAAA,EAER,WAAA,CAAY,YAAA,EAA4B,UAAA,GAAa,KAAA,EAAO;AAC1D,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,OAAA,GAAU,aAAa,eAAA,GAAkB,eAAA;AAAA,EAChD;AAAA,EAEA,MAAM,OAAA,CAAW,IAAA,EAAc,OAAA,GAA0B,EAAC,EAAe;AACvE,IAAA,MAAM,EAAE,MAAA,GAAS,KAAA,EAAO,MAAM,MAAA,EAAQ,OAAA,EAAS,cAAa,GAAI,OAAA;AAEhE,IAAA,IAAI,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,OAAO,GAAG,IAAI,CAAA,CAAA;AAChC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,YAAA,GAAe,IAAI,eAAA,EAAgB;AACzC,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,QAAA,IAAI,UAAU,MAAA,EAAW;AACzB,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,UAAA,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,KAAA,CAAM,IAAA,CAAK,GAAG,CAAC,CAAA;AAAA,QACvC,CAAA,MAAO;AACL,UAAA,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,QACrC;AAAA,MACF;AACA,MAAA,MAAM,EAAA,GAAK,aAAa,QAAA,EAAS;AACjC,MAAA,IAAI,EAAA,EAAI,GAAA,IAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA;AAAA,IACvB;AAEA,IAAA,IAAI,SAAA,GAA0B,IAAA;AAI9B,IAAA,IAAI,kBAAA,GAAqB,kBAAA;AAEzB,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,WAAA,EAAa,OAAA,EAAA,EAAW;AACvD,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,YAAA,CAAa,QAAA,EAAS;AAE/C,MAAA,MAAM,OAAA,GAAkC;AAAA,QACtC,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA,QAC9B,cAAA,EAAgB,kBAAA;AAAA,QAChB,GAAG;AAAA,OACL;AAEA,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC3B,MAAA;AAAA,QACA,OAAA;AAAA,QACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,OACrC,CAAA;AAED,MAAA,IAAI,IAAI,EAAA,EAAI;AACV,QAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,EAAK,OAAO,MAAA;AAC/B,QAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AAAA,MACzB;AAGA,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,IAAO,OAAA,KAAY,CAAA,EAAG;AACvC,QAAA,IAAA,CAAK,aAAa,UAAA,EAAW;AAC7B,QAAA;AAAA,MACF;AAIA,MAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,QAAA,IAAI,qBAAqB,yBAAA,EAA2B;AAClD,UAAA,MAAM,IAAI,cAAA,CAAe,IAAA,CAAK,KAAA,CAAM,kBAAA,GAAqB,GAAI,CAAC,CAAA;AAAA,QAChE;AACA,QAAA,MAAM,gBAAA,GAAmB,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AACtD,QAAA,MAAM,UAAU,gBAAA,GACZ,QAAA,CAAS,gBAAA,EAAkB,EAAE,IAAI,GAAA,GACjC,kBAAA;AACJ,QAAA,MAAM,MAAM,OAAO,CAAA;AACnB,QAAA,kBAAA,IAAsB,CAAA;AACtB,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,YAAY,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,IAAI,CAAA;AACnD,MAAA,MAAM,MAAA,GAAU,SAAA,EAAoC,MAAA,IAAU,EAAC;AAI/D,MAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,CAAC,CAAA,EAAG,IAAA;AAC7B,QAAA,IAAI,cAAc,kDAAA,EAAoD;AACpE,UAAA,MAAMC,OAAAA,GACJ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAChD,6CAAA;AACF,UAAA,MAAM,IAAI,4BAAA;AAAA,YACR,GAAGA,OAAM,CAAA,kGAAA,CAAA;AAAA,YACT;AAAC,WACH;AAAA,QACF;AAAA,MACF;AAIA,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,GAAA,IAAO,OAAA,GAAU,WAAA,EAAa;AAC/C,QAAA,MAAM,QAAA,GAAW,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA,GAAI,EAAA;AACzD,QAAA,IAAI,QAAA,CAAS,QAAA,CAAS,gCAAgC,CAAA,EAAG;AACvD,UAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AAAA,YACnB,kBAAA,GAAqB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAAA,YACxC;AAAA,WACF;AACA,UAAA,MAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AACzC,UAAA;AAAA,QACF;AAAA,MACF;AAGA,MAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,OAAA,GAAU,WAAA,EAAa;AAC9C,QAAA,MAAM,UAAU,IAAA,CAAK,GAAA;AAAA,UACnB,kBAAA,GAAqB,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,OAAO,CAAA;AAAA,UACxC;AAAA,SACF;AACA,QAAA,MAAM,KAAA,CAAM,OAAA,GAAU,IAAA,CAAK,MAAA,KAAW,GAAG,CAAA;AACzC,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,KAAK,EAAE,IAAA,CAAK,IAAI,CAAA,IAAK,CAAA,KAAA,EAAQ,IAAI,MAAM,CAAA,CAAA;AAEtF,MAAA,SAAA,GAAY,IAAI,oBAAA,CAAqB,MAAA,EAAQ,GAAA,CAAI,QAAQ,MAAM,CAAA;AAC/D,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,SAAA,IAAa,IAAI,KAAA,CAAM,8BAA8B,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,GAAA,CAAO,IAAA,EAAc,MAAA,EAA6E;AACtG,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAQ,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,IAAA,CAAQ,IAAA,EAAc,IAAA,EAA2B;AACrD,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,MAAA,EAAQ,MAAM,CAAA;AAAA,EACvD;AAAA,EAEA,MAAM,KAAA,CAAS,IAAA,EAAc,IAAA,EAA2B;AACtD,IAAA,OAAO,KAAK,OAAA,CAAW,IAAA,EAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAM,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,OAAO,IAAA,EAA6B;AACxC,IAAA,MAAM,KAAK,OAAA,CAAQ,IAAA,EAAM,EAAE,MAAA,EAAQ,UAAU,CAAA;AAAA,EAC/C;AAAA;AAAA,EAGA,gBAAgB,MAAA,EAAwD;AACtE,IAAA,MAAM,SAA6C,EAAC;AAEpD,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACxD,QAAA,MAAA,CAAO,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA,CAAG,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,KAAA;AAAA,MACtE;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,MAAA,CAAO,SAAS,IAAI,MAAA,CAAO,OAAA;AAAA,IAC7B;AAEA,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACxD,QAAA,MAAA,CAAO,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA,CAAG,CAAA,GAAI,KAAA;AAAA,MAC7B;AAAA,IACF;AAEA,IAAA,IAAI,MAAA,CAAO,UAAU,MAAA,EAAW;AAC9B,MAAA,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,IACvC;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAA,CAAO,MAAM,IAAI,MAAA,CAAO,IAAA;AAAA,IAC1B;AAEA,IAAA,IAAI,OAAO,MAAA,EAAQ;AAEjB,MAAA,MAAA,CAAO,aAAa,IAAI,MAAA,CAAO,MAAA;AAAA,IACjC;AAEA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAM,IAAA,CAAQ,IAAA,EAAc,MAAA,GAAqB,EAAC,EAAoC;AACpF,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,eAAA,CAAgB,MAAM,CAAA;AAC/C,IAAA,OAAO,IAAA,CAAK,GAAA,CAA4B,IAAA,EAAM,WAAW,CAAA;AAAA,EAC3D;AAAA,EAEA,OAAO,QAAA,CAAY,IAAA,EAAc,MAAA,GAAqB,EAAC,EAAuC;AAC5F,IAAA,IAAI,SAA6B,MAAA,CAAO,MAAA;AAExC,IAAA,OAAO,IAAA,EAAM;AACX,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAQ,MAAM,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAE/D,MAAA,KAAA,MAAW,IAAA,IAAQ,SAAS,IAAA,EAAM;AAChC,QAAA,MAAM,IAAA;AAAA,MACR;AAGA,MAAA,MAAM,QAAA,GAAW,SAAS,KAAA,EAAO,IAAA;AACjC,MAAA,IAAI,CAAC,QAAA,EAAU;AAGf,MAAA,MAAM,OAAA,GAAU,IAAI,GAAA,CAAI,QAAQ,CAAA;AAChC,MAAA,MAAA,GAAS,OAAA,CAAQ,YAAA,CAAa,GAAA,CAAI,aAAa,CAAA,IAAK,MAAA;AACpD,MAAA,IAAI,CAAC,MAAA,EAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEA,MAAM,GAAA,CAAO,IAAA,EAAc,MAAA,GAAqB,EAAC,EAAiB;AAChE,IAAA,MAAM,UAAe,EAAC;AACtB,IAAA,WAAA,MAAiB,IAAA,IAAQ,IAAA,CAAK,QAAA,CAAY,IAAA,EAAM,MAAM,CAAA,EAAG;AACvD,MAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,IACnB;AACA,IAAA,OAAO,OAAA;AAAA,EACT;AACF;AAEA,SAAS,MAAM,EAAA,EAA2B;AACxC,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;;;ACvPO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAUgB;AACzB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAE,YAAA,EAAc,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAE;AAAA,IAC9D;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiB,kBAAA,EAAoB,UAAU,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,IAAI,EAAA,EAAkC;AAC1C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,oBAAoB,EAAE,CAAA;AAAA,KACxB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAGY;AACvB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,kBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,cAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,iBAAiB,MAAA,CAAO,eAAA;AAAA,YACxB,YAAY,MAAA,CAAO;AAAA;AACrB;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,iBAAA,EAAoB,EAAE,CAAA,CAAE,CAAA;AAAA,EACjD;AAAA,EAEA,OAAO,SAAS,MAAA,EAKgB;AAC9B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,QAAA,CAAsB,kBAAA,EAAoB,UAAU,CAAA;AAAA,EACvE;AACF,CAAA;;;AChEO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAWY;AACrB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAC;AACrB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACxD,QAAA,IAAI,OAAO,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAa,cAAA,EAAgB,UAAU,CAAA;AAAA,EAC1D;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAiD;AACrE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,gBAAgB,EAAE,CAAA,CAAA;AAAA,MAClB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAMQ;AACnB,IAAA,MAAM,aAAA,GAAyC;AAAA,MAC7C,QAAA,EAAU;AAAA,QACR,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,EAAA,EAAI,OAAO,UAAA;AAAW,OACnD;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UACvC,IAAA,EAAM,cAAA;AAAA,UACN;AAAA,SACF,CAAE;AAAA;AACJ,KACF;AAEA,IAAA,IAAI,MAAA,CAAO,SAAA,IAAa,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,EAAG;AACnD,MAAA,aAAA,CAAc,OAAA,GAAU;AAAA,QACtB,IAAA,EAAM,MAAA,CAAO,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,UAClC,IAAA,EAAM,SAAA;AAAA,UACN;AAAA,SACF,CAAE;AAAA,OACJ;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,cAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,UAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,aAAa,MAAA,CAAO;AAAA,WACtB;AAAA,UACA;AAAA;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAE,CAAA;AAAA,EAC7C;AAAA,EAEA,MAAM,gBAAgB,SAAA,EAA2C;AAC/D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,gBAAgB,SAAS,CAAA,aAAA;AAAA,KAC3B;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,SAAA,EAAsC;AACrD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAY,CAAA,aAAA,EAAgB,SAAS,CAAA,QAAA,CAAU,CAAA;AAAA,EAClE;AAAA,EAEA,MAAM,YAAY,SAAA,EAAsC;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,gBAAgB,SAAS,CAAA,SAAA;AAAA,KAC3B;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AC1GO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAYa;AACtB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAC;AACrB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACxD,QAAA,IAAI,OAAO,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAc,eAAA,EAAiB,UAAU,CAAA;AAAA,EAC5D;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAkD;AACtE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,iBAAiB,EAAE,CAAA,CAAA;AAAA,MACnB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAKS;AACpB,IAAA,MAAM,UAAA,GAAsC;AAAA,MAC1C,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,MAAM,MAAA,CAAO,IAAA;AAAA,MACb,UAAU,MAAA,CAAO;AAAA,KACnB;AACA,IAAA,IAAI,MAAA,CAAO,MAAA,EAAQ,UAAA,CAAW,MAAA,GAAS,MAAA,CAAO,MAAA;AAE9C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,eAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,WAAA;AAAA,UACN;AAAA;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,KAAK,UAAA,EAA8C;AACvD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK;AAAA,MAC9B,MAAA,EAAQ,EAAE,UAAA,EAAW;AAAA,MACrB,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AAAA,EACvB;AAAA,EAEA,MAAM,gBAAgB,UAAA,EAAmD;AACvE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,iBAAiB,UAAU,CAAA,qBAAA;AAAA,KAC7B;AAAA,EACF;AACF,CAAA;;;AChFO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAWW;AACpB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAE,OAAA,EAAS,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAE;AAAA,IACzD;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAY,aAAA,EAAe,UAAU,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,IAAI,EAAA,EAA6B;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,eAAe,EAAE,CAAA;AAAA,KACnB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,SAAS,MAAA,EAIK;AAClB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,aAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,SAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,UAAU,MAAA,CAAO,QAAA;AAAA,YACjB,MAAM,MAAA,CAAO;AAAA;AACf;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,MAAA,EACiB;AACjB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,eAAe,EAAE,CAAA,CAAA;AAAA,MACjB;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,SAAA;AAAA,UACN,EAAA;AAAA,UACA,UAAA,EAAY;AAAA;AACd;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,WAAW,IAAA,EAAsC;AACrD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAK,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAC9D,IAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AAAA,EACvB;AACF,CAAA;;;AC5EO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAWQ;AACjB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAC;AACrB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACxD,QAAA,IAAI,OAAO,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAS,UAAA,EAAY,UAAU,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAA6C;AACjE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,YAAY,EAAE,CAAA,CAAA;AAAA,MACd;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,eAAe,QAAA,EAAuC;AAC1D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK;AAAA,MAC9B,MAAA,EAAQ,EAAE,QAAA,EAAS;AAAA,MACnB,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AAAA,EACvB;AACF,CAAA;;;AC1CO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAaU;AACnB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAC;AACrB,MAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAG;AACxD,QAAA,IAAI,OAAO,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAW,YAAA,EAAc,UAAU,CAAA;AAAA,EACtD;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAA+C;AACnE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,cAAc,EAAE,CAAA,CAAA;AAAA,MAChB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,cAAc,OAAA,EAA2C;AAC7D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,cAAc,OAAO,CAAA,gBAAA;AAAA,KACvB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,iBAAiB,OAAA,EAAmD;AACxE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,cAAc,OAAO,CAAA,uBAAA;AAAA,KACvB;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,MAAA,EAIU;AACjC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,4BAAA,EAA8B;AAAA,MAC9B,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,wBAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,UAAU,MAAA,CAAO;AAAA,SACnB;AAAA,QACA,aAAA,EAAe;AAAA,UACb,KAAA,EAAO;AAAA,YACL,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAI,OAAO,OAAA;AAAQ;AAC7C;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,kBAAA,CACJ,cAAA,EACA,MAAA,EACgC;AAChC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,2BAAA,EAA8B,cAAc,CAAA,CAAA,EAAI;AAAA,MAChD,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,wBAAA;AAAA,QACN,EAAA,EAAI,cAAA;AAAA,QACJ,UAAA,EAAY;AAAA,UACV,UAAU,MAAA,CAAO;AAAA;AACnB;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,qBAAqB,OAAA,EAAoD;AAC7E,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,QAC/B,cAAc,OAAO,CAAA,kBAAA;AAAA,OACvB;AACA,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,oBAAoB,OAAA,EAAgC;AACxD,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,8BAAA,EAAgC;AAAA,MACnD,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,0BAAA;AAAA,QACN,aAAA,EAAe;AAAA,UACb,KAAA,EAAO;AAAA,YACL,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,IAAI,OAAA;AAAQ;AACtC;AACF;AACF,KACD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAY,OAAA,EAAgC;AAChD,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,WAAA,EAAc,OAAO,CAAA,CAAA,EAAI;AAAA,MAC7C,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,EAAA,EAAI,OAAA;AAAA,QACJ,UAAA,EAAY;AAAA,UACV,OAAA,EAAS;AAAA;AACX;AACF,KACD,CAAA;AAAA,EACH;AACF,CAAA;;;ACzIO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAUc;AACvB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,UAAA,CAAW,SAAS,EAAE,UAAA,EAAY,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,EAAE;AAAA,IAC5D;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAe,gBAAA,EAAkB,UAAU,CAAA;AAAA,EAC9D;AAAA,EAEA,MAAM,IAAI,EAAA,EAAgC;AACxC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,kBAAkB,EAAE,CAAA;AAAA,KACtB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,WAAW,KAAA,EAAqC;AACpD,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAe,CAAA,SAAA,EAAY,KAAK,CAAA,WAAA,CAAa,CAAA;AAAA,EAChE;AAAA,EAEA,MAAM,SAAA,CAAU,OAAA,EAAiB,QAAA,EAAmC;AAClE,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,CAAA,eAAA,EAAkB,OAAO,CAAA,qBAAA,CAAA,EAAyB;AAAA,MACrE,IAAA,EAAM,SAAS,GAAA,CAAI,CAAC,QAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAG,CAAE;AAAA,KACpD,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,YAAA,CAAa,OAAA,EAAiB,QAAA,EAAmC;AACrE,IAAA,MAAM,KAAK,IAAA,CAAK,OAAA;AAAA,MACd,kBAAkB,OAAO,CAAA,qBAAA,CAAA;AAAA,MACzB;AAAA,QACE,MAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,SAAS,GAAA,CAAI,CAAC,QAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAG,CAAE;AAAA;AACrD;AACF,KACF;AAAA,EACF;AAAA,EAEA,MAAM,UAAA,CAAW,KAAA,EAAe,IAAA,EAAyC;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAC1C,IAAA,OAAO,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,EAAE,UAAA,CAAW,IAAA,KAAS,IAAI,CAAA,IAAK,IAAA;AAAA,EAC3D;AACF,CAAA;;;ACtDO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,gBAAgB,UAAA,EAAmD;AACvE,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,iBAAiB,UAAU,CAAA,qBAAA;AAAA,KAC7B;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,MAAA,EAImB;AAC9B,IAAA,MAAM,UAAA,GAAsC;AAAA,MAC1C,gBAAgB,MAAA,CAAO;AAAA,KACzB;AACA,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,UAAA,CAAW,WAAW,MAAA,CAAO,QAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,0BAAA,EAA4B;AAAA,MAC5B,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,sBAAA;AAAA,QACN,UAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACb,QAAA,EAAU;AAAA,YACR,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,EAAA,EAAI,OAAO,UAAA;AAAW;AACnD;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,YAAA,EACA,MAAA,EAI6B;AAC7B,IAAA,MAAM,UAAA,GAAsC;AAAA,MAC1C,gBAAgB,MAAA,CAAO;AAAA,KACzB;AACA,IAAA,IAAI,OAAO,QAAA,EAAU;AACnB,MAAA,UAAA,CAAW,WAAW,MAAA,CAAO,QAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,yBAAA,EAA4B,YAAY,CAAA,CAAA,EAAI;AAAA,MAC5C,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,sBAAA;AAAA,QACN,EAAA,EAAI,YAAA;AAAA,QACJ;AAAA;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,QAAQ,YAAA,EAAqC;AACjD,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,yBAAA,EAA4B,YAAY,CAAA,CAAE,CAAA;AAAA,EACnE;AACF,CAAA;;;AClCO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,UAAA,CACJ,KAAA,EACA,MAAA,EAK4B;AAC5B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,YAAY,KAAK,CAAA,iBAAA,CAAA;AAAA,MACjB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAyD;AAC7E,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,wBAAwB,EAAE,CAAA,CAAA;AAAA,MAC1B;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAOgB;AAC3B,IAAA,MAAM,UAAA,GAAsC;AAAA,MAC1C,eAAe,MAAA,CAAO,aAAA;AAAA,MACtB,UAAU,MAAA,CAAO;AAAA,KACnB;AACA,IAAA,IAAI,MAAA,CAAO,WAAA,EAAa,UAAA,CAAW,WAAA,GAAc,MAAA,CAAO,WAAA;AACxD,IAAA,IAAI,MAAA,CAAO,mBAAA,EAAqB,UAAA,CAAW,mBAAA,GAAsB,MAAA,CAAO,mBAAA;AACxE,IAAA,IAAI,MAAA,CAAO,SAAA,EAAW,UAAA,CAAW,SAAA,GAAY,MAAA,CAAO,SAAA;AAEpD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,sBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,kBAAA;AAAA,UACN,UAAA;AAAA,UACA,aAAA,EAAe;AAAA,YACb,GAAA,EAAK;AAAA,cACH,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAI,OAAO,KAAA;AAAM;AACzC;AACF;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,MAAA,EAM0B;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,wBAAwB,EAAE,CAAA,CAAA;AAAA,MAC1B;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,kBAAA;AAAA,UACN,EAAA;AAAA,UACA,UAAA,EAAY;AAAA;AACd;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,QAAA,CAAS,SAAA,EAAmB,OAAA,EAAgC;AAChE,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,CAAA,qBAAA,EAAwB,SAAS,CAAA,oBAAA,CAAA,EAAwB;AAAA,MAC7E,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,IAAI,OAAA;AAAQ,KACrC,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,iBAAiB,SAAA,EAA2D;AAChF,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,wBAAwB,SAAS,CAAA,6BAAA;AAAA,KACnC;AAAA,EACF;AAAA,EAEA,MAAM,mBAAmB,MAAA,EASgB;AACvC,IAAA,MAAM,EAAE,SAAA,EAAW,GAAG,UAAA,EAAW,GAAI,MAAA;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,kCAAA,EAAoC;AAAA,MACpC,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,8BAAA;AAAA,QACN,UAAA;AAAA,QACA,aAAA,EAAe;AAAA,UACb,eAAA,EAAiB;AAAA,YACf,IAAA,EAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAI,SAAA;AAAU;AAClD;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,kBAAA,CACJ,cAAA,EACA,MAAA,EAQsC;AACtC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,iCAAA,EAAoC,cAAc,CAAA,CAAA,EAAI;AAAA,MACtD,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,8BAAA;AAAA,QACN,EAAA,EAAI,cAAA;AAAA,QACJ,UAAA,EAAY;AAAA;AACd,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACnJO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,wBACJ,cAAA,EAC6B;AAC7B,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,oCAAoC,cAAc,CAAA,kBAAA;AAAA,KACpD;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,MAAA,EAGc;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,uBAAA,EAAyB;AAAA,MACzB,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,mBAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,uBAAuB,MAAA,CAAO;AAAA,SAChC;AAAA,QACA,aAAA,EAAe;AAAA,UACb,2BAAA,EAA6B;AAAA,YAC3B,IAAA,EAAM;AAAA,cACJ,IAAA,EAAM,8BAAA;AAAA,cACN,IAAI,MAAA,CAAO;AAAA;AACb;AACF;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,gBAAgB,KAAA,EAAyC;AAC7D,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,yBAAyB,KAAK,CAAA,eAAA;AAAA,KAChC;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,MAAA,EAIG;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,oBAAA,EAAsB;AAAA,MACtB,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,gBAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,UAAU,MAAA,CAAO,QAAA;AAAA,UACjB,UAAU,MAAA,CAAO;AAAA,SACnB;AAAA,QACA,aAAA,EAAe;AAAA,UACb,gBAAA,EAAkB;AAAA,YAChB,MAAM,EAAE,IAAA,EAAM,mBAAA,EAAqB,EAAA,EAAI,OAAO,KAAA;AAAM;AACtD;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,gBAAA,CACJ,YAAA,EACA,MAAA,EACwB;AACxB,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,mBAAA,EAAsB,YAAY,CAAA,CAAA,EAAI;AAAA,MACtC,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,gBAAA;AAAA,QACN,EAAA,EAAI,YAAA;AAAA,QACJ,UAAA,EAAY;AAAA,UACV,oBAAoB,MAAA,CAAO,kBAAA;AAAA,UAC3B,UAAU,MAAA,CAAO;AAAA;AACnB;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,iBAAiB,YAAA,EAAqC;AAC1D,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,mBAAA,EAAsB,YAAY,CAAA,CAAE,CAAA;AAAA,EAC7D;AAAA,EAEA,MAAM,UAAU,KAAA,EAA8B;AAC5C,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAE,CAAA;AAAA,EACzD;AACF,CAAA;;;ACnHO,IAAM,4BAAN,MAAgC;AAAA,EACrC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,cAAc,SAAA,EAAuD;AACzE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,gCAAA,EAAkC;AAAA,MAClC,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,4BAAA;AAAA,QACN,aAAA,EAAe;AAAA,UACb,eAAA,EAAiB;AAAA,YACf,IAAA,EAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,IAAI,SAAA;AAAU;AAClD;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,uBAAuB,MAAA,EAGC;AAC5B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,uBAAA,EAAyB;AAAA,MACzB,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,mBAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,UAAU,MAAA,CAAO;AAAA,SACnB;AAAA,QACA,aAAA,EAAe;AAAA,UACb,GAAA,EAAK;AAAA,YACH,MAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAI,OAAO,KAAA;AAAM;AACzC;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,wBAAwB,YAAA,EAAiD;AAC7E,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,sBAAA,EAAyB,YAAY,CAAA,CAAA,EAAI;AAAA,MACzC,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,mBAAA;AAAA,QACN,EAAA,EAAI,YAAA;AAAA,QACJ,UAAA,EAAY;AAAA,UACV,SAAA,EAAW;AAAA;AACb;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACvDO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,UAAA,CAAW,KAAA,EAAe,MAAA,EAGT;AACrB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,SAAS,MAAA,EAAQ;AAAA,KACnB;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAa,CAAA,SAAA,EAAY,KAAK,aAAa,UAAU,CAAA;AAAA,EACxE;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAiD;AACrE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,gBAAgB,EAAE,CAAA,CAAA;AAAA,MAClB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,aAAA,EACkB;AAClB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,gBAAgB,EAAE,CAAA,CAAA;AAAA,MAClB;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,UAAA;AAAA,UACN,EAAA;AAAA,UACA,GAAI,aAAA,GACA;AAAA,YACE,eAAe,MAAA,CAAO,WAAA;AAAA,cACpB,OAAO,OAAA,CAAQ,aAAa,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,CAAA,EAAG,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,EAAE,IAAA,EAAM,CAAA,EAAG,CAAC;AAAA;AAChE,cAEF;AAAC;AACP;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,aAAA,EAAgB,EAAE,CAAA,CAAE,CAAA;AAAA,EAC7C;AACF,CAAA;;;ACnDO,IAAM,+BAAN,MAAmC;AAAA,EACxC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,cAAA,CAAe,SAAA,EAAmB,MAAA,EAEL;AACjC,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,gBAAgB,SAAS,CAAA,qBAAA,CAAA;AAAA,MACzB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,EAAA,EAA0C;AAClD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,4BAA4B,EAAE,CAAA;AAAA,KAChC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAGoB;AAC/B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,0BAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,sBAAA;AAAA,UACN,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,aAAA,EAAe;AAAA,YACb,OAAA,EAAS,EAAE,IAAA,EAAM,EAAE,MAAM,UAAA,EAAY,EAAA,EAAI,MAAA,CAAO,SAAA,EAAU;AAAE;AAC9D;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC8B;AAC9B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,4BAA4B,EAAE,CAAA,CAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,EAAE,MAAM,sBAAA,EAAwB,EAAA,EAAI,YAAW;AAAE,KAC3D;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,yBAAA,EAA4B,EAAE,CAAA,CAAE,CAAA;AAAA,EACzD;AACF,CAAA;;;ACrDO,IAAM,gCAAN,MAAoC;AAAA,EACzC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,sBACJ,iBAAA,EAC+B;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAE/B,CAAA,qBAAA,EAAwB,iBAAiB,CAAA,qBAAA,CAAuB,CAAA;AAClE,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,EAAA,EAA2C;AACnD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAE/B,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAE,CAAA;AACnC,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAGqB;AAChC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAE/B,2BAAA,EAA6B;AAAA,MAC7B,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,uBAAA;AAAA,QACN,YAAY,MAAA,CAAO,UAAA;AAAA,QACnB,aAAA,EAAe;AAAA,UACb,eAAA,EAAiB;AAAA,YACf,MAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,EAAA,EAAI,OAAO,iBAAA;AAAkB;AACjE;AACF;AACF,KACD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC+B;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAA,EAAI;AAAA,MACnC,IAAA,EAAM,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAI,UAAA;AAAW,KACvD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACxDO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAYe;AACxB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAgB,iBAAA,EAAmB,UAAU,CAAA;AAAA,EAChE;AAAA,EAEA,MAAM,IAAI,EAAA,EAAiC;AACzC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,mBAAmB,EAAE,CAAA;AAAA,KACvB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAMW;AACtB,IAAA,MAAM,UAAA,GAAmC;AAAA,MACvC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,UAAU,MAAA,CAAO;AAAA,KACnB;AACA,IAAA,MAAM,gBAA+E,EAAC;AACtF,IAAA,IAAI,MAAA,CAAO,cAAc,MAAA,EAAQ;AAC/B,MAAA,aAAA,CAAc,UAAA,GAAa;AAAA,QACzB,IAAA,EAAM,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,QAAQ,EAAE,IAAA,EAAM,YAAA,EAAc,EAAA,EAAG,CAAE;AAAA,OACpE;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,QAAQ,MAAA,EAAQ;AACzB,MAAA,aAAA,CAAc,IAAA,GAAO;AAAA,QACnB,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,QAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAG,CAAE;AAAA,OACxD;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,iBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,aAAA;AAAA,UACN,UAAA;AAAA,UACA,GAAI,OAAO,IAAA,CAAK,aAAa,EAAE,MAAA,GAAS,EAAE,aAAA,EAAc,GAAI;AAAC;AAC/D;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAE,CAAA;AAAA,EAChD;AAAA,EAEA,MAAM,YAAY,KAAA,EAA2C;AAC3D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAE,KAAA,EAAM,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAC/D,IAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AAAA,EACvB;AACF,CAAA;;;AC5EO,IAAM,mCAAN,MAAuC;AAAA,EAC5C,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAG4B;AACrC,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,8BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,EAAA,EAA8C;AACtD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,gCAAgC,EAAE,CAAA;AAAA,KACpC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,OAAA,EAAmD;AAC9D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,8BAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,0BAAA;AAAA,UACN,aAAA,EAAe;AAAA,YACb,KAAA,EAAO,EAAE,IAAA,EAAM,EAAE,MAAM,QAAA,EAAU,EAAA,EAAI,SAAQ;AAAE;AACjD;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AChCO,IAAM,+BAAN,MAAmC;AAAA,EACxC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,UAAU,KAAA,EAA6C;AAC3D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,YAAY,KAAK,CAAA,oBAAA;AAAA,KACnB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,EAAA,EAA0C;AAClD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,4BAA4B,EAAE,CAAA;AAAA,KAChC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC8B;AAC9B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,4BAA4B,EAAE,CAAA,CAAA;AAAA,MAC9B,EAAE,IAAA,EAAM,EAAE,MAAM,sBAAA,EAAwB,EAAA,EAAI,YAAW;AAAE,KAC3D;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AC/BO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA;AAAA,EAGpB,MAAM,KAAK,MAAA,EAGuB;AAChC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,2BAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,uBAAA;AAAA,UACN,aAAA,EAAe;AAAA,YACb,GAAA,EAAK,EAAE,IAAA,EAAM,EAAE,MAAM,MAAA,EAAQ,EAAA,EAAI,MAAA,CAAO,KAAA,EAAM,EAAE;AAAA,YAChD,UAAA,EAAY,EAAE,IAAA,EAAM,EAAE,MAAM,aAAA,EAAe,EAAA,EAAI,MAAA,CAAO,YAAA,EAAa;AAAE;AACvE;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACzBO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAA8D;AACvE,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,2BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,EAAA,EAA2C;AACnD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,6BAA6B,EAAE,CAAA;AAAA,KACjC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,UAAU,KAAA,EAA8C;AAC5D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,YAAY,KAAK,CAAA,qBAAA;AAAA,KACnB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC+B;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAA,EAAI;AAAA,MACnC,IAAA,EAAM,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAI,UAAA;AAAW,KACvD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AChCO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,IAAI,EAAA,EAAiC;AACzC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,mBAAmB,EAAE,CAAA;AAAA,KACvB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAMW;AACtB,IAAA,MAAM,EAAE,eAAA,EAAiB,GAAG,IAAA,EAAK,GAAI,MAAA;AACrC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,iBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,aAAA;AAAA,UACN,UAAA,EAAY,IAAA;AAAA,UACZ,aAAA,EAAe;AAAA,YACb,aAAA,EAAe;AAAA,cACb,IAAA,EAAM,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAI,eAAA;AAAgB;AACtD;AACF;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EACqB;AACrB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,mBAAmB,EAAE,CAAA,CAAA;AAAA,MACrB,EAAE,IAAA,EAAM,EAAE,MAAM,aAAA,EAAe,EAAA,EAAI,YAAW;AAAE,KAClD;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAE,CAAA;AAAA,EAChD;AACF,CAAA;;;ACvDO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,mBAAA,CACJ,cAAA,EACA,MAAA,EAC0B;AAC1B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,SAAS,MAAA,EAAQ;AAAA,KACnB;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,oCAAoC,cAAc,CAAA,eAAA,CAAA;AAAA,MAClD;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAuD;AAC3E,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,sBAAsB,EAAE,CAAA,CAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAGc;AACzB,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,oBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,gBAAA;AAAA,UACN,UAAA,EAAY,EAAE,WAAA,EAAa,MAAA,CAAO,WAAA,EAAY;AAAA,UAC9C,aAAA,EAAe;AAAA,YACb,2BAAA,EAA6B;AAAA,cAC3B,IAAA,EAAM;AAAA,gBACJ,IAAA,EAAM,8BAAA;AAAA,gBACN,IAAI,MAAA,CAAO;AAAA;AACb;AACF;AACF;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAE,CAAA;AAAA,EACnD;AACF,CAAA;;;ACzDO,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,UAAA,CAAW,KAAA,EAAe,MAAA,EAGR;AACtB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,SAAS,MAAA,EAAQ;AAAA,KACnB;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA,CAAc,CAAA,SAAA,EAAY,KAAK,WAAW,UAAU,CAAA;AAAA,EACvE;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAkD;AACtE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,iBAAiB,EAAE,CAAA,CAAA;AAAA,MACnB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACvBO,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAAmD;AAC5D,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAe,iBAAA,EAAmB,UAAU,CAAA;AAAA,EAC/D;AAAA,EAEA,MAAM,IAAI,EAAA,EAAgC;AACxC,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,mBAAmB,EAAE,CAAA;AAAA,KACvB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACGO,IAAM,gCAAN,MAAoC;AAAA,EACzC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,IAAI,EAAA,EAA2C;AACnD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,6BAA6B,EAAE,CAAA;AAAA,KACjC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC+B;AAC/B,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,KAAA,CAE/B,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAA,EAAI;AAAA,MACnC,IAAA,EAAM,EAAE,IAAA,EAAM,uBAAA,EAAyB,IAAI,UAAA;AAAW,KACvD,CAAA;AACD,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACxCO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAIgB;AACzB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAiB,mBAAA,EAAqB,UAAU,CAAA;AAAA,EACnE;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAqD;AACzE,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,qBAAqB,EAAE,CAAA,CAAA;AAAA,MACvB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACVO,IAAM,oCAAN,MAAwC;AAAA,EAC7C,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAG6B;AACtC,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,+BAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,EAAA,EAA+C;AACvD,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAE/B,CAAA,8BAAA,EAAiC,EAAE,CAAA,CAAE,CAAA;AACvC,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,cAAc,MAAA,EAGF;AAChB,IAAA,MAAM,KAAK,IAAA,CAAK,IAAA;AAAA,MACd,CAAA,8BAAA,EAAiC,OAAO,aAAa,CAAA,qBAAA,CAAA;AAAA,MACrD,EAAE,IAAA,EAAM,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAC,EAAA,MAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,EAAA,EAAG,CAAE,CAAA;AAAE,KAChE;AAAA,EACF;AACF,CAAA;;;AC1CO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,sBACJ,iBAAA,EAC0B;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,wBAAwB,iBAAiB,CAAA,gBAAA;AAAA,KAC3C;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,EAAA,EAAsC;AAC9C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,wBAAwB,EAAE,CAAA;AAAA,KAC5B;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAGgB;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,sBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,kBAAA;AAAA,UACN,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,aAAA,EAAe;AAAA,YACb,eAAA,EAAiB;AAAA,cACf,MAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,EAAA,EAAI,OAAO,iBAAA;AAAkB;AACjE;AACF;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC0B;AAC1B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,wBAAwB,EAAE,CAAA,CAAA;AAAA,MAC1B,EAAE,IAAA,EAAM,EAAE,MAAM,kBAAA,EAAoB,EAAA,EAAI,YAAW;AAAE,KACvD;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,qBAAA,EAAwB,EAAE,CAAA,CAAE,CAAA;AAAA,EACrD;AACF,CAAA;;;ACxDO,IAAM,6BAAN,MAAiC;AAAA,EACtC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAYsB;AAC/B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,wBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,GAAA,CACJ,EAAA,EACA,MAAA,EAC4B;AAC5B,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,0BAA0B,EAAE,CAAA,CAAA;AAAA,MAC5B;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,cAAc,MAAA,EAIkB;AACpC,IAAA,MAAM,MAAA,GAAiC;AAAA,MACrC,KAAK,MAAA,CAAO,KAAA;AAAA,MACZ,SAAS,MAAA,CAAO;AAAA,KAClB;AACA,IAAA,IAAI,MAAA,CAAO,QAAA,EAAU,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,KAAA,EAAO,GAAG,CAAA;AACpD,IAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AAAA,EACvB;AACF,CAAA;;;ACrDO,IAAM,gCAAN,MAAoC;AAAA,EACzC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,iBAAA,CACJ,kBAAA,EACA,MAAA,EACiC;AACjC,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS;AAAA,KAC1B;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,yBAAyB,kBAAkB,CAAA,MAAA,CAAA;AAAA,MAC3C;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,EAAA,EAA2C;AACnD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,6BAA6B,EAAE,CAAA;AAAA,KACjC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAKqB;AAChC,IAAA,MAAM,aAAA,GAAwE;AAAA,MAC5E,gBAAA,EAAkB;AAAA,QAChB,MAAM,EAAE,IAAA,EAAM,mBAAA,EAAqB,EAAA,EAAI,OAAO,kBAAA;AAAmB;AACnE,KACF;AACA,IAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,MAAA,aAAA,CAAc,eAAA,GAAkB;AAAA,QAC9B,MAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,EAAA,EAAI,OAAO,iBAAA;AAAkB,OACjE;AAAA,IACF;AACA,IAAA,IAAI,OAAO,6BAAA,EAA+B;AACxC,MAAA,aAAA,CAAc,2BAAA,GAA8B;AAAA,QAC1C,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,8BAAA;AAAA,UACN,IAAI,MAAA,CAAO;AAAA;AACb,OACF;AAAA,IACF;AACA,IAAA,IAAI,OAAO,2BAAA,EAA6B;AACtC,MAAA,aAAA,CAAc,yBAAA,GAA4B;AAAA,QACxC,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,4BAAA;AAAA,UACN,IAAI,MAAA,CAAO;AAAA;AACb,OACF;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,2BAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,uBAAA;AAAA,UACN;AAAA;AACF;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC+B;AAC/B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,6BAA6B,EAAE,CAAA,CAAA;AAAA,MAC/B,EAAE,IAAA,EAAM,EAAE,MAAM,uBAAA,EAAyB,EAAA,EAAI,YAAW;AAAE,KAC5D;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,0BAAA,EAA6B,EAAE,CAAA,CAAE,CAAA;AAAA,EAC1D;AACF,CAAA;;;AClFO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAKS;AAClB,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAU,WAAA,EAAa,UAAU,CAAA;AAAA,EACpD;AAAA,EAEA,MAAM,IAAI,EAAA,EAA2B;AACnC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,KAAK,GAAA,CAA2B,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,CAAA;AAC7E,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EACA,aAAA,EACe;AACf,IAAA,MAAM,gBAAgB,aAAA,GAClB;AAAA,MACE,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,aAAA,CAAc,GAAA,CAAI,CAACC,GAAAA,MAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAAA,GAAAA,EAAG,CAAE;AAAA;AACxD,KACF,GACA,MAAA;AACJ,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,aAAa,EAAE,CAAA,CAAA;AAAA,MACf;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,OAAA;AAAA,UACN,EAAA;AAAA,UACA,UAAA;AAAA,UACA,GAAI,aAAA,GAAgB,EAAE,aAAA,KAAkB;AAAC;AAC3C;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,UAAA,EAAa,EAAE,CAAA,CAAE,CAAA;AAAA,EAC1C;AACF,CAAA;;;AChDO,IAAM,0BAAN,MAA8B;AAAA,EACnC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,KAAK,MAAA,EAKmB;AAC5B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAoB,qBAAA,EAAuB,UAAU,CAAA;AAAA,EACxE;AAAA,EAEA,MAAM,IAAI,EAAA,EAAqC;AAC7C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,uBAAuB,EAAE,CAAA;AAAA,KAC3B;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,MAAA,EAGe;AAC1B,IAAA,MAAM,aAAA,GAAgB,OAAO,aAAA,GACzB;AAAA,MACE,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,CAAC,QAAQ,EAAE,IAAA,EAAM,MAAA,EAAQ,EAAA,EAAG,CAAE;AAAA;AAC/D,KACF,GACA,MAAA;AACJ,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA;AAAA,MAC/B,qBAAA;AAAA,MACA;AAAA,QACE,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,iBAAA;AAAA,UACN,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,GAAI,aAAA,GAAgB,EAAE,aAAA,KAAkB;AAAC;AAC3C;AACF,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,EAAA,EAA2B;AACtC,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,CAAA,oBAAA,EAAuB,EAAE,CAAA,CAAE,CAAA;AAAA,EACpD;AAAA,EAEA,MAAM,YAAY,KAAA,EAA+C;AAC/D,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,EAAE,MAAA,EAAQ,EAAE,KAAA,EAAM,EAAG,KAAA,EAAO,CAAA,EAAG,CAAA;AAC/D,IAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,IAAK,IAAA;AAAA,EACvB;AACF,CAAA;;;AC1DO,IAAM,yBAAN,MAA6B;AAAA,EAClC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,UAAA,CAAW,KAAA,EAAe,MAAA,EAKH;AAC3B,IAAA,MAAM,UAAA,GAAyB;AAAA,MAC7B,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,SAAS,MAAA,EAAQ,OAAA;AAAA,MACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,GAAA;AAAA,MACxB,MAAM,MAAA,EAAQ;AAAA,KAChB;AACA,IAAA,OAAO,KAAK,IAAA,CAAK,GAAA;AAAA,MACf,YAAY,KAAK,CAAA,iBAAA,CAAA;AAAA,MACjB;AAAA,KACF;AAAA,EACF;AAAA,EAEA,MAAM,GAAA,CAAI,EAAA,EAAY,MAAA,EAAuD;AAC3E,IAAA,MAAM,cAAkD,EAAC;AACzD,IAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,WAAA,CAAY,SAAS,IAAI,MAAA,CAAO,OAAA;AACrD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,sBAAsB,EAAE,CAAA,CAAA;AAAA,MACxB;AAAA,KACF;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AClCO,IAAM,2BAAN,MAA+B;AAAA,EACpC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,UAAU,KAAA,EAA0C;AACxD,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,YAAY,KAAK,CAAA,iBAAA;AAAA,KACnB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,IAAI,EAAA,EAAuC;AAC/C,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,yBAAyB,EAAE,CAAA;AAAA,KAC7B;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,MAAA,CACJ,EAAA,EACA,UAAA,EAC2B;AAC3B,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,KAAA;AAAA,MAC/B,yBAAyB,EAAE,CAAA,CAAA;AAAA,MAC3B,EAAE,IAAA,EAAM,EAAE,MAAM,mBAAA,EAAqB,EAAA,EAAI,YAAW;AAAE,KACxD;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;ACVO,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAAoB,IAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAAsB;AAAA,EAAtB,IAAA;AAAA,EAEpB,MAAM,oBAAoB,OAAA,EAA6C;AACrE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,cAAc,OAAO,CAAA,iBAAA;AAAA,KACvB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,wBAAwB,OAAA,EAAiD;AAC7E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,cAAc,OAAO,CAAA,qBAAA;AAAA,KACvB;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,mBAAmB,EAAA,EAAsC;AAC7D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,wBAAwB,EAAE,CAAA;AAAA,KAC5B;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AAAA,EAEA,MAAM,uBAAuB,EAAA,EAA0C;AACrE,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,IAAA,CAAK,GAAA;AAAA,MAC/B,4BAA4B,EAAE,CAAA;AAAA,KAChC;AACA,IAAA,OAAO,QAAA,CAAS,IAAA;AAAA,EAClB;AACF,CAAA;;;AC9CA,IAAM,WAAA,GAAc,qDAAA;AAEb,IAAM,YAAA,GAAN,MAAM,aAAA,CAAa;AAAA,EAChB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA,GAAO,EAAA;AAAA,EACP,MAAA,GAAS,EAAA;AAAA,EACT,SAAA;AAAA,EAER,WAAA,CAAY,SAAuB,MAAA,EAAgB;AACjD,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EACzF;AAAA;AAAA,EAGA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,IAAA,CAAK,IAAA,CAAK,0BAAA,EAA4B,EAAE,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAc,QAAA,CAAS,IAAA,EAAc,IAAA,EAAwE;AAC3G,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,QAAQ,IAAA,CAAK,SAAA;AAAA,MACb,cAAA,EAAgB,kBAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,KAAK,IAAA,EAAM;AAAE,MAAA,OAAA,CAAQ,MAAM,IAAI,IAAA,CAAK,IAAA;AAAM,MAAA,OAAA,CAAQ,SAAS,IAAI,IAAA,CAAK,MAAA;AAAA,IAAQ;AAEhF,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;AACzC,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,KAC1B,CAAA;AAED,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAAE,MAAA,IAAA,CAAK,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAAI,MAAA,IAAA,CAAK,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,IAAK,EAAA;AAAA,IAAI;AACrH,IAAA,KAAA,MAAW,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAe,IAAK,EAAC,EAAG;AACpD,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA;AACtC,MAAA,IAAI,KAAK,CAAC,IAAA,CAAK,UAAU,QAAA,CAAS,CAAA,CAAE,CAAC,CAAA,GAAI,GAAG,CAAA,EAAG,IAAA,CAAK,aAAa,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,GAAI,GAAA,GAAM,EAAE,CAAC,CAAA;AAAA,IAC1F;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,IAAA,GAAY,IAAA;AAChB,IAAA,IAAI;AAAE,MAAA,IAAA,GAAO,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,IAAM,CAAA,CAAA,MAAQ;AAAA,IAAC;AACtD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,IAAI,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAG/E,IAAA,mBAAA,CAAoB,IAAA,EAAM,KAAK,OAAO,CAAA;AACtC,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,IAAA,EAAM,IAAA,EAAM,SAAS,IAAA,EAAK;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,MAAA,CAAO,IAAA,EAAc,MAAA,GAAiC,EAAC,EAAsE;AACzI,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,GAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAC5C,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AACtE,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,QAAQ,IAAA,CAAK,SAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,KAAK,IAAA,EAAM;AAAE,MAAA,OAAA,CAAQ,MAAM,IAAI,IAAA,CAAK,IAAA;AAAM,MAAA,OAAA,CAAQ,SAAS,IAAI,IAAA,CAAK,MAAA;AAAA,IAAQ;AAEhF,IAAA,OAAA,CAAQ,IAAI,CAAA,aAAA,EAAgB,GAAA,CAAI,QAAQ,CAAA,EAAG,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AACvD,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,CAAI,UAAS,EAAG,EAAE,SAAS,CAAA;AACnD,IAAA,KAAA,MAAW,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAe,IAAK,EAAC,EAAG;AACpD,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA;AACtC,MAAA,IAAI,KAAK,CAAC,IAAA,CAAK,UAAU,QAAA,CAAS,CAAA,CAAE,CAAC,CAAA,GAAI,GAAG,CAAA,EAAG,IAAA,CAAK,aAAa,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,GAAI,GAAA,GAAM,EAAE,CAAC,CAAA;AAAA,IAC1F;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AACvD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,GAAA,CAAI,QAAQ,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,WAAW,CAAA,CAAA,EAAI,IAAA,CAAK,MAAM,CAAA,CAAA,CAAG,CAAA;AACzF,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS,MAAM,WAAA,EAAY;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,MAAM,YAAA,CACJ,OAAA,EACA,qBAAA,GAAmD,EAAC,EACd;AACtC,IAAA,MAAM,IAAA,GAAO,OAAA,CACV,OAAA,CAAQ,oBAAA,EAAsB,GAAG,CAAA,CACjC,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,IAAA,EAAK,CACL,KAAA,CAAM,GAAG,EAAE,CAAA;AACd,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAK3E,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,WAAA,EAAY;AAAA,IACzB,CAAA,CAAA,MAAQ;AAAA,IAGR;AAIA,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,IAAA;AAAA,MACA,qBAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACT;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,8BAA8B,IAAI,CAAA;AAIrE,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,EAAM,IAAA,GAAO,CAAC,CAAA,IAAK,MAAA,CAAO,IAAA,EAAM,GAAA,IAAO,MAAA,CAAO,IAAA,EAAM,IAAA,IAAQ,MAAA,CAAO,IAAA;AAC1F,IAAA,MAAM,KAAA,GACJ,SAAS,KAAA,IACT,OAAA,EAAS,MACT,OAAA,EAAS,GAAA,IACT,SAAS,UAAA,EAAY,GAAA;AACvB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,CAAA,2CAAA,EAA8C,MAAA,CAAO,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9F;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,GAAA,EAAK,OAAA,EAAQ;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,UAAU,KAAA,EAA6B;AAC3C,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,sBAAA,EAAwB;AAAA,MACnD,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,OAAO,MAAM,IAAA,GAAO,CAAC,KAAK,IAAA,EAAM,GAAA,IAAO,MAAM,IAAA,IAAQ,IAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,KAAA,EAA8B;AAC/C,IAAA,MAAM,IAAA,CAAK,KAAK,yBAAA,EAA2B;AAAA,MACzC,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,OAAgB,eAAA,GAAkB,YAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAclC,MAAM,kBAAkB,OAAA,EAAoE;AAC1F,IAAA,MAAM,IAAA,GAAO,OAAA,CACV,OAAA,CAAQ,oBAAA,EAAsB,GAAG,CAAA,CACjC,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,IAAA,EAAK,CACL,KAAA,CAAM,GAAG,EAAE,CAAA;AACd,IAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAGhF,IAAA,IAAI;AAAE,MAAA,MAAM,KAAK,WAAA,EAAY;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAA,IAAe;AAEvD,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,IAAA;AAAA,MACA,qBAAA,EAAuB;AAAA,QACrB,CAAC,aAAA,CAAa,eAAe,GAAG;AAAC,OACnC;AAAA,MACA,6BAAA,EAA+B;AAAA,QAC7B;AAAA,UACE,KAAA,EAAO,IAAA;AAAA,UACP,WAAW,aAAA,CAAa,eAAA;AAAA,UACxB,aAAa,EAAC;AAAA,UACd,WAAA,EAAa,KAAA;AAAA,UACb,KAAA,EAAO;AAAA;AACT,OACF;AAAA,MACA,KAAA,EAAO;AAAA,KACT;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,QAAA,CAAS,8BAA8B,IAAI,CAAA;AACrE,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,EAAM,IAAA,GAAO,CAAC,CAAA;AACrC,IAAA,IAAI,CAAC,SAAS,KAAA,EAAO;AACnB,MAAA,MAAM,IAAI,MAAM,CAAA,gDAAA,EAAmD,MAAA,CAAO,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACnG;AAEA,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,cAAA,CAAe,QAAQ,KAAK,CAAA;AACnD,IAAA,OAAO,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,GAAA,EAAK,KAAK,OAAA,EAAQ;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAA,GAAwF;AAC5F,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,WAAA,EAAY;AACpC,IAAA,OAAA,CAAQ,IAAA,CAAK,IAAA,IAAQ,EAAC,EACnB,MAAA;AAAA,MAAO,CAAC,CAAA,KAAA,CACN,CAAA,CAAE,YAAY,EAAC,EAAG,KAAK,CAAC,CAAA,KAAW,CAAA,CAAE,EAAA,KAAO,cAAa,eAAA,IAAmB,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAA,IAAQ,EAAE,CAAC;AAAA,KACzG,CACC,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,MAChB,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,WAAA,EAAa,OAAA,CAAQ,CAAA,CAAE,WAAW;AAAA,KACpC,CAAE,CAAA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAe,KAAA,EAAgC;AACnD,IAAA,MAAM,EAAE,QAAQ,OAAA,EAAS,WAAA,KAAgB,MAAM,IAAA,CAAK,OAAO,2BAAA,EAA6B;AAAA,MACtF,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb;AAAA,KACD,CAAA;AACD,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,MAAM,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAC/E;AAEA,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA,EAAG,OAAO,OAAA;AAElD,IAAA,IAAI,WAAA,CAAY,QAAA,CAAS,MAAM,CAAA,EAAG;AAChC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,MAAM,UAAA,GAAa;AAAA,UACjB,MAAA,EAAQ,UAAA;AAAA,UACR,QAAQ,GAAA,EAAK,UAAA;AAAA,UACb,MAAA,EAAQ,IAAA,GAAO,CAAC,CAAA,EAAG,UAAA;AAAA,UACnB,MAAA,EAAQ,MAAM,UAAA,EAAY,UAAA;AAAA,UAC1B,MAAA,EAAQ;AAAA,SACV;AACA,QAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,UAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,EAAE,QAAA,CAAS,mBAAmB,GAAG,OAAO,CAAA;AAAA,QACvE;AAAA,MACF,CAAA,CAAA,MAAQ;AAAA,MAAqB;AAAA,IAC/B;AACA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6CAAA,EAAgD,WAAW,CAAA,MAAA,EAAS,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,EAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAA,GAA2D;AAC/D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,uBAAA,EAAyB;AAAA,MACpD,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAA,EAAY,GAAA;AAAA,MACZ,QAAA,EAAU,KAAA;AAAA,MACV,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,IAAA,EAAM,IAAA,IAAQ,EAAC;AAG5B,IAAA,MAAM,QAAA,GACJ,IAAA,EAAM,QAAA,IACN,IAAA,EAAM,UACN,IAAA,EAAM,IAAA,EAAM,QAAA,IACZ,IAAA,CAAK,CAAC,CAAA,EAAG,QAAA,IACT,IAAA,CAAK,CAAC,CAAA,EAAG,MAAA;AACX,IAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,EAC1B;AAAA,EAEA,MAAc,IAAA,CAAK,IAAA,EAAc,MAAA,EAAyD;AAExF,IAAA,MAAM,IAAA,GAAO,IAAI,eAAA,EAAgB;AACjC,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AAC3C,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,EAAG;AAAE,QAAA,KAAA,MAAW,IAAA,IAAQ,CAAA,EAAG,IAAA,CAAK,MAAA,CAAO,GAAG,IAAI,CAAA;AAAA,MAAG,CAAA,MAC/D,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAAA,IACpB;AACA,IAAA,MAAM,OAAA,GAAU,KAAK,QAAA,EAAS;AAE9B,IAAA,MAAM,OAAA,GAAkC;AAAA,MACtC,QAAQ,IAAA,CAAK,SAAA;AAAA,MACb,cAAA,EAAgB,mCAAA;AAAA,MAChB,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,IAAI,KAAK,IAAA,EAAM;AAAE,MAAA,OAAA,CAAQ,MAAM,IAAI,IAAA,CAAK,IAAA;AAAM,MAAA,OAAA,CAAQ,SAAS,IAAI,IAAA,CAAK,MAAA;AAAA,IAAQ;AAEhF,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,cAAA,EAAgB,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAiB,IAAI,CAAA,MAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AACjG,IAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,EAAE,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAM,SAAS,CAAA;AAG5F,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAAE,MAAA,IAAA,CAAK,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA;AAAI,MAAA,IAAA,CAAK,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,SAAS,CAAA,IAAK,EAAA;AAAA,IAAI;AACrH,IAAA,KAAA,MAAW,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAe,IAAK,EAAC,EAAG;AACpD,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA;AACtC,MAAA,IAAI,KAAK,CAAC,IAAA,CAAK,UAAU,QAAA,CAAS,CAAA,CAAE,CAAC,CAAA,GAAI,GAAG,CAAA,EAAG,IAAA,CAAK,aAAa,IAAA,GAAO,CAAA,CAAE,CAAC,CAAA,GAAI,GAAA,GAAM,EAAE,CAAC,CAAA;AAAA,IAC1F;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,IAAA;AACJ,IAAA,IAAI;AAAE,MAAA,IAAA,GAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,IAAG,CAAA,CAAA,MAAQ;AAAE,MAAA,MAAM,IAAI,MAAM,CAAA,0BAAA,EAA6B,IAAA,CAAK,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAAG;AAC7G,IAAA,mBAAA,CAAoB,IAAA,EAAM,KAAK,OAAO,CAAA;AACtC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAIA,MAAM,SAAA,GAA4B;AAChC,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,IAAA,CAAK,0BAAA,EAA4B,EAAE,CAAA;AAC3D,IAAA,OAAO,IAAA,CAAK,SAAS,EAAC;AAAA,EACxB;AAAA;AAAA,EAIA,MAAM,UAAA,GAA6B;AACjC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,2CAAA,EAA6C;AAAA,MACxE,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,QAAA,EAAU,KAAA;AAAA,MAAO,UAAA,EAAY,GAAA;AAAA,MAAK,IAAA,EAAM;AAAA,KAC9D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,UAAU,EAAC;AAAA,EACzB;AAAA,EAEA,MAAM,YAAY,MAAA,EAAuG;AACvH,IAAA,MAAM,SAAA,GAAoC;AAAA,MACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,IAAA,EAAM,UAAA;AAAA,MAAY,YAAY,MAAA,CAAO,UAAA;AAAA,MAAY,MAAM,MAAA,CAAO;AAAA,KACrF;AACA,IAAA,IAAI,MAAA,CAAO,UAAA,EAAY,SAAA,CAAU,IAAA,GAAO,IAAA;AACxC,IAAA,IAAI,MAAA,CAAO,SAAA,KAAc,KAAA,EAAO,SAAA,CAAU,aAAA,GAAgB,IAAA;AAC1D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,2CAA2C,SAAS,CAAA;AACjF,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,MAAM,YAAY,OAAA,EAAgC;AAChD,IAAA,MAAM,IAAA,CAAK,KAAK,4CAAA,EAA8C,EAAE,QAAQ,IAAA,CAAK,MAAA,EAAQ,SAAS,CAAA;AAAA,EAChG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAM,oBAAoB,MAAA,EAIR;AAChB,IAAA,MAAM,IAAA,CAAK,KAAK,iDAAA,EAAmD;AAAA,MACjE,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,WAAW,MAAA,CAAO,OAAA;AAAA,MAClB,aAAa,MAAA,CAAO,WAAA;AAAA,MACpB,YAAA,EAAc,MAAA,CAAO,OAAA,GAAU,IAAA,GAAO;AAAA,KACvC,CAAA;AAAA,EACH;AAAA;AAAA,EAIA,MAAM,iBAAiB,KAAA,EAAkC;AAKvD,IAAA,MAAM,WAAW,KAAA,IAAS;AAAA,MACxB,cAAa,UAAA,CAAW,eAAA;AAAA,MACxB,cAAa,UAAA,CAAW,gBAAA;AAAA,MACxB,GAAG,aAAA,CAAa;AAAA,KAClB;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,iDAAA,EAAmD;AAAA,MAC9E,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,QAAA,EAAU,KAAA;AAAA,MAAO,UAAA,EAAY,GAAA;AAAA,MAClD,IAAA,EAAM,2BAAA;AAAA,MAA6B,KAAA,EAAO,QAAA,CAAS,IAAA,CAAK,GAAG;AAAA,KAC5D,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,gBAAgB,EAAC;AAAA,EAC/B;AAAA,EAEA,MAAM,oBAAA,GAAuC;AAY3C,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA;AAAA,0BACd,GAAA,CAAI;AAAA,QACN,cAAa,UAAA,CAAW,mBAAA;AAAA,QACxB,cAAa,UAAA,CAAW,oBAAA;AAAA;AAAA,QAExB,YAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,iDAAA,EAAmD;AAAA,MAC9E,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,QAAA,EAAU,KAAA;AAAA,MAAO,UAAA,EAAY,GAAA;AAAA,MAClD,IAAA,EAAM,2BAAA;AAAA,MACN,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,GAAG;AAAA,KACtB,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,gBAAgB,EAAC;AAAA,EAC/B;AAAA,EAEA,MAAM,kBAAkB,MAAA,EAA8E;AACpG,IAAA,MAAM,SAAA,GAAoC;AAAA,MACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,MAAM,MAAA,CAAO,IAAA;AAAA,MAAM,YAAY,MAAA,CAAO;AAAA,KAC7D;AACA,IAAA,IAAI,MAAA,CAAO,OAAA,EAAS,SAAA,CAAU,OAAA,GAAU,MAAA,CAAO,OAAA;AAC/C,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,2DAA2D,SAAS,CAAA;AACjG,IAAA,OAAO,IAAA,CAAK,WAAA;AAAA,EACd;AAAA,EAEA,MAAM,mBAAA,CAAoB,MAAA,EAAgB,IAAA,EAA+B;AACvE,IAAA,MAAM,UAAkC,EAAE,MAAA,EAAQ,IAAA,CAAK,SAAA,EAAW,QAAQ,kBAAA,EAAmB;AAC7F,IAAA,MAAM,MAAM,MAAM,KAAA;AAAA,MAChB,CAAA,EAAG,WAAW,CAAA,kEAAA,EAAqE,IAAA,CAAK,MAAM,CAAA,eAAA,EAAkB,MAAM,SAAS,IAAI,CAAA,CAAA;AAAA,MACnI,EAAE,OAAA;AAAQ,KACZ;AACA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,GAAA,CAAI,aAAa,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,iBAAA,CAAkB,MAAA,EAAgB,IAAA,EAA6B;AACnE,IAAA,MAAM,IAAA,CAAK,KAAK,kDAAA,EAAoD;AAAA,MAClE,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,aAAA,EAAe,MAAA;AAAA,MAAQ;AAAA,KAC7C,CAAA;AAAA,EACH;AAAA;AAAA,EAIA,MAAM,WAAA,GAA8B;AAClC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,uCAAA,EAAyC;AAAA,MACpE,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,QAAA,EAAU,KAAA;AAAA,MAAO,UAAA,EAAY,GAAA;AAAA,MAAK,IAAA,EAAM,UAAA;AAAA,MAAY,qBAAA,EAAuB;AAAA,KACjG,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,WAAW,EAAC;AAAA,EAC1B;AAAA,EAEA,MAAM,eAAe,MAAA,EAA4E;AAC/F,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,sCAAA,EAAwC;AAAA,MACnE,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,aAAa,MAAA,CAAO,IAAA;AAAA,MAAM,eAAe,MAAA,CAAO,IAAA;AAAA,MACrE,QAAA,EAAU,QAAA;AAAA,MAAU,aAAA,EAAe,OAAO,WAAA,IAAe;AAAA,KAC1D,CAAA;AACD,IAAA,OAAA,CAAQ,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG,CAAC,CAAA;AAAA,EAC/B;AAAA;AAAA,EAIA,MAAM,YAAA,GAA+B;AACnC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,qDAAA,EAAuD;AAAA,MAClF,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,uBAAA,EAAyB,MAAA;AAAA,MAC9C,QAAA,EAAU,KAAA;AAAA,MAAO,UAAA,EAAY,GAAA;AAAA,MAAK,IAAA,EAAM;AAAA,KACzC,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,wBAAwB,EAAC;AAAA,EACvC;AAAA,EAEA,MAAM,cAAc,MAAA,EAMH;AACf,IAAA,MAAM,SAAA,GAA+C;AAAA,MACnD,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,MACzB,yBAAyB,MAAA,CAAO,IAAA;AAAA,MAChC,gBAAgB,MAAA,CAAO;AAAA,KACzB;AACA,IAAA,IAAI,MAAA,CAAO,SAAA,EAAW,MAAA,EAAQ,SAAA,CAAU,YAAY,MAAA,CAAO,SAAA;AAC3D,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,IAAA,CAAK,wDAAwD,SAAS,CAAA;AAC9F,IAAA,OAAO,IAAA,CAAK,mBAAA;AAAA,EACd;AAAA,EAEA,MAAM,cAAc,SAAA,EAAkC;AACpD,IAAA,MAAM,IAAA,CAAK,KAAK,sDAAA,EAAwD;AAAA,MACtE,QAAQ,IAAA,CAAK,MAAA;AAAA,MAAQ,qBAAA,EAAuB;AAAA,KAC7C,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,gBAAgB,SAAA,EAAoC;AACxD,IAAA,MAAM,OAAA,GAAkC,EAAE,MAAA,EAAQ,IAAA,CAAK,SAAA,EAAU;AACjE,IAAA,MAAM,MAAM,MAAM,KAAA;AAAA,MAChB,GAAG,WAAW,CAAA,mDAAA,EAAsD,IAAA,CAAK,MAAM,0BAA0B,SAAS,CAAA,CAAA;AAAA,MAClH,EAAE,OAAA;AAAQ,KACZ;AACA,IAAA,OAAO,MAAA,CAAO,IAAA,CAAK,MAAM,GAAA,CAAI,aAAa,CAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,UAAA,GAAa;AAAA;AAAA,IAElB,eAAA,EAAiB,YAAA;AAAA,IACjB,gBAAA,EAAkB,YAAA;AAAA;AAAA,IAClB,YAAA,EAAc,YAAA;AAAA,IACd,oBAAA,EAAsB,YAAA;AAAA,IACtB,mBAAA,EAAqB,YAAA;AAAA,IACrB,qBAAA,EAAuB,YAAA;AAAA;AAAA,IACvB,kBAAA,EAAoB,YAAA;AAAA;AAAA,IACpB,QAAA,EAAU,YAAA;AAAA,IACV,YAAA,EAAc,YAAA;AAAA,IACd,SAAA,EAAW,YAAA;AAAA,IACX,SAAA,EAAW,YAAA;AAAA,IACX,2BAAA,EAA6B,YAAA;AAAA;AAAA,IAE7B,iBAAA,EAAmB,YAAA;AAAA,IACnB,kBAAA,EAAoB,YAAA;AAAA;AAAA,IAEpB,eAAA,EAAiB,YAAA;AAAA,IACjB,oBAAA,EAAsB,YAAA;AAAA,IACtB,0BAAA,EAA4B,YAAA;AAAA,IAC5B,mBAAA,EAAqB,YAAA;AAAA,IACrB,oBAAA,EAAsB,YAAA;AAAA,IACtB,wBAAA,EAA0B,YAAA;AAAA,IAC1B,sBAAA,EAAwB;AAAA,GAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,2BAAA,GAAiD;AAAA,IACtD,YAAA;AAAA;AAAA,IACA,YAAA;AAAA;AAAA;AAAA,IAEA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;;;AC5jBA,IAAM,SAAA,GAAY,2CAAA;AAyBX,IAAM,aAAN,MAAiB;AAAA,EAGtB,YAAoB,OAAA,EAAuB;AAAvB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAClB,IAAA,IAAA,CAAK,YAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,EACzF;AAAA,EAFoB,OAAA;AAAA,EAFZ,SAAA;AAAA,EAMA,YAAA,GAAuC;AAC7C,IAAA,OAAO;AAAA,MACL,QAAQ,IAAA,CAAK,SAAA;AAAA,MACb,MAAA,EAAQ,6DAAA;AAAA,MACR,cAAA,EAAgB,0BAAA;AAAA,MAChB,kBAAA,EAAoB,gBAAA;AAAA;AAAA,MAEpB,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,OAAA,CACZ,MAAA,EACA,IAAA,EACA,IAAA,EACyD;AACzD,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,EAAa;AAClC,IAAA,IAAI,OAAA,CAAQ,IAAI,cAAA,EAAgB;AAC9B,MAAA,OAAA,CAAQ,IAAI,CAAA,OAAA,EAAU,MAAM,IAAI,IAAI,CAAA,EAAG,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,SAAA,CAAU,IAAI,EAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,IACpG;AACA,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,SAAS,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAC7C,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACrC,CAAA;AAGD,IAAA,KAAA,MAAW,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAe,IAAK,EAAC,EAAG;AACpD,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA;AACtC,MAAA,IAAI,CAAA,EAAG;AACL,QAAA,IAAA,CAAK,QAAQ,OAAA,CAAQ,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,EAAE,CAAC,CAAA;AAAA,MAClC;AAAA,IACF;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,OAAA,CAAQ,IAAA,CAAK,QAAQ,OAAO,CAAA,CACjD,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAC3B,KAAK,IAAI,CAAA;AAEZ,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,MAAA,GAAc,IAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,IACrC,CAAA,CAAA,MAAQ;AAAA,IAER;AACA,IAAA,IAAI,OAAA,CAAQ,IAAI,cAAA,EAAgB;AAC9B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,cAAA,EAAY,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,KAAK,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,WAAA,GAAkE;AACtE,IAAA,MAAM,EAAE,QAAQ,IAAA,EAAM,OAAA,KAAY,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,UAAU,CAAA;AACtE,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,MAAM,IAAI,aAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,MAAA,IAAU,GAAA,IAAO,CAAC,IAAA,EAAM;AAC1B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,MAAM,CAAA,GAAA,EAAM,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IACjF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,EAAM,QAAA,IAAY,MAAM,IAAA,GAAO,CAAC,GAAG,UAAA,EAAY,QAAA;AACtE,IAAA,MAAM,QAAsB,IAAA,CAAK,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,MAC5D,IAAI,CAAA,CAAE,EAAA;AAAA,MACN,GAAA,EAAK,CAAA,CAAE,UAAA,EAAY,GAAA,IAAO,CAAA,CAAE,EAAA;AAAA,MAC5B,QAAA,EAAU,CAAA,CAAE,UAAA,EAAY,QAAA,IAAY,EAAA;AAAA,MACpC,QAAA,EAAU,CAAA,CAAE,UAAA,EAAY,QAAA,IAAY,QAAA;AAAA,MACpC,KAAA,EAAO,CAAA,CAAE,UAAA,EAAY,KAAA,IAAS,EAAC;AAAA,MAC/B,cAAA,EAAgB,CAAA,CAAE,UAAA,EAAY,cAAA,IAAkB;AAAA,KAClD,CAAE,CAAA;AACF,IAAA,OAAO,EAAE,MAAM,QAAA,EAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aAAa,KAAA,EAKK;AACtB,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,SAAA;AAAA,QACN,UAAA,EAAY;AAAA,UACV,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,KAAA,EAAO,KAAA,CAAM,KAAA,IAAS,CAAC,aAAa,CAAA;AAAA,UACpC,cAAA,EAAgB,MAAM,cAAA,IAAkB,IAAA;AAAA,UACxC,OAAA,EAAS,MAAM,OAAA,IAAW;AAAA;AAC5B;AACF,KACF;AAIA,IAAA,OAAA,CAAQ,GAAA,CAAI,8BAAA,EAAgC,IAAA,CAAK,SAAA,CAAU,WAAW,CAAC,CAAA;AACvE,IAAA,MAAM,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,UAAA,EAAY,WAAW,CAAA;AACpF,IAAA,OAAA,CAAQ,GAAA,CAAI,iCAAiC,MAAM,CAAA,CAAA,EAAI,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAE9E,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,MAAM,IAAI,aAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,IAAI,MAAA,IAAU,GAAA,IAAO,CAAC,IAAA,EAAM;AAC1B,MAAA,MAAM,MACJ,IAAA,EAAM,MAAA,GAAS,CAAC,CAAA,EAAG,UACnB,IAAA,EAAM,MAAA,GAAS,CAAC,CAAA,EAAG,SACnB,OAAA,CAAQ,KAAA,CAAM,GAAG,GAAG,CAAA,IACpB,6BAA6B,MAAM,CAAA,CAAA,CAAA;AACrC,MAAA,MAAM,IAAI,MAAM,GAAG,CAAA;AAAA,IACrB;AAEA,IAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,IAAA;AAC1B,IAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,MAAA,MAAM,IAAI,MAAM,CAAA,oDAAA,EAAuD,OAAA,CAAQ,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAChG;AAEA,IAAA,MAAM,GAAA,GAAkB;AAAA,MACtB,IAAI,IAAA,CAAK,EAAA;AAAA,MACT,GAAA,EAAK,IAAA,CAAK,UAAA,EAAY,GAAA,IAAO,IAAA,CAAK,EAAA;AAAA,MAClC,QAAA,EAAU,IAAA,CAAK,UAAA,EAAY,QAAA,IAAY,KAAA,CAAM,QAAA;AAAA,MAC7C,UAAA,EAAY,KAAK,UAAA,EAAY,UAAA;AAAA,MAC7B,QAAA,EAAU,KAAK,UAAA,EAAY,QAAA;AAAA,MAC3B,OAAO,IAAA,CAAK,UAAA,EAAY,SAAS,KAAA,CAAM,KAAA,IAAS,CAAC,aAAa,CAAA;AAAA,MAC9D,cAAA,EAAgB,IAAA,CAAK,UAAA,EAAY,cAAA,IAAkB;AAAA,KACrD;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAM,sBAAsB,KAAA,EAAmE;AAC7F,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,SAAS,CAAA,SAAA,EAAY,KAAK,CAAA,gDAAA,CAAA;AACzC,MAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,QAC3B,OAAA,EAAS;AAAA,UACP,GAAG,KAAK,YAAA,EAAa;AAAA,UACrB,MAAA,EAAQ;AAAA;AACV,OACD,CAAA;AACD,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,OAAA,CAAQ,IAAI,CAAA,oCAAA,EAAkC,GAAA,CAAI,MAAM,CAAA,EAAA,EAAK,IAAA,CAAK,MAAM,CAAA,OAAA,CAAS,CAAA;AACjF,MAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,QAAA,OAAA,CAAQ,IAAI,CAAA,cAAA,EAAiB,IAAA,CAAK,MAAM,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,CAAA;AACjD,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC5B,MAAA,MAAM,OAAA,GAAU,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,UAAA;AACxC,MAAA,IAAI,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,WAAW,CAAA,EAAG;AACvD,QAAA,OAAA,CAAQ,IAAI,CAAA,kCAAA,CAAoC,CAAA;AAChD,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,SAAS,QAAQ,CAAA,CAAE,SAAS,OAAO,CAAA;AAC3D,MAAA,IAAI,CAAC,GAAA,CAAI,QAAA,CAAS,mBAAmB,CAAA,EAAG;AACtC,QAAA,OAAA,CAAQ,IAAI,CAAA,+CAAA,CAAiD,CAAA;AAC7D,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,QAAA,GAAA,CAAY,IAAA,EAAM,QAAA,IAAY,EAAC,EAAG,KAAK,CAAC,CAAA,KAAW,CAAA,CAAE,IAAA,KAAS,kBAAkB,CAAA;AACtF,MAAA,MAAM,WAAW,QAAA,EAAU,EAAA;AAC3B,MAAA,OAAA,CAAQ,IAAI,CAAA,kBAAA,EAAgB,GAAA,CAAI,MAAM,CAAA,iBAAA,EAAoB,QAAA,IAAY,WAAW,CAAA,CAAE,CAAA;AACnF,MAAA,OAAO,EAAE,KAAK,QAAA,EAAS;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oCAAA,EAAwC,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AAC3E,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gCAAgC,KAAA,EAAuC;AAM3E,IAAA,MAAM,QAAA,GAAsB;AAAA;AAAA;AAAA,MAG1B,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA,SAAA,EAAY,KAAK,CAAA,uDAAA,CAAA,EAA0D;AAAA,MAChG,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA,SAAA,EAAY,KAAK,CAAA,mBAAA,CAAA,EAAsB;AAAA,MAC5D,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA,SAAA,EAAY,KAAK,CAAA,2BAAA,CAAA,EAA8B;AAAA;AAAA,MAEpE,EAAE,MAAM,KAAA,EAAO,IAAA,EAAM,YAAY,KAAK,CAAA,CAAA,EAAI,QAAQ,wBAAA,EAAyB;AAAA,MAC3E,EAAE,MAAM,KAAA,EAAO,IAAA,EAAM,YAAY,KAAK,CAAA,CAAA,EAAI,QAAQ,0BAAA,EAA2B;AAAA,MAC7E,EAAE,MAAM,KAAA,EAAO,IAAA,EAAM,YAAY,KAAK,CAAA,GAAA,CAAA,EAAO,QAAQ,wBAAA,EAAyB;AAAA;AAAA,MAE9E,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAY,KAAK,CAAA,QAAA,CAAA,EAAY,IAAA,EAAM,EAAC,EAAE;AAAA,MAC5D,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAY,KAAK,CAAA,WAAA,CAAA,EAAe,IAAA,EAAM,EAAC,EAAE;AAAA,MAC/D,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,YAAY,KAAK,CAAA,GAAA,CAAA,EAAO,IAAA,EAAM,EAAC,EAAE;AAAA;AAAA,MAEvD,EAAE,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,EAAG;AAAA;AAAA,MAEzC,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,CAAA,iDAAA,EAAoD,KAAK,CAAA,GAAA,CAAA,EAAM;AAAA,MACxF,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,CAAA,kDAAA,EAAqD,KAAK,CAAA,SAAA,CAAA;AAAY,KACjG;AAEA,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,IAAI;AACF,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI,OAAA,CAAQ,SAAS,KAAA,EAAO;AAE1B,UAAA,MAAA,GAAS,MAAM,IAAA,CAAK,kBAAA,CAAmB,KAAA,EAAO,OAAA,CAAQ,MAAM,KAAA,CAAA,EAAW;AAAA,YACrE,GAAI,QAAQ,MAAA,GAAS,EAAE,QAAQ,OAAA,CAAQ,MAAA,KAAW;AAAC,WACpD,CAAA;AACD,UAAA,OAAA,CAAQ,IAAI,CAAA,iCAAA,EAAoC,OAAA,CAAQ,IAAI,CAAA,EAAG,OAAA,CAAQ,SAAS,CAAA,QAAA,EAAW,OAAA,CAAQ,MAAM,CAAA,CAAA,GAAK,EAAE,WAAM,MAAA,CAAO,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,QACxK,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAQ;AAClC,UAAA,MAAA,GAAS,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAQ,OAAA,CAAQ,IAAA,EAAM,QAAQ,IAAI,CAAA;AAC9D,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kCAAA,EAAqC,OAAA,CAAQ,IAAI,CAAA,QAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,QACrH,CAAA,MAAO;AACL,UAAA,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,CAAgB,KAAA,EAAO,QAAQ,GAAG,CAAA;AACtD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,iCAAA,EAAoC,OAAA,CAAQ,GAAG,CAAA,QAAA,EAAM,MAAA,CAAO,MAAM,CAAA,EAAA,EAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,OAAA,CAAS,CAAA;AAAA,QACnH;AAGA,QAAA,IAAI,MAAA,CAAO,WAAW,GAAA,EAAK;AACzB,UAAA,OAAA,CAAQ,GAAA,CAAI,kBAAkB,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,QAC/D;AACA,QAAA,IAAI,MAAA,CAAO,WAAW,GAAA,EAAK;AAG3B,QAAA,IAAI,OAAO,OAAA,IAAW,MAAA,CAAO,OAAA,CAAQ,QAAA,CAAS,mBAAmB,CAAA,EAAG;AAClE,UAAA,OAAA,CAAQ,IAAI,CAAA,6CAAA,CAA0C,CAAA;AACtD,UAAA,OAAO,MAAA,CAAO,OAAA;AAAA,QAChB;AAEA,QAAA,IAAI,OAAO,IAAA,EAAM;AACf,UAAA,MAAM,UAAA,GAAa;AAAA,YACjB,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,UAAA;AAAA,YAC/B,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,EAAA;AAAA,YAC/B,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,iBAAA;AAAA,YAC/B,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,IAAA;AAAA,YAC/B,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,MAAA;AAAA,YAC/B,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,EAAY,UAAA;AAAA,YAC/B,OAAO,IAAA,EAAM,UAAA;AAAA,YACb,OAAO,IAAA,EAAM,EAAA;AAAA,YACb,OAAO,IAAA,EAAM,KAAA;AAAA,YACb,OAAO,IAAA,EAAM;AAAA,WACf;AACA,UAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,YAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,CAAE,QAAA,CAAS,mBAAmB,CAAA,EAAG;AAC5D,cAAA,OAAA,CAAQ,IAAI,CAAA,wCAAA,CAAqC,CAAA;AACjD,cAAA,OAAO,CAAA;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAAA,MACF,SAAS,GAAA,EAAK;AACZ,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,6CAAA,EAAiD,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AAAA,MACtF;AAAA,IACF;AACA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,+DAAA,EAAkE,KAAK,CAAA,CAAE,CAAA;AACrF,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAc,kBAAA,CACZ,MAAA,EACA,MACA,IAAA,EACA,YAAA,GAAuC,EAAC,EACiB;AACzD,IAAA,MAAM,UAAU,EAAE,GAAG,KAAK,YAAA,EAAa,EAAG,GAAG,YAAA,EAAa;AAC1D,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,SAAS,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI;AAAA,MAC7C,MAAA;AAAA,MACA,OAAA;AAAA,MACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI;AAAA,KACrC,CAAA;AACD,IAAA,KAAA,MAAW,OAAO,GAAA,CAAI,OAAA,CAAQ,YAAA,IAAe,IAAK,EAAC,EAAG;AACpD,MAAA,MAAM,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,kBAAkB,CAAA;AACtC,MAAA,IAAI,CAAA,OAAQ,OAAA,CAAQ,OAAA,CAAQ,EAAE,CAAC,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA;AAAA,IACzC;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,OAAA,CAAQ,IAAA,CAAK,QAAQ,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA,KAAM,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAC5F,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,MAAA,GAAc,IAAA;AAClB,IAAA,IAAI;AAAE,MAAA,MAAA,GAAS,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,IAAM,CAAA,CAAA,MAAQ;AAAA,IAAC;AACxD,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,EAC3D;AAAA;AAAA,EAGA,MAAc,eAAA,CACZ,MAAA,EACA,GAAA,EACyD;AACzD,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,EAAa;AAClC,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,SAAS,CAAA;AAChD,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,MAAA,GAAc,IAAA;AAClB,IAAA,IAAI;AAAE,MAAA,MAAA,GAAS,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA,GAAI,IAAA;AAAA,IAAM,CAAA,CAAA,MAAQ;AAAA,IAAC;AACxD,IAAA,OAAO,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,IAAA,EAAM,MAAA,EAAQ,SAAS,IAAA,EAAK;AAAA,EAC3D;AAAA,EAEA,MAAM,aAAa,KAAA,EAA8B;AAC/C,IAAA,MAAM,IAAA,CAAK,OAAA,CAAQ,QAAA,EAAU,CAAA,SAAA,EAAY,KAAK,CAAA,CAAE,CAAA;AAAA,EAClD;AACF;AAGO,IAAM,aAAA,GAAN,cAA4B,KAAA,CAAM;AAAA,EACvC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,eAAA;AAAA,EACd;AACF;;;AC/VO,IAAM,wBAAN,MAA4B;AAAA,EACxB,IAAA;AAAA,EAEA,YAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,QAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,WAAA;AAAA,EACA,wBAAA;AAAA,EACA,oBAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,qBAAA;AAAA,EACA,aAAA;AAAA,EACA,yBAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA,qBAAA;AAAA,EACA,KAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EAET,YAAY,MAAA,EAA+B;AACzC,IAAA,MAAM,YAAA,GAAe,IAAI,YAAA,CAAa;AAAA,MACpC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,UAAU,MAAA,CAAO,QAAA;AAAA,MACjB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,UAAU,MAAA,CAAO;AAAA,KAClB,CAAA;AACD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,aAAA,CAAc,YAAA,EAAc,OAAO,UAAU,CAAA;AAE7D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AACtD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAC9C,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,eAAA,CAAgB,IAAA,CAAK,IAAI,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA;AAC1C,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,kBAAA,CAAmB,IAAA,CAAK,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AACtD,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAA;AAC9D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA;AAC1D,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,yBAAA,CAA0B,IAAA,CAAK,IAAI,CAAA;AAChE,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,gBAAA,CAAiB,IAAA,CAAK,IAAI,CAAA;AAC9C,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAI,4BAAA,CAA6B,IAAA,CAAK,IAAI,CAAA;AACtE,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAI,6BAAA,CAA8B,IAAA,CAAK,IAAI,CAAA;AACxE,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,wBAAA,GAA2B,IAAI,gCAAA,CAAiC,IAAA,CAAK,IAAI,CAAA;AAC9E,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAI,4BAAA,CAA6B,IAAA,CAAK,IAAI,CAAA;AACtE,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAC5D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AACtD,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA;AAC1D,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,iBAAA,CAAkB,IAAA,CAAK,IAAI,CAAA;AAChD,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,mBAAA,CAAoB,IAAA,CAAK,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAI,6BAAA,CAA8B,IAAA,CAAK,IAAI,CAAA;AACxE,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,qBAAA,CAAsB,IAAA,CAAK,IAAI,CAAA;AACxD,IAAA,IAAA,CAAK,yBAAA,GAA4B,IAAI,iCAAA,CAAkC,IAAA,CAAK,IAAI,CAAA;AAChF,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAA;AAC9D,IAAA,IAAA,CAAK,kBAAA,GAAqB,IAAI,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAA;AAClE,IAAA,IAAA,CAAK,qBAAA,GAAwB,IAAI,6BAAA,CAA8B,IAAA,CAAK,IAAI,CAAA;AACxE,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AACxC,IAAA,IAAA,CAAK,eAAA,GAAkB,IAAI,uBAAA,CAAwB,IAAA,CAAK,IAAI,CAAA;AAC5D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,sBAAA,CAAuB,IAAA,CAAK,IAAI,CAAA;AAC1D,IAAA,IAAA,CAAK,gBAAA,GAAmB,IAAI,wBAAA,CAAyB,IAAA,CAAK,IAAI,CAAA;AAC9D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,oBAAA,CAAqB,IAAA,CAAK,IAAI,CAAA;AAAA,EACxD;AAAA,EAEA,MAAM,OAAA,CAAW,IAAA,EAAc,OAAA,EAAsC;AACnE,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAW,IAAA,EAAM,OAAO,CAAA;AAAA,EAC3C;AACF","file":"index.mjs","sourcesContent":["import { SignJWT, importPKCS8 } from \"jose\";\n\nexport interface TokenConfig {\n keyId: string;\n /** Issuer ID. When absent, the key is treated as an individual key (sub='user'). */\n issuerId?: string;\n privateKey: string;\n enterprise?: boolean;\n duration?: number;\n}\n\nconst MAX_TOKEN_DURATION = 1200;\nconst DEFAULT_TOKEN_DURATION = 500;\n\nexport class TokenManager {\n private config: TokenConfig;\n private currentToken: string | null = null;\n private expiresAt = 0;\n\n constructor(config: TokenConfig) {\n this.config = config;\n }\n\n async getToken(): Promise<string> {\n const now = Math.floor(Date.now() / 1000);\n if (this.currentToken && now < this.expiresAt - 30) {\n return this.currentToken;\n }\n return this.refresh();\n }\n\n async refresh(): Promise<string> {\n const duration = Math.min(\n this.config.duration ?? DEFAULT_TOKEN_DURATION,\n MAX_TOKEN_DURATION\n );\n const audience = this.config.enterprise\n ? \"apple-developer-enterprise-v1\"\n : \"appstoreconnect-v1\";\n\n const key = await importPKCS8(this.config.privateKey, \"ES256\");\n const now = Math.floor(Date.now() / 1000);\n\n // Mirror Fastlane's Spaceship::ConnectAPI::Token#refresh! behavior:\n // when issuerId is provided → set `iss`; otherwise treat as individual key\n // and set `sub: 'user'`.\n // https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests#4313913\n let jwt = new SignJWT(this.config.issuerId ? {} : { sub: \"user\" })\n .setProtectedHeader({\n alg: \"ES256\",\n kid: this.config.keyId,\n typ: \"JWT\",\n })\n .setIssuedAt(now - 60)\n .setExpirationTime(now + duration)\n .setAudience(audience);\n\n if (this.config.issuerId) {\n jwt = jwt.setIssuer(this.config.issuerId);\n }\n\n this.currentToken = await jwt.sign(key);\n\n this.expiresAt = now + duration;\n return this.currentToken;\n }\n\n invalidate(): void {\n this.currentToken = null;\n this.expiresAt = 0;\n }\n}\n","/**\n * SRP (Secure Remote Password) implementation\n * 1:1 port of the fastlane-sirp Ruby gem\n * Used for Apple ID authentication\n */\n\nimport { createHash, randomBytes, pbkdf2Sync } from \"node:crypto\";\n\n// ── RFC 5054 SRP Group Parameters ──────────────────────────────────────────\n\n// Copied exactly from fastlane-sirp parameters.rb (2048-bit group)\nconst N_2048 = BigInt(\n \"0x\" +\n \"AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050\" +\n \"A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50\" +\n \"E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B8\" +\n \"55F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773B\" +\n \"CA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748\" +\n \"544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6\" +\n \"AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB\" +\n \"694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73\"\n);\nconst g_2048 = 2n;\n\n// ── Utility Functions ──────────────────────────────────────────────────────\n\nfunction numToHex(num: bigint): string {\n let hex = num.toString(16);\n if (hex.length % 2 !== 0) hex = \"0\" + hex;\n return hex.toLowerCase();\n}\n\nfunction hexToBytes(hex: string): Buffer {\n return Buffer.from(hex, \"hex\");\n}\n\nfunction shaHex(h: string, algorithm: string): string {\n return createHash(algorithm).update(hexToBytes(h)).digest(\"hex\");\n}\n\nfunction shaStr(s: string, algorithm: string): string {\n return createHash(algorithm).update(s).digest(\"hex\");\n}\n\nfunction modExp(base: bigint, exp: bigint, mod: bigint): bigint {\n if (mod === 1n) return 0n;\n let result = 1n;\n base = base % mod;\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod;\n }\n exp = exp / 2n;\n base = (base * base) % mod;\n }\n return result;\n}\n\nfunction H(algorithm: string, n: bigint, ...args: (bigint | string | undefined)[]): bigint {\n const nHex = numToHex(n);\n // Must match Ruby: nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3)\n // Use floor division (>>3), NOT ceiling\n const nlen = 2 * (((nHex.length * 4 + 7) >> 3));\n\n let hashin = \"\";\n for (const s of args) {\n if (s === undefined) continue;\n const shex = typeof s === \"string\" ? s : numToHex(s);\n if (shex.length > nlen) {\n throw new Error(\"Bit width does not match - client uses different prime\");\n }\n hashin += \"0\".repeat(nlen - shex.length) + shex;\n }\n\n const hashed = shaHex(hashin, algorithm);\n return BigInt(\"0x\" + hashed) % n;\n}\n\n// ── SRP Client ─────────────────────────────────────────────────────────────\n\nexport class SRPClient {\n private N: bigint;\n private g: bigint;\n private hashAlg: string;\n private k: bigint;\n private a: bigint;\n A: string;\n private S: string | null = null;\n private K: string | null = null;\n M: string | null = null;\n H_AMK: string | null = null;\n\n constructor(group: number = 2048) {\n if (group !== 2048) throw new Error(\"Only 2048-bit group is supported\");\n this.N = N_2048;\n this.g = g_2048;\n this.hashAlg = \"sha256\";\n this.k = H(this.hashAlg, this.N, this.N, this.g);\n // Generate random 'a'\n this.a = BigInt(\"0x\" + randomBytes(256).toString(\"hex\"));\n // Compute A = g^a mod N\n this.A = numToHex(modExp(this.g, this.a, this.N));\n }\n\n startAuthentication(): string {\n return this.A;\n }\n\n processChallenge(\n username: string,\n password: string, // hex-encoded encrypted password\n xsalt: string, // hex\n xbb: string, // hex\n isPasswordEncrypted: boolean = false\n ): string | false {\n const bb = BigInt(\"0x\" + xbb);\n\n // SRP-6a safety check\n if (bb % this.N === 0n) return false;\n\n let x: bigint;\n if (isPasswordEncrypted) {\n x = this.calcXHex(password, xsalt);\n } else {\n x = this.calcX(username, password, xsalt);\n }\n\n const u = H(this.hashAlg, this.N, this.A, xbb);\n if (u === 0n) return false;\n\n // S = (B - k * g^x) ^ (a + u*x) mod N\n const gx = modExp(this.g, x, this.N);\n let base = (bb - this.k * gx) % this.N;\n if (base < 0n) base += this.N;\n const exp = this.a + x * u;\n this.S = numToHex(modExp(base, exp, this.N));\n this.K = shaHex(this.S, this.hashAlg);\n\n // M = H(H(N) xor H(g), H(I), s, A, B, K)\n const hxor = H(this.hashAlg, this.N, this.N) ^ H(this.hashAlg, this.N, this.g);\n const buf =\n numToHex(hxor) +\n shaStr(username, this.hashAlg) +\n xsalt +\n this.A +\n xbb +\n this.K;\n const bytes = hexToBytes(buf);\n this.M = createHash(this.hashAlg).update(bytes).digest(\"hex\");\n\n // H_AMK = H(A, M, K)\n const amkBytes = hexToBytes(this.A + this.M + this.K);\n this.H_AMK = numToHex(\n BigInt(\"0x\" + createHash(this.hashAlg).update(amkBytes).digest(\"hex\"))\n );\n\n return this.M;\n }\n\n private calcX(username: string, password: string, xsalt: string): bigint {\n const spad = xsalt.length % 2 !== 0 ? \"0\" : \"\";\n const inner = shaStr(`${username}:${password}`, this.hashAlg);\n return BigInt(\"0x\" + shaHex(spad + xsalt + inner, this.hashAlg));\n }\n\n private calcXHex(xpassword: string, xsalt: string): bigint {\n // calc_x_hex: sha_hex(xsalt + sha_hex(\":\" hex + xpassword), hash)\n const colonHex = \":\".charCodeAt(0).toString(16);\n const inner = shaHex(colonHex + xpassword, this.hashAlg);\n return BigInt(\"0x\" + shaHex(xsalt + inner, this.hashAlg));\n }\n}\n\n// ── Apple PBKDF2 password derivation ───────────────────────────────────────\n\nexport function applePbkdf2(\n password: string,\n salt: Buffer,\n iterations: number,\n keyLength: number,\n protocol: string\n): Buffer {\n if (![\"s2k\", \"s2k_fo\"].includes(protocol)) {\n throw new Error(`Unsupported protocol '${protocol}' for pbkdf2`);\n }\n\n // First hash the password with SHA-256\n let passwordBytes: Buffer | string = createHash(\"sha256\").update(password).digest();\n\n if (protocol === \"s2k_fo\") {\n // Legacy: convert to hex string\n passwordBytes = passwordBytes.toString(\"hex\");\n }\n\n return pbkdf2Sync(passwordBytes, salt, iterations, keyLength, \"sha256\");\n}\n","/**\n * Apple ID Session Authentication\n * 1:1 port of Fastlane Spaceship client.rb + two_step_or_factor_client.rb\n *\n * Two flows:\n *\n * loginWithAppleId({ email, password, onPrompt })\n * - blocking, CLI-style. onPrompt is awaited to collect 2FA codes.\n *\n * beginLogin({ email, password }) → { kind: \"logged_in\" | \"needs_2fa\", ... }\n * submitTwoFactorCode({ pending, code, source, ... }) → AppleSession\n * requestSmsCode({ pending, phoneId, mode })\n * - HTTP-resumable. Used by the App Release wizard, where the 2FA\n * challenge is rendered in a browser modal and the code arrives in\n * a separate request.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline\";\nimport { SRPClient, applePbkdf2 } from \"./srp.js\";\n\nconst AUTH_BASE = \"https://idmsa.apple.com/appleauth/auth\";\nconst OLYMPUS_SESSION = \"https://appstoreconnect.apple.com/olympus/v1/session\";\nconst WIDGET_KEY_URL = \"https://appstoreconnect.apple.com/olympus/v1/app/config?hostname=itunesconnect.apple.com\";\n\nexport interface AppleSessionConfig {\n email: string;\n password: string;\n onLog?: (msg: string) => void;\n onPrompt?: (msg: string) => Promise<string>;\n}\n\nexport interface ContractMessage {\n id: string;\n group: string;\n subject: string;\n message: string;\n}\n\nexport interface AppleSession {\n cookies: Record<string, string>;\n sessionId: string;\n scnt: string;\n serviceKey: string;\n userEmail: string;\n teamId?: string;\n pendingAgreements: ContractMessage[];\n}\n\n/**\n * State held between beginLogin() and submitTwoFactorCode() — captures\n * everything needed to resume an in-progress 2FA flow across HTTP requests.\n * Stored server-side keyed by an opaque session id; never sent to the\n * browser (the browser only sees the opaque id).\n */\nexport interface PendingLogin {\n cookies: Record<string, string>;\n sessionId: string;\n scnt: string;\n serviceKey: string;\n userEmail: string;\n}\n\n/**\n * Description of the 2FA challenge presented to the user.\n *\n * Modern 2FA accounts (the default for everyone) have `kind: \"device\"` —\n * Apple pushes the 6-digit code to all the user's trusted Apple devices\n * (iPhone, Mac, etc.) and the user types it into our wizard. The legacy\n * `trustedDevices` field is empty in this case; that field only ever\n * populates for old \"two-step verification\" accounts which are\n * essentially extinct.\n *\n * `kind: \"phone_only\"` is reserved for accounts that have no real Apple\n * devices (Apple's `noTrustedDevices === true` flag) — those accounts\n * must use SMS to a trusted phone number.\n *\n * Either way, the user can opt to receive the code via SMS instead by\n * picking from `trustedPhoneNumbers` and calling requestSmsCode().\n */\nexport interface TwoFactorChallenge {\n kind: \"device\" | \"phone_only\";\n codeLength: number;\n trustedPhoneNumbers: { id: number; numberWithDialCode: string; pushMode?: string }[];\n}\n\nexport type BeginLoginResult =\n | { kind: \"logged_in\"; session: AppleSession }\n | { kind: \"needs_2fa\"; pending: PendingLogin; challenge: TwoFactorChallenge };\n\n/** Thrown when an Apple Developer Program agreement needs to be accepted */\nexport class ProgramLicenseAgreementError extends Error {\n constructor(message: string, public agreements: ContractMessage[]) {\n super(message);\n this.name = \"ProgramLicenseAgreementError\";\n }\n}\n\n/**\n * Check a portal API response for agreement/license errors.\n * Throws ProgramLicenseAgreementError if detected.\n * Call this after any portal API call. Mirrors Spaceship::Client#handle_itc_response.\n */\nexport function checkPortalResponse(body: any, session?: AppleSession): void {\n if (!body || typeof body !== \"object\") return;\n\n // Result code 4100 = membership not eligible (often due to pending agreement)\n if (body.resultCode === 4100) {\n const userMsg = body.userString ?? \"The selected team does not have an eligible program membership.\";\n const agreements = session?.pendingAgreements ?? [];\n if (agreements.length > 0) {\n throw new ProgramLicenseAgreementError(\n `${userMsg}\\n\\n⚠ Pending agreement: ${agreements[0].subject}\\n` +\n `${agreements[0].message.replace(/<[^>]+>/g, \"\")}\\n\\n` +\n `Please accept the agreement at https://developer.apple.com/account before continuing.`,\n agreements\n );\n }\n throw new Error(userMsg);\n }\n\n // Explicit license agreement mention\n if ((body.userString ?? \"\").includes(\"Program License Agreement\")) {\n throw new ProgramLicenseAgreementError(\n `${body.userString} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n session?.pendingAgreements ?? []\n );\n }\n\n // Generic error with result code\n if (body.resultCode && body.resultCode !== 0) {\n const msg = body.userString || body.resultString || `Portal API error (code ${body.resultCode})`;\n throw new Error(msg);\n }\n}\n\n// ── Main Login (mirrors Spaceship::Client#send_shared_login_request) ───────\n\n/**\n * Step 1 of HTTP-resumable login: do the SIRP exchange and detect whether\n * 2FA is required. Returns either a fully-established session (no 2FA) or\n * a pending state + a description of the 2FA challenge.\n */\nexport async function beginLogin(config: {\n email: string;\n password: string;\n onLog?: (msg: string) => void;\n}): Promise<BeginLoginResult> {\n const log = config.onLog ?? (() => {});\n\n log(\"Fetching Apple service key...\");\n const serviceKey = await fetchServiceKey();\n\n const initRes = await fetch(`${AUTH_BASE}/signin?widgetKey=${serviceKey}`, {\n headers: { \"User-Agent\": \"Spaceship 2.225.0\" },\n });\n const initCookies = parseCookies(initRes.headers);\n\n const hcBits = initRes.headers.get(\"X-Apple-HC-Bits\");\n const hcChallenge = initRes.headers.get(\"X-Apple-HC-Challenge\");\n let hashcash: string | undefined;\n if (hcBits && hcChallenge) {\n log(\"Computing hashcash...\");\n hashcash = computeHashcash(parseInt(hcBits, 10), hcChallenge);\n }\n\n const cookieStr = Object.entries(initCookies)\n .map(([k, v]) => k.startsWith(\"DES\") ? `${k}=\"${v}\"` : `${k}=${v}`)\n .join(\"; \");\n\n log(\"Starting SIRP Apple ID login...\");\n const response = await doSirp(config.email, config.password, serviceKey, cookieStr, hashcash);\n\n const baseState = {\n cookies: { ...initCookies, ...response.cookies },\n sessionId: response.sessionId,\n scnt: response.scnt,\n serviceKey,\n userEmail: config.email,\n };\n\n if (response.status === 403) {\n throw new Error(`Invalid username and password combination. Used '${config.email}' as the username.`);\n }\n if (response.status === 412) {\n throw new Error(\"Need to acknowledge Apple's Apple ID and Privacy statement. Please manually log into https://appleid.apple.com.\");\n }\n\n if (response.status === 200) {\n log(\"Login successful (no 2FA).\");\n const session: AppleSession = { ...baseState, pendingAgreements: [] };\n await finalizeSession(session, log);\n return { kind: \"logged_in\", session };\n }\n\n if (response.status === 409) {\n log(\"2FA required, fetching challenge...\");\n const challenge = await fetchTwoFactorChallenge(baseState);\n return { kind: \"needs_2fa\", pending: baseState, challenge };\n }\n\n throw new Error(`Unexpected login response (${response.status}): ${JSON.stringify(response.body).slice(0, 500)}`);\n}\n\n/** Fetch the 2FA challenge (trusted phones + whether the user has Apple devices). */\nasync function fetchTwoFactorChallenge(pending: PendingLogin): Promise<TwoFactorChallenge> {\n const r = await fetch(`${AUTH_BASE}`, { headers: buildAuthHeadersFromPending(pending) });\n const body = await r.json() as any;\n\n const trustedPhoneNumbers = (body.trustedPhoneNumbers ?? []).map((p: any) => ({\n id: p.id, numberWithDialCode: p.numberWithDialCode, pushMode: p.pushMode,\n }));\n // Apple sets `noTrustedDevices: true` when the user has no real Apple\n // devices to push the code to and must rely on SMS. Anything else means\n // we should default to \"enter the code from your device\".\n const phoneOnly = body.noTrustedDevices === true;\n const codeLength = body.securityCode?.length ?? 6;\n\n return {\n kind: phoneOnly ? \"phone_only\" : \"device\",\n codeLength,\n trustedPhoneNumbers,\n };\n}\n\n/**\n * Ask Apple to send an SMS / voice code to the chosen trusted phone.\n * Used by the wizard's \"Send code via text instead\" affordance.\n */\nexport async function requestSmsCode(input: {\n pending: PendingLogin;\n phoneId: number;\n mode?: \"sms\" | \"voice\";\n}): Promise<void> {\n await fetch(`${AUTH_BASE}/verify/phone`, {\n method: \"PUT\",\n headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ phoneNumber: { id: input.phoneId }, mode: input.mode ?? \"sms\" }),\n });\n}\n\n/**\n * Step 2 of HTTP-resumable login: submit the 2FA code the user typed.\n * Returns a fully-established AppleSession on success.\n *\n * source = \"device\" → 4-digit code from a trusted Apple device\n * source = \"phone\" → 6-digit code from SMS / push to trusted phone\n */\nexport async function submitTwoFactorCode(input: {\n pending: PendingLogin;\n code: string;\n source: \"device\" | \"phone\";\n phoneId?: number;\n mode?: \"sms\" | \"voice\";\n onLog?: (msg: string) => void;\n}): Promise<AppleSession> {\n const log = input.onLog ?? (() => {});\n\n let path: string;\n let body: string;\n if (input.source === \"device\") {\n path = `${AUTH_BASE}/verify/trusteddevice/securitycode`;\n body = JSON.stringify({ securityCode: { code: input.code } });\n } else {\n if (input.phoneId == null) throw new Error(\"phoneId is required when source='phone'\");\n path = `${AUTH_BASE}/verify/phone/securitycode`;\n body = JSON.stringify({\n securityCode: { code: input.code },\n phoneNumber: { id: input.phoneId },\n mode: input.mode ?? \"sms\",\n });\n }\n\n log(\"Submitting 2FA code...\");\n const verifyRes = await fetch(path, {\n method: \"POST\",\n headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n body,\n });\n if (!verifyRes.ok) {\n const err = await verifyRes.json().catch(() => ({})) as any;\n const msgs = (err?.service_errors ?? err?.serviceErrors ?? []).map((e: any) => e.message).filter(Boolean);\n throw new Error(msgs.join(\"; \") || `Verification failed (${verifyRes.status})`);\n }\n\n const session: AppleSession = {\n ...input.pending,\n cookies: { ...input.pending.cookies, ...parseCookies(verifyRes.headers) },\n pendingAgreements: [],\n };\n await trustSession(session);\n await finalizeSession(session, log);\n return session;\n}\n\n/** Fetch olympus session and pending agreements — the post-2FA finishing work. */\nasync function finalizeSession(session: AppleSession, log: (msg: string) => void): Promise<void> {\n await fetchOlympusSession(session);\n const agreements = await fetchContractMessages(session);\n if (agreements.length > 0) {\n for (const msg of agreements) {\n log(`⚠ ${msg.subject}: ${msg.message.replace(/<[^>]+>/g, \"\")}`);\n }\n }\n session.pendingAgreements = agreements;\n log(`Logged in as ${session.userEmail}`);\n}\n\n/**\n * Backward-compatible CLI-style login. Internally uses beginLogin +\n * submitTwoFactorCode but routes 2FA through the synchronous onPrompt\n * callback so existing scripts (test-login.ts, test-full-workflow.ts)\n * keep working.\n */\nexport async function loginWithAppleId(config: AppleSessionConfig): Promise<AppleSession> {\n const log = config.onLog ?? console.log;\n const promptFn = config.onPrompt ?? defaultPrompt;\n\n const result = await beginLogin({ email: config.email, password: config.password, onLog: log });\n if (result.kind === \"logged_in\") return result.session;\n\n const { pending, challenge } = result;\n const phones = challenge.trustedPhoneNumbers;\n\n if (challenge.kind === \"device\") {\n log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n log(\"(Input 'sms' to escape this prompt and select a trusted phone number to send the code as a text message)\");\n const input = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n if (input.toLowerCase() === \"sms\") {\n log(\"Please select a trusted phone number:\");\n for (let i = 0; i < phones.length; i++) log(` ${i + 1}. ${phones[i].numberWithDialCode}`);\n const choice = await promptFn(\"Enter number: \");\n const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n log(`Code sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n }\n return submitTwoFactorCode({ pending, code: input, source: \"device\", onLog: log });\n }\n\n // phone_only — account has no trusted Apple devices, must use SMS\n log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n if (phones.length === 1) {\n const phone = phones[0];\n log(`Code automatically sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n }\n log(\"Please select a trusted phone number:\");\n for (let i = 0; i < phones.length; i++) log(` ${i + 1}. ${phones[i].numberWithDialCode}`);\n const choice = await promptFn(\"Enter number: \");\n const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n log(`Code sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n}\n\nfunction buildAuthHeadersFromPending(pending: PendingLogin): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": pending.serviceKey, Accept: \"application/json\" };\n if (pending.sessionId) h[\"X-Apple-Id-Session-Id\"] = pending.sessionId;\n if (pending.scnt) h[\"scnt\"] = pending.scnt;\n const c = Object.entries(pending.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\n// ── SIRP Auth (1:1 port of Spaceship::Client#do_sirp) ──────────────────────\n\nasync function doSirp(\n user: string, password: string, serviceKey: string, cookieStr: string, hashcash?: string\n): Promise<{ status: number; body: any; cookies: Record<string, string>; sessionId: string; scnt: string }> {\n const client = new SRPClient(2048);\n const A = client.startAuthentication();\n const aBase64 = Buffer.from(A, \"hex\").toString(\"base64\");\n\n const baseHeaders: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-Apple-Widget-Key\": serviceKey,\n Accept: \"application/json, text/javascript\",\n };\n if (cookieStr) baseHeaders[\"Cookie\"] = cookieStr;\n\n // Step 1: signin/init\n const initRes = await fetch(`${AUTH_BASE}/signin/init`, {\n method: \"POST\",\n headers: baseHeaders,\n body: JSON.stringify({ a: aBase64, accountName: user, protocols: [\"s2k\", \"s2k_fo\"] }),\n redirect: \"manual\",\n });\n const initBody = await initRes.json() as any;\n if (initBody.serviceErrors) throw new Error(`Apple auth error: ${JSON.stringify(initBody.serviceErrors)}`);\n\n const { iteration: iterations, salt: saltB64, b: bB64, c, protocol } = initBody;\n const salt = Buffer.from(saltB64, \"base64\");\n const b = Buffer.from(bB64, \"base64\");\n\n // Derive password (mirrors Spaceship::Client#pbkdf2)\n const encryptedPassword = applePbkdf2(password, salt, iterations, 32, protocol);\n\n // Process SRP challenge\n const m1 = client.processChallenge(user, encryptedPassword.toString(\"hex\"), salt.toString(\"hex\"), b.toString(\"hex\"), true);\n if (m1 === false) throw new Error(\"Error processing SIRP challenge\");\n const m2 = client.H_AMK;\n\n // Step 2: signin/complete\n const completeHeaders = { ...baseHeaders };\n if (hashcash) completeHeaders[\"X-Apple-HC\"] = hashcash;\n\n const completeRes = await fetch(`${AUTH_BASE}/signin/complete?isRememberMeEnabled=false`, {\n method: \"POST\",\n headers: completeHeaders,\n body: JSON.stringify({\n accountName: user,\n c,\n m1: Buffer.from(m1, \"hex\").toString(\"base64\"),\n m2: m2 ? Buffer.from(m2, \"hex\").toString(\"base64\") : \"\",\n rememberMe: false,\n }),\n redirect: \"manual\",\n });\n\n let body: any;\n try { body = await completeRes.json(); } catch { body = \"\"; }\n\n return {\n status: completeRes.status,\n body,\n cookies: parseCookies(completeRes.headers),\n sessionId: completeRes.headers.get(\"x-apple-id-session-id\") ?? \"\",\n scnt: completeRes.headers.get(\"scnt\") ?? \"\",\n };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nasync function trustSession(session: AppleSession): Promise<void> {\n const r = await fetch(`${AUTH_BASE}/2sv/trust`, { headers: buildAuthHeaders(session) });\n Object.assign(session.cookies, parseCookies(r.headers));\n}\n\nasync function fetchOlympusSession(session: AppleSession): Promise<void> {\n const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n const res = await fetch(OLYMPUS_SESSION, { headers: { Cookie: cookieStr, Accept: \"application/json\" } });\n if (res.ok) {\n const body = await res.json() as any;\n if (body?.user?.emailAddress) session.userEmail = body.user.emailAddress;\n if (body?.provider?.providerId) session.teamId = String(body.provider.providerId);\n }\n}\n\n// ── Contract Messages (mirrors fetch_program_license_agreement_messages) ────\n\nasync function fetchContractMessages(session: AppleSession): Promise<ContractMessage[]> {\n const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n try {\n const res = await fetch(\"https://appstoreconnect.apple.com/olympus/v1/contractMessages\", {\n headers: { Cookie: cookieStr, Accept: \"application/json\" },\n });\n if (!res.ok) return [];\n const body = await res.json() as any[];\n return (body ?? []).map((m: any) => ({\n id: m.id ?? \"\",\n group: m.group ?? \"\",\n subject: m.subject ?? \"\",\n message: m.message ?? \"\",\n }));\n } catch {\n return [];\n }\n}\n\nasync function fetchServiceKey(): Promise<string> {\n const res = await fetch(WIDGET_KEY_URL);\n const body = await res.json() as any;\n if (!body?.authServiceKey) throw new Error(\"Could not fetch Apple service key\");\n return body.authServiceKey as string;\n}\n\nfunction buildAuthHeaders(session: AppleSession): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": session.serviceKey, Accept: \"application/json\" };\n if (session.sessionId) h[\"X-Apple-Id-Session-Id\"] = session.sessionId;\n if (session.scnt) h[\"scnt\"] = session.scnt;\n const c = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\nfunction parseCookies(headers: Headers): Record<string, string> {\n const cookies: Record<string, string> = {};\n for (const raw of headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) cookies[m[1]] = m[2];\n }\n return cookies;\n}\n\nfunction computeHashcash(bits: number, challenge: string): string {\n const date = new Date().toISOString().replace(/[-:T]/g, \"\").slice(0, 12);\n let counter = 0;\n while (true) {\n const stamp = `1:${bits}:${date}:${challenge}::${counter.toString(36)}:`;\n const hash = createHash(\"sha1\").update(stamp).digest();\n let zeroBits = 0;\n for (const byte of hash) {\n if (byte === 0) { zeroBits += 8; } else { zeroBits += Math.clz32(byte) - 24; break; }\n if (zeroBits >= bits) break;\n }\n if (zeroBits >= bits) return stamp;\n counter++;\n }\n}\n\nasync function defaultPrompt(message: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((r) => { rl.question(message, (a) => { rl.close(); r(a.trim()); }); });\n}\n","import type { TokenManager } from \"./auth.js\";\nimport { ProgramLicenseAgreementError } from \"./apple-session.js\";\nimport type {\n JsonApiErrorResponse,\n JsonApiListResponse,\n JsonApiResponse,\n ListParams,\n RequestOptions,\n} from \"./types.js\";\n\nconst PRODUCTION_BASE = \"https://api.appstoreconnect.apple.com\";\nconst ENTERPRISE_BASE = \"https://api.enterprise.developer.apple.com\";\n\nconst MAX_RETRIES = 5;\nconst INITIAL_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 60_000;\n/** Fastlane's TooManyRequestsError gives up after 3600s cumulative backoff. */\nconst MAX_RATE_LIMIT_BACKOFF_MS = 3_600_000;\n\nexport class AppStoreConnectError extends Error {\n constructor(\n message: string,\n public status: number,\n public errors: JsonApiErrorResponse[\"errors\"] = []\n ) {\n super(message);\n this.name = \"AppStoreConnectError\";\n }\n}\n\nexport class RateLimitError extends AppStoreConnectError {\n constructor(public retryAfter: number) {\n super(`Rate limited. Retry after ${retryAfter}s`, 429);\n this.name = \"RateLimitError\";\n }\n}\n\nexport class RequestClient {\n private baseUrl: string;\n private tokenManager: TokenManager;\n\n constructor(tokenManager: TokenManager, enterprise = false) {\n this.tokenManager = tokenManager;\n this.baseUrl = enterprise ? ENTERPRISE_BASE : PRODUCTION_BASE;\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, headers: extraHeaders } = options;\n\n let url = `${this.baseUrl}${path}`;\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n searchParams.set(key, value.join(\",\"));\n } else {\n searchParams.set(key, String(value));\n }\n }\n const qs = searchParams.toString();\n if (qs) url += `?${qs}`;\n }\n\n let lastError: Error | null = null;\n // Soft-cumulative backoff for 429 that doubles on each hit, mirroring\n // Fastlane's Spaceship::ConnectAPI::APIClient#with_asc_retry 429 handler:\n // `Kernel.sleep(backoff); backoff *= 2`, giving up past 3600s.\n let rateLimitBackoffMs = INITIAL_BACKOFF_MS;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n const token = await this.tokenManager.getToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n ...extraHeaders,\n };\n\n const res = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (res.ok) {\n if (res.status === 204) return undefined as T;\n return (await res.json()) as T;\n }\n\n // Handle 401 — refresh token and retry once\n if (res.status === 401 && attempt === 0) {\n this.tokenManager.invalidate();\n continue;\n }\n\n // Handle 429 — rate limit. Prefer server's Retry-After header when\n // provided, otherwise fall back to Fastlane's doubling backoff.\n if (res.status === 429) {\n if (rateLimitBackoffMs > MAX_RATE_LIMIT_BACKOFF_MS) {\n throw new RateLimitError(Math.floor(rateLimitBackoffMs / 1000));\n }\n const retryAfterHeader = res.headers.get(\"Retry-After\");\n const sleepMs = retryAfterHeader\n ? parseInt(retryAfterHeader, 10) * 1000\n : rateLimitBackoffMs;\n await sleep(sleepMs);\n rateLimitBackoffMs *= 2;\n continue;\n }\n\n // Parse error body early so we can inspect it for 403/502 special cases.\n const errorBody = await res.json().catch(() => null);\n const errors = (errorBody as JsonApiErrorResponse)?.errors || [];\n\n // Handle 403 — detect missing/expired program license agreement.\n // Mirrors api_client.rb's ProgramLicenseAgreementUpdated branch.\n if (res.status === 403) {\n const firstCode = errors[0]?.code;\n if (firstCode === \"FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED\") {\n const detail =\n errors.map((e) => e.detail || e.title).join(\"; \") ||\n \"Required agreements are missing or expired.\";\n throw new ProgramLicenseAgreementError(\n `${detail} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n []\n );\n }\n }\n\n // Handle 502 — special-case \"Could not process this request\" retry.\n // Mirrors api_client.rb's BadGatewayError branch (issue fastlane#19264).\n if (res.status === 502 && attempt < MAX_RETRIES) {\n const bodyText = errorBody ? JSON.stringify(errorBody) : \"\";\n if (bodyText.includes(\"Could not process this request\")) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n }\n\n // Handle 5xx — retry with exponential backoff\n if (res.status >= 500 && attempt < MAX_RETRIES) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n\n const detail = errors.map((e) => e.detail || e.title).join(\"; \") || `HTTP ${res.status}`;\n\n lastError = new AppStoreConnectError(detail, res.status, errors);\n break;\n }\n\n throw lastError || new Error(\"Request failed after retries\");\n }\n\n async get<T>(path: string, params?: Record<string, string | string[] | number | undefined>): Promise<T> {\n return this.request<T>(path, { method: \"GET\", params });\n }\n\n async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body });\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"PATCH\", body });\n }\n\n async delete(path: string): Promise<void> {\n await this.request(path, { method: \"DELETE\" });\n }\n\n // Build query params from ListParams\n buildListParams(params: ListParams): Record<string, string | undefined> {\n const result: Record<string, string | undefined> = {};\n\n if (params.filter) {\n for (const [key, value] of Object.entries(params.filter)) {\n result[`filter[${key}]`] = Array.isArray(value) ? value.join(\",\") : value;\n }\n }\n\n if (params.include) {\n result[\"include\"] = params.include;\n }\n\n if (params.fields) {\n for (const [key, value] of Object.entries(params.fields)) {\n result[`fields[${key}]`] = value;\n }\n }\n\n if (params.limit !== undefined) {\n result[\"limit\"] = String(params.limit);\n }\n\n if (params.sort) {\n result[\"sort\"] = params.sort;\n }\n\n if (params.cursor) {\n // ASC uses page[after] for cursor pagination\n result[\"page[after]\"] = params.cursor;\n }\n\n return result;\n }\n\n async list<T>(path: string, params: ListParams = {}): Promise<JsonApiListResponse<T>> {\n const queryParams = this.buildListParams(params);\n return this.get<JsonApiListResponse<T>>(path, queryParams);\n }\n\n async *paginate<T>(path: string, params: ListParams = {}): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined = params.cursor;\n\n while (true) {\n const response = await this.list<T>(path, { ...params, cursor });\n\n for (const item of response.data) {\n yield item;\n }\n\n // Check for next page\n const nextLink = response.links?.next;\n if (!nextLink) break;\n\n // Extract cursor from next link\n const nextUrl = new URL(nextLink);\n cursor = nextUrl.searchParams.get(\"page[after]\") || undefined;\n if (!cursor) break;\n }\n }\n\n async all<T>(path: string, params: ListParams = {}): Promise<T[]> {\n const results: T[] = [];\n for await (const item of this.paginate<T>(path, params)) {\n results.push(item);\n }\n return results;\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { CertificateType } from \"../types/enums.js\";\n\nexport class CertificatesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n serialNumber?: string;\n displayName?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Certificate[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { certificates: params.fields.join(\",\") };\n }\n return this.http.all<Certificate>(\"/v1/certificates\", listParams);\n }\n\n async get(id: string): Promise<Certificate> {\n const response = await this.http.get<JsonApiResponse<Certificate>>(\n `/v1/certificates/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n certificateType: CertificateType;\n csrContent: string;\n }): Promise<Certificate> {\n const response = await this.http.post<JsonApiResponse<Certificate>>(\n \"/v1/certificates\",\n {\n data: {\n type: \"certificates\",\n attributes: {\n certificateType: params.certificateType,\n csrContent: params.csrContent,\n },\n },\n }\n );\n return response.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.http.delete(`/v1/certificates/${id}`);\n }\n\n async *paginate(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n };\n limit?: number;\n }): AsyncGenerator<Certificate> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n yield* this.http.paginate<Certificate>(\"/v1/certificates\", listParams);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Profile } from \"../types/profile.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { ProfileType, ProfileState } from \"../types/enums.js\";\n\nexport class ProfilesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n profileType?: ProfileType | ProfileType[];\n profileState?: ProfileState;\n name?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { profiles?: string[]; certificates?: string[]; devices?: string[]; bundleIds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Profile[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Profile>(\"/v1/profiles\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Profile> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Profile>>(\n `/v1/profiles/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n name: string;\n profileType: ProfileType;\n bundleIdId: string;\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<Profile> {\n const relationships: Record<string, unknown> = {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n certificates: {\n data: params.certificateIds.map((id) => ({\n type: \"certificates\",\n id,\n })),\n },\n };\n\n if (params.deviceIds && params.deviceIds.length > 0) {\n relationships.devices = {\n data: params.deviceIds.map((id) => ({\n type: \"devices\",\n id,\n })),\n };\n }\n\n const response = await this.http.post<JsonApiResponse<Profile>>(\n \"/v1/profiles\",\n {\n data: {\n type: \"profiles\",\n attributes: {\n name: params.name,\n profileType: params.profileType,\n },\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/profiles/${id}`);\n }\n\n async getCertificates(profileId: string): Promise<Certificate[]> {\n return this.http.all<Certificate>(\n `/v1/profiles/${profileId}/certificates`\n );\n }\n\n async getDevices(profileId: string): Promise<Device[]> {\n return this.http.all<Device>(`/v1/profiles/${profileId}/devices`);\n }\n\n async getBundleId(profileId: string): Promise<BundleId> {\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/profiles/${profileId}/bundleId`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { BundleIdCapability } from \"../types/capability.js\";\nimport type { BundleIdPlatform } from \"../types/enums.js\";\n\nexport class BundleIdsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n identifier?: string;\n name?: string;\n platform?: BundleIdPlatform;\n seedId?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { bundleIds?: string[]; bundleIdCapabilities?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<BundleId[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<BundleId>(\"/v1/bundleIds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<BundleId> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/bundleIds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n identifier: string;\n name: string;\n platform: BundleIdPlatform;\n seedId?: string;\n }): Promise<BundleId> {\n const attributes: Record<string, unknown> = {\n identifier: params.identifier,\n name: params.name,\n platform: params.platform,\n };\n if (params.seedId) attributes.seedId = params.seedId;\n\n const response = await this.http.post<JsonApiResponse<BundleId>>(\n \"/v1/bundleIds\",\n {\n data: {\n type: \"bundleIds\",\n attributes,\n },\n }\n );\n return response.data;\n }\n\n async find(identifier: string): Promise<BundleId | null> {\n const results = await this.list({\n filter: { identifier },\n limit: 1,\n });\n return results[0] ?? null;\n }\n\n async getCapabilities(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { DeviceStatus, Platform } from \"../types/enums.js\";\n\nexport class DevicesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n name?: string;\n platform?: Platform | Platform[];\n status?: DeviceStatus;\n udid?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Device[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { devices: params.fields.join(\",\") };\n }\n return this.http.all<Device>(\"/v1/devices\", listParams);\n }\n\n async get(id: string): Promise<Device> {\n const response = await this.http.get<JsonApiResponse<Device>>(\n `/v1/devices/${id}`\n );\n return response.data;\n }\n\n async register(params: {\n name: string;\n platform: Platform;\n udid: string;\n }): Promise<Device> {\n const response = await this.http.post<JsonApiResponse<Device>>(\n \"/v1/devices\",\n {\n data: {\n type: \"devices\",\n attributes: {\n name: params.name,\n platform: params.platform,\n udid: params.udid,\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: { name?: string; status?: DeviceStatus }\n ): Promise<Device> {\n const response = await this.http.patch<JsonApiResponse<Device>>(\n `/v1/devices/${id}`,\n {\n data: {\n type: \"devices\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async findByUdid(udid: string): Promise<Device | null> {\n const results = await this.list({ filter: { udid }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { App } from \"../types/app.js\";\n\nexport class AppsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n bundleId?: string;\n name?: string;\n sku?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { apps?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<App[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<App>(\"/v1/apps\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<App> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<App>>(\n `/v1/apps/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByBundleId(bundleId: string): Promise<App | null> {\n const results = await this.list({\n filter: { bundleId },\n limit: 1,\n });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n Build,\n BetaBuildLocalization,\n BuildBetaDetail,\n PreReleaseVersion,\n} from \"../types/build.js\";\n\nexport class BuildsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n processingState?: string;\n \"preReleaseVersion.version\"?: string;\n expired?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { builds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Build[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Build>(\"/v1/builds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Build> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Build>>(\n `/v1/builds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async getBetaDetail(buildId: string): Promise<BuildBetaDetail> {\n const response = await this.http.get<JsonApiResponse<BuildBetaDetail>>(\n `/v1/builds/${buildId}/buildBetaDetail`\n );\n return response.data;\n }\n\n async getLocalizations(buildId: string): Promise<BetaBuildLocalization[]> {\n return this.http.all<BetaBuildLocalization>(\n `/v1/builds/${buildId}/betaBuildLocalizations`\n );\n }\n\n async createLocalization(params: {\n buildId: string;\n locale: string;\n whatsNew: string;\n }): Promise<BetaBuildLocalization> {\n const response = await this.http.post<\n JsonApiResponse<BetaBuildLocalization>\n >(\"/v1/betaBuildLocalizations\", {\n data: {\n type: \"betaBuildLocalizations\",\n attributes: {\n locale: params.locale,\n whatsNew: params.whatsNew,\n },\n relationships: {\n build: {\n data: { type: \"builds\", id: params.buildId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: { whatsNew: string }\n ): Promise<BetaBuildLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<BetaBuildLocalization>\n >(`/v1/betaBuildLocalizations/${localizationId}`, {\n data: {\n type: \"betaBuildLocalizations\",\n id: localizationId,\n attributes: {\n whatsNew: params.whatsNew,\n },\n },\n });\n return response.data;\n }\n\n async getPreReleaseVersion(buildId: string): Promise<PreReleaseVersion | null> {\n try {\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/builds/${buildId}/preReleaseVersion`\n );\n return response.data;\n } catch {\n return null;\n }\n }\n\n async submitForBetaReview(buildId: string): Promise<void> {\n await this.http.post(\"/v1/betaAppReviewSubmissions\", {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: {\n data: { type: \"builds\", id: buildId },\n },\n },\n },\n });\n }\n\n async expireBuild(buildId: string): Promise<void> {\n await this.http.patch(`/v1/builds/${buildId}`, {\n data: {\n type: \"builds\",\n id: buildId,\n attributes: {\n expired: true,\n },\n },\n });\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BetaGroup } from \"../types/build.js\";\n\nexport class BetaGroupsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n name?: string;\n isInternalGroup?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<BetaGroup[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { betaGroups: params.fields.join(\",\") };\n }\n return this.http.all<BetaGroup>(\"/v1/betaGroups\", listParams);\n }\n\n async get(id: string): Promise<BetaGroup> {\n const response = await this.http.get<JsonApiResponse<BetaGroup>>(\n `/v1/betaGroups/${id}`\n );\n return response.data;\n }\n\n async listForApp(appId: string): Promise<BetaGroup[]> {\n return this.http.all<BetaGroup>(`/v1/apps/${appId}/betaGroups`);\n }\n\n async addBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.post(`/v1/betaGroups/${groupId}/relationships/builds`, {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n });\n }\n\n async removeBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.request(\n `/v1/betaGroups/${groupId}/relationships/builds`,\n {\n method: \"DELETE\",\n body: {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n },\n }\n );\n }\n\n async findByName(appId: string, name: string): Promise<BetaGroup | null> {\n const groups = await this.listForApp(appId);\n return groups.find((g) => g.attributes.name === name) ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\nimport type {\n BundleIdCapability,\n CapabilitySettingInput,\n} from \"../types/capability.js\";\nimport type { CapabilityType } from \"../types/enums.js\";\n\nexport class CapabilitiesResource {\n constructor(private http: RequestClient) {}\n\n async listForBundleId(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n\n async enable(params: {\n bundleIdId: string;\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.post<\n JsonApiResponse<BundleIdCapability>\n >(\"/v1/bundleIdCapabilities\", {\n data: {\n type: \"bundleIdCapabilities\",\n attributes,\n relationships: {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n capabilityId: string,\n params: {\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }\n ): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.patch<\n JsonApiResponse<BundleIdCapability>\n >(`/v1/bundleIdCapabilities/${capabilityId}`, {\n data: {\n type: \"bundleIdCapabilities\",\n id: capabilityId,\n attributes,\n },\n });\n return response.data;\n }\n\n async disable(capabilityId: string): Promise<void> {\n await this.http.delete(`/v1/bundleIdCapabilities/${capabilityId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { AppStoreVersionState, Platform, ReleaseType } from \"../types/enums.js\";\n\nexport interface AppStoreVersion {\n id: string;\n type: \"appStoreVersions\";\n attributes: {\n platform: Platform;\n versionString: string;\n appStoreState: AppStoreVersionState;\n copyright: string | null;\n releaseType: ReleaseType | null;\n earliestReleaseDate: string | null;\n downloadable: boolean;\n createdDate: string;\n };\n relationships?: {\n app?: { data: { type: \"apps\"; id: string } };\n build?: { data: { type: \"builds\"; id: string } | null };\n appStoreVersionLocalizations?: {\n data: Array<{ type: \"appStoreVersionLocalizations\"; id: string }>;\n };\n };\n}\n\nexport interface AppStoreVersionLocalization {\n id: string;\n type: \"appStoreVersionLocalizations\";\n attributes: {\n description: string | null;\n locale: string;\n keywords: string | null;\n marketingUrl: string | null;\n promotionalText: string | null;\n supportUrl: string | null;\n whatsNew: string | null;\n };\n}\n\nexport class AppStoreVersionsResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(\n appId: string,\n params?: {\n filter?: { appStoreState?: AppStoreVersionState | AppStoreVersionState[]; platform?: Platform };\n include?: string;\n limit?: number;\n }\n ): Promise<AppStoreVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppStoreVersion>(\n `/v1/apps/${appId}/appStoreVersions`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppStoreVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appId: string;\n versionString: string;\n platform: Platform;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string;\n copyright?: string;\n }): Promise<AppStoreVersion> {\n const attributes: Record<string, unknown> = {\n versionString: params.versionString,\n platform: params.platform,\n };\n if (params.releaseType) attributes.releaseType = params.releaseType;\n if (params.earliestReleaseDate) attributes.earliestReleaseDate = params.earliestReleaseDate;\n if (params.copyright) attributes.copyright = params.copyright;\n\n const response = await this.http.post<JsonApiResponse<AppStoreVersion>>(\n \"/v1/appStoreVersions\",\n {\n data: {\n type: \"appStoreVersions\",\n attributes,\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: {\n versionString?: string;\n copyright?: string;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string | null;\n }\n ): Promise<AppStoreVersion> {\n const response = await this.http.patch<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n {\n data: {\n type: \"appStoreVersions\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async setBuild(versionId: string, buildId: string): Promise<void> {\n await this.http.patch(`/v1/appStoreVersions/${versionId}/relationships/build`, {\n data: { type: \"builds\", id: buildId },\n });\n }\n\n async getLocalizations(versionId: string): Promise<AppStoreVersionLocalization[]> {\n return this.http.all<AppStoreVersionLocalization>(\n `/v1/appStoreVersions/${versionId}/appStoreVersionLocalizations`\n );\n }\n\n async createLocalization(params: {\n versionId: string;\n locale: string;\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }): Promise<AppStoreVersionLocalization> {\n const { versionId, ...attributes } = params;\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionLocalization>\n >(\"/v1/appStoreVersionLocalizations\", {\n data: {\n type: \"appStoreVersionLocalizations\",\n attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: {\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }\n ): Promise<AppStoreVersionLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreVersionLocalization>\n >(`/v1/appStoreVersionLocalizations/${localizationId}`, {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: localizationId,\n attributes: params,\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppScreenshotSet {\n id: string;\n type: \"appScreenshotSets\";\n attributes: {\n screenshotDisplayType: string;\n };\n}\n\nexport interface AppScreenshot {\n id: string;\n type: \"appScreenshots\";\n attributes: {\n fileSize: number;\n fileName: string;\n sourceFileChecksum: string | null;\n imageAsset: {\n templateUrl: string;\n width: number;\n height: number;\n } | null;\n assetToken: string | null;\n assetType: string | null;\n uploadOperations: UploadOperation[] | null;\n assetDeliveryState: {\n state: string;\n errors: unknown[];\n } | null;\n };\n}\n\nexport interface UploadOperation {\n method: string;\n url: string;\n length: number;\n offset: number;\n requestHeaders: Array<{ name: string; value: string }>;\n}\n\nexport class AppScreenshotsResource {\n constructor(private http: RequestClient) {}\n\n async listSetsForLocalization(\n localizationId: string\n ): Promise<AppScreenshotSet[]> {\n return this.http.all<AppScreenshotSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appScreenshotSets`\n );\n }\n\n async createSet(params: {\n localizationId: string;\n screenshotDisplayType: string;\n }): Promise<AppScreenshotSet> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshotSet>\n >(\"/v1/appScreenshotSets\", {\n data: {\n type: \"appScreenshotSets\",\n attributes: {\n screenshotDisplayType: params.screenshotDisplayType,\n },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.localizationId,\n },\n },\n },\n },\n });\n return response.data;\n }\n\n async listScreenshots(setId: string): Promise<AppScreenshot[]> {\n return this.http.all<AppScreenshot>(\n `/v1/appScreenshotSets/${setId}/appScreenshots`\n );\n }\n\n async reserveScreenshot(params: {\n setId: string;\n fileName: string;\n fileSize: number;\n }): Promise<AppScreenshot> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshot>\n >(\"/v1/appScreenshots\", {\n data: {\n type: \"appScreenshots\",\n attributes: {\n fileName: params.fileName,\n fileSize: params.fileSize,\n },\n relationships: {\n appScreenshotSet: {\n data: { type: \"appScreenshotSets\", id: params.setId },\n },\n },\n },\n });\n return response.data;\n }\n\n async commitScreenshot(\n screenshotId: string,\n params: { sourceFileChecksum: string; uploaded: boolean }\n ): Promise<AppScreenshot> {\n const response = await this.http.patch<\n JsonApiResponse<AppScreenshot>\n >(`/v1/appScreenshots/${screenshotId}`, {\n data: {\n type: \"appScreenshots\",\n id: screenshotId,\n attributes: {\n sourceFileChecksum: params.sourceFileChecksum,\n uploaded: params.uploaded,\n },\n },\n });\n return response.data;\n }\n\n async deleteScreenshot(screenshotId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshots/${screenshotId}`);\n }\n\n async deleteSet(setId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshotSets/${setId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface ReviewSubmission {\n id: string;\n type: \"reviewSubmissions\";\n attributes: {\n state: string;\n submittedDate: string | null;\n platform: string;\n };\n}\n\nexport interface AppStoreVersionSubmission {\n id: string;\n type: \"appStoreVersionSubmissions\";\n}\n\nexport class ReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async submitVersion(versionId: string): Promise<AppStoreVersionSubmission> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionSubmission>\n >(\"/v1/appStoreVersionSubmissions\", {\n data: {\n type: \"appStoreVersionSubmissions\",\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async createReviewSubmission(params: {\n appId: string;\n platform: string;\n }): Promise<ReviewSubmission> {\n const response = await this.http.post<\n JsonApiResponse<ReviewSubmission>\n >(\"/v1/reviewSubmissions\", {\n data: {\n type: \"reviewSubmissions\",\n attributes: {\n platform: params.platform,\n },\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n });\n return response.data;\n }\n\n async confirmReviewSubmission(submissionId: string): Promise<ReviewSubmission> {\n const response = await this.http.patch<\n JsonApiResponse<ReviewSubmission>\n >(`/v1/reviewSubmissions/${submissionId}`, {\n data: {\n type: \"reviewSubmissions\",\n id: submissionId,\n attributes: {\n submitted: true,\n },\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\n/**\n * App Info is the metadata container that holds an app's categories, age\n * ratings, and localisations for a single submission cycle. Ported from\n * `spaceship/connect_api/models/app_info.rb`.\n */\nexport interface AppInfoAttributes {\n appStoreState?: string | null;\n state?: string | null;\n appStoreAgeRating?: string | null;\n brazilAgeRating?: string | null;\n kidsAgeBand?: string | null;\n}\n\nexport type AppInfo = JsonApiResource<\"appInfos\", AppInfoAttributes>;\n\nexport class AppInfosResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppInfo[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppInfo>(`/v1/apps/${appId}/appInfos`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppInfo> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async update(\n id: string,\n relationships?: Record<string, { type: string; id: string } | null>\n ): Promise<AppInfo> {\n const response = await this.http.patch<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n {\n data: {\n type: \"appInfos\",\n id,\n ...(relationships\n ? {\n relationships: Object.fromEntries(\n Object.entries(relationships).map(([k, v]) => [k, { data: v }])\n ),\n }\n : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfos/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppInfoLocalizationAttributes {\n locale: string;\n name?: string | null;\n subtitle?: string | null;\n privacyPolicyUrl?: string | null;\n privacyChoicesUrl?: string | null;\n privacyPolicyText?: string | null;\n}\n\nexport type AppInfoLocalization = JsonApiResource<\n \"appInfoLocalizations\",\n AppInfoLocalizationAttributes\n>;\n\nexport class AppInfoLocalizationsResource {\n constructor(private http: RequestClient) {}\n\n async listForAppInfo(appInfoId: string, params?: {\n limit?: number;\n }): Promise<AppInfoLocalization[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppInfoLocalization>(\n `/v1/appInfos/${appInfoId}/appInfoLocalizations`,\n listParams\n );\n }\n\n async get(id: string): Promise<AppInfoLocalization> {\n const response = await this.http.get<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appInfoId: string;\n attributes: AppInfoLocalizationAttributes;\n }): Promise<AppInfoLocalization> {\n const response = await this.http.post<JsonApiResponse<AppInfoLocalization>>(\n \"/v1/appInfoLocalizations\",\n {\n data: {\n type: \"appInfoLocalizations\",\n attributes: params.attributes,\n relationships: {\n appInfo: { data: { type: \"appInfos\", id: params.appInfoId } },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppInfoLocalizationAttributes>\n ): Promise<AppInfoLocalization> {\n const response = await this.http.patch<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`,\n { data: { type: \"appInfoLocalizations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfoLocalizations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppStoreReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type AppStoreReviewDetail = JsonApiResource<\n \"appStoreReviewDetails\",\n AppStoreReviewDetailAttributes\n>;\n\nexport class AppStoreReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreVersions/${appStoreVersionId}/appStoreReviewDetail`);\n return response.data;\n }\n\n async get(id: string): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`);\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: AppStoreReviewDetailAttributes;\n }): Promise<AppStoreReviewDetail> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreReviewDetail>\n >(\"/v1/appStoreReviewDetails\", {\n data: {\n type: \"appStoreReviewDetails\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppStoreReviewDetailAttributes>\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`, {\n data: { type: \"appStoreReviewDetails\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaTesterAttributes {\n firstName?: string | null;\n lastName?: string | null;\n email: string;\n inviteType?: \"EMAIL\" | \"PUBLIC_LINK\" | null;\n state?: string | null;\n}\n\nexport type BetaTester = JsonApiResource<\"betaTesters\", BetaTesterAttributes>;\n\nexport class BetaTestersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n email?: string;\n firstName?: string;\n lastName?: string;\n inviteType?: string;\n apps?: string | string[];\n betaGroups?: string | string[];\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<BetaTester[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<BetaTester>(\"/v1/betaTesters\", listParams);\n }\n\n async get(id: string): Promise<BetaTester> {\n const response = await this.http.get<JsonApiResponse<BetaTester>>(\n `/v1/betaTesters/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n email: string;\n firstName?: string;\n lastName?: string;\n betaGroupIds?: string[];\n appIds?: string[];\n }): Promise<BetaTester> {\n const attributes: BetaTesterAttributes = {\n email: params.email,\n firstName: params.firstName,\n lastName: params.lastName,\n };\n const relationships: Record<string, { data: Array<{ type: string; id: string }> }> = {};\n if (params.betaGroupIds?.length) {\n relationships.betaGroups = {\n data: params.betaGroupIds.map((id) => ({ type: \"betaGroups\", id })),\n };\n }\n if (params.appIds?.length) {\n relationships.apps = {\n data: params.appIds.map((id) => ({ type: \"apps\", id })),\n };\n }\n const response = await this.http.post<JsonApiResponse<BetaTester>>(\n \"/v1/betaTesters\",\n {\n data: {\n type: \"betaTesters\",\n attributes,\n ...(Object.keys(relationships).length ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/betaTesters/${id}`);\n }\n\n async findByEmail(email: string): Promise<BetaTester | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaAppReviewSubmissionAttributes {\n betaReviewState?: string | null;\n submittedDate?: string | null;\n}\n\nexport type BetaAppReviewSubmission = JsonApiResource<\n \"betaAppReviewSubmissions\",\n BetaAppReviewSubmissionAttributes\n>;\n\nexport class BetaAppReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { build?: string | string[]; betaReviewState?: string };\n limit?: number;\n }): Promise<BetaAppReviewSubmission[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaAppReviewSubmission>(\n \"/v1/betaAppReviewSubmissions\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewSubmission>>(\n `/v1/betaAppReviewSubmissions/${id}`\n );\n return response.data;\n }\n\n async create(buildId: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.post<JsonApiResponse<BetaAppReviewSubmission>>(\n \"/v1/betaAppReviewSubmissions\",\n {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: { data: { type: \"builds\", id: buildId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface BetaAppReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type BetaAppReviewDetail = JsonApiResource<\n \"betaAppReviewDetails\",\n BetaAppReviewDetailAttributes\n>;\n\nexport class BetaAppReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/apps/${appId}/betaAppReviewDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaAppReviewDetailAttributes>\n ): Promise<BetaAppReviewDetail> {\n const response = await this.http.patch<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`,\n { data: { type: \"betaAppReviewDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport type InvitationType = \"EMAIL\" | \"PUBLIC_LINK\";\n\nexport interface BetaTesterInvitationAttributes {\n // Write-only resource: no stored attributes, just a creation side-effect.\n [key: string]: unknown;\n}\n\nexport type BetaTesterInvitation = JsonApiResource<\n \"betaTesterInvitations\",\n BetaTesterInvitationAttributes\n>;\n\nexport class BetaInvitationsResource {\n constructor(private http: RequestClient) {}\n\n /** Send a TestFlight invitation email for an existing tester + app. */\n async send(params: {\n appId: string;\n betaTesterId: string;\n }): Promise<BetaTesterInvitation> {\n const response = await this.http.post<JsonApiResponse<BetaTesterInvitation>>(\n \"/v1/betaTesterInvitations\",\n {\n data: {\n type: \"betaTesterInvitations\",\n relationships: {\n app: { data: { type: \"apps\", id: params.appId } },\n betaTester: { data: { type: \"betaTesters\", id: params.betaTesterId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaLicenseAgreementAttributes {\n agreementText?: string | null;\n}\n\nexport type BetaLicenseAgreement = JsonApiResource<\n \"betaLicenseAgreements\",\n BetaLicenseAgreementAttributes\n>;\n\nexport class BetaLicensesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<BetaLicenseAgreement[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaLicenseAgreement>(\n \"/v1/betaLicenseAgreements\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/betaLicenseAgreements/${id}`\n );\n return response.data;\n }\n\n async getForApp(appId: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/apps/${appId}/betaLicenseAgreement`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaLicenseAgreementAttributes>\n ): Promise<BetaLicenseAgreement> {\n const response = await this.http.patch<\n JsonApiResponse<BetaLicenseAgreement>\n >(`/v1/betaLicenseAgreements/${id}`, {\n data: { type: \"betaLicenseAgreements\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppPreviewAttributes {\n fileSize?: number | null;\n fileName?: string | null;\n sourceFileChecksum?: string | null;\n previewFrameTimeCode?: string | null;\n mimeType?: string | null;\n videoUrl?: string | null;\n previewImage?: { templateUrl?: string; width?: number; height?: number } | null;\n uploadOperations?: unknown[] | null;\n assetDeliveryState?: { state?: string } | null;\n uploaded?: boolean | null;\n}\n\nexport type AppPreview = JsonApiResource<\"appPreviews\", AppPreviewAttributes>;\n\nexport class AppPreviewsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AppPreview> {\n const response = await this.http.get<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appPreviewSetId: string;\n fileSize: number;\n fileName: string;\n previewFrameTimeCode?: string;\n mimeType?: string;\n }): Promise<AppPreview> {\n const { appPreviewSetId, ...rest } = params;\n const response = await this.http.post<JsonApiResponse<AppPreview>>(\n \"/v1/appPreviews\",\n {\n data: {\n type: \"appPreviews\",\n attributes: rest,\n relationships: {\n appPreviewSet: {\n data: { type: \"appPreviewSets\", id: appPreviewSetId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { uploaded?: boolean; sourceFileChecksum?: string; previewFrameTimeCode?: string }\n ): Promise<AppPreview> {\n const response = await this.http.patch<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`,\n { data: { type: \"appPreviews\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviews/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPreviewSetAttributes {\n previewType?: string | null;\n}\n\nexport type AppPreviewSet = JsonApiResource<\n \"appPreviewSets\",\n AppPreviewSetAttributes\n>;\n\nexport class AppPreviewSetsResource {\n constructor(private http: RequestClient) {}\n\n async listForLocalization(\n localizationId: string,\n params?: { limit?: number; include?: string }\n ): Promise<AppPreviewSet[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPreviewSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appPreviewSets`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPreviewSet> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPreviewSet>>(\n `/v1/appPreviewSets/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionLocalizationId: string;\n previewType: string;\n }): Promise<AppPreviewSet> {\n const response = await this.http.post<JsonApiResponse<AppPreviewSet>>(\n \"/v1/appPreviewSets\",\n {\n data: {\n type: \"appPreviewSets\",\n attributes: { previewType: params.previewType },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.appStoreVersionLocalizationId,\n },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviewSets/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPriceAttributes {\n startDate?: string | null;\n}\n\nexport type AppPrice = JsonApiResource<\"appPrices\", AppPriceAttributes>;\n\nexport class AppPricesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppPrice[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPrice>(`/v1/apps/${appId}/prices`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPrice> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPrice>>(\n `/v1/appPrices/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface TerritoryAttributes {\n currency?: string | null;\n}\n\nexport type Territory = JsonApiResource<\"territories\", TerritoryAttributes>;\n\nexport class TerritoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<Territory[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<Territory>(\"/v1/territories\", listParams);\n }\n\n async get(id: string): Promise<Territory> {\n const response = await this.http.get<JsonApiResponse<Territory>>(\n `/v1/territories/${id}`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AgeRatingDeclarationAttributes {\n alcoholTobaccoOrDrugUseOrReferences?: string | null;\n contests?: string | null;\n gamblingSimulated?: string | null;\n medicalOrTreatmentInformation?: string | null;\n profanityOrCrudeHumor?: string | null;\n sexualContentGraphicAndNudity?: string | null;\n sexualContentOrNudity?: string | null;\n horrorOrFearThemes?: string | null;\n matureOrSuggestiveThemes?: string | null;\n unrestrictedWebAccess?: boolean | null;\n gamblingAndContests?: boolean | null;\n gambling?: string | null;\n violenceCartoonOrFantasy?: string | null;\n violenceRealistic?: string | null;\n violenceRealisticProlongedGraphicOrSadistic?: string | null;\n kidsAgeBand?: string | null;\n seventeenPlus?: boolean | null;\n}\n\nexport type AgeRatingDeclaration = JsonApiResource<\n \"ageRatingDeclarations\",\n AgeRatingDeclarationAttributes\n>;\n\nexport class AgeRatingDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AgeRatingDeclaration> {\n const response = await this.http.get<JsonApiResponse<AgeRatingDeclaration>>(\n `/v1/ageRatingDeclarations/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AgeRatingDeclarationAttributes>\n ): Promise<AgeRatingDeclaration> {\n const response = await this.http.patch<\n JsonApiResponse<AgeRatingDeclaration>\n >(`/v1/ageRatingDeclarations/${id}`, {\n data: { type: \"ageRatingDeclarations\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppCategoryAttributes {\n platforms?: string[] | null;\n}\n\nexport type AppCategory = JsonApiResource<\"appCategories\", AppCategoryAttributes>;\n\nexport class AppCategoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { platforms?: string };\n include?: string;\n limit?: number;\n }): Promise<AppCategory[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppCategory>(\"/v1/appCategories\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppCategory> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppCategory>>(\n `/v1/appCategories/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppEncryptionDeclarationAttributes {\n appEncryptionDeclarationState?: string | null;\n createdDate?: string | null;\n codeValue?: string | null;\n usesEncryption?: boolean | null;\n exempt?: boolean | null;\n containsProprietaryCryptography?: boolean | null;\n containsThirdPartyCryptography?: boolean | null;\n availableOnFrenchStore?: boolean | null;\n platform?: string | null;\n uploadedDate?: string | null;\n documentUrl?: string | null;\n documentName?: string | null;\n documentType?: string | null;\n}\n\nexport type AppEncryptionDeclaration = JsonApiResource<\n \"appEncryptionDeclarations\",\n AppEncryptionDeclarationAttributes\n>;\n\nexport class AppEncryptionDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { app?: string; platform?: string };\n limit?: number;\n }): Promise<AppEncryptionDeclaration[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppEncryptionDeclaration>(\n \"/v1/appEncryptionDeclarations\",\n listParams\n );\n }\n\n async get(id: string): Promise<AppEncryptionDeclaration> {\n const response = await this.http.get<\n JsonApiResponse<AppEncryptionDeclaration>\n >(`/v1/appEncryptionDeclarations/${id}`);\n return response.data;\n }\n\n async assignToBuild(params: {\n declarationId: string;\n buildIds: string[];\n }): Promise<void> {\n await this.http.post(\n `/v1/appEncryptionDeclarations/${params.declarationId}/relationships/builds`,\n { data: params.buildIds.map((id) => ({ type: \"builds\", id })) }\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface IdfaDeclarationAttributes {\n honorsLimitedAdTracking?: boolean | null;\n servesAds?: boolean | null;\n attributesActionWithPreviousAd?: boolean | null;\n attributesAppInstallationToPreviousAd?: boolean | null;\n}\n\nexport type IdfaDeclaration = JsonApiResource<\n \"idfaDeclarations\",\n IdfaDeclarationAttributes\n>;\n\nexport class IdfaDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/appStoreVersions/${appStoreVersionId}/idfaDeclaration`\n );\n return response.data;\n }\n\n async get(id: string): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: IdfaDeclarationAttributes;\n }): Promise<IdfaDeclaration> {\n const response = await this.http.post<JsonApiResponse<IdfaDeclaration>>(\n \"/v1/idfaDeclarations\",\n {\n data: {\n type: \"idfaDeclarations\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<IdfaDeclarationAttributes>\n ): Promise<IdfaDeclaration> {\n const response = await this.http.patch<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`,\n { data: { type: \"idfaDeclarations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/idfaDeclarations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface PreReleaseVersionAttributes {\n version?: string | null;\n platform?: string | null;\n}\n\nexport type PreReleaseVersion = JsonApiResource<\n \"preReleaseVersions\",\n PreReleaseVersionAttributes\n>;\n\nexport class PreReleaseVersionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n platform?: string;\n \"builds.expired\"?: string;\n \"builds.processingState\"?: string;\n \"builds.version\"?: string;\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<PreReleaseVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<PreReleaseVersion>(\n \"/v1/preReleaseVersions\",\n listParams\n );\n }\n\n async get(\n id: string,\n params?: { include?: string }\n ): Promise<PreReleaseVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/preReleaseVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByVersion(params: {\n appId: string;\n version: string;\n platform?: string;\n }): Promise<PreReleaseVersion | null> {\n const filter: Record<string, string> = {\n app: params.appId,\n version: params.version,\n };\n if (params.platform) filter.platform = params.platform;\n const results = await this.list({ filter, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface ReviewSubmissionItemAttributes {\n state?: string | null;\n removed?: boolean | null;\n ready?: boolean | null;\n}\n\nexport type ReviewSubmissionItem = JsonApiResource<\n \"reviewSubmissionItems\",\n ReviewSubmissionItemAttributes\n>;\n\nexport class ReviewSubmissionItemsResource {\n constructor(private http: RequestClient) {}\n\n async listForSubmission(\n reviewSubmissionId: string,\n params?: { include?: string; limit?: number }\n ): Promise<ReviewSubmissionItem[]> {\n const listParams: ListParams = {\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<ReviewSubmissionItem>(\n `/v1/reviewSubmissions/${reviewSubmissionId}/items`,\n listParams\n );\n }\n\n async get(id: string): Promise<ReviewSubmissionItem> {\n const response = await this.http.get<JsonApiResponse<ReviewSubmissionItem>>(\n `/v1/reviewSubmissionItems/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n reviewSubmissionId: string;\n appStoreVersionId?: string;\n appCustomProductPageVersionId?: string;\n appStoreVersionExperimentId?: string;\n }): Promise<ReviewSubmissionItem> {\n const relationships: Record<string, { data: { type: string; id: string } }> = {\n reviewSubmission: {\n data: { type: \"reviewSubmissions\", id: params.reviewSubmissionId },\n },\n };\n if (params.appStoreVersionId) {\n relationships.appStoreVersion = {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n };\n }\n if (params.appCustomProductPageVersionId) {\n relationships.appCustomProductPageVersion = {\n data: {\n type: \"appCustomProductPageVersions\",\n id: params.appCustomProductPageVersionId,\n },\n };\n }\n if (params.appStoreVersionExperimentId) {\n relationships.appStoreVersionExperiment = {\n data: {\n type: \"appStoreVersionExperiments\",\n id: params.appStoreVersionExperimentId,\n },\n };\n }\n const response = await this.http.post<JsonApiResponse<ReviewSubmissionItem>>(\n \"/v1/reviewSubmissionItems\",\n {\n data: {\n type: \"reviewSubmissionItems\",\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { removed?: boolean }\n ): Promise<ReviewSubmissionItem> {\n const response = await this.http.patch<JsonApiResponse<ReviewSubmissionItem>>(\n `/v1/reviewSubmissionItems/${id}`,\n { data: { type: \"reviewSubmissionItems\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/reviewSubmissionItems/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserAttributes {\n username?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n roles?: string[] | null;\n allAppsVisible?: boolean | null;\n provisioningAllowed?: boolean | null;\n}\n\nexport type User = JsonApiResource<\"users\", UserAttributes>;\n\nexport class UsersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { username?: string; roles?: string | string[] };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<User[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<User>(\"/v1/users\", listParams);\n }\n\n async get(id: string): Promise<User> {\n const response = await this.http.get<JsonApiResponse<User>>(`/v1/users/${id}`);\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<UserAttributes>,\n visibleAppIds?: string[]\n ): Promise<User> {\n const relationships = visibleAppIds\n ? {\n visibleApps: {\n data: visibleAppIds.map((id) => ({ type: \"apps\", id })),\n },\n }\n : undefined;\n const response = await this.http.patch<JsonApiResponse<User>>(\n `/v1/users/${id}`,\n {\n data: {\n type: \"users\",\n id,\n attributes,\n ...(relationships ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/users/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserInvitationAttributes {\n email: string;\n firstName?: string | null;\n lastName?: string | null;\n expirationDate?: string | null;\n roles?: string[] | null;\n allAppsVisible?: boolean | null;\n provisioningAllowed?: boolean | null;\n}\n\nexport type UserInvitation = JsonApiResource<\n \"userInvitations\",\n UserInvitationAttributes\n>;\n\nexport class UserInvitationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { email?: string; roles?: string | string[] };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<UserInvitation[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<UserInvitation>(\"/v1/userInvitations\", listParams);\n }\n\n async get(id: string): Promise<UserInvitation> {\n const response = await this.http.get<JsonApiResponse<UserInvitation>>(\n `/v1/userInvitations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n attributes: UserInvitationAttributes;\n visibleAppIds?: string[];\n }): Promise<UserInvitation> {\n const relationships = params.visibleAppIds\n ? {\n visibleApps: {\n data: params.visibleAppIds.map((id) => ({ type: \"apps\", id })),\n },\n }\n : undefined;\n const response = await this.http.post<JsonApiResponse<UserInvitation>>(\n \"/v1/userInvitations\",\n {\n data: {\n type: \"userInvitations\",\n attributes: params.attributes,\n ...(relationships ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/userInvitations/${id}`);\n }\n\n async findByEmail(email: string): Promise<UserInvitation | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface InAppPurchaseAttributes {\n name?: string | null;\n productId?: string | null;\n inAppPurchaseType?: string | null;\n state?: string | null;\n reviewNote?: string | null;\n familySharable?: boolean | null;\n}\n\nexport type InAppPurchase = JsonApiResource<\n \"inAppPurchases\" | \"inAppPurchasesV2\",\n InAppPurchaseAttributes\n>;\n\nexport class InAppPurchasesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n filter?: { state?: string; inAppPurchaseType?: string };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<InAppPurchase[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<InAppPurchase>(\n `/v2/apps/${appId}/inAppPurchasesV2`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<InAppPurchase> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<InAppPurchase>>(\n `/v2/inAppPurchases/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface GameCenterDetailAttributes {\n arcadeEnabled?: boolean | null;\n challengeEnabled?: boolean | null;\n}\n\nexport type GameCenterDetail = JsonApiResource<\n \"gameCenterDetails\",\n GameCenterDetailAttributes\n>;\n\nexport class GameCenterDetailResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<GameCenterDetail> {\n const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n `/v1/apps/${appId}/gameCenterDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<GameCenterDetail> {\n const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n `/v1/gameCenterDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<GameCenterDetailAttributes>\n ): Promise<GameCenterDetail> {\n const response = await this.http.patch<JsonApiResponse<GameCenterDetail>>(\n `/v1/gameCenterDetails/${id}`,\n { data: { type: \"gameCenterDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\n/**\n * TestFlight / Xcode build metrics. Exposes perf & crash stats per build.\n * Wraps `/v1/builds/{id}/perfPowerMetrics` and\n * `/v1/builds/{id}/diagnosticSignatures`.\n */\nexport interface PerfPowerMetricAttributes {\n metricCategory?: string | null;\n platform?: string | null;\n datasets?: unknown[] | null;\n}\n\nexport type PerfPowerMetric = JsonApiResource<\n \"perfPowerMetrics\",\n PerfPowerMetricAttributes\n>;\n\nexport interface DiagnosticSignatureAttributes {\n signature?: string | null;\n weight?: number | null;\n diagnosticType?: string | null;\n}\n\nexport type DiagnosticSignature = JsonApiResource<\n \"diagnosticSignatures\",\n DiagnosticSignatureAttributes\n>;\n\nexport class XcodeMetricsResource {\n constructor(private http: RequestClient) {}\n\n async getPerfPowerMetrics(buildId: string): Promise<PerfPowerMetric[]> {\n const response = await this.http.get<{ data: PerfPowerMetric[] }>(\n `/v1/builds/${buildId}/perfPowerMetrics`\n );\n return response.data;\n }\n\n async getDiagnosticSignatures(buildId: string): Promise<DiagnosticSignature[]> {\n const response = await this.http.get<{ data: DiagnosticSignature[] }>(\n `/v1/builds/${buildId}/diagnosticSignatures`\n );\n return response.data;\n }\n\n async getPerfPowerMetric(id: string): Promise<PerfPowerMetric> {\n const response = await this.http.get<JsonApiResponse<PerfPowerMetric>>(\n `/v1/perfPowerMetrics/${id}`\n );\n return response.data;\n }\n\n async getDiagnosticSignature(id: string): Promise<DiagnosticSignature> {\n const response = await this.http.get<JsonApiResponse<DiagnosticSignature>>(\n `/v1/diagnosticSignatures/${id}`\n );\n return response.data;\n }\n}\n","/**\n * Apple Developer Portal Client\n * 1:1 port of Fastlane Spaceship PortalClient\n *\n * Uses session cookies (from loginWithAppleId) to talk to\n * developer.apple.com/services-account/QH65B2/\n *\n * This is the web portal API — separate from the ASC REST API (JWT).\n * Fastlane uses this for: certs, profiles, devices, bundle IDs, app groups, etc.\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\nimport { checkPortalResponse } from \"./apple-session.js\";\n\nconst PORTAL_BASE = \"https://developer.apple.com/services-account/QH65B2\";\n\nexport class PortalClient {\n private session: AppleSession;\n private teamId: string;\n private csrf = \"\";\n private csrfTs = \"\";\n private cookieStr: string;\n\n constructor(session: AppleSession, teamId: string) {\n this.session = session;\n this.teamId = teamId;\n this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n }\n\n /** Initialize CSRF tokens — must be called before mutations */\n async init(): Promise<void> {\n await this.post(\"account/listTeams.action\", {});\n }\n\n /**\n * JSON POST — different content type than the standard form-encoded\n * `post()`. Used by the App Store Connect API key endpoints\n * (`account/auth/key/v2/create`), which Spaceship discovered take a\n * JSON body even though every other portal mutation is form-encoded.\n *\n * Like the form-encoded `post()`, this also runs the response through\n * `checkPortalResponse` — Apple returns HTTP 200 even for errors and\n * encodes the error in `resultCode`/`userString` fields, so a raw\n * status check would silently miss real failures.\n */\n private async postJson(path: string, body: unknown): Promise<{ status: number; body: any; rawText: string }> {\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n console.log(`[portal] POST(json) ${path}`);\n const res = await fetch(`${PORTAL_BASE}/${path}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n\n if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n\n const text = await res.text();\n let data: any = null;\n try { data = text ? JSON.parse(text) : null; } catch {}\n console.log(`[portal] POST(json) ${path} → ${res.status} ${text.slice(0, 400)}`);\n // Apple's portal returns HTTP 200 with resultCode != 0 for failures;\n // checkPortalResponse throws on those.\n checkPortalResponse(data, this.session);\n return { status: res.status, body: data, rawText: text };\n }\n\n /**\n * GET helper for the portal endpoints that take query parameters\n * (currently just `account/auth/key/download`). Returns the raw text\n * since download endpoints can return PEMs or JSON depending on Apple's\n * mood — caller decides how to parse.\n */\n private async getRaw(path: string, params: Record<string, string> = {}): Promise<{ status: number; rawText: string; contentType: string }> {\n const url = new URL(`${PORTAL_BASE}/${path}`);\n for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n Accept: \"application/json, text/plain, application/x-pem-file, */*\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n console.log(`[portal] GET ${url.pathname}${url.search}`);\n const res = await fetch(url.toString(), { headers });\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n const text = await res.text();\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n console.log(`[portal] GET ${url.pathname} → ${res.status} ${contentType} ${text.length}b`);\n return { status: res.status, rawText: text, contentType };\n }\n\n // ── App Store Connect API Keys (.p8) ────────────────────────────────────\n\n /**\n * Create an App Store Connect API key via the developer portal's\n * `account/auth/key/v2/create` endpoint. Reverse-engineered from the\n * _current_ @expo/apple-utils npm package (v2.1.21), which is what\n * EAS CLI uses to manage Apple credentials in production.\n *\n * This differs from older published reverse-engineering guides:\n * • URL uses the `/v2/create` suffix (Apple kept it)\n * • Field is `serviceConfigurations`, shape is an object keyed by\n * service id (NOT `serviceConfigurationsRequests: [...]` array)\n * • Body REQUIRES `scope: \"team\"`\n * • Needs a scope-specific CSRF warmup via the `keys` endpoint\n * before the create call (EAS's `ensureCSRFAsync(\"keys\", …)`)\n *\n * For an App Store Connect API key (PUBLIC_API, used by altool for\n * TestFlight uploads), `serviceConfigurations` is an empty object `{}`.\n * For an APNs auth key, it's `{ \"U27F4V844T\": [] }`. For MusicKit:\n * `{ \"6A7HVUVQ3M\": [musicId] }`, etc.\n *\n * Apple's name validator rejects parentheses, brackets, and most\n * punctuation — sanitize to alphanumeric + space + dash + underscore\n * + period and collapse whitespace.\n */\n async createApiKey(\n rawName: string,\n serviceConfigurations: Record<string, unknown[]> = {}\n ): Promise<{ keyId: string; raw: any }> {\n const name = rawName\n .replace(/[^A-Za-z0-9 _\\-.]/g, \" \") // drop any forbidden char\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 50); // Apple caps key names at 50 chars\n if (!name) throw new Error(\"createApiKey: name is empty after sanitization\");\n\n // EAS-style CSRF warmup: listApiKeys refreshes the portal's scoped\n // CSRF context for the \"keys\" area. Apple's CSRF tokens are\n // per-section; the CSRF from listTeams isn't valid for key endpoints.\n try {\n await this.listApiKeys();\n } catch {\n // Non-fatal — the create call will surface a CSRF error if the\n // warmup mattered and failed.\n }\n\n // EAS's portalRequestAsync auto-injects teamId into every body.\n // Apple rejects the create call without it with resultCode 35.\n const body = {\n teamId: this.teamId,\n name,\n serviceConfigurations,\n scope: \"team\",\n };\n const result = await this.postJson(\"account/auth/key/v2/create\", body);\n // checkPortalResponse inside postJson already throws on resultCode != 0,\n // so any error like \"Invalid Auth Key name\" surfaces as an exception\n // before reaching this point.\n const created = result.body?.keys?.[0] ?? result.body?.key ?? result.body?.data ?? result.body;\n const keyId =\n created?.keyId ??\n created?.id ??\n created?.kid ??\n created?.attributes?.kid;\n if (!keyId) {\n throw new Error(`createApiKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n }\n return { keyId, raw: created };\n }\n\n /**\n * Fetch a single API key by id via `account/auth/key/get`. Reverse-\n * engineered from Spaceship's `get_key`. Returns the raw key record so\n * the caller can extract whatever fields it needs (e.g. issuerId).\n *\n * Form-encoded POST — same shape as every other PortalClient mutation\n * except the JSON `create` endpoint.\n */\n async getApiKey(keyId: string): Promise<any> {\n const data = await this.post(\"account/auth/key/get\", {\n teamId: this.teamId,\n keyId,\n });\n return data?.keys?.[0] ?? data?.key ?? data?.data ?? data;\n }\n\n /**\n * Revoke an existing key. Form-encoded POST per Spaceship's\n * `revoke_key!`. Used for cleaning up orphan keys created during\n * failed wizard runs.\n */\n async revokeApiKey(keyId: string): Promise<void> {\n await this.post(\"account/auth/key/revoke\", {\n teamId: this.teamId,\n keyId,\n });\n }\n\n // ── APNs Authentication Keys (.p8) ──────────────────────────────────────\n\n /** Apple's hardcoded service id for APNs auth keys (from Spaceship). */\n static readonly APNS_SERVICE_ID = \"U27F4V844T\";\n\n /**\n * Create an APNs Authentication Key (.p8) via the developer portal.\n *\n * Apple requires BOTH `serviceConfigurations` (the map) AND\n * `serviceConfigurationsRequests` (the array of full config objects)\n * in the v2/create body. Just sending the map alone results in\n * \"No value was provided for the parameter 'serviceConfigurations'\".\n *\n * The exact body comes from @expo/apple-utils v2.1.21 — both fields\n * are produced by separate functions (`d` for the map, `h` for the\n * array) and merged into the create payload.\n */\n async createApnsAuthKey(rawName: string): Promise<{ keyId: string; pem: string; raw: any }> {\n const name = rawName\n .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 50);\n if (!name) throw new Error(\"createApnsAuthKey: name is empty after sanitization\");\n\n // EAS-style scoped CSRF warmup\n try { await this.listApiKeys(); } catch { /* ignore */ }\n\n const body = {\n teamId: this.teamId,\n name,\n serviceConfigurations: {\n [PortalClient.APNS_SERVICE_ID]: [],\n },\n serviceConfigurationsRequests: [\n {\n isNew: true,\n serviceId: PortalClient.APNS_SERVICE_ID,\n identifiers: {},\n environment: \"all\",\n scope: \"team\",\n },\n ],\n scope: \"team\",\n };\n const result = await this.postJson(\"account/auth/key/v2/create\", body);\n const created = result.body?.keys?.[0];\n if (!created?.keyId) {\n throw new Error(`createApnsAuthKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n }\n // Download the .p8 — Apple only allows this once\n const pem = await this.downloadApiKey(created.keyId);\n return { keyId: created.keyId, pem, raw: created };\n }\n\n /**\n * Find existing APNs auth keys in the team. Used by the wizard to\n * detect \"you already have one\" cases and offer to reuse rather than\n * proliferate keys.\n */\n async listApnsAuthKeys(): Promise<{ keyId: string; keyName: string; canDownload: boolean }[]> {\n const list = await this.listApiKeys();\n return (list.keys ?? [])\n .filter((k: any) =>\n (k.services ?? []).some((s: any) => s.id === PortalClient.APNS_SERVICE_ID || /apns/i.test(s.name ?? \"\"))\n )\n .map((k: any) => ({\n keyId: k.keyId,\n keyName: k.keyName,\n canDownload: Boolean(k.canDownload),\n }));\n }\n\n /**\n * Download an existing App Store Connect API key as PEM. Spaceship's\n * `download_key` endpoint — GET with teamId + keyId in query string.\n * Returns the raw .p8 PEM text. Apple shows the .p8 exactly once\n * (after creation), so call this immediately after createApiKey.\n */\n async downloadApiKey(keyId: string): Promise<string> {\n const { status, rawText, contentType } = await this.getRaw(\"account/auth/key/download\", {\n teamId: this.teamId,\n keyId,\n });\n if (status !== 200) {\n throw new Error(`downloadApiKey failed (${status}): ${rawText.slice(0, 200)}`);\n }\n // Plain PEM text response\n if (rawText.includes(\"BEGIN PRIVATE KEY\")) return rawText;\n // JSON wrapper variants\n if (contentType.includes(\"json\")) {\n try {\n const parsed = JSON.parse(rawText);\n const candidates = [\n parsed?.privateKey,\n parsed?.key?.privateKey,\n parsed?.keys?.[0]?.privateKey,\n parsed?.data?.attributes?.privateKey,\n parsed?.value,\n ];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) return c;\n }\n } catch { /* fall through */ }\n }\n throw new Error(`downloadApiKey returned no PEM. Content-Type=${contentType} body=${rawText.slice(0, 300)}`);\n }\n\n /**\n * List existing API keys via the portal. Used to discover the team's\n * issuer id — every key in the team shares the same issuer id, and\n * altool needs it alongside the key id and .p8 file.\n *\n * Form-encoded POST (NOT JSON), with pagination params, per Spaceship's\n * `list_keys` method. JSON returned 415 from this endpoint.\n */\n async listApiKeys(): Promise<{ keys: any[]; issuerId?: string }> {\n const data = await this.post(\"account/auth/key/list\", {\n teamId: this.teamId,\n pageNumber: \"1\",\n pageSize: \"500\",\n sort: \"name=asc\",\n });\n const keys = data?.keys ?? [];\n // Issuer id may live on the response root, in a metadata bag, or on\n // each key — try all known paths.\n const issuerId =\n data?.issuerId ??\n data?.issuer ??\n data?.team?.issuerId ??\n keys[0]?.issuerId ??\n keys[0]?.issuer;\n return { keys, issuerId };\n }\n\n private async post(path: string, params: Record<string, string | string[]>): Promise<any> {\n // Build form body using URLSearchParams (proper encoding)\n const body = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (Array.isArray(v)) { for (const item of v) body.append(k, item); }\n else body.set(k, v);\n }\n const bodyStr = body.toString();\n\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n if (process.env.FASTNODE_DEBUG) console.log(`[portal] POST ${path} body=${bodyStr.slice(0, 200)}`);\n const res = await fetch(`${PORTAL_BASE}/${path}`, { method: \"POST\", headers, body: bodyStr });\n\n // Update CSRF\n if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n\n const text = await res.text();\n let data: any;\n try { data = JSON.parse(text); } catch { throw new Error(`Portal returned non-JSON: ${text.slice(0, 200)}`); }\n checkPortalResponse(data, this.session);\n return data;\n }\n\n // ── Teams ──────────────────────────────────────────────────────────────\n\n async listTeams(): Promise<any[]> {\n const data = await this.post(\"account/listTeams.action\", {});\n return data.teams ?? [];\n }\n\n // ── App IDs / Bundle IDs ───────────────────────────────────────────────\n\n async listAppIds(): Promise<any[]> {\n const data = await this.post(\"account/ios/identifiers/listAppIds.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n });\n return data.appIds ?? [];\n }\n\n async createAppId(params: { identifier: string; name: string; enablePush?: boolean; enableIAP?: boolean }): Promise<any> {\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: \"explicit\", identifier: params.identifier, name: params.name,\n };\n if (params.enablePush) reqParams.push = \"on\";\n if (params.enableIAP !== false) reqParams.inAppPurchase = \"on\";\n const data = await this.post(\"account/ios/identifiers/addAppId.action\", reqParams);\n return data.appId;\n }\n\n async deleteAppId(appIdId: string): Promise<void> {\n await this.post(\"account/ios/identifiers/deleteAppId.action\", { teamId: this.teamId, appIdId });\n }\n\n /**\n * Toggle a capability (a.k.a. \"service\") on a bundle ID. Mirrors\n * Spaceship::Portal's `update_service` — the legacy portal endpoint\n * still works and is the only session-cookie-authenticated way to flip\n * capabilities like Push Notifications and Sign in with Apple from\n * outside the Apple Developer web UI.\n *\n * Common service codes (from Spaceship portal/portal_client.rb):\n * push → push notifications\n * APG3427HIY → Sign in with Apple\n * IAD53UNK2F → in-app purchase\n * homeKit → HomeKit\n * healthKit → HealthKit\n *\n * @param featureType Apple's internal capability key (string code or short name)\n * @param enabled true → turn on, false → turn off\n */\n async setBundleCapability(params: {\n appIdId: string;\n featureType: string;\n enabled: boolean;\n }): Promise<void> {\n await this.post(\"account/ios/identifiers/updateAppService.action\", {\n teamId: this.teamId,\n displayId: params.appIdId,\n featureType: params.featureType,\n featureValue: params.enabled ? \"on\" : \"off\",\n });\n }\n\n // ── Certificates ───────────────────────────────────────────────────────\n\n async listCertificates(types?: string[]): Promise<any[]> {\n // Default to all known iOS cert type codes plus Fastlane's list of\n // legacy type codes (OLDER_IOS_CERTIFICATE_TYPES). The portal may still\n // return these older codes for pre-existing certs and Fastlane's\n // `Certificate.all` includes them — see certificate.rb line 278.\n const iosTypes = types ?? [\n PortalClient.CERT_TYPES.IOS_DEVELOPMENT,\n PortalClient.CERT_TYPES.IOS_DISTRIBUTION,\n ...PortalClient.OLDER_IOS_CERTIFICATE_TYPES,\n ];\n const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n sort: \"certRequestStatusCode=asc\", types: iosTypes.join(\",\"),\n });\n return data.certRequests ?? [];\n }\n\n async listPushCertificates(): Promise<any[]> {\n // iOS-only push cert type codes, deduplicated. The endpoint\n // `account/ios/certificate/listCertRequests.action` rejects any code\n // that isn't an iOS code (so Mac push types, even if listed in\n // CERT_TYPES, must be excluded) and rejects duplicates in the comma\n // list. We also include the legacy push cert codes from before\n // Apple's 2017 cert restructuring — they still occasionally appear\n // for older bundles.\n //\n // The modern unified \"Apple Push Services\" cert (one cert for both\n // prod + sandbox) reuses IOS_PRODUCTION_PUSH (UPV3DW712I), so the\n // first two codes catch every modern case.\n const types = Array.from(\n new Set([\n PortalClient.CERT_TYPES.IOS_PRODUCTION_PUSH,\n PortalClient.CERT_TYPES.IOS_DEVELOPMENT_PUSH,\n // Legacy push codes from OLDER_IOS_CERTIFICATE_TYPES\n \"3BQKVH9I2X\",\n \"BKLRAVXMGM\",\n ])\n );\n const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n sort: \"certRequestStatusCode=asc\",\n types: types.join(\",\"),\n });\n return data.certRequests ?? [];\n }\n\n async createCertificate(params: { type: string; csrContent: string; appIdId?: string }): Promise<any> {\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: params.type, csrContent: params.csrContent,\n };\n if (params.appIdId) reqParams.appIdId = params.appIdId;\n const data = await this.post(\"account/ios/certificate/submitCertificateRequest.action\", reqParams);\n return data.certRequest;\n }\n\n async downloadCertificate(certId: string, type: string): Promise<Buffer> {\n const headers: Record<string, string> = { Cookie: this.cookieStr, Accept: \"application/json\" };\n const res = await fetch(\n `${PORTAL_BASE}/account/ios/certificate/downloadCertificateContent.action?teamId=${this.teamId}&certificateId=${certId}&type=${type}`,\n { headers }\n );\n return Buffer.from(await res.arrayBuffer());\n }\n\n async revokeCertificate(certId: string, type: string): Promise<void> {\n await this.post(\"account/ios/certificate/revokeCertificate.action\", {\n teamId: this.teamId, certificateId: certId, type,\n });\n }\n\n // ── Devices ────────────────────────────────────────────────────────────\n\n async listDevices(): Promise<any[]> {\n const data = await this.post(\"account/ios/device/listDevices.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\", includeRemovedDevices: \"false\",\n });\n return data.devices ?? [];\n }\n\n async registerDevice(params: { name: string; udid: string; deviceClass?: string }): Promise<any> {\n const data = await this.post(\"account/ios/device/addDevices.action\", {\n teamId: this.teamId, deviceNames: params.name, deviceNumbers: params.udid,\n register: \"single\", deviceClasses: params.deviceClass ?? \"iphone\",\n });\n return (data.devices ?? [])[0];\n }\n\n // ── Provisioning Profiles ──────────────────────────────────────────────\n\n async listProfiles(): Promise<any[]> {\n const data = await this.post(\"account/ios/profile/listProvisioningProfiles.action\", {\n teamId: this.teamId, includeInactiveProfiles: \"true\",\n pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n });\n return data.provisioningProfiles ?? [];\n }\n\n async createProfile(params: {\n appIdId: string;\n name: string;\n distributionType: string; // \"limited\" (dev), \"store\" (appstore), \"adhoc\"\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<any> {\n const reqParams: Record<string, string | string[]> = {\n teamId: this.teamId,\n appIdId: params.appIdId,\n distributionType: params.distributionType,\n provisioningProfileName: params.name,\n certificateIds: params.certificateIds,\n };\n if (params.deviceIds?.length) reqParams.deviceIds = params.deviceIds;\n const data = await this.post(\"account/ios/profile/createProvisioningProfile.action\", reqParams);\n return data.provisioningProfile;\n }\n\n async deleteProfile(profileId: string): Promise<void> {\n await this.post(\"account/ios/profile/deleteProvisioningProfile.action\", {\n teamId: this.teamId, provisioningProfileId: profileId,\n });\n }\n\n async downloadProfile(profileId: string): Promise<Buffer> {\n const headers: Record<string, string> = { Cookie: this.cookieStr };\n const res = await fetch(\n `${PORTAL_BASE}/account/ios/profile/downloadProfileContent?teamId=${this.teamId}&provisioningProfileId=${profileId}`,\n { headers }\n );\n return Buffer.from(await res.arrayBuffer());\n }\n\n // ── Certificate Type Constants (matching Fastlane) ─────────────────────\n\n /**\n * Apple certificate type codes — copied 1:1 from Fastlane's\n * spaceship/portal/certificate.rb IOS_CERTIFICATE_TYPE_IDS / MAC_CERTIFICATE_TYPE_IDS\n */\n static CERT_TYPES = {\n // iOS\n IOS_DEVELOPMENT: \"5QPB9NHCEI\",\n IOS_DISTRIBUTION: \"R58UK2EWSO\", // App Store Production\n IOS_IN_HOUSE: \"9RQEK7MSXA\",\n IOS_DEVELOPMENT_PUSH: \"JKG5JZ54H7\",\n IOS_PRODUCTION_PUSH: \"UPV3DW712I\",\n APPLE_PUSH_PRODUCTION: \"UPV3DW712I\", // alias\n APPLE_PUSH_SANDBOX: \"JKG5JZ54H7\", // alias\n PASSBOOK: \"Y3B2F3TYSI\",\n WEBSITE_PUSH: \"3T2ZP62QW8\",\n VOIP_PUSH: \"E5D663CMZW\",\n APPLE_PAY: \"4APLUP237T\",\n APPLE_PAY_MERCHANT_IDENTITY: \"MD8Q2VRT6A\",\n // Universal (Apple Development/Distribution)\n APPLE_DEVELOPMENT: \"83Q87W3TGH\",\n APPLE_DISTRIBUTION: \"WXV89964HE\",\n // Mac\n MAC_DEVELOPMENT: \"749Y1QAGU7\",\n MAC_APP_DISTRIBUTION: \"HXZEUKP0FP\",\n MAC_INSTALLER_DISTRIBUTION: \"2PQI8IDXNH\",\n MAC_PRODUCTION_PUSH: \"CDZ7EMXIZ1\",\n MAC_DEVELOPMENT_PUSH: \"HQ4KP3I34R\",\n DEVELOPER_ID_APPLICATION: \"DIVN2GW3XT\",\n DEVELOPER_ID_INSTALLER: \"OYVN2GW35E\",\n } as const;\n\n /**\n * Legacy iOS certificate type codes that can still appear in the portal\n * responses. Port of Fastlane's Spaceship::Portal::Certificate\n * OLDER_IOS_CERTIFICATE_TYPES list (certificate.rb lines 180-189).\n */\n static OLDER_IOS_CERTIFICATE_TYPES: readonly string[] = [\n \"3BQKVH9I2X\", // old ProductionPush\n \"BKLRAVXMGM\", // old DevelopmentPush\n // Also sent by the browser, but not sure what they represent:\n \"T44PTHVNID\",\n \"DZQUP8189Y\",\n \"FGQUP4785Z\",\n \"S5WE21TULA\",\n \"FUOY7LWJET\",\n ] as const;\n}\n","/**\n * App Store Connect \"iris\" admin API client.\n *\n * The iris API lives at `https://appstoreconnect.apple.com/iris/v1/*` and\n * is what App Store Connect's own web UI uses for everything that doesn't\n * fit the public REST API (which requires JWT). Authentication is via the\n * Olympus session cookies we already obtain after SIRP + 2FA login.\n *\n * Notable iris endpoints (reverse-engineered from the App Store Connect\n * web app — Apple does not publish this API, so the shapes below are best\n * effort and may need iteration):\n *\n * POST /iris/v1/apiKeys\n * Body: { data: { type: \"apiKeys\", attributes: {\n * nickname, allAppsVisible, roles: [\"DEVELOPER\" | \"APP_MANAGER\" | ...]\n * }}}\n * Response: { data: { id, attributes: { nickname, kid, privateKey?, ... }}}\n *\n * `kid` is the key ID used in JWT auth (e.g. \"2X9R4HXF34\"). The\n * `privateKey` field, when present, contains the PEM-encoded .p8\n * content. Apple shows this exactly ONCE at creation time — if we\n * don't capture it, the key is bricked and must be revoked.\n *\n * GET /iris/v1/apiKeys\n * List existing keys. Used to find the issuer id.\n *\n * Roles the wizard uses: \"APP_MANAGER\" is the minimum needed for\n * TestFlight uploads via altool. Higher roles work too.\n *\n * Failure modes:\n * • 403 → user lacks Account Holder / Admin role → fall back to manual\n * • 4xx with `error.detail` → surface the message to the user\n * • 200 but no `privateKey` in response → endpoint shape changed,\n * surface so we can iterate\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\n\nconst IRIS_BASE = \"https://appstoreconnect.apple.com/iris/v1\";\n\nexport type ApiKeyRole =\n | \"ADMIN\"\n | \"FINANCE\"\n | \"ACCESS_TO_REPORTS\"\n | \"APP_MANAGER\"\n | \"DEVELOPER\"\n | \"MARKETING\"\n | \"SALES\"\n | \"CUSTOMER_SUPPORT\";\n\nexport interface IrisApiKey {\n id: string;\n /** Key ID used for JWT auth (the short alphanumeric string) */\n kid: string;\n nickname: string;\n /** PEM-encoded .p8 private key — only present in create response, ONCE */\n privateKey?: string;\n /** Issuer id (UUID) — needed by altool/iTMSTransporter alongside the key id */\n issuerId?: string;\n roles: ApiKeyRole[];\n allAppsVisible: boolean;\n}\n\nexport class IrisClient {\n private cookieStr: string;\n\n constructor(private session: AppleSession) {\n this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n }\n\n private buildHeaders(): Record<string, string> {\n return {\n Cookie: this.cookieStr,\n Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n \"Content-Type\": \"application/vnd.api+json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Mimic the App Store Connect web UI's user agent\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15\",\n };\n }\n\n /**\n * Issue a request and absorb any new cookies (Apple rotates session\n * cookies on a lot of iris calls).\n */\n private async request(\n method: \"GET\" | \"POST\" | \"DELETE\",\n path: string,\n body?: unknown\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = this.buildHeaders();\n if (process.env.FASTNODE_DEBUG) {\n console.log(`[iris] ${method} ${path}${body ? ` body=${JSON.stringify(body).slice(0, 200)}` : \"\"}`);\n }\n const res = await fetch(`${IRIS_BASE}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n // Absorb new cookies\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) {\n this.session.cookies[m[1]] = m[2];\n }\n }\n this.cookieStr = Object.entries(this.session.cookies)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"; \");\n\n const text = await res.text();\n let parsed: any = null;\n try {\n parsed = text ? JSON.parse(text) : null;\n } catch {\n // not JSON\n }\n if (process.env.FASTNODE_DEBUG) {\n console.log(`[iris] → ${res.status} ${text.slice(0, 300)}`);\n }\n return { status: res.status, body: parsed, rawText: text };\n }\n\n /**\n * List existing API keys. Used both as a sanity check (the user has\n * permission) and to discover the team's issuer id (which is the same\n * for every key in the team and is needed by altool).\n *\n * Important: Apple's iris endpoint rejects most query parameters with\n * `PARAMETER_ERROR.INVALID`. Call with no params and let the API return\n * its default page.\n */\n async listApiKeys(): Promise<{ keys: IrisApiKey[]; issuerId?: string }> {\n const { status, body, rawText } = await this.request(\"GET\", \"/apiKeys\");\n if (status === 403) {\n throw new IrisAuthError(\n \"You don't have permission to manage App Store Connect API keys (this requires the Account Holder or Admin role).\"\n );\n }\n if (status >= 400 || !body) {\n throw new Error(`iris listApiKeys failed (${status}): ${rawText.slice(0, 200)}`);\n }\n\n const issuerId = body?.meta?.issuerId ?? body?.data?.[0]?.attributes?.issuerId;\n const keys: IrisApiKey[] = (body.data ?? []).map((d: any) => ({\n id: d.id,\n kid: d.attributes?.kid ?? d.id,\n nickname: d.attributes?.nickname ?? \"\",\n issuerId: d.attributes?.issuerId ?? issuerId,\n roles: d.attributes?.roles ?? [],\n allAppsVisible: d.attributes?.allAppsVisible ?? true,\n }));\n return { keys, issuerId };\n }\n\n /**\n * Create a new API key. Apple returns the .p8 PEM exactly once in the\n * create response — capture it immediately or the key is dead weight.\n *\n * `keyType` is required by Apple's iris API:\n * • PUBLIC_API — the standard team-wide API key (what TestFlight uploads need)\n * • MARKETING_API — for App Analytics access only\n */\n async createApiKey(input: {\n nickname: string;\n roles?: ApiKeyRole[];\n allAppsVisible?: boolean;\n keyType?: \"PUBLIC_API\" | \"MARKETING_API\";\n }): Promise<IrisApiKey> {\n const requestBody = {\n data: {\n type: \"apiKeys\",\n attributes: {\n nickname: input.nickname,\n roles: input.roles ?? [\"APP_MANAGER\"],\n allAppsVisible: input.allAppsVisible ?? true,\n keyType: input.keyType ?? \"PUBLIC_API\",\n },\n },\n };\n\n // Always log this — it's the trickiest call in the whole orchestrator\n // and we need full visibility while the iris API is being shaken out.\n console.log(\"[iris] createApiKey request:\", JSON.stringify(requestBody));\n const { status, body, rawText } = await this.request(\"POST\", \"/apiKeys\", requestBody);\n console.log(`[iris] createApiKey response: ${status} ${rawText.slice(0, 800)}`);\n\n if (status === 403) {\n throw new IrisAuthError(\n \"You don't have permission to create App Store Connect API keys (this requires the Account Holder or Admin role).\"\n );\n }\n if (status >= 400 || !body) {\n const msg =\n body?.errors?.[0]?.detail ??\n body?.errors?.[0]?.title ??\n rawText.slice(0, 300) ??\n `iris createApiKey failed (${status})`;\n throw new Error(msg);\n }\n\n const data = body.data ?? body;\n if (!data?.id) {\n throw new Error(`iris createApiKey returned no key id. Raw response: ${rawText.slice(0, 400)}`);\n }\n\n const key: IrisApiKey = {\n id: data.id,\n kid: data.attributes?.kid ?? data.id,\n nickname: data.attributes?.nickname ?? input.nickname,\n privateKey: data.attributes?.privateKey,\n issuerId: data.attributes?.issuerId,\n roles: data.attributes?.roles ?? input.roles ?? [\"APP_MANAGER\"],\n allAppsVisible: data.attributes?.allAppsVisible ?? true,\n };\n return key;\n }\n\n /**\n * Fetch the .p8 PEM AND the team's issuer id for a previously-created\n * ASC API key. Both come back in a single request via:\n *\n * GET /iris/v1/apiKeys/{id}?fields[apiKeys]=privateKey&include=provider\n *\n * Sparse fieldset requesting ONLY `privateKey` is the magic that makes\n * Apple actually include the (base64-encoded) PEM in the response —\n * the default view returns `privateKey: null`. The `include=provider`\n * pulls the team's contentProvider record into `included[]`, and its\n * `id` field IS the issuer id altool needs (a UUID like\n * `cfadaf94-44ca-4c2c-8fa6-ecc28d3c7d0d`).\n *\n * Reverse-engineered from @expo/apple-utils v2.1.21 (the package that\n * powers EAS CLI), specifically the `ApiKey.downloadAsync` method\n * combined with `ApiKey.infoAsync` reading `provider?.id`.\n *\n * Returns `{ pem, issuerId }`, or `null` if Apple won't return the\n * private key (typically because the key was already downloaded once).\n */\n async fetchApiKeyPrivateKey(keyId: string): Promise<{ pem: string; issuerId?: string } | null> {\n try {\n const url = `${IRIS_BASE}/apiKeys/${keyId}?fields%5BapiKeys%5D=privateKey&include=provider`;\n const res = await fetch(url, {\n headers: {\n ...this.buildHeaders(),\n Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n },\n });\n const text = await res.text();\n console.log(`[iris] fetchApiKeyPrivateKey → ${res.status} (${text.length} bytes)`);\n if (res.status !== 200) {\n console.log(`[iris] err: ${text.slice(0, 300)}`);\n return null;\n }\n const body = JSON.parse(text);\n const encoded = body?.data?.attributes?.privateKey;\n if (typeof encoded !== \"string\" || encoded.length === 0) {\n console.log(`[iris] no privateKey in response`);\n return null;\n }\n const pem = Buffer.from(encoded, \"base64\").toString(\"utf-8\");\n if (!pem.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] decoded body didn't contain PEM marker`);\n return null;\n }\n // Issuer id is the contentProvider in the included array\n const provider = (body?.included ?? []).find((i: any) => i.type === \"contentProviders\");\n const issuerId = provider?.id;\n console.log(`[iris] ✓ PEM ${pem.length} bytes, issuerId=${issuerId ?? \"(missing)\"}`);\n return { pem, issuerId };\n } catch (err) {\n console.log(`[iris] fetchApiKeyPrivateKey error: ${(err as Error).message}`);\n return null;\n }\n }\n\n /**\n * @deprecated Kept as a fallback probe for debugging. The real path\n * is the sparse fieldset above — everything in this brute-force list\n * returned 404 during testing. Left here so we can re-verify if Apple\n * changes anything.\n */\n async fetchApiKeyPrivateKeyBruteForce(keyId: string): Promise<string | null> {\n type Attempt =\n | { kind: \"GET\"; path: string; accept?: string }\n | { kind: \"POST\"; path: string; body?: unknown }\n | { kind: \"ABSOLUTE\"; url: string };\n\n const attempts: Attempt[] = [\n // Sparse fieldsets — JSON-API spec lets us request specific attributes.\n // Apple may exclude privateKey by default and return it only when asked.\n { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey,kid,issuerId,nickname,roles` },\n { kind: \"GET\", path: `/apiKeys/${keyId}?include=privateKey` },\n { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey` },\n // Custom Accept headers — maybe Apple negotiates content type\n { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/x-pem-file\" },\n { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/octet-stream\" },\n { kind: \"GET\", path: `/apiKeys/${keyId}/p8`, accept: \"application/x-pem-file\" },\n // POST variants — Apple sometimes uses POST to mint a download token\n { kind: \"POST\", path: `/apiKeys/${keyId}/secrets`, body: {} },\n { kind: \"POST\", path: `/apiKeys/${keyId}/regenerate`, body: {} },\n { kind: \"POST\", path: `/apiKeys/${keyId}/p8`, body: {} },\n // Bare GET (last) — confirms canonical fields, in case my parser missed any\n { kind: \"GET\", path: `/apiKeys/${keyId}` },\n // Different host — the legacy developer.apple.com user-and-access namespace\n { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/api/v1/apiKeys/${keyId}/p8` },\n { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/access/api/keys/${keyId}/download` },\n ];\n\n for (const attempt of attempts) {\n try {\n let result: { status: number; body: any; rawText: string };\n if (attempt.kind === \"GET\") {\n // Custom request that allows overriding Accept header.\n result = await this.requestWithHeaders(\"GET\", attempt.path, undefined, {\n ...(attempt.accept ? { Accept: attempt.accept } : {}),\n });\n console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.path}${attempt.accept ? ` accept=${attempt.accept}` : \"\"} → ${result.status} (${result.rawText.length} bytes)`);\n } else if (attempt.kind === \"POST\") {\n result = await this.request(\"POST\", attempt.path, attempt.body);\n console.log(`[iris] fetchApiKeyPrivateKey POST ${attempt.path} → ${result.status} (${result.rawText.length} bytes)`);\n } else {\n result = await this.requestAbsolute(\"GET\", attempt.url);\n console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.url} → ${result.status} (${result.rawText.length} bytes)`);\n }\n\n // For 200 responses, log the full body so we can see what Apple is returning.\n if (result.status === 200) {\n console.log(`[iris] body: ${result.rawText.slice(0, 1500)}`);\n }\n if (result.status !== 200) continue;\n\n // Plain PEM body\n if (result.rawText && result.rawText.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] ✓ found PEM (plain text response)`);\n return result.rawText;\n }\n // JSON wrapper that might contain the PEM under various attribute names\n if (result.body) {\n const candidates = [\n result.body?.data?.attributes?.privateKey,\n result.body?.data?.attributes?.p8,\n result.body?.data?.attributes?.privateKeyContent,\n result.body?.data?.attributes?.kpem,\n result.body?.data?.attributes?.secret,\n result.body?.data?.attributes?.keyContent,\n result.body?.privateKey,\n result.body?.p8,\n result.body?.value,\n result.body?.secret,\n ];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] ✓ found PEM in JSON response`);\n return c;\n }\n }\n }\n } catch (err) {\n console.log(`[iris] fetchApiKeyPrivateKey attempt failed: ${(err as Error).message}`);\n }\n }\n console.log(`[iris] fetchApiKeyPrivateKey: no working download path for key ${keyId}`);\n return null;\n }\n\n /** Internal: like request() but lets us override headers. */\n private async requestWithHeaders(\n method: \"GET\" | \"POST\" | \"DELETE\",\n path: string,\n body?: unknown,\n extraHeaders: Record<string, string> = {}\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = { ...this.buildHeaders(), ...extraHeaders };\n const res = await fetch(`${IRIS_BASE}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) this.session.cookies[m[1]] = m[2];\n }\n this.cookieStr = Object.entries(this.session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n const text = await res.text();\n let parsed: any = null;\n try { parsed = text ? JSON.parse(text) : null; } catch {}\n return { status: res.status, body: parsed, rawText: text };\n }\n\n /** Internal: fetch an absolute URL with the session cookies. */\n private async requestAbsolute(\n method: \"GET\" | \"POST\" | \"DELETE\",\n url: string\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = this.buildHeaders();\n const res = await fetch(url, { method, headers });\n const text = await res.text();\n let parsed: any = null;\n try { parsed = text ? JSON.parse(text) : null; } catch {}\n return { status: res.status, body: parsed, rawText: text };\n }\n\n async deleteApiKey(keyId: string): Promise<void> {\n await this.request(\"DELETE\", `/apiKeys/${keyId}`);\n }\n}\n\n/** Thrown when the user doesn't have permission to use the iris admin API. */\nexport class IrisAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"IrisAuthError\";\n }\n}\n","import { TokenManager } from \"./auth.js\";\nimport { RequestClient } from \"./request.js\";\nimport type { AppStoreConnectConfig, ListParams, RequestOptions } from \"./types.js\";\nimport { CertificatesResource } from \"../resources/certificates.js\";\nimport { ProfilesResource } from \"../resources/profiles.js\";\nimport { BundleIdsResource } from \"../resources/bundle-ids.js\";\nimport { DevicesResource } from \"../resources/devices.js\";\nimport { AppsResource } from \"../resources/apps.js\";\nimport { BuildsResource } from \"../resources/builds.js\";\nimport { BetaGroupsResource } from \"../resources/beta-groups.js\";\nimport { CapabilitiesResource } from \"../resources/capabilities.js\";\nimport { AppStoreVersionsResource } from \"../resources/app-store-versions.js\";\nimport { AppScreenshotsResource } from \"../resources/app-screenshots.js\";\nimport { ReviewSubmissionsResource } from \"../resources/review-submissions.js\";\nimport { AppInfosResource } from \"../resources/app-info.js\";\nimport { AppInfoLocalizationsResource } from \"../resources/app-info-localizations.js\";\nimport { AppStoreReviewDetailsResource } from \"../resources/app-store-review-details.js\";\nimport { BetaTestersResource } from \"../resources/beta-testers.js\";\nimport { BetaAppReviewSubmissionsResource } from \"../resources/beta-app-review-submissions.js\";\nimport { BetaAppReviewDetailsResource } from \"../resources/beta-app-review-details.js\";\nimport { BetaInvitationsResource } from \"../resources/beta-invitations.js\";\nimport { BetaLicensesResource } from \"../resources/beta-licenses.js\";\nimport { AppPreviewsResource } from \"../resources/app-previews.js\";\nimport { AppPreviewSetsResource } from \"../resources/app-preview-sets.js\";\nimport { AppPricesResource } from \"../resources/app-prices.js\";\nimport { TerritoriesResource } from \"../resources/territories.js\";\nimport { AgeRatingDeclarationsResource } from \"../resources/age-rating-declarations.js\";\nimport { AppCategoriesResource } from \"../resources/app-categories.js\";\nimport { AppEncryptionDeclarationsResource } from \"../resources/app-encryption-declarations.js\";\nimport { IdfaDeclarationsResource } from \"../resources/idfa-declarations.js\";\nimport { PreReleaseVersionsResource } from \"../resources/pre-release-versions.js\";\nimport { ReviewSubmissionItemsResource } from \"../resources/review-submission-items.js\";\nimport { UsersResource } from \"../resources/users.js\";\nimport { UserInvitationsResource } from \"../resources/user-invitations.js\";\nimport { InAppPurchasesResource } from \"../resources/in-app-purchases.js\";\nimport { GameCenterDetailResource } from \"../resources/game-center-detail.js\";\nimport { XcodeMetricsResource } from \"../resources/xcode-metrics.js\";\n\nexport type { AppStoreConnectConfig, ListParams, RequestOptions };\nexport { TokenManager } from \"./auth.js\";\nexport type { TokenConfig } from \"./auth.js\";\nexport { RequestClient, AppStoreConnectError, RateLimitError } from \"./request.js\";\nexport type * from \"./types.js\";\nexport {\n loginWithAppleId,\n beginLogin,\n submitTwoFactorCode,\n requestSmsCode,\n checkPortalResponse,\n ProgramLicenseAgreementError,\n} from \"./apple-session.js\";\nexport type {\n AppleSessionConfig,\n AppleSession,\n ContractMessage,\n PendingLogin,\n TwoFactorChallenge,\n BeginLoginResult,\n} from \"./apple-session.js\";\nexport { PortalClient } from \"./portal.js\";\nexport { IrisClient, IrisAuthError } from \"./iris.js\";\nexport type { IrisApiKey, ApiKeyRole } from \"./iris.js\";\n\nexport class AppStoreConnectClient {\n readonly http: RequestClient;\n\n readonly certificates: CertificatesResource;\n readonly profiles: ProfilesResource;\n readonly bundleIds: BundleIdsResource;\n readonly devices: DevicesResource;\n readonly apps: AppsResource;\n readonly builds: BuildsResource;\n readonly betaGroups: BetaGroupsResource;\n readonly capabilities: CapabilitiesResource;\n readonly appStoreVersions: AppStoreVersionsResource;\n readonly appScreenshots: AppScreenshotsResource;\n readonly reviewSubmissions: ReviewSubmissionsResource;\n readonly appInfos: AppInfosResource;\n readonly appInfoLocalizations: AppInfoLocalizationsResource;\n readonly appStoreReviewDetails: AppStoreReviewDetailsResource;\n readonly betaTesters: BetaTestersResource;\n readonly betaAppReviewSubmissions: BetaAppReviewSubmissionsResource;\n readonly betaAppReviewDetails: BetaAppReviewDetailsResource;\n readonly betaInvitations: BetaInvitationsResource;\n readonly betaLicenses: BetaLicensesResource;\n readonly appPreviews: AppPreviewsResource;\n readonly appPreviewSets: AppPreviewSetsResource;\n readonly appPrices: AppPricesResource;\n readonly territories: TerritoriesResource;\n readonly ageRatingDeclarations: AgeRatingDeclarationsResource;\n readonly appCategories: AppCategoriesResource;\n readonly appEncryptionDeclarations: AppEncryptionDeclarationsResource;\n readonly idfaDeclarations: IdfaDeclarationsResource;\n readonly preReleaseVersions: PreReleaseVersionsResource;\n readonly reviewSubmissionItems: ReviewSubmissionItemsResource;\n readonly users: UsersResource;\n readonly userInvitations: UserInvitationsResource;\n readonly inAppPurchases: InAppPurchasesResource;\n readonly gameCenterDetail: GameCenterDetailResource;\n readonly xcodeMetrics: XcodeMetricsResource;\n\n constructor(config: AppStoreConnectConfig) {\n const tokenManager = new TokenManager({\n keyId: config.keyId,\n issuerId: config.issuerId,\n privateKey: config.privateKey,\n enterprise: config.enterprise,\n duration: config.tokenDuration,\n });\n this.http = new RequestClient(tokenManager, config.enterprise);\n\n this.certificates = new CertificatesResource(this.http);\n this.profiles = new ProfilesResource(this.http);\n this.bundleIds = new BundleIdsResource(this.http);\n this.devices = new DevicesResource(this.http);\n this.apps = new AppsResource(this.http);\n this.builds = new BuildsResource(this.http);\n this.betaGroups = new BetaGroupsResource(this.http);\n this.capabilities = new CapabilitiesResource(this.http);\n this.appStoreVersions = new AppStoreVersionsResource(this.http);\n this.appScreenshots = new AppScreenshotsResource(this.http);\n this.reviewSubmissions = new ReviewSubmissionsResource(this.http);\n this.appInfos = new AppInfosResource(this.http);\n this.appInfoLocalizations = new AppInfoLocalizationsResource(this.http);\n this.appStoreReviewDetails = new AppStoreReviewDetailsResource(this.http);\n this.betaTesters = new BetaTestersResource(this.http);\n this.betaAppReviewSubmissions = new BetaAppReviewSubmissionsResource(this.http);\n this.betaAppReviewDetails = new BetaAppReviewDetailsResource(this.http);\n this.betaInvitations = new BetaInvitationsResource(this.http);\n this.betaLicenses = new BetaLicensesResource(this.http);\n this.appPreviews = new AppPreviewsResource(this.http);\n this.appPreviewSets = new AppPreviewSetsResource(this.http);\n this.appPrices = new AppPricesResource(this.http);\n this.territories = new TerritoriesResource(this.http);\n this.ageRatingDeclarations = new AgeRatingDeclarationsResource(this.http);\n this.appCategories = new AppCategoriesResource(this.http);\n this.appEncryptionDeclarations = new AppEncryptionDeclarationsResource(this.http);\n this.idfaDeclarations = new IdfaDeclarationsResource(this.http);\n this.preReleaseVersions = new PreReleaseVersionsResource(this.http);\n this.reviewSubmissionItems = new ReviewSubmissionItemsResource(this.http);\n this.users = new UsersResource(this.http);\n this.userInvitations = new UserInvitationsResource(this.http);\n this.inAppPurchases = new InAppPurchasesResource(this.http);\n this.gameCenterDetail = new GameCenterDetailResource(this.http);\n this.xcodeMetrics = new XcodeMetricsResource(this.http);\n }\n\n async request<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.http.request<T>(path, options);\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/client/auth.ts","../../src/client/srp.ts","../../src/client/apple-session.ts","../../src/client/request.ts","../../src/resources/certificates.ts","../../src/resources/profiles.ts","../../src/resources/bundle-ids.ts","../../src/resources/devices.ts","../../src/resources/apps.ts","../../src/resources/builds.ts","../../src/resources/beta-groups.ts","../../src/resources/capabilities.ts","../../src/resources/app-store-versions.ts","../../src/resources/app-screenshots.ts","../../src/resources/review-submissions.ts","../../src/resources/app-info.ts","../../src/resources/app-info-localizations.ts","../../src/resources/app-store-review-details.ts","../../src/resources/beta-testers.ts","../../src/resources/beta-app-review-submissions.ts","../../src/resources/beta-app-review-details.ts","../../src/resources/beta-invitations.ts","../../src/resources/beta-licenses.ts","../../src/resources/app-previews.ts","../../src/resources/app-preview-sets.ts","../../src/resources/app-prices.ts","../../src/resources/territories.ts","../../src/resources/age-rating-declarations.ts","../../src/resources/app-categories.ts","../../src/resources/app-encryption-declarations.ts","../../src/resources/idfa-declarations.ts","../../src/resources/pre-release-versions.ts","../../src/resources/review-submission-items.ts","../../src/resources/users.ts","../../src/resources/user-invitations.ts","../../src/resources/in-app-purchases.ts","../../src/resources/game-center-detail.ts","../../src/resources/xcode-metrics.ts","../../src/client/portal.ts","../../src/client/iris.ts","../../src/client/index.ts"],"names":["choice","phone","code","createHash","detail","id"],"mappings":"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","file":"index.mjs","sourcesContent":["import { SignJWT, importPKCS8 } from \"jose\";\n\nexport interface TokenConfig {\n keyId: string;\n /** Issuer ID. When absent, the key is treated as an individual key (sub='user'). */\n issuerId?: string;\n privateKey: string;\n enterprise?: boolean;\n duration?: number;\n}\n\nconst MAX_TOKEN_DURATION = 1200;\nconst DEFAULT_TOKEN_DURATION = 500;\n\nexport class TokenManager {\n private config: TokenConfig;\n private currentToken: string | null = null;\n private expiresAt = 0;\n\n constructor(config: TokenConfig) {\n this.config = config;\n }\n\n async getToken(): Promise<string> {\n const now = Math.floor(Date.now() / 1000);\n if (this.currentToken && now < this.expiresAt - 30) {\n return this.currentToken;\n }\n return this.refresh();\n }\n\n async refresh(): Promise<string> {\n const duration = Math.min(\n this.config.duration ?? DEFAULT_TOKEN_DURATION,\n MAX_TOKEN_DURATION\n );\n const audience = this.config.enterprise\n ? \"apple-developer-enterprise-v1\"\n : \"appstoreconnect-v1\";\n\n const key = await importPKCS8(this.config.privateKey, \"ES256\");\n const now = Math.floor(Date.now() / 1000);\n\n // Mirror Fastlane's Spaceship::ConnectAPI::Token#refresh! behavior:\n // when issuerId is provided → set `iss`; otherwise treat as individual key\n // and set `sub: 'user'`.\n // https://developer.apple.com/documentation/appstoreconnectapi/generating_tokens_for_api_requests#4313913\n let jwt = new SignJWT(this.config.issuerId ? {} : { sub: \"user\" })\n .setProtectedHeader({\n alg: \"ES256\",\n kid: this.config.keyId,\n typ: \"JWT\",\n })\n .setIssuedAt(now - 60)\n .setExpirationTime(now + duration)\n .setAudience(audience);\n\n if (this.config.issuerId) {\n jwt = jwt.setIssuer(this.config.issuerId);\n }\n\n this.currentToken = await jwt.sign(key);\n\n this.expiresAt = now + duration;\n return this.currentToken;\n }\n\n invalidate(): void {\n this.currentToken = null;\n this.expiresAt = 0;\n }\n}\n","/**\n * SRP (Secure Remote Password) implementation\n * 1:1 port of the fastlane-sirp Ruby gem\n * Used for Apple ID authentication\n */\n\nimport { createHash, randomBytes, pbkdf2Sync } from \"node:crypto\";\n\n// ── RFC 5054 SRP Group Parameters ──────────────────────────────────────────\n\n// Copied exactly from fastlane-sirp parameters.rb (2048-bit group)\nconst N_2048 = BigInt(\n \"0x\" +\n \"AC6BDB41324A9A9BF166DE5E1389582FAF72B6651987EE07FC3192943DB56050\" +\n \"A37329CBB4A099ED8193E0757767A13DD52312AB4B03310DCD7F48A9DA04FD50\" +\n \"E8083969EDB767B0CF6095179A163AB3661A05FBD5FAAAE82918A9962F0B93B8\" +\n \"55F97993EC975EEAA80D740ADBF4FF747359D041D5C33EA71D281E446B14773B\" +\n \"CA97B43A23FB801676BD207A436C6481F1D2B9078717461A5B9D32E688F87748\" +\n \"544523B524B0D57D5EA77A2775D2ECFA032CFBDBF52FB3786160279004E57AE6\" +\n \"AF874E7303CE53299CCC041C7BC308D82A5698F3A8D0C38271AE35F8E9DBFBB\" +\n \"694B5C803D89F7AE435DE236D525F54759B65E372FCD68EF20FA7111F9E4AFF73\"\n);\nconst g_2048 = 2n;\n\n// ── Utility Functions ──────────────────────────────────────────────────────\n\nfunction numToHex(num: bigint): string {\n let hex = num.toString(16);\n if (hex.length % 2 !== 0) hex = \"0\" + hex;\n return hex.toLowerCase();\n}\n\nfunction hexToBytes(hex: string): Buffer {\n return Buffer.from(hex, \"hex\");\n}\n\nfunction shaHex(h: string, algorithm: string): string {\n return createHash(algorithm).update(hexToBytes(h)).digest(\"hex\");\n}\n\nfunction shaStr(s: string, algorithm: string): string {\n return createHash(algorithm).update(s).digest(\"hex\");\n}\n\nfunction modExp(base: bigint, exp: bigint, mod: bigint): bigint {\n if (mod === 1n) return 0n;\n let result = 1n;\n base = base % mod;\n while (exp > 0n) {\n if (exp % 2n === 1n) {\n result = (result * base) % mod;\n }\n exp = exp / 2n;\n base = (base * base) % mod;\n }\n return result;\n}\n\nfunction H(algorithm: string, n: bigint, ...args: (bigint | string | undefined)[]): bigint {\n const nHex = numToHex(n);\n // Must match Ruby: nlen = 2 * ((('%x' % [n]).length * 4 + 7) >> 3)\n // Use floor division (>>3), NOT ceiling\n const nlen = 2 * (((nHex.length * 4 + 7) >> 3));\n\n let hashin = \"\";\n for (const s of args) {\n if (s === undefined) continue;\n const shex = typeof s === \"string\" ? s : numToHex(s);\n if (shex.length > nlen) {\n throw new Error(\"Bit width does not match - client uses different prime\");\n }\n hashin += \"0\".repeat(nlen - shex.length) + shex;\n }\n\n const hashed = shaHex(hashin, algorithm);\n return BigInt(\"0x\" + hashed) % n;\n}\n\n// ── SRP Client ─────────────────────────────────────────────────────────────\n\nexport class SRPClient {\n private N: bigint;\n private g: bigint;\n private hashAlg: string;\n private k: bigint;\n private a: bigint;\n A: string;\n private S: string | null = null;\n private K: string | null = null;\n M: string | null = null;\n H_AMK: string | null = null;\n\n constructor(group: number = 2048) {\n if (group !== 2048) throw new Error(\"Only 2048-bit group is supported\");\n this.N = N_2048;\n this.g = g_2048;\n this.hashAlg = \"sha256\";\n this.k = H(this.hashAlg, this.N, this.N, this.g);\n // Generate random 'a'\n this.a = BigInt(\"0x\" + randomBytes(256).toString(\"hex\"));\n // Compute A = g^a mod N\n this.A = numToHex(modExp(this.g, this.a, this.N));\n }\n\n startAuthentication(): string {\n return this.A;\n }\n\n processChallenge(\n username: string,\n password: string, // hex-encoded encrypted password\n xsalt: string, // hex\n xbb: string, // hex\n isPasswordEncrypted: boolean = false\n ): string | false {\n const bb = BigInt(\"0x\" + xbb);\n\n // SRP-6a safety check\n if (bb % this.N === 0n) return false;\n\n let x: bigint;\n if (isPasswordEncrypted) {\n x = this.calcXHex(password, xsalt);\n } else {\n x = this.calcX(username, password, xsalt);\n }\n\n const u = H(this.hashAlg, this.N, this.A, xbb);\n if (u === 0n) return false;\n\n // S = (B - k * g^x) ^ (a + u*x) mod N\n const gx = modExp(this.g, x, this.N);\n let base = (bb - this.k * gx) % this.N;\n if (base < 0n) base += this.N;\n const exp = this.a + x * u;\n this.S = numToHex(modExp(base, exp, this.N));\n this.K = shaHex(this.S, this.hashAlg);\n\n // M = H(H(N) xor H(g), H(I), s, A, B, K)\n const hxor = H(this.hashAlg, this.N, this.N) ^ H(this.hashAlg, this.N, this.g);\n const buf =\n numToHex(hxor) +\n shaStr(username, this.hashAlg) +\n xsalt +\n this.A +\n xbb +\n this.K;\n const bytes = hexToBytes(buf);\n this.M = createHash(this.hashAlg).update(bytes).digest(\"hex\");\n\n // H_AMK = H(A, M, K)\n const amkBytes = hexToBytes(this.A + this.M + this.K);\n this.H_AMK = numToHex(\n BigInt(\"0x\" + createHash(this.hashAlg).update(amkBytes).digest(\"hex\"))\n );\n\n return this.M;\n }\n\n private calcX(username: string, password: string, xsalt: string): bigint {\n const spad = xsalt.length % 2 !== 0 ? \"0\" : \"\";\n const inner = shaStr(`${username}:${password}`, this.hashAlg);\n return BigInt(\"0x\" + shaHex(spad + xsalt + inner, this.hashAlg));\n }\n\n private calcXHex(xpassword: string, xsalt: string): bigint {\n // calc_x_hex: sha_hex(xsalt + sha_hex(\":\" hex + xpassword), hash)\n const colonHex = \":\".charCodeAt(0).toString(16);\n const inner = shaHex(colonHex + xpassword, this.hashAlg);\n return BigInt(\"0x\" + shaHex(xsalt + inner, this.hashAlg));\n }\n}\n\n// ── Apple PBKDF2 password derivation ───────────────────────────────────────\n\nexport function applePbkdf2(\n password: string,\n salt: Buffer,\n iterations: number,\n keyLength: number,\n protocol: string\n): Buffer {\n if (![\"s2k\", \"s2k_fo\"].includes(protocol)) {\n throw new Error(`Unsupported protocol '${protocol}' for pbkdf2`);\n }\n\n // First hash the password with SHA-256\n let passwordBytes: Buffer | string = createHash(\"sha256\").update(password).digest();\n\n if (protocol === \"s2k_fo\") {\n // Legacy: convert to hex string\n passwordBytes = passwordBytes.toString(\"hex\");\n }\n\n return pbkdf2Sync(passwordBytes, salt, iterations, keyLength, \"sha256\");\n}\n","/**\n * Apple ID Session Authentication\n * 1:1 port of Fastlane Spaceship client.rb + two_step_or_factor_client.rb\n *\n * Two flows:\n *\n * loginWithAppleId({ email, password, onPrompt })\n * - blocking, CLI-style. onPrompt is awaited to collect 2FA codes.\n *\n * beginLogin({ email, password }) → { kind: \"logged_in\" | \"needs_2fa\", ... }\n * submitTwoFactorCode({ pending, code, source, ... }) → AppleSession\n * requestSmsCode({ pending, phoneId, mode })\n * - HTTP-resumable. Used by the App Release wizard, where the 2FA\n * challenge is rendered in a browser modal and the code arrives in\n * a separate request.\n */\n\nimport { createHash } from \"node:crypto\";\nimport { createInterface } from \"node:readline\";\nimport { SRPClient, applePbkdf2 } from \"./srp.js\";\n\nconst AUTH_BASE = \"https://idmsa.apple.com/appleauth/auth\";\nconst OLYMPUS_SESSION = \"https://appstoreconnect.apple.com/olympus/v1/session\";\nconst WIDGET_KEY_URL = \"https://appstoreconnect.apple.com/olympus/v1/app/config?hostname=itunesconnect.apple.com\";\n\nexport interface AppleSessionConfig {\n email: string;\n password: string;\n onLog?: (msg: string) => void;\n onPrompt?: (msg: string) => Promise<string>;\n}\n\nexport interface ContractMessage {\n id: string;\n group: string;\n subject: string;\n message: string;\n}\n\nexport interface AppleSession {\n cookies: Record<string, string>;\n sessionId: string;\n scnt: string;\n serviceKey: string;\n userEmail: string;\n teamId?: string;\n pendingAgreements: ContractMessage[];\n}\n\n/**\n * State held between beginLogin() and submitTwoFactorCode() — captures\n * everything needed to resume an in-progress 2FA flow across HTTP requests.\n * Stored server-side keyed by an opaque session id; never sent to the\n * browser (the browser only sees the opaque id).\n */\nexport interface PendingLogin {\n cookies: Record<string, string>;\n sessionId: string;\n scnt: string;\n serviceKey: string;\n userEmail: string;\n}\n\n/**\n * Description of the 2FA challenge presented to the user.\n *\n * Modern 2FA accounts (the default for everyone) have `kind: \"device\"` —\n * Apple pushes the 6-digit code to all the user's trusted Apple devices\n * (iPhone, Mac, etc.) and the user types it into our wizard. The legacy\n * `trustedDevices` field is empty in this case; that field only ever\n * populates for old \"two-step verification\" accounts which are\n * essentially extinct.\n *\n * `kind: \"phone_only\"` is reserved for accounts that have no real Apple\n * devices (Apple's `noTrustedDevices === true` flag) — those accounts\n * must use SMS to a trusted phone number.\n *\n * Either way, the user can opt to receive the code via SMS instead by\n * picking from `trustedPhoneNumbers` and calling requestSmsCode().\n */\nexport interface TwoFactorChallenge {\n kind: \"device\" | \"phone_only\";\n codeLength: number;\n trustedPhoneNumbers: { id: number; numberWithDialCode: string; pushMode?: string }[];\n}\n\nexport type BeginLoginResult =\n | { kind: \"logged_in\"; session: AppleSession }\n | { kind: \"needs_2fa\"; pending: PendingLogin; challenge: TwoFactorChallenge };\n\n/** Thrown when an Apple Developer Program agreement needs to be accepted */\nexport class ProgramLicenseAgreementError extends Error {\n constructor(message: string, public agreements: ContractMessage[]) {\n super(message);\n this.name = \"ProgramLicenseAgreementError\";\n }\n}\n\n/**\n * Check a portal API response for agreement/license errors.\n * Throws ProgramLicenseAgreementError if detected.\n * Call this after any portal API call. Mirrors Spaceship::Client#handle_itc_response.\n */\nexport function checkPortalResponse(body: any, session?: AppleSession): void {\n if (!body || typeof body !== \"object\") return;\n\n // Result code 4100 = membership not eligible (often due to pending agreement)\n if (body.resultCode === 4100) {\n const userMsg = body.userString ?? \"The selected team does not have an eligible program membership.\";\n const agreements = session?.pendingAgreements ?? [];\n if (agreements.length > 0) {\n throw new ProgramLicenseAgreementError(\n `${userMsg}\\n\\n⚠ Pending agreement: ${agreements[0].subject}\\n` +\n `${agreements[0].message.replace(/<[^>]+>/g, \"\")}\\n\\n` +\n `Please accept the agreement at https://developer.apple.com/account before continuing.`,\n agreements\n );\n }\n throw new Error(userMsg);\n }\n\n // Explicit license agreement mention\n if ((body.userString ?? \"\").includes(\"Program License Agreement\")) {\n throw new ProgramLicenseAgreementError(\n `${body.userString} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n session?.pendingAgreements ?? []\n );\n }\n\n // Generic error with result code\n if (body.resultCode && body.resultCode !== 0) {\n const msg = body.userString || body.resultString || `Portal API error (code ${body.resultCode})`;\n throw new Error(msg);\n }\n}\n\n// ── Main Login (mirrors Spaceship::Client#send_shared_login_request) ───────\n\n/**\n * Step 1 of HTTP-resumable login: do the SIRP exchange and detect whether\n * 2FA is required. Returns either a fully-established session (no 2FA) or\n * a pending state + a description of the 2FA challenge.\n */\nexport async function beginLogin(config: {\n email: string;\n password: string;\n onLog?: (msg: string) => void;\n}): Promise<BeginLoginResult> {\n const log = config.onLog ?? (() => {});\n\n log(\"Fetching Apple service key...\");\n const serviceKey = await fetchServiceKey();\n\n const initRes = await fetch(`${AUTH_BASE}/signin?widgetKey=${serviceKey}`, {\n headers: { \"User-Agent\": \"Spaceship 2.225.0\" },\n });\n const initCookies = parseCookies(initRes.headers);\n\n const hcBits = initRes.headers.get(\"X-Apple-HC-Bits\");\n const hcChallenge = initRes.headers.get(\"X-Apple-HC-Challenge\");\n let hashcash: string | undefined;\n if (hcBits && hcChallenge) {\n log(\"Computing hashcash...\");\n hashcash = computeHashcash(parseInt(hcBits, 10), hcChallenge);\n }\n\n const cookieStr = Object.entries(initCookies)\n .map(([k, v]) => k.startsWith(\"DES\") ? `${k}=\"${v}\"` : `${k}=${v}`)\n .join(\"; \");\n\n log(\"Starting SIRP Apple ID login...\");\n const response = await doSirp(config.email, config.password, serviceKey, cookieStr, hashcash);\n\n const baseState = {\n cookies: { ...initCookies, ...response.cookies },\n sessionId: response.sessionId,\n scnt: response.scnt,\n serviceKey,\n userEmail: config.email,\n };\n\n if (response.status === 403) {\n throw new Error(`Invalid username and password combination. Used '${config.email}' as the username.`);\n }\n if (response.status === 412) {\n throw new Error(\"Need to acknowledge Apple's Apple ID and Privacy statement. Please manually log into https://appleid.apple.com.\");\n }\n\n if (response.status === 200) {\n log(\"Login successful (no 2FA).\");\n const session: AppleSession = { ...baseState, pendingAgreements: [] };\n await finalizeSession(session, log);\n return { kind: \"logged_in\", session };\n }\n\n if (response.status === 409) {\n log(\"2FA required, fetching challenge...\");\n const challenge = await fetchTwoFactorChallenge(baseState);\n return { kind: \"needs_2fa\", pending: baseState, challenge };\n }\n\n throw new Error(`Unexpected login response (${response.status}): ${JSON.stringify(response.body).slice(0, 500)}`);\n}\n\n/** Fetch the 2FA challenge (trusted phones + whether the user has Apple devices). */\nasync function fetchTwoFactorChallenge(pending: PendingLogin): Promise<TwoFactorChallenge> {\n const r = await fetch(`${AUTH_BASE}`, { headers: buildAuthHeadersFromPending(pending) });\n const body = await r.json() as any;\n\n const trustedPhoneNumbers = (body.trustedPhoneNumbers ?? []).map((p: any) => ({\n id: p.id, numberWithDialCode: p.numberWithDialCode, pushMode: p.pushMode,\n }));\n // Apple sets `noTrustedDevices: true` when the user has no real Apple\n // devices to push the code to and must rely on SMS. Anything else means\n // we should default to \"enter the code from your device\".\n const phoneOnly = body.noTrustedDevices === true;\n const codeLength = body.securityCode?.length ?? 6;\n\n return {\n kind: phoneOnly ? \"phone_only\" : \"device\",\n codeLength,\n trustedPhoneNumbers,\n };\n}\n\n/**\n * Ask Apple to send an SMS / voice code to the chosen trusted phone.\n * Used by the wizard's \"Send code via text instead\" affordance.\n */\nexport async function requestSmsCode(input: {\n pending: PendingLogin;\n phoneId: number;\n mode?: \"sms\" | \"voice\";\n}): Promise<void> {\n await fetch(`${AUTH_BASE}/verify/phone`, {\n method: \"PUT\",\n headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ phoneNumber: { id: input.phoneId }, mode: input.mode ?? \"sms\" }),\n });\n}\n\n/**\n * Step 2 of HTTP-resumable login: submit the 2FA code the user typed.\n * Returns a fully-established AppleSession on success.\n *\n * source = \"device\" → 4-digit code from a trusted Apple device\n * source = \"phone\" → 6-digit code from SMS / push to trusted phone\n */\nexport async function submitTwoFactorCode(input: {\n pending: PendingLogin;\n code: string;\n source: \"device\" | \"phone\";\n phoneId?: number;\n mode?: \"sms\" | \"voice\";\n onLog?: (msg: string) => void;\n}): Promise<AppleSession> {\n const log = input.onLog ?? (() => {});\n\n let path: string;\n let body: string;\n if (input.source === \"device\") {\n path = `${AUTH_BASE}/verify/trusteddevice/securitycode`;\n body = JSON.stringify({ securityCode: { code: input.code } });\n } else {\n if (input.phoneId == null) throw new Error(\"phoneId is required when source='phone'\");\n path = `${AUTH_BASE}/verify/phone/securitycode`;\n body = JSON.stringify({\n securityCode: { code: input.code },\n phoneNumber: { id: input.phoneId },\n mode: input.mode ?? \"sms\",\n });\n }\n\n log(\"Submitting 2FA code...\");\n const verifyRes = await fetch(path, {\n method: \"POST\",\n headers: { ...buildAuthHeadersFromPending(input.pending), \"Content-Type\": \"application/json\" },\n body,\n });\n if (!verifyRes.ok) {\n const err = await verifyRes.json().catch(() => ({})) as any;\n const msgs = (err?.service_errors ?? err?.serviceErrors ?? []).map((e: any) => e.message).filter(Boolean);\n throw new Error(msgs.join(\"; \") || `Verification failed (${verifyRes.status})`);\n }\n\n const session: AppleSession = {\n ...input.pending,\n cookies: { ...input.pending.cookies, ...parseCookies(verifyRes.headers) },\n pendingAgreements: [],\n };\n await trustSession(session);\n await finalizeSession(session, log);\n return session;\n}\n\n/** Fetch olympus session and pending agreements — the post-2FA finishing work. */\nasync function finalizeSession(session: AppleSession, log: (msg: string) => void): Promise<void> {\n await fetchOlympusSession(session);\n const agreements = await fetchContractMessages(session);\n if (agreements.length > 0) {\n for (const msg of agreements) {\n log(`⚠ ${msg.subject}: ${msg.message.replace(/<[^>]+>/g, \"\")}`);\n }\n }\n session.pendingAgreements = agreements;\n log(`Logged in as ${session.userEmail}`);\n}\n\n/**\n * Backward-compatible CLI-style login. Internally uses beginLogin +\n * submitTwoFactorCode but routes 2FA through the synchronous onPrompt\n * callback so existing scripts (test-login.ts, test-full-workflow.ts)\n * keep working.\n */\nexport async function loginWithAppleId(config: AppleSessionConfig): Promise<AppleSession> {\n const log = config.onLog ?? console.log;\n const promptFn = config.onPrompt ?? defaultPrompt;\n\n const result = await beginLogin({ email: config.email, password: config.password, onLog: log });\n if (result.kind === \"logged_in\") return result.session;\n\n const { pending, challenge } = result;\n const phones = challenge.trustedPhoneNumbers;\n\n if (challenge.kind === \"device\") {\n log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n log(\"(Input 'sms' to escape this prompt and select a trusted phone number to send the code as a text message)\");\n const input = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n if (input.toLowerCase() === \"sms\") {\n log(\"Please select a trusted phone number:\");\n for (let i = 0; i < phones.length; i++) log(` ${i + 1}. ${phones[i].numberWithDialCode}`);\n const choice = await promptFn(\"Enter number: \");\n const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n log(`Code sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n }\n return submitTwoFactorCode({ pending, code: input, source: \"device\", onLog: log });\n }\n\n // phone_only — account has no trusted Apple devices, must use SMS\n log(\"Two-factor Authentication (6 digit code) is enabled for this account\");\n if (phones.length === 1) {\n const phone = phones[0];\n log(`Code automatically sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n }\n log(\"Please select a trusted phone number:\");\n for (let i = 0; i < phones.length; i++) log(` ${i + 1}. ${phones[i].numberWithDialCode}`);\n const choice = await promptFn(\"Enter number: \");\n const phone = phones[Math.max(0, parseInt(choice, 10) - 1)] ?? phones[0];\n await requestSmsCode({ pending, phoneId: phone.id, mode: phone.pushMode as any });\n log(`Code sent to ${phone.numberWithDialCode}`);\n const code = await promptFn(`Please enter the ${challenge.codeLength} digit code: `);\n return submitTwoFactorCode({ pending, code, source: \"phone\", phoneId: phone.id, mode: phone.pushMode as any ?? \"sms\", onLog: log });\n}\n\nfunction buildAuthHeadersFromPending(pending: PendingLogin): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": pending.serviceKey, Accept: \"application/json\" };\n if (pending.sessionId) h[\"X-Apple-Id-Session-Id\"] = pending.sessionId;\n if (pending.scnt) h[\"scnt\"] = pending.scnt;\n const c = Object.entries(pending.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\n// ── SIRP Auth (1:1 port of Spaceship::Client#do_sirp) ──────────────────────\n\nasync function doSirp(\n user: string, password: string, serviceKey: string, cookieStr: string, hashcash?: string\n): Promise<{ status: number; body: any; cookies: Record<string, string>; sessionId: string; scnt: string }> {\n const client = new SRPClient(2048);\n const A = client.startAuthentication();\n const aBase64 = Buffer.from(A, \"hex\").toString(\"base64\");\n\n const baseHeaders: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n \"X-Apple-Widget-Key\": serviceKey,\n Accept: \"application/json, text/javascript\",\n };\n if (cookieStr) baseHeaders[\"Cookie\"] = cookieStr;\n\n // Step 1: signin/init\n const initRes = await fetch(`${AUTH_BASE}/signin/init`, {\n method: \"POST\",\n headers: baseHeaders,\n body: JSON.stringify({ a: aBase64, accountName: user, protocols: [\"s2k\", \"s2k_fo\"] }),\n redirect: \"manual\",\n });\n const initBody = await initRes.json() as any;\n if (initBody.serviceErrors) throw new Error(`Apple auth error: ${JSON.stringify(initBody.serviceErrors)}`);\n\n const { iteration: iterations, salt: saltB64, b: bB64, c, protocol } = initBody;\n const salt = Buffer.from(saltB64, \"base64\");\n const b = Buffer.from(bB64, \"base64\");\n\n // Derive password (mirrors Spaceship::Client#pbkdf2)\n const encryptedPassword = applePbkdf2(password, salt, iterations, 32, protocol);\n\n // Process SRP challenge\n const m1 = client.processChallenge(user, encryptedPassword.toString(\"hex\"), salt.toString(\"hex\"), b.toString(\"hex\"), true);\n if (m1 === false) throw new Error(\"Error processing SIRP challenge\");\n const m2 = client.H_AMK;\n\n // Step 2: signin/complete\n const completeHeaders = { ...baseHeaders };\n if (hashcash) completeHeaders[\"X-Apple-HC\"] = hashcash;\n\n const completeRes = await fetch(`${AUTH_BASE}/signin/complete?isRememberMeEnabled=false`, {\n method: \"POST\",\n headers: completeHeaders,\n body: JSON.stringify({\n accountName: user,\n c,\n m1: Buffer.from(m1, \"hex\").toString(\"base64\"),\n m2: m2 ? Buffer.from(m2, \"hex\").toString(\"base64\") : \"\",\n rememberMe: false,\n }),\n redirect: \"manual\",\n });\n\n let body: any;\n try { body = await completeRes.json(); } catch { body = \"\"; }\n\n return {\n status: completeRes.status,\n body,\n cookies: parseCookies(completeRes.headers),\n sessionId: completeRes.headers.get(\"x-apple-id-session-id\") ?? \"\",\n scnt: completeRes.headers.get(\"scnt\") ?? \"\",\n };\n}\n\n// ── Helpers ────────────────────────────────────────────────────────────────\n\nasync function trustSession(session: AppleSession): Promise<void> {\n const r = await fetch(`${AUTH_BASE}/2sv/trust`, { headers: buildAuthHeaders(session) });\n Object.assign(session.cookies, parseCookies(r.headers));\n}\n\nasync function fetchOlympusSession(session: AppleSession): Promise<void> {\n const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n const res = await fetch(OLYMPUS_SESSION, { headers: { Cookie: cookieStr, Accept: \"application/json\" } });\n if (res.ok) {\n const body = await res.json() as any;\n if (body?.user?.emailAddress) session.userEmail = body.user.emailAddress;\n if (body?.provider?.providerId) session.teamId = String(body.provider.providerId);\n }\n}\n\n// ── Contract Messages (mirrors fetch_program_license_agreement_messages) ────\n\nasync function fetchContractMessages(session: AppleSession): Promise<ContractMessage[]> {\n const cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n try {\n const res = await fetch(\"https://appstoreconnect.apple.com/olympus/v1/contractMessages\", {\n headers: { Cookie: cookieStr, Accept: \"application/json\" },\n });\n if (!res.ok) return [];\n const body = await res.json() as any[];\n return (body ?? []).map((m: any) => ({\n id: m.id ?? \"\",\n group: m.group ?? \"\",\n subject: m.subject ?? \"\",\n message: m.message ?? \"\",\n }));\n } catch {\n return [];\n }\n}\n\nasync function fetchServiceKey(): Promise<string> {\n const res = await fetch(WIDGET_KEY_URL);\n const body = await res.json() as any;\n if (!body?.authServiceKey) throw new Error(\"Could not fetch Apple service key\");\n return body.authServiceKey as string;\n}\n\nfunction buildAuthHeaders(session: AppleSession): Record<string, string> {\n const h: Record<string, string> = { \"X-Apple-Widget-Key\": session.serviceKey, Accept: \"application/json\" };\n if (session.sessionId) h[\"X-Apple-Id-Session-Id\"] = session.sessionId;\n if (session.scnt) h[\"scnt\"] = session.scnt;\n const c = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n if (c) h[\"Cookie\"] = c;\n return h;\n}\n\nfunction parseCookies(headers: Headers): Record<string, string> {\n const cookies: Record<string, string> = {};\n for (const raw of headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) cookies[m[1]] = m[2];\n }\n return cookies;\n}\n\nfunction computeHashcash(bits: number, challenge: string): string {\n const date = new Date().toISOString().replace(/[-:T]/g, \"\").slice(0, 12);\n let counter = 0;\n while (true) {\n const stamp = `1:${bits}:${date}:${challenge}::${counter.toString(36)}:`;\n const hash = createHash(\"sha1\").update(stamp).digest();\n let zeroBits = 0;\n for (const byte of hash) {\n if (byte === 0) { zeroBits += 8; } else { zeroBits += Math.clz32(byte) - 24; break; }\n if (zeroBits >= bits) break;\n }\n if (zeroBits >= bits) return stamp;\n counter++;\n }\n}\n\nasync function defaultPrompt(message: string): Promise<string> {\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n return new Promise((r) => { rl.question(message, (a) => { rl.close(); r(a.trim()); }); });\n}\n","import type { TokenManager } from \"./auth.js\";\nimport { ProgramLicenseAgreementError } from \"./apple-session.js\";\nimport type {\n JsonApiErrorResponse,\n JsonApiListResponse,\n JsonApiResponse,\n ListParams,\n RequestOptions,\n} from \"./types.js\";\n\nconst PRODUCTION_BASE = \"https://api.appstoreconnect.apple.com\";\nconst ENTERPRISE_BASE = \"https://api.enterprise.developer.apple.com\";\n\nconst MAX_RETRIES = 5;\nconst INITIAL_BACKOFF_MS = 1000;\nconst MAX_BACKOFF_MS = 60_000;\n/** Fastlane's TooManyRequestsError gives up after 3600s cumulative backoff. */\nconst MAX_RATE_LIMIT_BACKOFF_MS = 3_600_000;\n\nexport class AppStoreConnectError extends Error {\n constructor(\n message: string,\n public status: number,\n public errors: JsonApiErrorResponse[\"errors\"] = []\n ) {\n super(message);\n this.name = \"AppStoreConnectError\";\n }\n}\n\nexport class RateLimitError extends AppStoreConnectError {\n constructor(public retryAfter: number) {\n super(`Rate limited. Retry after ${retryAfter}s`, 429);\n this.name = \"RateLimitError\";\n }\n}\n\nexport class RequestClient {\n private baseUrl: string;\n private tokenManager: TokenManager;\n\n constructor(tokenManager: TokenManager, enterprise = false) {\n this.tokenManager = tokenManager;\n this.baseUrl = enterprise ? ENTERPRISE_BASE : PRODUCTION_BASE;\n }\n\n async request<T>(path: string, options: RequestOptions = {}): Promise<T> {\n const { method = \"GET\", body, params, headers: extraHeaders } = options;\n\n let url = `${this.baseUrl}${path}`;\n if (params) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n searchParams.set(key, value.join(\",\"));\n } else {\n searchParams.set(key, String(value));\n }\n }\n const qs = searchParams.toString();\n if (qs) url += `?${qs}`;\n }\n\n let lastError: Error | null = null;\n // Soft-cumulative backoff for 429 that doubles on each hit, mirroring\n // Fastlane's Spaceship::ConnectAPI::APIClient#with_asc_retry 429 handler:\n // `Kernel.sleep(backoff); backoff *= 2`, giving up past 3600s.\n let rateLimitBackoffMs = INITIAL_BACKOFF_MS;\n\n for (let attempt = 0; attempt <= MAX_RETRIES; attempt++) {\n const token = await this.tokenManager.getToken();\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n ...extraHeaders,\n };\n\n const res = await fetch(url, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n if (res.ok) {\n if (res.status === 204) return undefined as T;\n return (await res.json()) as T;\n }\n\n // Handle 401 — refresh token and retry once\n if (res.status === 401 && attempt === 0) {\n this.tokenManager.invalidate();\n continue;\n }\n\n // Handle 429 — rate limit. Prefer server's Retry-After header when\n // provided, otherwise fall back to Fastlane's doubling backoff.\n if (res.status === 429) {\n if (rateLimitBackoffMs > MAX_RATE_LIMIT_BACKOFF_MS) {\n throw new RateLimitError(Math.floor(rateLimitBackoffMs / 1000));\n }\n const retryAfterHeader = res.headers.get(\"Retry-After\");\n const sleepMs = retryAfterHeader\n ? parseInt(retryAfterHeader, 10) * 1000\n : rateLimitBackoffMs;\n await sleep(sleepMs);\n rateLimitBackoffMs *= 2;\n continue;\n }\n\n // Parse error body early so we can inspect it for 403/502 special cases.\n const errorBody = await res.json().catch(() => null);\n const errors = (errorBody as JsonApiErrorResponse)?.errors || [];\n\n // Handle 403 — detect missing/expired program license agreement.\n // Mirrors api_client.rb's ProgramLicenseAgreementUpdated branch.\n if (res.status === 403) {\n const firstCode = errors[0]?.code;\n if (firstCode === \"FORBIDDEN.REQUIRED_AGREEMENTS_MISSING_OR_EXPIRED\") {\n const detail =\n errors.map((e) => e.detail || e.title).join(\"; \") ||\n \"Required agreements are missing or expired.\";\n throw new ProgramLicenseAgreementError(\n `${detail} Please manually log into your Apple Developer account to review and accept the updated agreement.`,\n []\n );\n }\n }\n\n // Handle 502 — special-case \"Could not process this request\" retry.\n // Mirrors api_client.rb's BadGatewayError branch (issue fastlane#19264).\n if (res.status === 502 && attempt < MAX_RETRIES) {\n const bodyText = errorBody ? JSON.stringify(errorBody) : \"\";\n if (bodyText.includes(\"Could not process this request\")) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n }\n\n // Handle 5xx — retry with exponential backoff\n if (res.status >= 500 && attempt < MAX_RETRIES) {\n const backoff = Math.min(\n INITIAL_BACKOFF_MS * Math.pow(2, attempt),\n MAX_BACKOFF_MS\n );\n await sleep(backoff + Math.random() * 500);\n continue;\n }\n\n const detail = errors.map((e) => e.detail || e.title).join(\"; \") || `HTTP ${res.status}`;\n\n lastError = new AppStoreConnectError(detail, res.status, errors);\n break;\n }\n\n throw lastError || new Error(\"Request failed after retries\");\n }\n\n async get<T>(path: string, params?: Record<string, string | string[] | number | undefined>): Promise<T> {\n return this.request<T>(path, { method: \"GET\", params });\n }\n\n async post<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"POST\", body });\n }\n\n async patch<T>(path: string, body: unknown): Promise<T> {\n return this.request<T>(path, { method: \"PATCH\", body });\n }\n\n async delete(path: string): Promise<void> {\n await this.request(path, { method: \"DELETE\" });\n }\n\n // Build query params from ListParams\n buildListParams(params: ListParams): Record<string, string | undefined> {\n const result: Record<string, string | undefined> = {};\n\n if (params.filter) {\n for (const [key, value] of Object.entries(params.filter)) {\n result[`filter[${key}]`] = Array.isArray(value) ? value.join(\",\") : value;\n }\n }\n\n if (params.include) {\n result[\"include\"] = params.include;\n }\n\n if (params.fields) {\n for (const [key, value] of Object.entries(params.fields)) {\n result[`fields[${key}]`] = value;\n }\n }\n\n if (params.limit !== undefined) {\n result[\"limit\"] = String(params.limit);\n }\n\n if (params.sort) {\n result[\"sort\"] = params.sort;\n }\n\n if (params.cursor) {\n // ASC uses page[after] for cursor pagination\n result[\"page[after]\"] = params.cursor;\n }\n\n return result;\n }\n\n async list<T>(path: string, params: ListParams = {}): Promise<JsonApiListResponse<T>> {\n const queryParams = this.buildListParams(params);\n return this.get<JsonApiListResponse<T>>(path, queryParams);\n }\n\n async *paginate<T>(path: string, params: ListParams = {}): AsyncGenerator<T, void, undefined> {\n let cursor: string | undefined = params.cursor;\n\n while (true) {\n const response = await this.list<T>(path, { ...params, cursor });\n\n for (const item of response.data) {\n yield item;\n }\n\n // Check for next page\n const nextLink = response.links?.next;\n if (!nextLink) break;\n\n // Extract cursor from next link\n const nextUrl = new URL(nextLink);\n cursor = nextUrl.searchParams.get(\"page[after]\") || undefined;\n if (!cursor) break;\n }\n }\n\n async all<T>(path: string, params: ListParams = {}): Promise<T[]> {\n const results: T[] = [];\n for await (const item of this.paginate<T>(path, params)) {\n results.push(item);\n }\n return results;\n }\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { CertificateType } from \"../types/enums.js\";\n\nexport class CertificatesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n serialNumber?: string;\n displayName?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Certificate[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { certificates: params.fields.join(\",\") };\n }\n return this.http.all<Certificate>(\"/v1/certificates\", listParams);\n }\n\n async get(id: string): Promise<Certificate> {\n const response = await this.http.get<JsonApiResponse<Certificate>>(\n `/v1/certificates/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n certificateType: CertificateType;\n csrContent: string;\n }): Promise<Certificate> {\n const response = await this.http.post<JsonApiResponse<Certificate>>(\n \"/v1/certificates\",\n {\n data: {\n type: \"certificates\",\n attributes: {\n certificateType: params.certificateType,\n csrContent: params.csrContent,\n },\n },\n }\n );\n return response.data;\n }\n\n async revoke(id: string): Promise<void> {\n await this.http.delete(`/v1/certificates/${id}`);\n }\n\n async *paginate(params?: {\n filter?: {\n certificateType?: CertificateType | CertificateType[];\n };\n limit?: number;\n }): AsyncGenerator<Certificate> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n yield* this.http.paginate<Certificate>(\"/v1/certificates\", listParams);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Profile } from \"../types/profile.js\";\nimport type { Certificate } from \"../types/certificate.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { ProfileType, ProfileState } from \"../types/enums.js\";\n\nexport class ProfilesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n profileType?: ProfileType | ProfileType[];\n profileState?: ProfileState;\n name?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { profiles?: string[]; certificates?: string[]; devices?: string[]; bundleIds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Profile[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Profile>(\"/v1/profiles\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Profile> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Profile>>(\n `/v1/profiles/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n name: string;\n profileType: ProfileType;\n bundleIdId: string;\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<Profile> {\n const relationships: Record<string, unknown> = {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n certificates: {\n data: params.certificateIds.map((id) => ({\n type: \"certificates\",\n id,\n })),\n },\n };\n\n if (params.deviceIds && params.deviceIds.length > 0) {\n relationships.devices = {\n data: params.deviceIds.map((id) => ({\n type: \"devices\",\n id,\n })),\n };\n }\n\n const response = await this.http.post<JsonApiResponse<Profile>>(\n \"/v1/profiles\",\n {\n data: {\n type: \"profiles\",\n attributes: {\n name: params.name,\n profileType: params.profileType,\n },\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/profiles/${id}`);\n }\n\n async getCertificates(profileId: string): Promise<Certificate[]> {\n return this.http.all<Certificate>(\n `/v1/profiles/${profileId}/certificates`\n );\n }\n\n async getDevices(profileId: string): Promise<Device[]> {\n return this.http.all<Device>(`/v1/profiles/${profileId}/devices`);\n }\n\n async getBundleId(profileId: string): Promise<BundleId> {\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/profiles/${profileId}/bundleId`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BundleId } from \"../types/bundle-id.js\";\nimport type { BundleIdCapability } from \"../types/capability.js\";\nimport type { BundleIdPlatform } from \"../types/enums.js\";\n\nexport class BundleIdsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n identifier?: string;\n name?: string;\n platform?: BundleIdPlatform;\n seedId?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { bundleIds?: string[]; bundleIdCapabilities?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<BundleId[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<BundleId>(\"/v1/bundleIds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<BundleId> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<BundleId>>(\n `/v1/bundleIds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n identifier: string;\n name: string;\n platform: BundleIdPlatform;\n seedId?: string;\n }): Promise<BundleId> {\n const attributes: Record<string, unknown> = {\n identifier: params.identifier,\n name: params.name,\n platform: params.platform,\n };\n if (params.seedId) attributes.seedId = params.seedId;\n\n const response = await this.http.post<JsonApiResponse<BundleId>>(\n \"/v1/bundleIds\",\n {\n data: {\n type: \"bundleIds\",\n attributes,\n },\n }\n );\n return response.data;\n }\n\n async find(identifier: string): Promise<BundleId | null> {\n const results = await this.list({\n filter: { identifier },\n limit: 1,\n });\n return results[0] ?? null;\n }\n\n async getCapabilities(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { Device } from \"../types/device.js\";\nimport type { DeviceStatus, Platform } from \"../types/enums.js\";\n\nexport class DevicesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n name?: string;\n platform?: Platform | Platform[];\n status?: DeviceStatus;\n udid?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<Device[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { devices: params.fields.join(\",\") };\n }\n return this.http.all<Device>(\"/v1/devices\", listParams);\n }\n\n async get(id: string): Promise<Device> {\n const response = await this.http.get<JsonApiResponse<Device>>(\n `/v1/devices/${id}`\n );\n return response.data;\n }\n\n async register(params: {\n name: string;\n platform: Platform;\n udid: string;\n }): Promise<Device> {\n const response = await this.http.post<JsonApiResponse<Device>>(\n \"/v1/devices\",\n {\n data: {\n type: \"devices\",\n attributes: {\n name: params.name,\n platform: params.platform,\n udid: params.udid,\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: { name?: string; status?: DeviceStatus }\n ): Promise<Device> {\n const response = await this.http.patch<JsonApiResponse<Device>>(\n `/v1/devices/${id}`,\n {\n data: {\n type: \"devices\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async findByUdid(udid: string): Promise<Device | null> {\n const results = await this.list({ filter: { udid }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { App } from \"../types/app.js\";\n\nexport class AppsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n bundleId?: string;\n name?: string;\n sku?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { apps?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<App[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<App>(\"/v1/apps\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<App> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<App>>(\n `/v1/apps/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByBundleId(bundleId: string): Promise<App | null> {\n const results = await this.list({\n filter: { bundleId },\n limit: 1,\n });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiListResponse, JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type {\n Build,\n BetaBuildLocalization,\n BuildBetaDetail,\n PreReleaseVersion,\n} from \"../types/build.js\";\n\nexport class BuildsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n processingState?: string;\n \"preReleaseVersion.version\"?: string;\n expired?: string;\n id?: string | string[];\n };\n include?: string;\n fields?: { builds?: string[] };\n limit?: number;\n sort?: string;\n }): Promise<Build[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = {};\n for (const [key, value] of Object.entries(params.fields)) {\n if (value) listParams.fields[key] = value.join(\",\");\n }\n }\n return this.http.all<Build>(\"/v1/builds\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<Build> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<Build>>(\n `/v1/builds/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async getBetaDetail(buildId: string): Promise<BuildBetaDetail> {\n const response = await this.http.get<JsonApiResponse<BuildBetaDetail>>(\n `/v1/builds/${buildId}/buildBetaDetail`\n );\n return response.data;\n }\n\n async getLocalizations(buildId: string): Promise<BetaBuildLocalization[]> {\n return this.http.all<BetaBuildLocalization>(\n `/v1/builds/${buildId}/betaBuildLocalizations`\n );\n }\n\n async createLocalization(params: {\n buildId: string;\n locale: string;\n whatsNew: string;\n }): Promise<BetaBuildLocalization> {\n const response = await this.http.post<\n JsonApiResponse<BetaBuildLocalization>\n >(\"/v1/betaBuildLocalizations\", {\n data: {\n type: \"betaBuildLocalizations\",\n attributes: {\n locale: params.locale,\n whatsNew: params.whatsNew,\n },\n relationships: {\n build: {\n data: { type: \"builds\", id: params.buildId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: { whatsNew: string }\n ): Promise<BetaBuildLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<BetaBuildLocalization>\n >(`/v1/betaBuildLocalizations/${localizationId}`, {\n data: {\n type: \"betaBuildLocalizations\",\n id: localizationId,\n attributes: {\n whatsNew: params.whatsNew,\n },\n },\n });\n return response.data;\n }\n\n async getPreReleaseVersion(buildId: string): Promise<PreReleaseVersion | null> {\n try {\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/builds/${buildId}/preReleaseVersion`\n );\n return response.data;\n } catch {\n return null;\n }\n }\n\n async submitForBetaReview(buildId: string): Promise<void> {\n await this.http.post(\"/v1/betaAppReviewSubmissions\", {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: {\n data: { type: \"builds\", id: buildId },\n },\n },\n },\n });\n }\n\n async expireBuild(buildId: string): Promise<void> {\n await this.http.patch(`/v1/builds/${buildId}`, {\n data: {\n type: \"builds\",\n id: buildId,\n attributes: {\n expired: true,\n },\n },\n });\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { BetaGroup } from \"../types/build.js\";\n\nexport class BetaGroupsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n name?: string;\n isInternalGroup?: string;\n id?: string | string[];\n };\n fields?: string[];\n limit?: number;\n sort?: string;\n }): Promise<BetaGroup[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n if (params?.fields) {\n listParams.fields = { betaGroups: params.fields.join(\",\") };\n }\n return this.http.all<BetaGroup>(\"/v1/betaGroups\", listParams);\n }\n\n async get(id: string): Promise<BetaGroup> {\n const response = await this.http.get<JsonApiResponse<BetaGroup>>(\n `/v1/betaGroups/${id}`\n );\n return response.data;\n }\n\n async listForApp(appId: string): Promise<BetaGroup[]> {\n return this.http.all<BetaGroup>(`/v1/apps/${appId}/betaGroups`);\n }\n\n async addBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.post(`/v1/betaGroups/${groupId}/relationships/builds`, {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n });\n }\n\n async removeBuilds(groupId: string, buildIds: string[]): Promise<void> {\n await this.http.request(\n `/v1/betaGroups/${groupId}/relationships/builds`,\n {\n method: \"DELETE\",\n body: {\n data: buildIds.map((id) => ({ type: \"builds\", id })),\n },\n }\n );\n }\n\n async findByName(appId: string, name: string): Promise<BetaGroup | null> {\n const groups = await this.listForApp(appId);\n return groups.find((g) => g.attributes.name === name) ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\nimport type {\n BundleIdCapability,\n CapabilitySettingInput,\n} from \"../types/capability.js\";\nimport type { CapabilityType } from \"../types/enums.js\";\n\nexport class CapabilitiesResource {\n constructor(private http: RequestClient) {}\n\n async listForBundleId(bundleIdId: string): Promise<BundleIdCapability[]> {\n return this.http.all<BundleIdCapability>(\n `/v1/bundleIds/${bundleIdId}/bundleIdCapabilities`\n );\n }\n\n async enable(params: {\n bundleIdId: string;\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.post<\n JsonApiResponse<BundleIdCapability>\n >(\"/v1/bundleIdCapabilities\", {\n data: {\n type: \"bundleIdCapabilities\",\n attributes,\n relationships: {\n bundleId: {\n data: { type: \"bundleIds\", id: params.bundleIdId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n capabilityId: string,\n params: {\n capabilityType: CapabilityType;\n settings?: CapabilitySettingInput[];\n }\n ): Promise<BundleIdCapability> {\n const attributes: Record<string, unknown> = {\n capabilityType: params.capabilityType,\n };\n if (params.settings) {\n attributes.settings = params.settings;\n }\n\n const response = await this.http.patch<\n JsonApiResponse<BundleIdCapability>\n >(`/v1/bundleIdCapabilities/${capabilityId}`, {\n data: {\n type: \"bundleIdCapabilities\",\n id: capabilityId,\n attributes,\n },\n });\n return response.data;\n }\n\n async disable(capabilityId: string): Promise<void> {\n await this.http.delete(`/v1/bundleIdCapabilities/${capabilityId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse, ListParams } from \"../client/types.js\";\nimport type { AppStoreVersionState, Platform, ReleaseType } from \"../types/enums.js\";\n\nexport interface AppStoreVersion {\n id: string;\n type: \"appStoreVersions\";\n attributes: {\n platform: Platform;\n versionString: string;\n appStoreState: AppStoreVersionState;\n copyright: string | null;\n releaseType: ReleaseType | null;\n earliestReleaseDate: string | null;\n downloadable: boolean;\n createdDate: string;\n };\n relationships?: {\n app?: { data: { type: \"apps\"; id: string } };\n build?: { data: { type: \"builds\"; id: string } | null };\n appStoreVersionLocalizations?: {\n data: Array<{ type: \"appStoreVersionLocalizations\"; id: string }>;\n };\n };\n}\n\nexport interface AppStoreVersionLocalization {\n id: string;\n type: \"appStoreVersionLocalizations\";\n attributes: {\n description: string | null;\n locale: string;\n keywords: string | null;\n marketingUrl: string | null;\n promotionalText: string | null;\n supportUrl: string | null;\n whatsNew: string | null;\n };\n}\n\nexport class AppStoreVersionsResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(\n appId: string,\n params?: {\n filter?: { appStoreState?: AppStoreVersionState | AppStoreVersionState[]; platform?: Platform };\n include?: string;\n limit?: number;\n }\n ): Promise<AppStoreVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppStoreVersion>(\n `/v1/apps/${appId}/appStoreVersions`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppStoreVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appId: string;\n versionString: string;\n platform: Platform;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string;\n copyright?: string;\n }): Promise<AppStoreVersion> {\n const attributes: Record<string, unknown> = {\n versionString: params.versionString,\n platform: params.platform,\n };\n if (params.releaseType) attributes.releaseType = params.releaseType;\n if (params.earliestReleaseDate) attributes.earliestReleaseDate = params.earliestReleaseDate;\n if (params.copyright) attributes.copyright = params.copyright;\n\n const response = await this.http.post<JsonApiResponse<AppStoreVersion>>(\n \"/v1/appStoreVersions\",\n {\n data: {\n type: \"appStoreVersions\",\n attributes,\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n params: {\n versionString?: string;\n copyright?: string;\n releaseType?: ReleaseType;\n earliestReleaseDate?: string | null;\n }\n ): Promise<AppStoreVersion> {\n const response = await this.http.patch<JsonApiResponse<AppStoreVersion>>(\n `/v1/appStoreVersions/${id}`,\n {\n data: {\n type: \"appStoreVersions\",\n id,\n attributes: params,\n },\n }\n );\n return response.data;\n }\n\n async setBuild(versionId: string, buildId: string): Promise<void> {\n await this.http.patch(`/v1/appStoreVersions/${versionId}/relationships/build`, {\n data: { type: \"builds\", id: buildId },\n });\n }\n\n async getLocalizations(versionId: string): Promise<AppStoreVersionLocalization[]> {\n return this.http.all<AppStoreVersionLocalization>(\n `/v1/appStoreVersions/${versionId}/appStoreVersionLocalizations`\n );\n }\n\n async createLocalization(params: {\n versionId: string;\n locale: string;\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }): Promise<AppStoreVersionLocalization> {\n const { versionId, ...attributes } = params;\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionLocalization>\n >(\"/v1/appStoreVersionLocalizations\", {\n data: {\n type: \"appStoreVersionLocalizations\",\n attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async updateLocalization(\n localizationId: string,\n params: {\n description?: string;\n keywords?: string;\n marketingUrl?: string;\n promotionalText?: string;\n supportUrl?: string;\n whatsNew?: string;\n }\n ): Promise<AppStoreVersionLocalization> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreVersionLocalization>\n >(`/v1/appStoreVersionLocalizations/${localizationId}`, {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: localizationId,\n attributes: params,\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppScreenshotSet {\n id: string;\n type: \"appScreenshotSets\";\n attributes: {\n screenshotDisplayType: string;\n };\n}\n\nexport interface AppScreenshot {\n id: string;\n type: \"appScreenshots\";\n attributes: {\n fileSize: number;\n fileName: string;\n sourceFileChecksum: string | null;\n imageAsset: {\n templateUrl: string;\n width: number;\n height: number;\n } | null;\n assetToken: string | null;\n assetType: string | null;\n uploadOperations: UploadOperation[] | null;\n assetDeliveryState: {\n state: string;\n errors: unknown[];\n } | null;\n };\n}\n\nexport interface UploadOperation {\n method: string;\n url: string;\n length: number;\n offset: number;\n requestHeaders: Array<{ name: string; value: string }>;\n}\n\nexport class AppScreenshotsResource {\n constructor(private http: RequestClient) {}\n\n async listSetsForLocalization(\n localizationId: string\n ): Promise<AppScreenshotSet[]> {\n return this.http.all<AppScreenshotSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appScreenshotSets`\n );\n }\n\n async createSet(params: {\n localizationId: string;\n screenshotDisplayType: string;\n }): Promise<AppScreenshotSet> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshotSet>\n >(\"/v1/appScreenshotSets\", {\n data: {\n type: \"appScreenshotSets\",\n attributes: {\n screenshotDisplayType: params.screenshotDisplayType,\n },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.localizationId,\n },\n },\n },\n },\n });\n return response.data;\n }\n\n async listScreenshots(setId: string): Promise<AppScreenshot[]> {\n return this.http.all<AppScreenshot>(\n `/v1/appScreenshotSets/${setId}/appScreenshots`\n );\n }\n\n async reserveScreenshot(params: {\n setId: string;\n fileName: string;\n fileSize: number;\n }): Promise<AppScreenshot> {\n const response = await this.http.post<\n JsonApiResponse<AppScreenshot>\n >(\"/v1/appScreenshots\", {\n data: {\n type: \"appScreenshots\",\n attributes: {\n fileName: params.fileName,\n fileSize: params.fileSize,\n },\n relationships: {\n appScreenshotSet: {\n data: { type: \"appScreenshotSets\", id: params.setId },\n },\n },\n },\n });\n return response.data;\n }\n\n async commitScreenshot(\n screenshotId: string,\n params: { sourceFileChecksum: string; uploaded: boolean }\n ): Promise<AppScreenshot> {\n const response = await this.http.patch<\n JsonApiResponse<AppScreenshot>\n >(`/v1/appScreenshots/${screenshotId}`, {\n data: {\n type: \"appScreenshots\",\n id: screenshotId,\n attributes: {\n sourceFileChecksum: params.sourceFileChecksum,\n uploaded: params.uploaded,\n },\n },\n });\n return response.data;\n }\n\n async deleteScreenshot(screenshotId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshots/${screenshotId}`);\n }\n\n async deleteSet(setId: string): Promise<void> {\n await this.http.delete(`/v1/appScreenshotSets/${setId}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResponse } from \"../client/types.js\";\n\nexport interface ReviewSubmission {\n id: string;\n type: \"reviewSubmissions\";\n attributes: {\n state: string;\n submittedDate: string | null;\n platform: string;\n };\n}\n\nexport interface AppStoreVersionSubmission {\n id: string;\n type: \"appStoreVersionSubmissions\";\n}\n\nexport class ReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async submitVersion(versionId: string): Promise<AppStoreVersionSubmission> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreVersionSubmission>\n >(\"/v1/appStoreVersionSubmissions\", {\n data: {\n type: \"appStoreVersionSubmissions\",\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: versionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async createReviewSubmission(params: {\n appId: string;\n platform: string;\n }): Promise<ReviewSubmission> {\n const response = await this.http.post<\n JsonApiResponse<ReviewSubmission>\n >(\"/v1/reviewSubmissions\", {\n data: {\n type: \"reviewSubmissions\",\n attributes: {\n platform: params.platform,\n },\n relationships: {\n app: {\n data: { type: \"apps\", id: params.appId },\n },\n },\n },\n });\n return response.data;\n }\n\n async confirmReviewSubmission(submissionId: string): Promise<ReviewSubmission> {\n const response = await this.http.patch<\n JsonApiResponse<ReviewSubmission>\n >(`/v1/reviewSubmissions/${submissionId}`, {\n data: {\n type: \"reviewSubmissions\",\n id: submissionId,\n attributes: {\n submitted: true,\n },\n },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\n/**\n * App Info is the metadata container that holds an app's categories, age\n * ratings, and localisations for a single submission cycle. Ported from\n * `spaceship/connect_api/models/app_info.rb`.\n */\nexport interface AppInfoAttributes {\n appStoreState?: string | null;\n state?: string | null;\n appStoreAgeRating?: string | null;\n brazilAgeRating?: string | null;\n kidsAgeBand?: string | null;\n}\n\nexport type AppInfo = JsonApiResource<\"appInfos\", AppInfoAttributes>;\n\nexport class AppInfosResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppInfo[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppInfo>(`/v1/apps/${appId}/appInfos`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppInfo> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async update(\n id: string,\n relationships?: Record<string, { type: string; id: string } | null>\n ): Promise<AppInfo> {\n const response = await this.http.patch<JsonApiResponse<AppInfo>>(\n `/v1/appInfos/${id}`,\n {\n data: {\n type: \"appInfos\",\n id,\n ...(relationships\n ? {\n relationships: Object.fromEntries(\n Object.entries(relationships).map(([k, v]) => [k, { data: v }])\n ),\n }\n : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfos/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppInfoLocalizationAttributes {\n locale: string;\n name?: string | null;\n subtitle?: string | null;\n privacyPolicyUrl?: string | null;\n privacyChoicesUrl?: string | null;\n privacyPolicyText?: string | null;\n}\n\nexport type AppInfoLocalization = JsonApiResource<\n \"appInfoLocalizations\",\n AppInfoLocalizationAttributes\n>;\n\nexport class AppInfoLocalizationsResource {\n constructor(private http: RequestClient) {}\n\n async listForAppInfo(appInfoId: string, params?: {\n limit?: number;\n }): Promise<AppInfoLocalization[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppInfoLocalization>(\n `/v1/appInfos/${appInfoId}/appInfoLocalizations`,\n listParams\n );\n }\n\n async get(id: string): Promise<AppInfoLocalization> {\n const response = await this.http.get<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appInfoId: string;\n attributes: AppInfoLocalizationAttributes;\n }): Promise<AppInfoLocalization> {\n const response = await this.http.post<JsonApiResponse<AppInfoLocalization>>(\n \"/v1/appInfoLocalizations\",\n {\n data: {\n type: \"appInfoLocalizations\",\n attributes: params.attributes,\n relationships: {\n appInfo: { data: { type: \"appInfos\", id: params.appInfoId } },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppInfoLocalizationAttributes>\n ): Promise<AppInfoLocalization> {\n const response = await this.http.patch<JsonApiResponse<AppInfoLocalization>>(\n `/v1/appInfoLocalizations/${id}`,\n { data: { type: \"appInfoLocalizations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appInfoLocalizations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppStoreReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type AppStoreReviewDetail = JsonApiResource<\n \"appStoreReviewDetails\",\n AppStoreReviewDetailAttributes\n>;\n\nexport class AppStoreReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreVersions/${appStoreVersionId}/appStoreReviewDetail`);\n return response.data;\n }\n\n async get(id: string): Promise<AppStoreReviewDetail> {\n const response = await this.http.get<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`);\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: AppStoreReviewDetailAttributes;\n }): Promise<AppStoreReviewDetail> {\n const response = await this.http.post<\n JsonApiResponse<AppStoreReviewDetail>\n >(\"/v1/appStoreReviewDetails\", {\n data: {\n type: \"appStoreReviewDetails\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n });\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AppStoreReviewDetailAttributes>\n ): Promise<AppStoreReviewDetail> {\n const response = await this.http.patch<\n JsonApiResponse<AppStoreReviewDetail>\n >(`/v1/appStoreReviewDetails/${id}`, {\n data: { type: \"appStoreReviewDetails\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaTesterAttributes {\n firstName?: string | null;\n lastName?: string | null;\n email: string;\n inviteType?: \"EMAIL\" | \"PUBLIC_LINK\" | null;\n state?: string | null;\n}\n\nexport type BetaTester = JsonApiResource<\"betaTesters\", BetaTesterAttributes>;\n\nexport class BetaTestersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n email?: string;\n firstName?: string;\n lastName?: string;\n inviteType?: string;\n apps?: string | string[];\n betaGroups?: string | string[];\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<BetaTester[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<BetaTester>(\"/v1/betaTesters\", listParams);\n }\n\n async get(id: string): Promise<BetaTester> {\n const response = await this.http.get<JsonApiResponse<BetaTester>>(\n `/v1/betaTesters/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n email: string;\n firstName?: string;\n lastName?: string;\n betaGroupIds?: string[];\n appIds?: string[];\n }): Promise<BetaTester> {\n const attributes: BetaTesterAttributes = {\n email: params.email,\n firstName: params.firstName,\n lastName: params.lastName,\n };\n const relationships: Record<string, { data: Array<{ type: string; id: string }> }> = {};\n if (params.betaGroupIds?.length) {\n relationships.betaGroups = {\n data: params.betaGroupIds.map((id) => ({ type: \"betaGroups\", id })),\n };\n }\n if (params.appIds?.length) {\n relationships.apps = {\n data: params.appIds.map((id) => ({ type: \"apps\", id })),\n };\n }\n const response = await this.http.post<JsonApiResponse<BetaTester>>(\n \"/v1/betaTesters\",\n {\n data: {\n type: \"betaTesters\",\n attributes,\n ...(Object.keys(relationships).length ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/betaTesters/${id}`);\n }\n\n async findByEmail(email: string): Promise<BetaTester | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaAppReviewSubmissionAttributes {\n betaReviewState?: string | null;\n submittedDate?: string | null;\n}\n\nexport type BetaAppReviewSubmission = JsonApiResource<\n \"betaAppReviewSubmissions\",\n BetaAppReviewSubmissionAttributes\n>;\n\nexport class BetaAppReviewSubmissionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { build?: string | string[]; betaReviewState?: string };\n limit?: number;\n }): Promise<BetaAppReviewSubmission[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaAppReviewSubmission>(\n \"/v1/betaAppReviewSubmissions\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewSubmission>>(\n `/v1/betaAppReviewSubmissions/${id}`\n );\n return response.data;\n }\n\n async create(buildId: string): Promise<BetaAppReviewSubmission> {\n const response = await this.http.post<JsonApiResponse<BetaAppReviewSubmission>>(\n \"/v1/betaAppReviewSubmissions\",\n {\n data: {\n type: \"betaAppReviewSubmissions\",\n relationships: {\n build: { data: { type: \"builds\", id: buildId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface BetaAppReviewDetailAttributes {\n contactFirstName?: string | null;\n contactLastName?: string | null;\n contactPhone?: string | null;\n contactEmail?: string | null;\n demoAccountName?: string | null;\n demoAccountPassword?: string | null;\n demoAccountRequired?: boolean | null;\n notes?: string | null;\n}\n\nexport type BetaAppReviewDetail = JsonApiResource<\n \"betaAppReviewDetails\",\n BetaAppReviewDetailAttributes\n>;\n\nexport class BetaAppReviewDetailsResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/apps/${appId}/betaAppReviewDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<BetaAppReviewDetail> {\n const response = await this.http.get<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaAppReviewDetailAttributes>\n ): Promise<BetaAppReviewDetail> {\n const response = await this.http.patch<JsonApiResponse<BetaAppReviewDetail>>(\n `/v1/betaAppReviewDetails/${id}`,\n { data: { type: \"betaAppReviewDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport type InvitationType = \"EMAIL\" | \"PUBLIC_LINK\";\n\nexport interface BetaTesterInvitationAttributes {\n // Write-only resource: no stored attributes, just a creation side-effect.\n [key: string]: unknown;\n}\n\nexport type BetaTesterInvitation = JsonApiResource<\n \"betaTesterInvitations\",\n BetaTesterInvitationAttributes\n>;\n\nexport class BetaInvitationsResource {\n constructor(private http: RequestClient) {}\n\n /** Send a TestFlight invitation email for an existing tester + app. */\n async send(params: {\n appId: string;\n betaTesterId: string;\n }): Promise<BetaTesterInvitation> {\n const response = await this.http.post<JsonApiResponse<BetaTesterInvitation>>(\n \"/v1/betaTesterInvitations\",\n {\n data: {\n type: \"betaTesterInvitations\",\n relationships: {\n app: { data: { type: \"apps\", id: params.appId } },\n betaTester: { data: { type: \"betaTesters\", id: params.betaTesterId } },\n },\n },\n }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface BetaLicenseAgreementAttributes {\n agreementText?: string | null;\n}\n\nexport type BetaLicenseAgreement = JsonApiResource<\n \"betaLicenseAgreements\",\n BetaLicenseAgreementAttributes\n>;\n\nexport class BetaLicensesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<BetaLicenseAgreement[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<BetaLicenseAgreement>(\n \"/v1/betaLicenseAgreements\",\n listParams\n );\n }\n\n async get(id: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/betaLicenseAgreements/${id}`\n );\n return response.data;\n }\n\n async getForApp(appId: string): Promise<BetaLicenseAgreement> {\n const response = await this.http.get<JsonApiResponse<BetaLicenseAgreement>>(\n `/v1/apps/${appId}/betaLicenseAgreement`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<BetaLicenseAgreementAttributes>\n ): Promise<BetaLicenseAgreement> {\n const response = await this.http.patch<\n JsonApiResponse<BetaLicenseAgreement>\n >(`/v1/betaLicenseAgreements/${id}`, {\n data: { type: \"betaLicenseAgreements\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AppPreviewAttributes {\n fileSize?: number | null;\n fileName?: string | null;\n sourceFileChecksum?: string | null;\n previewFrameTimeCode?: string | null;\n mimeType?: string | null;\n videoUrl?: string | null;\n previewImage?: { templateUrl?: string; width?: number; height?: number } | null;\n uploadOperations?: unknown[] | null;\n assetDeliveryState?: { state?: string } | null;\n uploaded?: boolean | null;\n}\n\nexport type AppPreview = JsonApiResource<\"appPreviews\", AppPreviewAttributes>;\n\nexport class AppPreviewsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AppPreview> {\n const response = await this.http.get<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appPreviewSetId: string;\n fileSize: number;\n fileName: string;\n previewFrameTimeCode?: string;\n mimeType?: string;\n }): Promise<AppPreview> {\n const { appPreviewSetId, ...rest } = params;\n const response = await this.http.post<JsonApiResponse<AppPreview>>(\n \"/v1/appPreviews\",\n {\n data: {\n type: \"appPreviews\",\n attributes: rest,\n relationships: {\n appPreviewSet: {\n data: { type: \"appPreviewSets\", id: appPreviewSetId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { uploaded?: boolean; sourceFileChecksum?: string; previewFrameTimeCode?: string }\n ): Promise<AppPreview> {\n const response = await this.http.patch<JsonApiResponse<AppPreview>>(\n `/v1/appPreviews/${id}`,\n { data: { type: \"appPreviews\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviews/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPreviewSetAttributes {\n previewType?: string | null;\n}\n\nexport type AppPreviewSet = JsonApiResource<\n \"appPreviewSets\",\n AppPreviewSetAttributes\n>;\n\nexport class AppPreviewSetsResource {\n constructor(private http: RequestClient) {}\n\n async listForLocalization(\n localizationId: string,\n params?: { limit?: number; include?: string }\n ): Promise<AppPreviewSet[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPreviewSet>(\n `/v1/appStoreVersionLocalizations/${localizationId}/appPreviewSets`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPreviewSet> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPreviewSet>>(\n `/v1/appPreviewSets/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionLocalizationId: string;\n previewType: string;\n }): Promise<AppPreviewSet> {\n const response = await this.http.post<JsonApiResponse<AppPreviewSet>>(\n \"/v1/appPreviewSets\",\n {\n data: {\n type: \"appPreviewSets\",\n attributes: { previewType: params.previewType },\n relationships: {\n appStoreVersionLocalization: {\n data: {\n type: \"appStoreVersionLocalizations\",\n id: params.appStoreVersionLocalizationId,\n },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/appPreviewSets/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppPriceAttributes {\n startDate?: string | null;\n}\n\nexport type AppPrice = JsonApiResource<\"appPrices\", AppPriceAttributes>;\n\nexport class AppPricesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n include?: string;\n limit?: number;\n }): Promise<AppPrice[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n include: params?.include,\n };\n return this.http.all<AppPrice>(`/v1/apps/${appId}/prices`, listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppPrice> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppPrice>>(\n `/v1/appPrices/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface TerritoryAttributes {\n currency?: string | null;\n}\n\nexport type Territory = JsonApiResource<\"territories\", TerritoryAttributes>;\n\nexport class TerritoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: { limit?: number }): Promise<Territory[]> {\n const listParams: ListParams = {\n limit: params?.limit ?? 200,\n };\n return this.http.all<Territory>(\"/v1/territories\", listParams);\n }\n\n async get(id: string): Promise<Territory> {\n const response = await this.http.get<JsonApiResponse<Territory>>(\n `/v1/territories/${id}`\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface AgeRatingDeclarationAttributes {\n alcoholTobaccoOrDrugUseOrReferences?: string | null;\n contests?: string | null;\n gamblingSimulated?: string | null;\n medicalOrTreatmentInformation?: string | null;\n profanityOrCrudeHumor?: string | null;\n sexualContentGraphicAndNudity?: string | null;\n sexualContentOrNudity?: string | null;\n horrorOrFearThemes?: string | null;\n matureOrSuggestiveThemes?: string | null;\n unrestrictedWebAccess?: boolean | null;\n gamblingAndContests?: boolean | null;\n gambling?: string | null;\n violenceCartoonOrFantasy?: string | null;\n violenceRealistic?: string | null;\n violenceRealisticProlongedGraphicOrSadistic?: string | null;\n kidsAgeBand?: string | null;\n seventeenPlus?: boolean | null;\n}\n\nexport type AgeRatingDeclaration = JsonApiResource<\n \"ageRatingDeclarations\",\n AgeRatingDeclarationAttributes\n>;\n\nexport class AgeRatingDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async get(id: string): Promise<AgeRatingDeclaration> {\n const response = await this.http.get<JsonApiResponse<AgeRatingDeclaration>>(\n `/v1/ageRatingDeclarations/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<AgeRatingDeclarationAttributes>\n ): Promise<AgeRatingDeclaration> {\n const response = await this.http.patch<\n JsonApiResponse<AgeRatingDeclaration>\n >(`/v1/ageRatingDeclarations/${id}`, {\n data: { type: \"ageRatingDeclarations\", id, attributes },\n });\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppCategoryAttributes {\n platforms?: string[] | null;\n}\n\nexport type AppCategory = JsonApiResource<\"appCategories\", AppCategoryAttributes>;\n\nexport class AppCategoriesResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { platforms?: string };\n include?: string;\n limit?: number;\n }): Promise<AppCategory[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppCategory>(\"/v1/appCategories\", listParams);\n }\n\n async get(id: string, params?: { include?: string }): Promise<AppCategory> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<AppCategory>>(\n `/v1/appCategories/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface AppEncryptionDeclarationAttributes {\n appEncryptionDeclarationState?: string | null;\n createdDate?: string | null;\n codeValue?: string | null;\n usesEncryption?: boolean | null;\n exempt?: boolean | null;\n containsProprietaryCryptography?: boolean | null;\n containsThirdPartyCryptography?: boolean | null;\n availableOnFrenchStore?: boolean | null;\n platform?: string | null;\n uploadedDate?: string | null;\n documentUrl?: string | null;\n documentName?: string | null;\n documentType?: string | null;\n}\n\nexport type AppEncryptionDeclaration = JsonApiResource<\n \"appEncryptionDeclarations\",\n AppEncryptionDeclarationAttributes\n>;\n\nexport class AppEncryptionDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { app?: string; platform?: string };\n limit?: number;\n }): Promise<AppEncryptionDeclaration[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n limit: params?.limit ?? 200,\n };\n return this.http.all<AppEncryptionDeclaration>(\n \"/v1/appEncryptionDeclarations\",\n listParams\n );\n }\n\n async get(id: string): Promise<AppEncryptionDeclaration> {\n const response = await this.http.get<\n JsonApiResponse<AppEncryptionDeclaration>\n >(`/v1/appEncryptionDeclarations/${id}`);\n return response.data;\n }\n\n async assignToBuild(params: {\n declarationId: string;\n buildIds: string[];\n }): Promise<void> {\n await this.http.post(\n `/v1/appEncryptionDeclarations/${params.declarationId}/relationships/builds`,\n { data: params.buildIds.map((id) => ({ type: \"builds\", id })) }\n );\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface IdfaDeclarationAttributes {\n honorsLimitedAdTracking?: boolean | null;\n servesAds?: boolean | null;\n attributesActionWithPreviousAd?: boolean | null;\n attributesAppInstallationToPreviousAd?: boolean | null;\n}\n\nexport type IdfaDeclaration = JsonApiResource<\n \"idfaDeclarations\",\n IdfaDeclarationAttributes\n>;\n\nexport class IdfaDeclarationsResource {\n constructor(private http: RequestClient) {}\n\n async getForAppStoreVersion(\n appStoreVersionId: string\n ): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/appStoreVersions/${appStoreVersionId}/idfaDeclaration`\n );\n return response.data;\n }\n\n async get(id: string): Promise<IdfaDeclaration> {\n const response = await this.http.get<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n appStoreVersionId: string;\n attributes: IdfaDeclarationAttributes;\n }): Promise<IdfaDeclaration> {\n const response = await this.http.post<JsonApiResponse<IdfaDeclaration>>(\n \"/v1/idfaDeclarations\",\n {\n data: {\n type: \"idfaDeclarations\",\n attributes: params.attributes,\n relationships: {\n appStoreVersion: {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n },\n },\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<IdfaDeclarationAttributes>\n ): Promise<IdfaDeclaration> {\n const response = await this.http.patch<JsonApiResponse<IdfaDeclaration>>(\n `/v1/idfaDeclarations/${id}`,\n { data: { type: \"idfaDeclarations\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/idfaDeclarations/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface PreReleaseVersionAttributes {\n version?: string | null;\n platform?: string | null;\n}\n\nexport type PreReleaseVersion = JsonApiResource<\n \"preReleaseVersions\",\n PreReleaseVersionAttributes\n>;\n\nexport class PreReleaseVersionsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: {\n app?: string;\n version?: string;\n platform?: string;\n \"builds.expired\"?: string;\n \"builds.processingState\"?: string;\n \"builds.version\"?: string;\n };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<PreReleaseVersion[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<PreReleaseVersion>(\n \"/v1/preReleaseVersions\",\n listParams\n );\n }\n\n async get(\n id: string,\n params?: { include?: string }\n ): Promise<PreReleaseVersion> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<PreReleaseVersion>>(\n `/v1/preReleaseVersions/${id}`,\n queryParams\n );\n return response.data;\n }\n\n async findByVersion(params: {\n appId: string;\n version: string;\n platform?: string;\n }): Promise<PreReleaseVersion | null> {\n const filter: Record<string, string> = {\n app: params.appId,\n version: params.version,\n };\n if (params.platform) filter.platform = params.platform;\n const results = await this.list({ filter, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface ReviewSubmissionItemAttributes {\n state?: string | null;\n removed?: boolean | null;\n ready?: boolean | null;\n}\n\nexport type ReviewSubmissionItem = JsonApiResource<\n \"reviewSubmissionItems\",\n ReviewSubmissionItemAttributes\n>;\n\nexport class ReviewSubmissionItemsResource {\n constructor(private http: RequestClient) {}\n\n async listForSubmission(\n reviewSubmissionId: string,\n params?: { include?: string; limit?: number }\n ): Promise<ReviewSubmissionItem[]> {\n const listParams: ListParams = {\n include: params?.include,\n limit: params?.limit ?? 200,\n };\n return this.http.all<ReviewSubmissionItem>(\n `/v1/reviewSubmissions/${reviewSubmissionId}/items`,\n listParams\n );\n }\n\n async get(id: string): Promise<ReviewSubmissionItem> {\n const response = await this.http.get<JsonApiResponse<ReviewSubmissionItem>>(\n `/v1/reviewSubmissionItems/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n reviewSubmissionId: string;\n appStoreVersionId?: string;\n appCustomProductPageVersionId?: string;\n appStoreVersionExperimentId?: string;\n }): Promise<ReviewSubmissionItem> {\n const relationships: Record<string, { data: { type: string; id: string } }> = {\n reviewSubmission: {\n data: { type: \"reviewSubmissions\", id: params.reviewSubmissionId },\n },\n };\n if (params.appStoreVersionId) {\n relationships.appStoreVersion = {\n data: { type: \"appStoreVersions\", id: params.appStoreVersionId },\n };\n }\n if (params.appCustomProductPageVersionId) {\n relationships.appCustomProductPageVersion = {\n data: {\n type: \"appCustomProductPageVersions\",\n id: params.appCustomProductPageVersionId,\n },\n };\n }\n if (params.appStoreVersionExperimentId) {\n relationships.appStoreVersionExperiment = {\n data: {\n type: \"appStoreVersionExperiments\",\n id: params.appStoreVersionExperimentId,\n },\n };\n }\n const response = await this.http.post<JsonApiResponse<ReviewSubmissionItem>>(\n \"/v1/reviewSubmissionItems\",\n {\n data: {\n type: \"reviewSubmissionItems\",\n relationships,\n },\n }\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: { removed?: boolean }\n ): Promise<ReviewSubmissionItem> {\n const response = await this.http.patch<JsonApiResponse<ReviewSubmissionItem>>(\n `/v1/reviewSubmissionItems/${id}`,\n { data: { type: \"reviewSubmissionItems\", id, attributes } }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/reviewSubmissionItems/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserAttributes {\n username?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n roles?: string[] | null;\n allAppsVisible?: boolean | null;\n provisioningAllowed?: boolean | null;\n}\n\nexport type User = JsonApiResource<\"users\", UserAttributes>;\n\nexport class UsersResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { username?: string; roles?: string | string[] };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<User[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<User>(\"/v1/users\", listParams);\n }\n\n async get(id: string): Promise<User> {\n const response = await this.http.get<JsonApiResponse<User>>(`/v1/users/${id}`);\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<UserAttributes>,\n visibleAppIds?: string[]\n ): Promise<User> {\n const relationships = visibleAppIds\n ? {\n visibleApps: {\n data: visibleAppIds.map((id) => ({ type: \"apps\", id })),\n },\n }\n : undefined;\n const response = await this.http.patch<JsonApiResponse<User>>(\n `/v1/users/${id}`,\n {\n data: {\n type: \"users\",\n id,\n attributes,\n ...(relationships ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/users/${id}`);\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface UserInvitationAttributes {\n email: string;\n firstName?: string | null;\n lastName?: string | null;\n expirationDate?: string | null;\n roles?: string[] | null;\n allAppsVisible?: boolean | null;\n provisioningAllowed?: boolean | null;\n}\n\nexport type UserInvitation = JsonApiResource<\n \"userInvitations\",\n UserInvitationAttributes\n>;\n\nexport class UserInvitationsResource {\n constructor(private http: RequestClient) {}\n\n async list(params?: {\n filter?: { email?: string; roles?: string | string[] };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<UserInvitation[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<UserInvitation>(\"/v1/userInvitations\", listParams);\n }\n\n async get(id: string): Promise<UserInvitation> {\n const response = await this.http.get<JsonApiResponse<UserInvitation>>(\n `/v1/userInvitations/${id}`\n );\n return response.data;\n }\n\n async create(params: {\n attributes: UserInvitationAttributes;\n visibleAppIds?: string[];\n }): Promise<UserInvitation> {\n const relationships = params.visibleAppIds\n ? {\n visibleApps: {\n data: params.visibleAppIds.map((id) => ({ type: \"apps\", id })),\n },\n }\n : undefined;\n const response = await this.http.post<JsonApiResponse<UserInvitation>>(\n \"/v1/userInvitations\",\n {\n data: {\n type: \"userInvitations\",\n attributes: params.attributes,\n ...(relationships ? { relationships } : {}),\n },\n }\n );\n return response.data;\n }\n\n async delete(id: string): Promise<void> {\n await this.http.delete(`/v1/userInvitations/${id}`);\n }\n\n async findByEmail(email: string): Promise<UserInvitation | null> {\n const results = await this.list({ filter: { email }, limit: 1 });\n return results[0] ?? null;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse, ListParams } from \"../client/types.js\";\n\nexport interface InAppPurchaseAttributes {\n name?: string | null;\n productId?: string | null;\n inAppPurchaseType?: string | null;\n state?: string | null;\n reviewNote?: string | null;\n familySharable?: boolean | null;\n}\n\nexport type InAppPurchase = JsonApiResource<\n \"inAppPurchases\" | \"inAppPurchasesV2\",\n InAppPurchaseAttributes\n>;\n\nexport class InAppPurchasesResource {\n constructor(private http: RequestClient) {}\n\n async listForApp(appId: string, params?: {\n filter?: { state?: string; inAppPurchaseType?: string };\n include?: string;\n limit?: number;\n sort?: string;\n }): Promise<InAppPurchase[]> {\n const listParams: ListParams = {\n filter: params?.filter as Record<string, string | string[]>,\n include: params?.include,\n limit: params?.limit ?? 200,\n sort: params?.sort,\n };\n return this.http.all<InAppPurchase>(\n `/v2/apps/${appId}/inAppPurchasesV2`,\n listParams\n );\n }\n\n async get(id: string, params?: { include?: string }): Promise<InAppPurchase> {\n const queryParams: Record<string, string | undefined> = {};\n if (params?.include) queryParams[\"include\"] = params.include;\n const response = await this.http.get<JsonApiResponse<InAppPurchase>>(\n `/v2/inAppPurchases/${id}`,\n queryParams\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\nexport interface GameCenterDetailAttributes {\n arcadeEnabled?: boolean | null;\n challengeEnabled?: boolean | null;\n}\n\nexport type GameCenterDetail = JsonApiResource<\n \"gameCenterDetails\",\n GameCenterDetailAttributes\n>;\n\nexport class GameCenterDetailResource {\n constructor(private http: RequestClient) {}\n\n async getForApp(appId: string): Promise<GameCenterDetail> {\n const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n `/v1/apps/${appId}/gameCenterDetail`\n );\n return response.data;\n }\n\n async get(id: string): Promise<GameCenterDetail> {\n const response = await this.http.get<JsonApiResponse<GameCenterDetail>>(\n `/v1/gameCenterDetails/${id}`\n );\n return response.data;\n }\n\n async update(\n id: string,\n attributes: Partial<GameCenterDetailAttributes>\n ): Promise<GameCenterDetail> {\n const response = await this.http.patch<JsonApiResponse<GameCenterDetail>>(\n `/v1/gameCenterDetails/${id}`,\n { data: { type: \"gameCenterDetails\", id, attributes } }\n );\n return response.data;\n }\n}\n","import type { RequestClient } from \"../client/request.js\";\nimport type { JsonApiResource, JsonApiResponse } from \"../client/types.js\";\n\n/**\n * TestFlight / Xcode build metrics. Exposes perf & crash stats per build.\n * Wraps `/v1/builds/{id}/perfPowerMetrics` and\n * `/v1/builds/{id}/diagnosticSignatures`.\n */\nexport interface PerfPowerMetricAttributes {\n metricCategory?: string | null;\n platform?: string | null;\n datasets?: unknown[] | null;\n}\n\nexport type PerfPowerMetric = JsonApiResource<\n \"perfPowerMetrics\",\n PerfPowerMetricAttributes\n>;\n\nexport interface DiagnosticSignatureAttributes {\n signature?: string | null;\n weight?: number | null;\n diagnosticType?: string | null;\n}\n\nexport type DiagnosticSignature = JsonApiResource<\n \"diagnosticSignatures\",\n DiagnosticSignatureAttributes\n>;\n\nexport class XcodeMetricsResource {\n constructor(private http: RequestClient) {}\n\n async getPerfPowerMetrics(buildId: string): Promise<PerfPowerMetric[]> {\n const response = await this.http.get<{ data: PerfPowerMetric[] }>(\n `/v1/builds/${buildId}/perfPowerMetrics`\n );\n return response.data;\n }\n\n async getDiagnosticSignatures(buildId: string): Promise<DiagnosticSignature[]> {\n const response = await this.http.get<{ data: DiagnosticSignature[] }>(\n `/v1/builds/${buildId}/diagnosticSignatures`\n );\n return response.data;\n }\n\n async getPerfPowerMetric(id: string): Promise<PerfPowerMetric> {\n const response = await this.http.get<JsonApiResponse<PerfPowerMetric>>(\n `/v1/perfPowerMetrics/${id}`\n );\n return response.data;\n }\n\n async getDiagnosticSignature(id: string): Promise<DiagnosticSignature> {\n const response = await this.http.get<JsonApiResponse<DiagnosticSignature>>(\n `/v1/diagnosticSignatures/${id}`\n );\n return response.data;\n }\n}\n","/**\n * Apple Developer Portal Client\n * 1:1 port of Fastlane Spaceship PortalClient\n *\n * Uses session cookies (from loginWithAppleId) to talk to\n * developer.apple.com/services-account/QH65B2/\n *\n * This is the web portal API — separate from the ASC REST API (JWT).\n * Fastlane uses this for: certs, profiles, devices, bundle IDs, app groups, etc.\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\nimport { checkPortalResponse } from \"./apple-session.js\";\n\nconst PORTAL_BASE = \"https://developer.apple.com/services-account/QH65B2\";\n\n/**\n * Pick a key name that doesn't collide with any existing key in the\n * team. Apple rejects duplicate names with \"Another key with same name\n * exists\" (resultCode 35). On collision we append \" - 1\", \" - 2\", …\n * until we find a free slot.\n *\n * Note: Apple's auth key name validator is stricter than the profile\n * name validator — it rejects parentheses (resultCode 29106 \"Invalid\n * Auth Key name\") so the suffix is \" - N\" not \" (N)\".\n */\nfunction pickUniqueKeyName(base: string, taken: Set<string>): string {\n if (!taken.has(base)) return base;\n let n = 1;\n while (taken.has(`${base} - ${n}`)) n++;\n return `${base} - ${n}`;\n}\n\nexport class PortalClient {\n private session: AppleSession;\n private teamId: string;\n private csrf = \"\";\n private csrfTs = \"\";\n private cookieStr: string;\n\n constructor(session: AppleSession, teamId: string) {\n this.session = session;\n this.teamId = teamId;\n this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n }\n\n /** Initialize CSRF tokens — must be called before mutations */\n async init(): Promise<void> {\n await this.post(\"account/listTeams.action\", {});\n }\n\n /**\n * JSON POST — different content type than the standard form-encoded\n * `post()`. Used by the App Store Connect API key endpoints\n * (`account/auth/key/v2/create`), which Spaceship discovered take a\n * JSON body even though every other portal mutation is form-encoded.\n *\n * Like the form-encoded `post()`, this also runs the response through\n * `checkPortalResponse` — Apple returns HTTP 200 even for errors and\n * encodes the error in `resultCode`/`userString` fields, so a raw\n * status check would silently miss real failures.\n */\n private async postJson(path: string, body: unknown): Promise<{ status: number; body: any; rawText: string }> {\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n console.log(`[portal] POST(json) ${path}`);\n const res = await fetch(`${PORTAL_BASE}/${path}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(body),\n });\n\n if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n\n const text = await res.text();\n let data: any = null;\n try { data = text ? JSON.parse(text) : null; } catch {}\n console.log(`[portal] POST(json) ${path} → ${res.status} ${text.slice(0, 400)}`);\n // Apple's portal returns HTTP 200 with resultCode != 0 for failures;\n // checkPortalResponse throws on those.\n checkPortalResponse(data, this.session);\n return { status: res.status, body: data, rawText: text };\n }\n\n /**\n * GET helper for the portal endpoints that take query parameters\n * (currently just `account/auth/key/download`). Returns the raw text\n * since download endpoints can return PEMs or JSON depending on Apple's\n * mood — caller decides how to parse.\n */\n private async getRaw(path: string, params: Record<string, string> = {}): Promise<{ status: number; rawText: string; contentType: string }> {\n const url = new URL(`${PORTAL_BASE}/${path}`);\n for (const [k, v] of Object.entries(params)) url.searchParams.set(k, v);\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n Accept: \"application/json, text/plain, application/x-pem-file, */*\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n console.log(`[portal] GET ${url.pathname}${url.search}`);\n const res = await fetch(url.toString(), { headers });\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n const text = await res.text();\n const contentType = res.headers.get(\"content-type\") ?? \"\";\n console.log(`[portal] GET ${url.pathname} → ${res.status} ${contentType} ${text.length}b`);\n return { status: res.status, rawText: text, contentType };\n }\n\n // ── App Store Connect API Keys (.p8) ────────────────────────────────────\n\n /**\n * Create an App Store Connect API key via the developer portal's\n * `account/auth/key/v2/create` endpoint. Reverse-engineered from the\n * _current_ @expo/apple-utils npm package (v2.1.21), which is what\n * EAS CLI uses to manage Apple credentials in production.\n *\n * This differs from older published reverse-engineering guides:\n * • URL uses the `/v2/create` suffix (Apple kept it)\n * • Field is `serviceConfigurations`, shape is an object keyed by\n * service id (NOT `serviceConfigurationsRequests: [...]` array)\n * • Body REQUIRES `scope: \"team\"`\n * • Needs a scope-specific CSRF warmup via the `keys` endpoint\n * before the create call (EAS's `ensureCSRFAsync(\"keys\", …)`)\n *\n * For an App Store Connect API key (PUBLIC_API, used by altool for\n * TestFlight uploads), `serviceConfigurations` is an empty object `{}`.\n * For an APNs auth key, it's `{ \"U27F4V844T\": [] }`. For MusicKit:\n * `{ \"6A7HVUVQ3M\": [musicId] }`, etc.\n *\n * Apple's name validator rejects parentheses, brackets, and most\n * punctuation — sanitize to alphanumeric + space + dash + underscore\n * + period and collapse whitespace.\n */\n async createApiKey(\n rawName: string,\n serviceConfigurations: Record<string, unknown[]> = {}\n ): Promise<{ keyId: string; raw: any }> {\n // Sanitize: drop forbidden chars, leave headroom for a \"(N)\" suffix\n // since Apple caps key names at 50 chars and we may need to dedupe.\n const baseName = rawName\n .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 45);\n if (!baseName) throw new Error(\"createApiKey: name is empty after sanitization\");\n\n // EAS-style CSRF warmup AND name-collision discovery in one trip:\n // listApiKeys refreshes the scoped CSRF for the \"keys\" area\n // (per-section tokens, the listTeams CSRF isn't valid here) and\n // hands us back the existing key names so we can dodge Apple's\n // duplicate-name rejection (\"Another key with same name exists\").\n let existingNames = new Set<string>();\n try {\n const list = await this.listApiKeys();\n existingNames = new Set(\n (list.keys ?? []).map((k: any) => String(k.keyName ?? \"\").trim())\n );\n } catch {\n // Non-fatal — the create call will surface CSRF / collision\n // errors if the warmup mattered and failed.\n }\n\n const name = pickUniqueKeyName(baseName, existingNames);\n\n // EAS's portalRequestAsync auto-injects teamId into every body.\n // Apple rejects the create call without it with resultCode 35.\n const body = {\n teamId: this.teamId,\n name,\n serviceConfigurations,\n scope: \"team\",\n };\n const result = await this.postJson(\"account/auth/key/v2/create\", body);\n // checkPortalResponse inside postJson already throws on resultCode != 0,\n // so any error like \"Invalid Auth Key name\" surfaces as an exception\n // before reaching this point.\n const created = result.body?.keys?.[0] ?? result.body?.key ?? result.body?.data ?? result.body;\n const keyId =\n created?.keyId ??\n created?.id ??\n created?.kid ??\n created?.attributes?.kid;\n if (!keyId) {\n throw new Error(`createApiKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n }\n return { keyId, raw: created };\n }\n\n /**\n * Fetch a single API key by id via `account/auth/key/get`. Reverse-\n * engineered from Spaceship's `get_key`. Returns the raw key record so\n * the caller can extract whatever fields it needs (e.g. issuerId).\n *\n * Form-encoded POST — same shape as every other PortalClient mutation\n * except the JSON `create` endpoint.\n */\n async getApiKey(keyId: string): Promise<any> {\n const data = await this.post(\"account/auth/key/get\", {\n teamId: this.teamId,\n keyId,\n });\n return data?.keys?.[0] ?? data?.key ?? data?.data ?? data;\n }\n\n /**\n * Revoke an existing key. Form-encoded POST per Spaceship's\n * `revoke_key!`. Used for cleaning up orphan keys created during\n * failed wizard runs.\n */\n async revokeApiKey(keyId: string): Promise<void> {\n await this.post(\"account/auth/key/revoke\", {\n teamId: this.teamId,\n keyId,\n });\n }\n\n // ── APNs Authentication Keys (.p8) ──────────────────────────────────────\n\n /** Apple's hardcoded service id for APNs auth keys (from Spaceship). */\n static readonly APNS_SERVICE_ID = \"U27F4V844T\";\n\n /**\n * Create an APNs Authentication Key (.p8) via the developer portal.\n *\n * Apple requires BOTH `serviceConfigurations` (the map) AND\n * `serviceConfigurationsRequests` (the array of full config objects)\n * in the v2/create body. Just sending the map alone results in\n * \"No value was provided for the parameter 'serviceConfigurations'\".\n *\n * The exact body comes from @expo/apple-utils v2.1.21 — both fields\n * are produced by separate functions (`d` for the map, `h` for the\n * array) and merged into the create payload.\n *\n * Apple also rejects duplicate key names (\"Another key with same\n * name exists\") — we dedupe by listing existing keys first and\n * appending \" (N)\" until we find a free slot, mirroring the\n * provisioning profile dedup.\n */\n async createApnsAuthKey(rawName: string): Promise<{ keyId: string; pem: string; raw: any }> {\n const baseName = rawName\n .replace(/[^A-Za-z0-9 _\\-.]/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, 45); // headroom for a \" (N)\" suffix\n if (!baseName) throw new Error(\"createApnsAuthKey: name is empty after sanitization\");\n\n // CSRF warmup + name-collision discovery in one trip\n let existingNames = new Set<string>();\n try {\n const list = await this.listApiKeys();\n existingNames = new Set(\n (list.keys ?? []).map((k: any) => String(k.keyName ?? \"\").trim())\n );\n } catch { /* ignore */ }\n\n const name = pickUniqueKeyName(baseName, existingNames);\n\n const body = {\n teamId: this.teamId,\n name,\n serviceConfigurations: {\n [PortalClient.APNS_SERVICE_ID]: [],\n },\n serviceConfigurationsRequests: [\n {\n isNew: true,\n serviceId: PortalClient.APNS_SERVICE_ID,\n identifiers: {},\n environment: \"all\",\n scope: \"team\",\n },\n ],\n scope: \"team\",\n };\n const result = await this.postJson(\"account/auth/key/v2/create\", body);\n const created = result.body?.keys?.[0];\n if (!created?.keyId) {\n throw new Error(`createApnsAuthKey: no key id in response. Body: ${result.rawText.slice(0, 400)}`);\n }\n // Download the .p8 — Apple only allows this once\n const pem = await this.downloadApiKey(created.keyId);\n return { keyId: created.keyId, pem, raw: created };\n }\n\n /**\n * Find existing APNs auth keys in the team. Used by the wizard to\n * detect \"you already have one\" cases and offer to reuse rather than\n * proliferate keys.\n */\n async listApnsAuthKeys(): Promise<{ keyId: string; keyName: string; canDownload: boolean }[]> {\n const list = await this.listApiKeys();\n return (list.keys ?? [])\n .filter((k: any) =>\n (k.services ?? []).some((s: any) => s.id === PortalClient.APNS_SERVICE_ID || /apns/i.test(s.name ?? \"\"))\n )\n .map((k: any) => ({\n keyId: k.keyId,\n keyName: k.keyName,\n canDownload: Boolean(k.canDownload),\n }));\n }\n\n /**\n * Download an existing App Store Connect API key as PEM. Spaceship's\n * `download_key` endpoint — GET with teamId + keyId in query string.\n * Returns the raw .p8 PEM text. Apple shows the .p8 exactly once\n * (after creation), so call this immediately after createApiKey.\n */\n async downloadApiKey(keyId: string): Promise<string> {\n const { status, rawText, contentType } = await this.getRaw(\"account/auth/key/download\", {\n teamId: this.teamId,\n keyId,\n });\n if (status !== 200) {\n throw new Error(`downloadApiKey failed (${status}): ${rawText.slice(0, 200)}`);\n }\n // Plain PEM text response\n if (rawText.includes(\"BEGIN PRIVATE KEY\")) return rawText;\n // JSON wrapper variants\n if (contentType.includes(\"json\")) {\n try {\n const parsed = JSON.parse(rawText);\n const candidates = [\n parsed?.privateKey,\n parsed?.key?.privateKey,\n parsed?.keys?.[0]?.privateKey,\n parsed?.data?.attributes?.privateKey,\n parsed?.value,\n ];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) return c;\n }\n } catch { /* fall through */ }\n }\n throw new Error(`downloadApiKey returned no PEM. Content-Type=${contentType} body=${rawText.slice(0, 300)}`);\n }\n\n /**\n * List existing API keys via the portal. Used to discover the team's\n * issuer id — every key in the team shares the same issuer id, and\n * altool needs it alongside the key id and .p8 file.\n *\n * Form-encoded POST (NOT JSON), with pagination params, per Spaceship's\n * `list_keys` method. JSON returned 415 from this endpoint.\n */\n async listApiKeys(): Promise<{ keys: any[]; issuerId?: string }> {\n const data = await this.post(\"account/auth/key/list\", {\n teamId: this.teamId,\n pageNumber: \"1\",\n pageSize: \"500\",\n sort: \"name=asc\",\n });\n const keys = data?.keys ?? [];\n // Issuer id may live on the response root, in a metadata bag, or on\n // each key — try all known paths.\n const issuerId =\n data?.issuerId ??\n data?.issuer ??\n data?.team?.issuerId ??\n keys[0]?.issuerId ??\n keys[0]?.issuer;\n return { keys, issuerId };\n }\n\n private async post(path: string, params: Record<string, string | string[]>): Promise<any> {\n // Build form body using URLSearchParams (proper encoding)\n const body = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (Array.isArray(v)) { for (const item of v) body.append(k, item); }\n else body.set(k, v);\n }\n const bodyStr = body.toString();\n\n const headers: Record<string, string> = {\n Cookie: this.cookieStr,\n \"Content-Type\": \"application/x-www-form-urlencoded\",\n Accept: \"application/json\",\n };\n if (this.csrf) { headers[\"csrf\"] = this.csrf; headers[\"csrf_ts\"] = this.csrfTs; }\n\n if (process.env.FASTNODE_DEBUG) console.log(`[portal] POST ${path} body=${bodyStr.slice(0, 200)}`);\n const res = await fetch(`${PORTAL_BASE}/${path}`, { method: \"POST\", headers, body: bodyStr });\n\n // Update CSRF\n if (res.headers.get(\"csrf\")) { this.csrf = res.headers.get(\"csrf\")!; this.csrfTs = res.headers.get(\"csrf_ts\") ?? \"\"; }\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m && !this.cookieStr.includes(m[1] + \"=\")) this.cookieStr += \"; \" + m[1] + \"=\" + m[2];\n }\n\n const text = await res.text();\n let data: any;\n try { data = JSON.parse(text); } catch { throw new Error(`Portal returned non-JSON: ${text.slice(0, 200)}`); }\n checkPortalResponse(data, this.session);\n return data;\n }\n\n // ── Teams ──────────────────────────────────────────────────────────────\n\n async listTeams(): Promise<any[]> {\n const data = await this.post(\"account/listTeams.action\", {});\n return data.teams ?? [];\n }\n\n // ── App IDs / Bundle IDs ───────────────────────────────────────────────\n\n async listAppIds(): Promise<any[]> {\n const data = await this.post(\"account/ios/identifiers/listAppIds.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n });\n return data.appIds ?? [];\n }\n\n async createAppId(params: { identifier: string; name: string; enablePush?: boolean; enableIAP?: boolean }): Promise<any> {\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: \"explicit\", identifier: params.identifier, name: params.name,\n };\n if (params.enablePush) reqParams.push = \"on\";\n if (params.enableIAP !== false) reqParams.inAppPurchase = \"on\";\n const data = await this.post(\"account/ios/identifiers/addAppId.action\", reqParams);\n return data.appId;\n }\n\n async deleteAppId(appIdId: string): Promise<void> {\n await this.post(\"account/ios/identifiers/deleteAppId.action\", { teamId: this.teamId, appIdId });\n }\n\n /**\n * Toggle a capability (a.k.a. \"service\") on a bundle ID. Mirrors\n * Spaceship::Portal's `update_service` — the legacy portal endpoint\n * still works and is the only session-cookie-authenticated way to flip\n * capabilities like Push Notifications and Sign in with Apple from\n * outside the Apple Developer web UI.\n *\n * Common service codes (from Spaceship portal/portal_client.rb):\n * push → push notifications\n * APG3427HIY → Sign in with Apple\n * IAD53UNK2F → in-app purchase\n * homeKit → HomeKit\n * healthKit → HealthKit\n *\n * @param featureType Apple's internal capability key (string code or short name)\n * @param enabled true → turn on, false → turn off\n */\n async setBundleCapability(params: {\n appIdId: string;\n featureType: string;\n enabled: boolean;\n }): Promise<void> {\n await this.post(\"account/ios/identifiers/updateAppService.action\", {\n teamId: this.teamId,\n displayId: params.appIdId,\n featureType: params.featureType,\n featureValue: params.enabled ? \"on\" : \"off\",\n });\n }\n\n // ── Certificates ───────────────────────────────────────────────────────\n\n async listCertificates(types?: string[]): Promise<any[]> {\n // Default to all known iOS cert type codes plus Fastlane's list of\n // legacy type codes (OLDER_IOS_CERTIFICATE_TYPES). The portal may still\n // return these older codes for pre-existing certs and Fastlane's\n // `Certificate.all` includes them — see certificate.rb line 278.\n const iosTypes = types ?? [\n PortalClient.CERT_TYPES.IOS_DEVELOPMENT,\n PortalClient.CERT_TYPES.IOS_DISTRIBUTION,\n ...PortalClient.OLDER_IOS_CERTIFICATE_TYPES,\n ];\n const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n sort: \"certRequestStatusCode=asc\", types: iosTypes.join(\",\"),\n });\n return data.certRequests ?? [];\n }\n\n async listPushCertificates(): Promise<any[]> {\n // iOS-only push cert type codes, deduplicated. The endpoint\n // `account/ios/certificate/listCertRequests.action` rejects any code\n // that isn't an iOS code (so Mac push types, even if listed in\n // CERT_TYPES, must be excluded) and rejects duplicates in the comma\n // list. We also include the legacy push cert codes from before\n // Apple's 2017 cert restructuring — they still occasionally appear\n // for older bundles.\n //\n // The modern unified \"Apple Push Services\" cert (one cert for both\n // prod + sandbox) reuses IOS_PRODUCTION_PUSH (UPV3DW712I), so the\n // first two codes catch every modern case.\n const types = Array.from(\n new Set([\n PortalClient.CERT_TYPES.IOS_PRODUCTION_PUSH,\n PortalClient.CERT_TYPES.IOS_DEVELOPMENT_PUSH,\n // Legacy push codes from OLDER_IOS_CERTIFICATE_TYPES\n \"3BQKVH9I2X\",\n \"BKLRAVXMGM\",\n ])\n );\n const data = await this.post(\"account/ios/certificate/listCertRequests.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\",\n sort: \"certRequestStatusCode=asc\",\n types: types.join(\",\"),\n });\n return data.certRequests ?? [];\n }\n\n async createCertificate(params: { type: string; csrContent: string; appIdId?: string }): Promise<any> {\n const reqParams: Record<string, string> = {\n teamId: this.teamId, type: params.type, csrContent: params.csrContent,\n };\n if (params.appIdId) reqParams.appIdId = params.appIdId;\n const data = await this.post(\"account/ios/certificate/submitCertificateRequest.action\", reqParams);\n return data.certRequest;\n }\n\n async downloadCertificate(certId: string, type: string): Promise<Buffer> {\n const headers: Record<string, string> = { Cookie: this.cookieStr, Accept: \"application/json\" };\n const res = await fetch(\n `${PORTAL_BASE}/account/ios/certificate/downloadCertificateContent.action?teamId=${this.teamId}&certificateId=${certId}&type=${type}`,\n { headers }\n );\n return Buffer.from(await res.arrayBuffer());\n }\n\n async revokeCertificate(certId: string, type: string): Promise<void> {\n await this.post(\"account/ios/certificate/revokeCertificate.action\", {\n teamId: this.teamId, certificateId: certId, type,\n });\n }\n\n // ── Devices ────────────────────────────────────────────────────────────\n\n async listDevices(): Promise<any[]> {\n const data = await this.post(\"account/ios/device/listDevices.action\", {\n teamId: this.teamId, pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\", includeRemovedDevices: \"false\",\n });\n return data.devices ?? [];\n }\n\n async registerDevice(params: { name: string; udid: string; deviceClass?: string }): Promise<any> {\n const data = await this.post(\"account/ios/device/addDevices.action\", {\n teamId: this.teamId, deviceNames: params.name, deviceNumbers: params.udid,\n register: \"single\", deviceClasses: params.deviceClass ?? \"iphone\",\n });\n return (data.devices ?? [])[0];\n }\n\n // ── Provisioning Profiles ──────────────────────────────────────────────\n\n async listProfiles(): Promise<any[]> {\n const data = await this.post(\"account/ios/profile/listProvisioningProfiles.action\", {\n teamId: this.teamId, includeInactiveProfiles: \"true\",\n pageSize: \"500\", pageNumber: \"1\", sort: \"name=asc\",\n });\n return data.provisioningProfiles ?? [];\n }\n\n async createProfile(params: {\n appIdId: string;\n name: string;\n distributionType: string; // \"limited\" (dev), \"store\" (appstore), \"adhoc\"\n certificateIds: string[];\n deviceIds?: string[];\n }): Promise<any> {\n const reqParams: Record<string, string | string[]> = {\n teamId: this.teamId,\n appIdId: params.appIdId,\n distributionType: params.distributionType,\n provisioningProfileName: params.name,\n certificateIds: params.certificateIds,\n };\n if (params.deviceIds?.length) reqParams.deviceIds = params.deviceIds;\n const data = await this.post(\"account/ios/profile/createProvisioningProfile.action\", reqParams);\n return data.provisioningProfile;\n }\n\n async deleteProfile(profileId: string): Promise<void> {\n await this.post(\"account/ios/profile/deleteProvisioningProfile.action\", {\n teamId: this.teamId, provisioningProfileId: profileId,\n });\n }\n\n async downloadProfile(profileId: string): Promise<Buffer> {\n const headers: Record<string, string> = { Cookie: this.cookieStr };\n const res = await fetch(\n `${PORTAL_BASE}/account/ios/profile/downloadProfileContent?teamId=${this.teamId}&provisioningProfileId=${profileId}`,\n { headers }\n );\n return Buffer.from(await res.arrayBuffer());\n }\n\n // ── Certificate Type Constants (matching Fastlane) ─────────────────────\n\n /**\n * Apple certificate type codes — copied 1:1 from Fastlane's\n * spaceship/portal/certificate.rb IOS_CERTIFICATE_TYPE_IDS / MAC_CERTIFICATE_TYPE_IDS\n */\n static CERT_TYPES = {\n // iOS\n IOS_DEVELOPMENT: \"5QPB9NHCEI\",\n IOS_DISTRIBUTION: \"R58UK2EWSO\", // App Store Production\n IOS_IN_HOUSE: \"9RQEK7MSXA\",\n IOS_DEVELOPMENT_PUSH: \"JKG5JZ54H7\",\n IOS_PRODUCTION_PUSH: \"UPV3DW712I\",\n APPLE_PUSH_PRODUCTION: \"UPV3DW712I\", // alias\n APPLE_PUSH_SANDBOX: \"JKG5JZ54H7\", // alias\n PASSBOOK: \"Y3B2F3TYSI\",\n WEBSITE_PUSH: \"3T2ZP62QW8\",\n VOIP_PUSH: \"E5D663CMZW\",\n APPLE_PAY: \"4APLUP237T\",\n APPLE_PAY_MERCHANT_IDENTITY: \"MD8Q2VRT6A\",\n // Universal (Apple Development/Distribution)\n APPLE_DEVELOPMENT: \"83Q87W3TGH\",\n APPLE_DISTRIBUTION: \"WXV89964HE\",\n // Mac\n MAC_DEVELOPMENT: \"749Y1QAGU7\",\n MAC_APP_DISTRIBUTION: \"HXZEUKP0FP\",\n MAC_INSTALLER_DISTRIBUTION: \"2PQI8IDXNH\",\n MAC_PRODUCTION_PUSH: \"CDZ7EMXIZ1\",\n MAC_DEVELOPMENT_PUSH: \"HQ4KP3I34R\",\n DEVELOPER_ID_APPLICATION: \"DIVN2GW3XT\",\n DEVELOPER_ID_INSTALLER: \"OYVN2GW35E\",\n } as const;\n\n /**\n * Legacy iOS certificate type codes that can still appear in the portal\n * responses. Port of Fastlane's Spaceship::Portal::Certificate\n * OLDER_IOS_CERTIFICATE_TYPES list (certificate.rb lines 180-189).\n */\n static OLDER_IOS_CERTIFICATE_TYPES: readonly string[] = [\n \"3BQKVH9I2X\", // old ProductionPush\n \"BKLRAVXMGM\", // old DevelopmentPush\n // Also sent by the browser, but not sure what they represent:\n \"T44PTHVNID\",\n \"DZQUP8189Y\",\n \"FGQUP4785Z\",\n \"S5WE21TULA\",\n \"FUOY7LWJET\",\n ] as const;\n}\n","/**\n * App Store Connect \"iris\" admin API client.\n *\n * The iris API lives at `https://appstoreconnect.apple.com/iris/v1/*` and\n * is what App Store Connect's own web UI uses for everything that doesn't\n * fit the public REST API (which requires JWT). Authentication is via the\n * Olympus session cookies we already obtain after SIRP + 2FA login.\n *\n * Notable iris endpoints (reverse-engineered from the App Store Connect\n * web app — Apple does not publish this API, so the shapes below are best\n * effort and may need iteration):\n *\n * POST /iris/v1/apiKeys\n * Body: { data: { type: \"apiKeys\", attributes: {\n * nickname, allAppsVisible, roles: [\"DEVELOPER\" | \"APP_MANAGER\" | ...]\n * }}}\n * Response: { data: { id, attributes: { nickname, kid, privateKey?, ... }}}\n *\n * `kid` is the key ID used in JWT auth (e.g. \"2X9R4HXF34\"). The\n * `privateKey` field, when present, contains the PEM-encoded .p8\n * content. Apple shows this exactly ONCE at creation time — if we\n * don't capture it, the key is bricked and must be revoked.\n *\n * GET /iris/v1/apiKeys\n * List existing keys. Used to find the issuer id.\n *\n * Roles the wizard uses: \"APP_MANAGER\" is the minimum needed for\n * TestFlight uploads via altool. Higher roles work too.\n *\n * Failure modes:\n * • 403 → user lacks Account Holder / Admin role → fall back to manual\n * • 4xx with `error.detail` → surface the message to the user\n * • 200 but no `privateKey` in response → endpoint shape changed,\n * surface so we can iterate\n */\n\nimport type { AppleSession } from \"./apple-session.js\";\n\nconst IRIS_BASE = \"https://appstoreconnect.apple.com/iris/v1\";\n\nexport type ApiKeyRole =\n | \"ADMIN\"\n | \"FINANCE\"\n | \"ACCESS_TO_REPORTS\"\n | \"APP_MANAGER\"\n | \"DEVELOPER\"\n | \"MARKETING\"\n | \"SALES\"\n | \"CUSTOMER_SUPPORT\";\n\nexport interface IrisApiKey {\n id: string;\n /** Key ID used for JWT auth (the short alphanumeric string) */\n kid: string;\n nickname: string;\n /** PEM-encoded .p8 private key — only present in create response, ONCE */\n privateKey?: string;\n /** Issuer id (UUID) — needed by altool/iTMSTransporter alongside the key id */\n issuerId?: string;\n roles: ApiKeyRole[];\n allAppsVisible: boolean;\n}\n\nexport class IrisClient {\n private cookieStr: string;\n\n constructor(private session: AppleSession) {\n this.cookieStr = Object.entries(session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n }\n\n private buildHeaders(): Record<string, string> {\n return {\n Cookie: this.cookieStr,\n Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n \"Content-Type\": \"application/vnd.api+json\",\n \"X-Requested-With\": \"XMLHttpRequest\",\n // Mimic the App Store Connect web UI's user agent\n \"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15\",\n };\n }\n\n /**\n * Issue a request and absorb any new cookies (Apple rotates session\n * cookies on a lot of iris calls).\n */\n private async request(\n method: \"GET\" | \"POST\" | \"DELETE\",\n path: string,\n body?: unknown\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = this.buildHeaders();\n if (process.env.FASTNODE_DEBUG) {\n console.log(`[iris] ${method} ${path}${body ? ` body=${JSON.stringify(body).slice(0, 200)}` : \"\"}`);\n }\n const res = await fetch(`${IRIS_BASE}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n\n // Absorb new cookies\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) {\n this.session.cookies[m[1]] = m[2];\n }\n }\n this.cookieStr = Object.entries(this.session.cookies)\n .map(([k, v]) => `${k}=${v}`)\n .join(\"; \");\n\n const text = await res.text();\n let parsed: any = null;\n try {\n parsed = text ? JSON.parse(text) : null;\n } catch {\n // not JSON\n }\n if (process.env.FASTNODE_DEBUG) {\n console.log(`[iris] → ${res.status} ${text.slice(0, 300)}`);\n }\n return { status: res.status, body: parsed, rawText: text };\n }\n\n /**\n * List existing API keys. Used both as a sanity check (the user has\n * permission) and to discover the team's issuer id (which is the same\n * for every key in the team and is needed by altool).\n *\n * Important: Apple's iris endpoint rejects most query parameters with\n * `PARAMETER_ERROR.INVALID`. Call with no params and let the API return\n * its default page.\n */\n async listApiKeys(): Promise<{ keys: IrisApiKey[]; issuerId?: string }> {\n const { status, body, rawText } = await this.request(\"GET\", \"/apiKeys\");\n if (status === 403) {\n throw new IrisAuthError(\n \"You don't have permission to manage App Store Connect API keys (this requires the Account Holder or Admin role).\"\n );\n }\n if (status >= 400 || !body) {\n throw new Error(`iris listApiKeys failed (${status}): ${rawText.slice(0, 200)}`);\n }\n\n const issuerId = body?.meta?.issuerId ?? body?.data?.[0]?.attributes?.issuerId;\n const keys: IrisApiKey[] = (body.data ?? []).map((d: any) => ({\n id: d.id,\n kid: d.attributes?.kid ?? d.id,\n nickname: d.attributes?.nickname ?? \"\",\n issuerId: d.attributes?.issuerId ?? issuerId,\n roles: d.attributes?.roles ?? [],\n allAppsVisible: d.attributes?.allAppsVisible ?? true,\n }));\n return { keys, issuerId };\n }\n\n /**\n * Create a new API key. Apple returns the .p8 PEM exactly once in the\n * create response — capture it immediately or the key is dead weight.\n *\n * `keyType` is required by Apple's iris API:\n * • PUBLIC_API — the standard team-wide API key (what TestFlight uploads need)\n * • MARKETING_API — for App Analytics access only\n */\n async createApiKey(input: {\n nickname: string;\n roles?: ApiKeyRole[];\n allAppsVisible?: boolean;\n keyType?: \"PUBLIC_API\" | \"MARKETING_API\";\n }): Promise<IrisApiKey> {\n const requestBody = {\n data: {\n type: \"apiKeys\",\n attributes: {\n nickname: input.nickname,\n roles: input.roles ?? [\"APP_MANAGER\"],\n allAppsVisible: input.allAppsVisible ?? true,\n keyType: input.keyType ?? \"PUBLIC_API\",\n },\n },\n };\n\n // Always log this — it's the trickiest call in the whole orchestrator\n // and we need full visibility while the iris API is being shaken out.\n console.log(\"[iris] createApiKey request:\", JSON.stringify(requestBody));\n const { status, body, rawText } = await this.request(\"POST\", \"/apiKeys\", requestBody);\n console.log(`[iris] createApiKey response: ${status} ${rawText.slice(0, 800)}`);\n\n if (status === 403) {\n throw new IrisAuthError(\n \"You don't have permission to create App Store Connect API keys (this requires the Account Holder or Admin role).\"\n );\n }\n if (status >= 400 || !body) {\n const msg =\n body?.errors?.[0]?.detail ??\n body?.errors?.[0]?.title ??\n rawText.slice(0, 300) ??\n `iris createApiKey failed (${status})`;\n throw new Error(msg);\n }\n\n const data = body.data ?? body;\n if (!data?.id) {\n throw new Error(`iris createApiKey returned no key id. Raw response: ${rawText.slice(0, 400)}`);\n }\n\n const key: IrisApiKey = {\n id: data.id,\n kid: data.attributes?.kid ?? data.id,\n nickname: data.attributes?.nickname ?? input.nickname,\n privateKey: data.attributes?.privateKey,\n issuerId: data.attributes?.issuerId,\n roles: data.attributes?.roles ?? input.roles ?? [\"APP_MANAGER\"],\n allAppsVisible: data.attributes?.allAppsVisible ?? true,\n };\n return key;\n }\n\n /**\n * Fetch the .p8 PEM AND the team's issuer id for a previously-created\n * ASC API key. Both come back in a single request via:\n *\n * GET /iris/v1/apiKeys/{id}?fields[apiKeys]=privateKey&include=provider\n *\n * Sparse fieldset requesting ONLY `privateKey` is the magic that makes\n * Apple actually include the (base64-encoded) PEM in the response —\n * the default view returns `privateKey: null`. The `include=provider`\n * pulls the team's contentProvider record into `included[]`, and its\n * `id` field IS the issuer id altool needs (a UUID like\n * `cfadaf94-44ca-4c2c-8fa6-ecc28d3c7d0d`).\n *\n * Reverse-engineered from @expo/apple-utils v2.1.21 (the package that\n * powers EAS CLI), specifically the `ApiKey.downloadAsync` method\n * combined with `ApiKey.infoAsync` reading `provider?.id`.\n *\n * Returns `{ pem, issuerId }`, or `null` if Apple won't return the\n * private key (typically because the key was already downloaded once).\n */\n async fetchApiKeyPrivateKey(keyId: string): Promise<{ pem: string; issuerId?: string } | null> {\n try {\n const url = `${IRIS_BASE}/apiKeys/${keyId}?fields%5BapiKeys%5D=privateKey&include=provider`;\n const res = await fetch(url, {\n headers: {\n ...this.buildHeaders(),\n Accept: \"application/vnd.api+json, application/json, text/plain, */*\",\n },\n });\n const text = await res.text();\n console.log(`[iris] fetchApiKeyPrivateKey → ${res.status} (${text.length} bytes)`);\n if (res.status !== 200) {\n console.log(`[iris] err: ${text.slice(0, 300)}`);\n return null;\n }\n const body = JSON.parse(text);\n const encoded = body?.data?.attributes?.privateKey;\n if (typeof encoded !== \"string\" || encoded.length === 0) {\n console.log(`[iris] no privateKey in response`);\n return null;\n }\n const pem = Buffer.from(encoded, \"base64\").toString(\"utf-8\");\n if (!pem.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] decoded body didn't contain PEM marker`);\n return null;\n }\n // Issuer id is the contentProvider in the included array\n const provider = (body?.included ?? []).find((i: any) => i.type === \"contentProviders\");\n const issuerId = provider?.id;\n console.log(`[iris] ✓ PEM ${pem.length} bytes, issuerId=${issuerId ?? \"(missing)\"}`);\n return { pem, issuerId };\n } catch (err) {\n console.log(`[iris] fetchApiKeyPrivateKey error: ${(err as Error).message}`);\n return null;\n }\n }\n\n /**\n * @deprecated Kept as a fallback probe for debugging. The real path\n * is the sparse fieldset above — everything in this brute-force list\n * returned 404 during testing. Left here so we can re-verify if Apple\n * changes anything.\n */\n async fetchApiKeyPrivateKeyBruteForce(keyId: string): Promise<string | null> {\n type Attempt =\n | { kind: \"GET\"; path: string; accept?: string }\n | { kind: \"POST\"; path: string; body?: unknown }\n | { kind: \"ABSOLUTE\"; url: string };\n\n const attempts: Attempt[] = [\n // Sparse fieldsets — JSON-API spec lets us request specific attributes.\n // Apple may exclude privateKey by default and return it only when asked.\n { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey,kid,issuerId,nickname,roles` },\n { kind: \"GET\", path: `/apiKeys/${keyId}?include=privateKey` },\n { kind: \"GET\", path: `/apiKeys/${keyId}?fields[apiKeys]=privateKey` },\n // Custom Accept headers — maybe Apple negotiates content type\n { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/x-pem-file\" },\n { kind: \"GET\", path: `/apiKeys/${keyId}`, accept: \"application/octet-stream\" },\n { kind: \"GET\", path: `/apiKeys/${keyId}/p8`, accept: \"application/x-pem-file\" },\n // POST variants — Apple sometimes uses POST to mint a download token\n { kind: \"POST\", path: `/apiKeys/${keyId}/secrets`, body: {} },\n { kind: \"POST\", path: `/apiKeys/${keyId}/regenerate`, body: {} },\n { kind: \"POST\", path: `/apiKeys/${keyId}/p8`, body: {} },\n // Bare GET (last) — confirms canonical fields, in case my parser missed any\n { kind: \"GET\", path: `/apiKeys/${keyId}` },\n // Different host — the legacy developer.apple.com user-and-access namespace\n { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/api/v1/apiKeys/${keyId}/p8` },\n { kind: \"ABSOLUTE\", url: `https://appstoreconnect.apple.com/access/api/keys/${keyId}/download` },\n ];\n\n for (const attempt of attempts) {\n try {\n let result: { status: number; body: any; rawText: string };\n if (attempt.kind === \"GET\") {\n // Custom request that allows overriding Accept header.\n result = await this.requestWithHeaders(\"GET\", attempt.path, undefined, {\n ...(attempt.accept ? { Accept: attempt.accept } : {}),\n });\n console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.path}${attempt.accept ? ` accept=${attempt.accept}` : \"\"} → ${result.status} (${result.rawText.length} bytes)`);\n } else if (attempt.kind === \"POST\") {\n result = await this.request(\"POST\", attempt.path, attempt.body);\n console.log(`[iris] fetchApiKeyPrivateKey POST ${attempt.path} → ${result.status} (${result.rawText.length} bytes)`);\n } else {\n result = await this.requestAbsolute(\"GET\", attempt.url);\n console.log(`[iris] fetchApiKeyPrivateKey GET ${attempt.url} → ${result.status} (${result.rawText.length} bytes)`);\n }\n\n // For 200 responses, log the full body so we can see what Apple is returning.\n if (result.status === 200) {\n console.log(`[iris] body: ${result.rawText.slice(0, 1500)}`);\n }\n if (result.status !== 200) continue;\n\n // Plain PEM body\n if (result.rawText && result.rawText.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] ✓ found PEM (plain text response)`);\n return result.rawText;\n }\n // JSON wrapper that might contain the PEM under various attribute names\n if (result.body) {\n const candidates = [\n result.body?.data?.attributes?.privateKey,\n result.body?.data?.attributes?.p8,\n result.body?.data?.attributes?.privateKeyContent,\n result.body?.data?.attributes?.kpem,\n result.body?.data?.attributes?.secret,\n result.body?.data?.attributes?.keyContent,\n result.body?.privateKey,\n result.body?.p8,\n result.body?.value,\n result.body?.secret,\n ];\n for (const c of candidates) {\n if (typeof c === \"string\" && c.includes(\"BEGIN PRIVATE KEY\")) {\n console.log(`[iris] ✓ found PEM in JSON response`);\n return c;\n }\n }\n }\n } catch (err) {\n console.log(`[iris] fetchApiKeyPrivateKey attempt failed: ${(err as Error).message}`);\n }\n }\n console.log(`[iris] fetchApiKeyPrivateKey: no working download path for key ${keyId}`);\n return null;\n }\n\n /** Internal: like request() but lets us override headers. */\n private async requestWithHeaders(\n method: \"GET\" | \"POST\" | \"DELETE\",\n path: string,\n body?: unknown,\n extraHeaders: Record<string, string> = {}\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = { ...this.buildHeaders(), ...extraHeaders };\n const res = await fetch(`${IRIS_BASE}${path}`, {\n method,\n headers,\n body: body ? JSON.stringify(body) : undefined,\n });\n for (const raw of res.headers.getSetCookie?.() ?? []) {\n const m = raw.match(/^([^=]+)=([^;]*)/);\n if (m) this.session.cookies[m[1]] = m[2];\n }\n this.cookieStr = Object.entries(this.session.cookies).map(([k, v]) => `${k}=${v}`).join(\"; \");\n const text = await res.text();\n let parsed: any = null;\n try { parsed = text ? JSON.parse(text) : null; } catch {}\n return { status: res.status, body: parsed, rawText: text };\n }\n\n /** Internal: fetch an absolute URL with the session cookies. */\n private async requestAbsolute(\n method: \"GET\" | \"POST\" | \"DELETE\",\n url: string\n ): Promise<{ status: number; body: any; rawText: string }> {\n const headers = this.buildHeaders();\n const res = await fetch(url, { method, headers });\n const text = await res.text();\n let parsed: any = null;\n try { parsed = text ? JSON.parse(text) : null; } catch {}\n return { status: res.status, body: parsed, rawText: text };\n }\n\n async deleteApiKey(keyId: string): Promise<void> {\n await this.request(\"DELETE\", `/apiKeys/${keyId}`);\n }\n}\n\n/** Thrown when the user doesn't have permission to use the iris admin API. */\nexport class IrisAuthError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"IrisAuthError\";\n }\n}\n","import { TokenManager } from \"./auth.js\";\nimport { RequestClient } from \"./request.js\";\nimport type { AppStoreConnectConfig, ListParams, RequestOptions } from \"./types.js\";\nimport { CertificatesResource } from \"../resources/certificates.js\";\nimport { ProfilesResource } from \"../resources/profiles.js\";\nimport { BundleIdsResource } from \"../resources/bundle-ids.js\";\nimport { DevicesResource } from \"../resources/devices.js\";\nimport { AppsResource } from \"../resources/apps.js\";\nimport { BuildsResource } from \"../resources/builds.js\";\nimport { BetaGroupsResource } from \"../resources/beta-groups.js\";\nimport { CapabilitiesResource } from \"../resources/capabilities.js\";\nimport { AppStoreVersionsResource } from \"../resources/app-store-versions.js\";\nimport { AppScreenshotsResource } from \"../resources/app-screenshots.js\";\nimport { ReviewSubmissionsResource } from \"../resources/review-submissions.js\";\nimport { AppInfosResource } from \"../resources/app-info.js\";\nimport { AppInfoLocalizationsResource } from \"../resources/app-info-localizations.js\";\nimport { AppStoreReviewDetailsResource } from \"../resources/app-store-review-details.js\";\nimport { BetaTestersResource } from \"../resources/beta-testers.js\";\nimport { BetaAppReviewSubmissionsResource } from \"../resources/beta-app-review-submissions.js\";\nimport { BetaAppReviewDetailsResource } from \"../resources/beta-app-review-details.js\";\nimport { BetaInvitationsResource } from \"../resources/beta-invitations.js\";\nimport { BetaLicensesResource } from \"../resources/beta-licenses.js\";\nimport { AppPreviewsResource } from \"../resources/app-previews.js\";\nimport { AppPreviewSetsResource } from \"../resources/app-preview-sets.js\";\nimport { AppPricesResource } from \"../resources/app-prices.js\";\nimport { TerritoriesResource } from \"../resources/territories.js\";\nimport { AgeRatingDeclarationsResource } from \"../resources/age-rating-declarations.js\";\nimport { AppCategoriesResource } from \"../resources/app-categories.js\";\nimport { AppEncryptionDeclarationsResource } from \"../resources/app-encryption-declarations.js\";\nimport { IdfaDeclarationsResource } from \"../resources/idfa-declarations.js\";\nimport { PreReleaseVersionsResource } from \"../resources/pre-release-versions.js\";\nimport { ReviewSubmissionItemsResource } from \"../resources/review-submission-items.js\";\nimport { UsersResource } from \"../resources/users.js\";\nimport { UserInvitationsResource } from \"../resources/user-invitations.js\";\nimport { InAppPurchasesResource } from \"../resources/in-app-purchases.js\";\nimport { GameCenterDetailResource } from \"../resources/game-center-detail.js\";\nimport { XcodeMetricsResource } from \"../resources/xcode-metrics.js\";\n\nexport type { AppStoreConnectConfig, ListParams, RequestOptions };\nexport { TokenManager } from \"./auth.js\";\nexport type { TokenConfig } from \"./auth.js\";\nexport { RequestClient, AppStoreConnectError, RateLimitError } from \"./request.js\";\nexport type * from \"./types.js\";\nexport {\n loginWithAppleId,\n beginLogin,\n submitTwoFactorCode,\n requestSmsCode,\n checkPortalResponse,\n ProgramLicenseAgreementError,\n} from \"./apple-session.js\";\nexport type {\n AppleSessionConfig,\n AppleSession,\n ContractMessage,\n PendingLogin,\n TwoFactorChallenge,\n BeginLoginResult,\n} from \"./apple-session.js\";\nexport { PortalClient } from \"./portal.js\";\nexport { IrisClient, IrisAuthError } from \"./iris.js\";\nexport type { IrisApiKey, ApiKeyRole } from \"./iris.js\";\n\nexport class AppStoreConnectClient {\n readonly http: RequestClient;\n\n readonly certificates: CertificatesResource;\n readonly profiles: ProfilesResource;\n readonly bundleIds: BundleIdsResource;\n readonly devices: DevicesResource;\n readonly apps: AppsResource;\n readonly builds: BuildsResource;\n readonly betaGroups: BetaGroupsResource;\n readonly capabilities: CapabilitiesResource;\n readonly appStoreVersions: AppStoreVersionsResource;\n readonly appScreenshots: AppScreenshotsResource;\n readonly reviewSubmissions: ReviewSubmissionsResource;\n readonly appInfos: AppInfosResource;\n readonly appInfoLocalizations: AppInfoLocalizationsResource;\n readonly appStoreReviewDetails: AppStoreReviewDetailsResource;\n readonly betaTesters: BetaTestersResource;\n readonly betaAppReviewSubmissions: BetaAppReviewSubmissionsResource;\n readonly betaAppReviewDetails: BetaAppReviewDetailsResource;\n readonly betaInvitations: BetaInvitationsResource;\n readonly betaLicenses: BetaLicensesResource;\n readonly appPreviews: AppPreviewsResource;\n readonly appPreviewSets: AppPreviewSetsResource;\n readonly appPrices: AppPricesResource;\n readonly territories: TerritoriesResource;\n readonly ageRatingDeclarations: AgeRatingDeclarationsResource;\n readonly appCategories: AppCategoriesResource;\n readonly appEncryptionDeclarations: AppEncryptionDeclarationsResource;\n readonly idfaDeclarations: IdfaDeclarationsResource;\n readonly preReleaseVersions: PreReleaseVersionsResource;\n readonly reviewSubmissionItems: ReviewSubmissionItemsResource;\n readonly users: UsersResource;\n readonly userInvitations: UserInvitationsResource;\n readonly inAppPurchases: InAppPurchasesResource;\n readonly gameCenterDetail: GameCenterDetailResource;\n readonly xcodeMetrics: XcodeMetricsResource;\n\n constructor(config: AppStoreConnectConfig) {\n const tokenManager = new TokenManager({\n keyId: config.keyId,\n issuerId: config.issuerId,\n privateKey: config.privateKey,\n enterprise: config.enterprise,\n duration: config.tokenDuration,\n });\n this.http = new RequestClient(tokenManager, config.enterprise);\n\n this.certificates = new CertificatesResource(this.http);\n this.profiles = new ProfilesResource(this.http);\n this.bundleIds = new BundleIdsResource(this.http);\n this.devices = new DevicesResource(this.http);\n this.apps = new AppsResource(this.http);\n this.builds = new BuildsResource(this.http);\n this.betaGroups = new BetaGroupsResource(this.http);\n this.capabilities = new CapabilitiesResource(this.http);\n this.appStoreVersions = new AppStoreVersionsResource(this.http);\n this.appScreenshots = new AppScreenshotsResource(this.http);\n this.reviewSubmissions = new ReviewSubmissionsResource(this.http);\n this.appInfos = new AppInfosResource(this.http);\n this.appInfoLocalizations = new AppInfoLocalizationsResource(this.http);\n this.appStoreReviewDetails = new AppStoreReviewDetailsResource(this.http);\n this.betaTesters = new BetaTestersResource(this.http);\n this.betaAppReviewSubmissions = new BetaAppReviewSubmissionsResource(this.http);\n this.betaAppReviewDetails = new BetaAppReviewDetailsResource(this.http);\n this.betaInvitations = new BetaInvitationsResource(this.http);\n this.betaLicenses = new BetaLicensesResource(this.http);\n this.appPreviews = new AppPreviewsResource(this.http);\n this.appPreviewSets = new AppPreviewSetsResource(this.http);\n this.appPrices = new AppPricesResource(this.http);\n this.territories = new TerritoriesResource(this.http);\n this.ageRatingDeclarations = new AgeRatingDeclarationsResource(this.http);\n this.appCategories = new AppCategoriesResource(this.http);\n this.appEncryptionDeclarations = new AppEncryptionDeclarationsResource(this.http);\n this.idfaDeclarations = new IdfaDeclarationsResource(this.http);\n this.preReleaseVersions = new PreReleaseVersionsResource(this.http);\n this.reviewSubmissionItems = new ReviewSubmissionItemsResource(this.http);\n this.users = new UsersResource(this.http);\n this.userInvitations = new UserInvitationsResource(this.http);\n this.inAppPurchases = new InAppPurchasesResource(this.http);\n this.gameCenterDetail = new GameCenterDetailResource(this.http);\n this.xcodeMetrics = new XcodeMetricsResource(this.http);\n }\n\n async request<T>(path: string, options?: RequestOptions): Promise<T> {\n return this.http.request<T>(path, options);\n }\n}\n"]}