@browserbasehq/orca 3.1.0-patch.2 → 3.1.0-patch.3

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 (107) hide show
  1. package/dist/cjs/cli.js +45 -17
  2. package/dist/cjs/cli.js.map +2 -2
  3. package/dist/cjs/index.js +192 -123
  4. package/dist/cjs/index.js.map +3 -3
  5. package/dist/cjs/lib/logger.d.ts +1 -1
  6. package/dist/cjs/lib/modelUtils.d.ts +3 -0
  7. package/dist/cjs/lib/v3/agent/tools/act.d.ts +2 -1
  8. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -1
  9. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +2 -1
  10. package/dist/cjs/lib/v3/agent/tools/index.d.ts +2 -2
  11. package/dist/cjs/lib/v3/api.d.ts +16 -1
  12. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
  13. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  14. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +12 -12
  15. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  16. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +2 -2
  17. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  18. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +1 -0
  19. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  20. package/dist/cjs/lib/v3/tests/locator-fill.spec.js +1 -0
  21. package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +1 -1
  22. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +1 -0
  23. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  24. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +1 -0
  25. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  26. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +2 -2
  27. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  28. package/dist/cjs/lib/v3/types/public/api.d.ts +8 -0
  29. package/dist/cjs/lib/v3/types/public/index.d.ts +1 -0
  30. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
  31. package/dist/cjs/tests/agent-execution-model.test.js +139 -0
  32. package/dist/cjs/tests/agent-execution-model.test.js.map +7 -0
  33. package/dist/cjs/tests/api-multiregion.test.js +73 -0
  34. package/dist/cjs/tests/api-multiregion.test.js.map +7 -0
  35. package/dist/cjs/tests/model-utils.test.js +43 -0
  36. package/dist/cjs/tests/model-utils.test.js.map +7 -0
  37. package/dist/cjs/tests/public-api/export-surface.test.js +1 -0
  38. package/dist/cjs/tests/public-api/export-surface.test.js.map +1 -1
  39. package/dist/cjs/tests/public-api/llm-and-agents.test.js +1 -0
  40. package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +1 -1
  41. package/dist/cjs/tests/public-api/public-error-types.test.js +3 -1
  42. package/dist/cjs/tests/public-api/public-error-types.test.js.map +2 -2
  43. package/dist/cjs/tests/public-api/v3-core.test.js +1 -0
  44. package/dist/cjs/tests/public-api/v3-core.test.js.map +1 -1
  45. package/dist/cjs/tests/snapshot-capture-orchestration.test.js +2 -0
  46. package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +1 -1
  47. package/dist/cjs/tests/understudy-command-exception.test.js +52 -0
  48. package/dist/cjs/tests/understudy-command-exception.test.js.map +7 -0
  49. package/dist/esm/lib/logger.d.ts +1 -1
  50. package/dist/esm/lib/v3/cli.d.ts +2 -0
  51. package/dist/esm/lib/v3/cli.js +10 -0
  52. package/dist/esm/lib/v3/cli.js.map +1 -0
  53. package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
  54. package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
  55. package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
  56. package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
  57. package/dist/esm/lib/v3/index.d.ts +1 -0
  58. package/dist/esm/lib/v3/index.js +1 -0
  59. package/dist/esm/lib/v3/index.js.map +1 -1
  60. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
  61. package/dist/esm/lib/v3/shutdown/supervisor.js +93 -64
  62. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  63. package/dist/esm/lib/v3/shutdown/supervisorClient.js +49 -52
  64. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
  65. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +12 -12
  66. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  67. package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
  68. package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
  69. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +2 -2
  70. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  71. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
  72. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
  73. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +1 -0
  74. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  75. package/dist/esm/lib/v3/tests/locator-fill.spec.js +1 -0
  76. package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +1 -1
  77. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +1 -0
  78. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  79. package/dist/esm/lib/v3/tests/locator-select-option.spec.js +1 -0
  80. package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  81. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +2 -2
  82. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  83. package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
  84. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
  85. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
  86. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  87. package/dist/esm/lib/v3/understudy/context.js +10 -1
  88. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  89. package/dist/esm/lib/v3/understudy/locator.js +2 -2
  90. package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
  91. package/dist/esm/lib/v3/understudy/page.js +2 -1
  92. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  93. package/dist/esm/lib/v3/v3.js +2 -6
  94. package/dist/esm/lib/v3/v3.js.map +1 -1
  95. package/dist/esm/tests/public-api/export-surface.test.js +2 -0
  96. package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
  97. package/dist/esm/tests/public-api/llm-and-agents.test.js +1 -0
  98. package/dist/esm/tests/public-api/llm-and-agents.test.js.map +1 -1
  99. package/dist/esm/tests/public-api/public-error-types.test.js +1 -0
  100. package/dist/esm/tests/public-api/public-error-types.test.js.map +1 -1
  101. package/dist/esm/tests/public-api/v3-core.test.js +1 -0
  102. package/dist/esm/tests/public-api/v3-core.test.js.map +1 -1
  103. package/dist/esm/tests/snapshot-capture-orchestration.test.js +2 -0
  104. package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +1 -1
  105. package/package.json +13 -11
  106. package/dist/esm/lib/v3/tests/envReporter.js +0 -57
  107. package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
@@ -1 +1 @@
1
- {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/page.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAMlE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,cAAc,EAAmB,MAAM,qBAAqB,CAAC;AAEtE,OAAO,EAEL,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,6BAA6B,EAC7B,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAOhE,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,iBAAiB,EACjB,SAAS,EACT,uBAAuB,EACvB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,GAEtB,MAAM,sBAAsB,CAAC;AAG9B;;;;;;;;;;;;GAYG;AAEH,MAAM,cAAc,GAA8B;IAChD,IAAI,EAAE,MAAM;IACZ,gBAAgB,EAAE,kBAAkB;IACpC,WAAW,EAAE,aAAa;CAC3B,CAAC;IAEW,IAAI;;;;;;;;;;;;;;;;;;iBAAJ,IAAI;;;iCAojBd,SAAS,CAAC,YAAY,CAAC;gCAuIvB,SAAS,CAAC,WAAW,CAAC;kCA+DtB,SAAS,CAAC,aAAa,CAAC;kCA+CxB,SAAS,CAAC,aAAa,CAAC;qCAqDxB,SAAS,CAAC,gBAAgB,CAAC;sCAkI3B,SAAS,CAAC,iBAAiB,CAAC;4CA2H5B,SAAS,CAAC,uBAAuB,CAAC;2CA4BlC,SAAS,CAAC,sBAAsB,CAAC;oCAmCjC,SAAS,CAAC,eAAe,CAAC;iCAuF1B,SAAS,CAAC,YAAY,CAAC;iCA6FvB,SAAS,CAAC,YAAY,CAAC;kCAmDvB,SAAS,CAAC,aAAa,CAAC;uCA2CxB,SAAS,CAAC,kBAAkB,CAAC;gCAyG7B,SAAS,CAAC,WAAW,CAAC;oCA+HtB,SAAS,CAAC,eAAe,CAAC;oCAoD1B,SAAS,CAAC,eAAe,CAAC;YAnpC3B,kKAAa,KAAK,6DAsBjB;YAiHD,+JAAM,IAAI,6DAyDT;YAMD,qKAAM,MAAM,6DAyCX;YAMD,qKAAM,MAAM,6DA+CX;YAMD,8KAAM,SAAS,6DA+Cd;YAmFD,iLAAM,UAAU,6DAgFf;YA2CD,mMAAM,gBAAgB,6DAErB;YA0BD,gMAAM,eAAe,6DAyBpB;YAUD,2KAAM,QAAQ,6DA+Cb;YAwCD,kKAAM,KAAK,6DAqFV;YAQD,kKAAM,KAAK,6DAgDV;YAGD,qKAAM,MAAM,6DAoCX;YAOD,oLAAM,WAAW,6DAgGhB;YASD,+JAAM,IAAI,6DAuHT;YAQD,2KAAM,QAAQ,6DAiDb;YAGD,2KAAM,QAAQ,6DAgBb;;;QAnrDkB,IAAI,GAtCZ,mDAAI;QAuCI,WAAW;QACX,SAAS;QAvC5B,mFAAmF;QAClE,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC,CAAC,uBAAuB;QAEtF,oDAAoD;QACnC,QAAQ,CAAgB;QAEzC,oFAAoF;QAC5E,gBAAgB,CAAQ;QAEhC,+DAA+D;QACvD,aAAa,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC1C,WAAW,GAAG,CAAC,CAAC;QAExB,6DAA6D;QAC5C,UAAU,GAAG,IAAI,GAAG,EAAiB,CAAC;QACtC,eAAe,CAAU;QAE1C,0EAA0E;QACzD,MAAM,CAAS;QAChC,oDAAoD;QAC5C,WAAW,GAAW,aAAa,CAAC;QAEpC,oBAAoB,GAAG,CAAC,CAAC;QACzB,yBAAyB,GAAG,CAAC,CAAC;QAErB,cAAc,CAAiB;QAChD,iEAAiE;QAChD,SAAS,GAA8B,IAAI,CAAC;QAC5C,gBAAgB,GAAG,IAAI,GAAG,EAAmB,CAAC;QAC9C,eAAe,GAAG,IAAI,GAAG,EAGvC,CAAC;QACJ,4EAA4E;QAC3D,WAAW,GAAa,EAAE,CAAC;QAE5C,YACmB,IAAmB,EACnB,WAA2B,EAC3B,SAAiB,EAClC,WAAmB,EACnB,SAAqC,EACrC,eAAe,GAAG,KAAK;YALN,SAAI,GAAJ,IAAI,CAAe;YACnB,gBAAW,GAAX,WAAW,CAAgB;YAC3B,cAAS,GAAT,SAAS,CAAQ;YAKlC,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;YAEvC,uBAAuB;YACvB,IAAI,WAAW,CAAC,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;YAEnE,8CAA8C;YAC9C,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAE1D,kEAAkE;YAClE,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,CAC/B,IAAI,CAAC,WAAW,EAChB,WAAW,EACX,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,CACrB,CAAC;YAEF,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC;QAED,uDAAuD;QAC/C,KAAK,CAAC,0BAA0B,CACtC,OAAuB,EACvB,MAAc;YAEd,MAAM,OAAO,CAAC,IAAI,CAAC,uCAAuC,EAAE;gBAC1D,MAAM,EAAE,MAAM;aACf,CAAC,CAAC;QACL,CAAC;QAED,+EAA+E;QACvE,KAAK,CAAC,yBAAyB,CACrC,OAAuB;YAEvB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,MAAM,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;QAED,kFAAkF;QAC3E,KAAK,CAAC,kBAAkB,CAAC,MAAc;YAC5C,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE9B,MAAM,QAAQ,GAAyB,EAAE,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;YACzE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW;oBAAE,SAAS;gBAC3C,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC9B,CAAC;QAED,wEAAwE;QACjE,cAAc,CAAC,MAAc;YAClC,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAAE,OAAO;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,oDAAoD;QAC5C,aAAa,GAAG,KAAK,CAAC;QACtB,KAAK,CAAC,kBAAkB;YAC9B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA6DT,CAAC;YAEP,sDAAsD;YACtD,MAAM,IAAI,CAAC,WAAW;iBACnB,IAAI,CAAC,uCAAuC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;iBACjE,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnB,mCAAmC;YACnC,MAAM,IAAI,CAAC,WAAW;iBACnB,IAAI,CAAC,kBAAkB,EAAE;gBACxB,UAAU,EAAE,MAAM;gBAClB,qBAAqB,EAAE,KAAK;aAC7B,CAAC;iBACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,CAAC;QAEM,KAAK,CAAC,mBAAmB;YAC9B,IAAI,IAAI,CAAC,aAAa;gBAAE,OAAO;YAC/B,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;QAEO,KAAK,CAAC,YAAY,CAAC,CAAS,EAAE,CAAS;YAC7C,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO;YAChC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBAC9C,UAAU,EAAE,kEAAkE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;iBACjH,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE;YACJ,CAAC;QACH,CAAC;QAEM,KAAK,CAAC,aAAa,CACxB,MAA6B,EAC7B,GAAS;YAET,MAAM,MAAM,GAAG,MAAM,yBAAyB,CAC5C,MAAM,EACN,GAAG,EACH,oBAAoB,CACrB,CAAC;YACF,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,CAAC;QAED;;;WAGG;QACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,IAAmB,EACnB,OAAuB,EACvB,QAAgB,EAChB,SAAqC,EACrC,yBAA4D,EAC5D,eAAe,GAAG,KAAK;YAEvB,MAAM,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAClD,MAAM,OAAO;iBACV,IAAI,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBACzD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAErC,mBAAmB,CAAC,CAAC;YACxB,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YAEvC,MAAM,IAAI,GAAG,IAAI,IAAI,CACnB,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,WAAW,EACX,SAAS,EACT,eAAe,CAChB,CAAC;YACF,2CAA2C;YAC3C,IAAI,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;gBACrE,IAAI,yBAAyB,EAAE,QAAQ,EAAE,CAAC;oBACxC,MAAM,IAAI,CAAC,eAAe,CACxB,yBAAyB,CAAC,QAAQ,CAAC,KAAK,EACxC,yBAAyB,CAAC,QAAQ,CAAC,MAAM,EACzC;wBACE,iBAAiB,EAAE,yBAAyB,CAAC,iBAAiB,IAAI,CAAC;qBACpE,CACF,CAAC;gBACJ,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,8DAA8D;YAC9D,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,IAAI,MAAM,EAAE,SAAS,CAAC,CAAC;YAEjE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sEAAsE;QAEtE;;;WAGG;QACI,eAAe,CACpB,OAAe,EACf,QAAuB,EACvB,OAAuB;YAEvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC;YACvE,gGAAgG;YAChG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED;;WAEG;QACI,eAAe,CACpB,OAAe,EACf,SAAqC,QAAQ;YAE7C,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC/C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED;;;WAGG;QACI,gBAAgB,CACrB,KAA0B,EAC1B,OAAuB;YAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,MAAM,CAAC,CAAC;YAE5D,4DAA4D;YAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACxC,IAAI,CAAC,gBAAgB,GAAG,IAAI,KAAK,CAC/B,IAAI,CAAC,WAAW,EAChB,OAAO,EACP,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,eAAe,CACrB,CAAC;YACJ,CAAC;YAED,0EAA0E;YAC1E,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC;oBACH,kDAAkD;oBAClD,IAAI,CAAC,WAAW,GAAG,MAAM,CACtB,KAA0B,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CACrD,CAAC;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAED,qEAAqE;YACrE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;QAEM,yBAAyB,CAC9B,OAAe,EACf,GAAW,EACX,OAAuB;YAEvB,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,UAAU;gBAAE,OAAO;YAExB,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CACrC,OAAO,EACP,UAAU,EACV,OAAO,CAAC,EAAE,IAAI,MAAM,CACrB,CAAC;YAEF,IAAI,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACnC,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAChC,CAAC;QACH,CAAC;QAED;;;WAGG;QACI,iBAAiB,CACtB,YAA4B,EAC5B,gBAAwB;YAExB,IAAI,YAAY,CAAC,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YAEtE,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE/C,KAAK,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAElE,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC;YAED,2EAA2E;YAC3E,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAC7B,YAAY,CAAC,EAAE,IAAI,OAAO,EAC1B,gBAAgB,CACjB,CAAC;YACF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAEzC,gEAAgE;YAChE,YAAY,CAAC,EAAE,CACb,qBAAqB,EACrB,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACjD,CAAC,CACF,CAAC;YACF,YAAY,CAAC,EAAE,CACb,oBAAoB,EACpB,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,CAAC,eAAe,CAClB,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,aAAa,IAAI,IAAI,EACzB,YAAY,CACb,CAAC;YACJ,CAAC,CACF,CAAC;YACF,YAAY,CAAC,EAAE,CACb,oBAAoB,EACpB,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC;YAC5D,CAAC,CACF,CAAC;YAEF,oEAAoE;YACpE,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,IAAI,CAAC;oBACH,MAAM,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;oBACvD,IAAI,EAAE,SAAS,EAAE,GACf,MAAM,YAAY,CAAC,IAAI,CACrB,mBAAmB,CACpB,CAAC;oBAEJ,2EAA2E;oBAC3E,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,gBAAgB,EAAE,CAAC;wBAC5C,SAAS,GAAG;4BACV,GAAG,SAAS;4BACZ,KAAK,EAAE,EAAE,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE;yBACpD,CAAC;oBACJ,CAAC;oBAED,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,YAAY,CAAC,EAAE,IAAI,OAAO,EAAE,SAAS,CAAC,CAAC;gBACzE,CAAC;gBAAC,MAAM,CAAC;oBACP,mEAAmE;gBACrE,CAAC;YACH,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QAED,4DAA4D;QACrD,kBAAkB,CAAC,SAAiB;YACzC,0FAA0F;YAC1F,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;gBAC7C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;YACD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QAED,gEAAgE;QAEhE,+EAA+E;QACxE,kBAAkB,CAAC,OAAe;YACvC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC,WAAW,CAAC;YAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;QACpD,CAAC;QAED,yDAAyD;QAClD,UAAU,CAAC,OAAe;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACzC,IAAI,GAAG;gBAAE,OAAO,GAAG,CAAC;YAEpB,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YACtE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC;QACX,CAAC;QAED,iFAAiF;QAC1E,cAAc,CAAC,EAAU;YAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;QAEM,yBAAyB,CAAC,OAAuB;YACtD,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC5C,CAAC;QAEM,2BAA2B,CAAC,SAA6B;YAC9D,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;QAEM,EAAE,CAAC,KAAgB,EAAE,QAAyB;YACnD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,6BAA6B,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,CAAC;YACvD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAEpC,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAEM,IAAI,CAAC,KAAgB,EAAE,QAAyB;YACrD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,6BAA6B,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,MAAM,OAAO,GAAoB,CAAC,OAAO,EAAE,EAAE;gBAC3C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAC7B,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC,CAAC;YAEF,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAEM,GAAG,CAAC,KAAgB,EAAE,QAAyB;YACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,IAAI,6BAA6B,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEvC,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC9B,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,8CAA8C;QAEvC,QAAQ;YACb,OAAO,IAAI,CAAC,SAAS,CAAC;QACxB,CAAC;QAED;;;;;;;;;;;;;;;;;;WAkBG;QACI,OAAO,CAAc,MAAc,EAAE,MAAe;YACzD,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAI,MAAM,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,6DAA6D;QACtD,cAAc,CAAC,GAA8B;YAClD,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACtC,IAAI,CAAC,UAAU;oBAAE,OAAO;gBACxB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;QAEM,WAAW;YAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC;QAEM,SAAS;YACd,OAAO,IAAI,CAAC,gBAAgB,CAAC;QAC/B,CAAC;QAED;;WAEG;QAEI,KAAK,CAAC,KAAK;YAChB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3E,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;YACnC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC7C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;wBACxD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;wBAC9B,OAAO;oBACT,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,mBAAmB;gBACrB,CAAC;gBACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAC9B,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QAEM,gBAAgB;YACrB,OAAO,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,CAAC;QAEM,mBAAmB,CAAC,eAAuB;YAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;QAC5D,CAAC;QAEO,aAAa,CAAC,OAAe;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5C,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACrC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,kDAAkD;QAC3C,UAAU,CAAC,OAAe;YAC/B,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAEM,eAAe;YACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;QACvC,CAAC;QAEO,iBAAiB;YACvB,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO;YAE7C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;gBAC7C,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAEO,iBAAiB,CAAC,OAAuB;YAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO;YAE1C,KAAK,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEpD,MAAM,OAAO,GAAG,CAAC,GAA2C,EAAE,EAAE;gBAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,CAAC;YAEF,OAAO,CAAC,EAAE,CACR,0BAA0B,EAC1B,OAAO,CACR,CAAC;YAEF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAEO,UAAU,CAAC,OAAuB;YACxC,OAAO,OAAO,CAAC,EAAE,IAAI,UAAU,CAAC;QAClC,CAAC;QAEO,mBAAmB,CAAC,GAAW;YACrC,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,GAAG;oBAAE,OAAO,IAAI,CAAC,WAAW,CAAC;YAC3D,CAAC;iBAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,WAAW,CAAC;YAC1B,CAAC;YAED,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,CAAC;QAEO,kBAAkB,CAAC,GAAW;YACpC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,OAAO;gBAAE,OAAO;YAErB,MAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;YAC9C,OAAO,EAAE,GAAG,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QAEO,oBAAoB;YAC1B,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAEO,WAAW,CAAC,GAA2C;YAC7D,IAAI,IAAI,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC;gBAAE,OAAO;YAE7C,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAE7C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;gBACpB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,QAAQ,CAAC;wBACP,QAAQ,EAAE,MAAM;wBAChB,OAAO,EAAE,wBAAwB;wBACjC,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE;4BACT,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;4BAC/C,IAAI,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;yBAC1C;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,yEAAyE;QAEzE;;;WAGG;QAEH,KAAK,CAAC,IAAI,CACR,GAAW,EACX,OAAuD;YAEvD,MAAM,SAAS,GAAc,OAAO,EAAE,SAAS,IAAI,kBAAkB,CAAC;YACtE,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;YAE5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC1D,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC;gBAC5C,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,mBAAmB;aACpB,CAAC,CAAC;YAEH,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;gBACnC,IAAI,EAAE,IAAI;gBACV,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,SAAS;gBACT,SAAS,EAAE,OAAO;gBAClB,mBAAmB;aACpB,CAAC,CAAC;YAEH,IAAI,CAAC;gBACH,4BAA4B;gBAC5B,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CACtC,GAAG,EACH,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,EACjC,IAAI,CAAC,WAAW,EAAE,CACnB,CAAC;oBACF,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;oBAEvB,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;wBACnC,OAAO,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE;4BACvC,IAAI,EAAE,IAAI;4BACV,OAAO,EAAE,IAAI,CAAC,WAAW;yBAC1B,CAAC,CAAC;oBACL,CAAC;oBACD,OAAO,MAAM,CAAC;gBAChB,CAAC;gBACD,MAAM,QAAQ,GACZ,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,eAAe,EACf,EAAE,GAAG,EAAE,CACR,CAAC;gBACJ,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;gBACvB,IAAI,QAAQ,EAAE,QAAQ,EAAE,CAAC;oBACvB,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;oBAC/C,OAAO,CAAC,mBAAmB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBACjD,CAAC;gBACD,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACrB,OAAO,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,OAAO,EAAE,CAAC;gBAClB,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED;;WAEG;QAEH,KAAK,CAAC,MAAM,CAAC,OAIZ;YACC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;YAE5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE1D,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC;gBAC5C,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,mBAAmB;aACpB,CAAC,CAAC;YACH,OAAO,CAAC,kCAAkC,EAAE,CAAC;YAE7C,MAAM,OAAO,GAAG,SAAS;gBACvB,CAAC,CAAC,IAAI,gBAAgB,CAAC;oBACnB,IAAI,EAAE,IAAI;oBACV,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,SAAS;oBACT,SAAS,EAAE,OAAO;oBAClB,mBAAmB;iBACpB,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE;oBACzC,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,KAAK;iBAC3C,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACvB,CAAC;gBACD,OAAO,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED;;WAEG;QAEH,KAAK,CAAC,MAAM,CAAC,OAGZ;YACC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,2BAA2B,CAC5B,CAAC;YACJ,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB;YACxC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;YAE5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE1D,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC;gBAC5C,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,mBAAmB;aACpB,CAAC,CAAC;YACH,OAAO,CAAC,kCAAkC,EAAE,CAAC;YAE7C,MAAM,OAAO,GAAG,SAAS;gBACvB,CAAC,CAAC,IAAI,gBAAgB,CAAC;oBACnB,IAAI,EAAE,IAAI;oBACV,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,SAAS;oBACT,SAAS,EAAE,OAAO;oBAClB,mBAAmB;iBACpB,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,6BAA6B,EAAE;oBACzD,OAAO,EAAE,IAAI,CAAC,EAAE;iBACjB,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;gBAEhD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACvB,CAAC;gBACD,OAAO,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED;;WAEG;QAEH,KAAK,CAAC,SAAS,CAAC,OAGf;YACC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,2BAA2B,CAC5B,CAAC;YACJ,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YACvC,IAAI,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,CAAC,gBAAgB;YACxC,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;YACrC,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,IAAI,KAAK,CAAC;YAE5C,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE1D,MAAM,OAAO,GAAG,IAAI,yBAAyB,CAAC;gBAC5C,IAAI,EAAE,IAAI;gBACV,OAAO,EAAE,IAAI,CAAC,WAAW;gBACzB,mBAAmB;aACpB,CAAC,CAAC;YACH,OAAO,CAAC,kCAAkC,EAAE,CAAC;YAE7C,MAAM,OAAO,GAAG,SAAS;gBACvB,CAAC,CAAC,IAAI,gBAAgB,CAAC;oBACnB,IAAI,EAAE,IAAI;oBACV,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,cAAc,EAAE,IAAI,CAAC,cAAc;oBACnC,SAAS;oBACT,SAAS,EAAE,OAAO;oBAClB,mBAAmB;iBACpB,CAAC;gBACJ,CAAC,CAAC,IAAI,CAAC;YAET,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,6BAA6B,EAAE;oBACzD,OAAO,EAAE,IAAI,CAAC,EAAE;iBACjB,CAAC,CAAC;gBACH,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;gBAEhD,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;gBACvB,CAAC;gBACD,OAAO,MAAM,OAAO,CAAC,mBAAmB,EAAE,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,CAAC;gBACnB,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QAED;;WAEG;QACH,GAAG;YACD,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAEO,sBAAsB;YAC5B,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,oBAAoB,CAAC;YACvC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACZ,CAAC;QAEM,0BAA0B,CAAC,EAAU;YAC1C,OAAO,IAAI,CAAC,yBAAyB,KAAK,EAAE,CAAC;QAC/C,CAAC;QAED;;;;WAIG;QACH,KAAK,CAAC,KAAK;YACT,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACvD,MAAM,EAAE,MAAM,EAAE,GACd,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,kBAAkB,EAClB;oBACE,UAAU,EAAE,gBAAgB;oBAC5B,SAAS,EAAE,KAAK;oBAChB,aAAa,EAAE,IAAI;iBACpB,CACF,CAAC;gBACJ,OAAO,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,+CAA+C;gBAC/C,IAAI,CAAC;oBACH,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,2BAA2B,CAC5B,CAAC;oBACJ,OAAO,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC5C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;QACH,CAAC;QAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WA6BG;QAEH,KAAK,CAAC,UAAU,CAAC,OAA2B;YAC1C,MAAM,IAAI,GAAG,OAAO,IAAI,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC;YAEhC,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACtC,MAAM,IAAI,6BAA6B,CACrC,uCAAuC,IAAI,GAAG,CAC/C,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,MAAM,IAAI,6BAA6B,CACrC,uDAAuD,CACxD,CAAC;YACJ,CAAC;YAED,IAAI,IAAI,KAAK,KAAK,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,IAAI,6BAA6B,CACrC,0DAA0D,CAC3D,CAAC;YACJ,CAAC;YAED,MAAM,SAAS,GAA0B,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC;YAC9D,MAAM,cAAc,GAClB,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC;YAC7B,MAAM,SAAS,GAA0B,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC;YAChE,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YACxE,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACnE,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAC3C,CAAC,OAAO,EAAsB,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAClD,CAAC;YAEF,MAAM,YAAY,GAAwB,EAAE,CAAC;YAE7C,MAAM,IAAI,GAAG,KAAK,IAAqB,EAAE;gBACvC,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,YAAY,CAAC,IAAI,CAAC,MAAM,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;oBACtE,CAAC;oBAED,IAAI,cAAc,KAAK,UAAU,EAAE,CAAC;wBAClC,YAAY,CAAC,IAAI,CAAC,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;oBACrD,CAAC;oBAED,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;wBACzB,YAAY,CAAC,IAAI,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC7C,CAAC;oBAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;wBACpC,YAAY,CAAC,IAAI,CACf,MAAM,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CACvD,CAAC;oBACJ,CAAC;oBAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAC5B,YAAY,CAAC,IAAI,CACf,MAAM,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,CACnE,CAAC;oBACJ,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC;wBACpD,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,IAAI;wBACJ,IAAI;wBACJ,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;wBACnD,KAAK,EAAE,YAAY;qBACpB,CAAC,CAAC;oBAEH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACd,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;oBACxC,CAAC;oBAED,OAAO,MAAM,CAAC;gBAChB,CAAC;wBAAS,CAAC;oBACT,MAAM,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC,CAAC;YAEF,OAAO,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,CAAC;QAED;;WAEG;QACH,OAAO,CAAC,QAAgB;YACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjD,CAAC;QAED;;;;;WAKG;QACH,WAAW,CAAC,QAAgB;YAC1B,OAAO,mBAAmB,CAAC,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QACpE,CAAC;QAED;;;WAGG;QACH,YAAY,CAAC,QAAgB;YAC3B,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED;;;WAGG;QACH,MAAM;YACJ,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED;;;WAGG;QAEH,KAAK,CAAC,gBAAgB,CAAC,KAAgB,EAAE,SAAkB;YACzD,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC,CAAC;QAC7D,CAAC;QAED;;;;WAIG;QACH,KAAK,CAAC,cAAc,CAAC,EAAU;YAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED;;;;;;;;;;;;;WAaG;QAEH,KAAK,CAAC,eAAe,CACnB,QAAgB,EAChB,OAIC;YAED,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC;YAC1C,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,SAAS,CAAC;YAC1C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,IAAI,CAAC;YACnD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC;YACnC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,GACnD,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YACvC,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;YAExD,MAAM,UAAU,GAAG,sBAAsB,CAAC,iBAAiB,EAAE;gBAC3D,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;gBAC7B,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBACrB,MAAM,CAAC,gBAAgB,CAAC;gBACxB,MAAM,CAAC,YAAY,CAAC;aACrB,CAAC,CAAC;YACH,OAAO,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC1C,CAAC;QAED;;;;;;WAMG;QAEH,KAAK,CAAC,QAAQ,CACZ,wBAAiE,EACjE,GAAS;YAET,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC9D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;YAEvD,MAAM,QAAQ,GAAG,OAAO,wBAAwB,KAAK,QAAQ,CAAC;YAC9D,IAAI,UAAkB,CAAC;YAEvB,IAAI,QAAQ,EAAE,CAAC;gBACb,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,wBAAwB,CAAC,QAAQ,EAAE,CAAC;gBAClD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACpC,UAAU,GAAG;yBACM,KAAK;0BACJ,OAAO;;;;;;;aAOpB,CAAC;YACV,CAAC;YAED,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAChC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,kBAAkB,EAClB;gBACE,UAAU;gBACV,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,IAAI;gBACnB,YAAY,EAAE,IAAI;aACnB,CACF,CAAC;YAEJ,IAAI,gBAAgB,EAAE,CAAC;gBACrB,MAAM,GAAG,GACP,gBAAgB,CAAC,IAAI;oBACrB,gBAAgB,CAAC,SAAS,EAAE,WAAW;oBACvC,mBAAmB,CAAC;gBACtB,MAAM,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC;YACpC,CAAC;YAED,OAAO,MAAM,EAAE,KAAU,CAAC;QAC5B,CAAC;QAED;;;WAGG;QACH,0HAA0H;QAC1H,KAAK,CAAC,eAAe,CACnB,KAAa,EACb,MAAc,EACd,OAAwC;YAExC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB,IAAI,CAAC,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,WAAW;iBACnB,IAAI,CAAC,oCAAoC,EAAE;gBAC1C,KAAK;gBACL,MAAM;gBACN,iBAAiB,EAAE,GAAG;gBACtB,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,KAAK;gBAClB,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,CAAC;aAC6C,CAAC;iBACvD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEnB,8CAA8C;YAC9C,MAAM,IAAI,CAAC,WAAW;iBACnB,IAAI,CAAC,0BAA0B,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;iBACnD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrB,CAAC;QAED;;;;;WAKG;QAEH,KAAK,CAAC,KAAK,CACT,CAAS,EACT,CAAS,EACT,OAIC;YAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;YACzC,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,CAAC,CAAC;YAE5C,IAAI,WAA+B,CAAC;YACpC,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACzB,2FAA2F;gBAC3F,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtD,IAAI,GAAG,EAAE,CAAC;wBACR,QAAQ,CAAC;4BACP,QAAQ,EAAE,MAAM;4BAChB,OAAO,EAAE,oBAAoB;4BAC7B,KAAK,EAAE,CAAC;4BACR,SAAS,EAAE;gCACT,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACvD,aAAa,EAAE;oCACb,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;oCAChC,IAAI,EAAE,QAAQ;iCACf;gCACD,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;gCACxC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;6BACzC;yBACF,CAAC,CAAC;wBACH,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;wBAChC,QAAQ,CAAC;4BACP,QAAQ,EAAE,MAAM;4BAChB,OAAO,EAAE,sBAAsB;4BAC/B,KAAK,EAAE,CAAC;4BACR,SAAS,EAAE;gCACT,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;6BAC5D;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,8CAA8C;gBAChD,CAAC;YACH,CAAC;YAED,6DAA6D;YAC7D,uEAAuE;YACvE,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBACvD,IAAI,EAAE,YAAY;gBAClB,CAAC;gBACD,CAAC;gBACD,MAAM,EAAE,MAAM;aAC6B,CAAC,CAC/C,CAAC;YAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;gBACrC,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;oBACvD,IAAI,EAAE,cAAc;oBACpB,CAAC;oBACD,CAAC;oBACD,MAAM;oBACN,UAAU,EAAE,CAAC;iBAC8B,CAAC,CAC/C,CAAC;gBAEF,UAAU,CAAC,IAAI,CACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;oBACvD,IAAI,EAAE,eAAe;oBACrB,CAAC;oBACD,CAAC;oBACD,MAAM;oBACN,UAAU,EAAE,CAAC;iBAC8B,CAAC,CAC/C,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE9B,OAAO,WAAW,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED;;;;WAIG;QAEH,KAAK,CAAC,KAAK,CACT,CAAS,EACT,CAAS,EACT,OAAmC;YAEnC,IAAI,WAA+B,CAAC;YACpC,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtD,IAAI,GAAG,EAAE,CAAC;wBACR,QAAQ,CAAC;4BACP,QAAQ,EAAE,MAAM;4BAChB,OAAO,EAAE,oBAAoB;4BAC7B,KAAK,EAAE,CAAC;4BACR,SAAS,EAAE;gCACT,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE;gCACvD,aAAa,EAAE;oCACb,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC;oCAChC,IAAI,EAAE,QAAQ;iCACf;gCACD,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;gCACxC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;6BACzC;yBACF,CAAC,CAAC;wBACH,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;oBAClC,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,QAAQ,CAAC;wBACP,QAAQ,EAAE,MAAM;wBAChB,OAAO,EAAE,mCAAmC;wBAC5C,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE;4BACT,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;4BACxC,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;yBACzC;qBACF,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBAC7D,IAAI,EAAE,YAAY;gBAClB,CAAC;gBACD,CAAC;gBACD,MAAM,EAAE,MAAM;aAC6B,CAAC,CAAC;YAE/C,OAAO,WAAW,IAAI,EAAE,CAAC;QAC3B,CAAC;QAGD,KAAK,CAAC,MAAM,CACV,CAAS,EACT,CAAS,EACT,MAAc,EACd,MAAc,EACd,OAAmC;YAEnC,IAAI,WAA+B,CAAC;YACpC,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;oBACtD,IAAI,GAAG;wBAAE,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC;gBAC3C,CAAC;gBAAC,MAAM,CAAC;oBACP,cAAc;gBAChB,CAAC;YACH,CAAC;YAED,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBAC7D,IAAI,EAAE,YAAY;gBAClB,CAAC;gBACD,CAAC;gBACD,MAAM,EAAE,MAAM;aAC6B,CAAC,CAAC;YAE/C,4DAA4D;YAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBAC7D,IAAI,EAAE,YAAY;gBAClB,CAAC;gBACD,CAAC;gBACD,MAAM,EAAE,MAAM;gBACd,MAAM;gBACN,MAAM;aACqC,CAAC,CAAC;YAE/C,OAAO,WAAW,IAAI,EAAE,CAAC;QAC3B,CAAC;QAED;;;WAGG;QAEH,KAAK,CAAC,WAAW,CACf,KAAa,EACb,KAAa,EACb,GAAW,EACX,GAAW,EACX,OAKC;YAED,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;YAE/C,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAC3B,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/D,MAAM,UAAU,GAAG,CAAC,CAAgB,EAAU,EAAE;gBAC9C,QAAQ,CAAC,EAAE,CAAC;oBACV,KAAK,MAAM;wBACT,OAAO,CAAC,CAAC;oBACX,KAAK,OAAO;wBACV,OAAO,CAAC,CAAC;oBACX,KAAK,QAAQ;wBACX,OAAO,CAAC,CAAC;oBACX;wBACE,OAAO,CAAC,CAAC;gBACb,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,SAA6B,CAAC;YAClC,IAAI,OAA2B,CAAC;YAChC,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;oBAChE,IAAI,KAAK;wBAAE,SAAS,GAAG,KAAK,CAAC,aAAa,CAAC;gBAC7C,CAAC;gBAAC,MAAM,CAAC;oBACP,EAAE;gBACJ,CAAC;gBACD,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,uBAAuB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC1D,IAAI,GAAG;wBAAE,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,EAAE;gBACJ,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACtC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBAC7D,IAAI,EAAE,YAAY;gBAClB,CAAC,EAAE,KAAK;gBACR,CAAC,EAAE,KAAK;gBACR,MAAM,EAAE,MAAM;aAC6B,CAAC,CAAC;YAE/C,QAAQ;YACR,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBAC7D,IAAI,EAAE,cAAc;gBACpB,CAAC,EAAE,KAAK;gBACR,CAAC,EAAE,KAAK;gBACR,MAAM;gBACN,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;gBAC3B,UAAU,EAAE,CAAC;aAC8B,CAAC,CAAC;YAE/C,qBAAqB;YACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBACpB,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;oBAC7D,IAAI,EAAE,YAAY;oBAClB,CAAC;oBACD,CAAC;oBACD,MAAM;oBACN,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;iBACgB,CAAC,CAAC;gBAC/C,IAAI,KAAK;oBAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;YAED,iBAAiB;YACjB,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAClC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAQ,0BAA0B,EAAE;gBAC7D,IAAI,EAAE,eAAe;gBACrB,CAAC,EAAE,GAAG;gBACN,CAAC,EAAE,GAAG;gBACN,MAAM;gBACN,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC;gBAC3B,UAAU,EAAE,CAAC;aAC8B,CAAC,CAAC;YAE/C,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED;;;;;WAKG;QAEH,KAAK,CAAC,IAAI,CACR,IAAY,EACZ,OAAoD;YAEpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,YAAY,GAAG,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC;YAE7C,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAC3B,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/D,MAAM,SAAS,GAAG,KAAK,EACrB,EAAU,EACV,QAIC,EACD,EAAE;gBACF,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,IAAI,GAA2C;wBACnD,IAAI,EAAE,SAAS;wBACf,GAAG,EAAE,QAAQ,CAAC,GAAG;wBACjB,IAAI,EAAE,QAAQ,CAAC,IAAI;wBACnB,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB;qBACZ,CAAC;oBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;oBAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;wBACpD,GAAG,IAAI;wBACP,IAAI,EAAE,OAAO;qBAC4B,CAAC,CAAC;oBAC7C,OAAO;gBACT,CAAC;gBAED,6EAA6E;gBAC7E,6EAA6E;gBAC7E,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEnC,IAAI,GAAG,GAAG,EAAE,CAAC;gBACb,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,IAAI,qBAAyC,CAAC;gBAE9C,IAAI,QAAQ,EAAE,CAAC;oBACb,uEAAuE;oBACvE,GAAG,GAAG,EAAE,CAAC;oBACT,IAAI,GAAG,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;oBAChC,qBAAqB,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACzD,CAAC;qBAAM,IAAI,OAAO,EAAE,CAAC;oBACnB,GAAG,GAAG,EAAE,CAAC;oBACT,IAAI,GAAG,QAAQ,EAAE,EAAE,CAAC;oBACpB,qBAAqB,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBACtB,GAAG,GAAG,GAAG,CAAC;oBACV,IAAI,GAAG,OAAO,CAAC;oBACf,qBAAqB,GAAG,EAAE,CAAC;gBAC7B,CAAC;gBAED,MAAM,IAAI,GAA2C;oBACnD,IAAI,EAAE,SAAS;oBACf,GAAG;oBACH,IAAI,EAAE,IAAI,IAAI,SAAS;oBACvB,IAAI,EAAE,EAAE;oBACR,cAAc,EAAE,EAAE;oBAClB,qBAAqB;iBACtB,CAAC;gBACF,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;gBAC5D,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACpD,IAAI,EAAE,OAAO;oBACb,GAAG;oBACH,IAAI,EAAE,IAAI,IAAI,SAAS;oBACvB,qBAAqB;iBACoB,CAAC,CAAC;YAC/C,CAAC,CAAC;YAEF,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE,CAChC,SAAS,CAAC,IAAI,EAAE;gBACd,GAAG,EAAE,WAAW;gBAChB,IAAI,EAAE,WAAW;gBACjB,qBAAqB,EAAE,CAAC;aACzB,CAAC,CAAC;YAEL,MAAM,eAAe,GAAG,CAAC,KAAa,EAAU,EAAE;gBAChD,MAAM,IAAI,GACR,mGAAmG,CAAC;gBACtG,IAAI,CAAC,GAAG,KAAK,CAAC;gBACd,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC;oBACnB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;gBACpD,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;YAEF,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;gBACtB,sCAAsC;gBACtC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAC/B,MAAM,SAAS,CAAC,EAAE,EAAE;wBAClB,GAAG,EAAE,OAAO;wBACZ,IAAI,EAAE,OAAO;wBACb,qBAAqB,EAAE,EAAE;qBAC1B,CAAC,CAAC;gBACL,CAAC;qBAAM,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBACvB,MAAM,SAAS,CAAC,EAAE,EAAE;wBAClB,GAAG,EAAE,KAAK;wBACV,IAAI,EAAE,KAAK;wBACX,qBAAqB,EAAE,CAAC;qBACzB,CAAC,CAAC;gBACL,CAAC;qBAAM,CAAC;oBACN,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;wBACzC,oDAAoD;wBACpD,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;wBAClC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;wBACvB,IAAI,KAAK;4BAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;wBAC9B,MAAM,cAAc,EAAE,CAAC;wBACvB,IAAI,KAAK;4BAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;oBAChC,CAAC;oBACD,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC;gBACtB,CAAC;gBAED,IAAI,KAAK;oBAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED;;;;WAIG;QAEH,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,OAA4B;YACtD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAC3B,IAAI,OAAO,CAAO,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE/D,2EAA2E;YAC3E,SAAS,KAAK,CAAC,SAAiB;gBAC9B,kEAAkE;gBAClE,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;oBACtB,OAAO,CAAC,GAAG,CAAC,CAAC;gBACf,CAAC;gBAED,MAAM,IAAI,GAAa,EAAE,CAAC;gBAC1B,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC7B,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,EAAE,CAAC;wBAC7B,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACpB,QAAQ,GAAG,EAAE,CAAC;oBAChB,CAAC;yBAAM,CAAC;wBACN,QAAQ,IAAI,IAAI,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,IAAI,QAAQ,EAAE,CAAC;oBACb,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACtB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC1C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAEzC,IAAI,CAAC;gBACH,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;oBAClC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC7B,CAAC;gBAED,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5B,IAAI,KAAK;oBAAE,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAE1B,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBAClD,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,gFAAgF;gBAChF,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;gBAC/B,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;QAGD,KAAK,CAAC,QAAQ,CAAC,OAA6B;YAC1C,IAAI,CAAC;gBACH,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,GACtD,MAAM,qBAAqB,CAAC,IAAI,EAAE;oBAChC,YAAY,EAAE,IAAI;oBAClB,cAAc,EAAE,OAAO,EAAE,cAAc;iBACxC,CAAC,CAAC;gBAEL,OAAO;oBACL,aAAa,EAAE,YAAY;oBAC3B,QAAQ,EAAE,gBAAgB;oBAC1B,MAAM,EAAE,cAAc;iBACvB,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,sBAAsB,CAAC,GAAG,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,8BAA8B;QACtB,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;QAE9C,4CAA4C;QACpC,KAAK,CAAC,OAAO,CAAC,GAAW;YAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAErD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YAExD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAElC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,mBAAmB,GACvB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;oBACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;oBACrC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACrC,IAAI,mBAAmB,EAAE,CAAC;oBACxB,kGAAkG;oBAClG,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;oBACtD,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE;wBAChC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;wBACtC,CAAC,CAAC,EAAE,CAAC;oBACP,MAAM,GAAG,GAA2C;wBAClD,IAAI,EAAE,YAAY;wBAClB,SAAS;wBACT,GAAG,EAAE,IAAI,CAAC,GAAG;wBACb,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzC,GAAG,CAAC,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;4BAC7B,CAAC,CAAC,EAAE,qBAAqB,EAAE,IAAI,CAAC,EAAE,EAAE;4BACpC,CAAC,CAAC,EAAE,CAAC;wBACP,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACf,CAAC;oBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;gBAC7D,CAAC;qBAAM,CAAC;oBACN,oEAAoE;oBACpE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;wBACpD,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,aAAa;wBACnB,cAAc,EAAE,aAAa;wBAC7B,SAAS;qBACgC,CAAC,CAAC;gBAC/C,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1E,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,SAAS,KAAK,CAAC,CAAC;gBACpD,MAAM,OAAO,GAA2C;oBACtD,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY;oBAC5C,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,qBAAqB,EAAE,KAAK,CAAC,EAAE;oBAC/B,SAAS;oBACT,GAAG,CAAC,WAAW;wBACb,CAAC,CAAC;4BACE,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,IAAI;yBACnD;wBACH,CAAC,CAAC,EAAE,CAAC;oBACP,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACf,CAAC;gBAC5C,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBACpD,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,aAAa;gBAClB,SAAS;aACgC,CAAC,CAAC;QAC/C,CAAC;QAED,4BAA4B;QACpB,KAAK,CAAC,KAAK,CAAC,GAAW;YAC7B,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;YAErD,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YAC1D,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,SAAS,IAAI,CAAC,CAAC;YAExD,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;YACzD,IAAI,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;gBACzC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC/C,CAAC;YAED,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YAElC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;gBACtD,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACpD,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,qBAAqB,EACnB,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;oBACnD,SAAS;iBACgC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,KAAK,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC;YAC3C,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;oBACpD,IAAI,EAAE,OAAO;oBACb,GAAG,EAAE,KAAK,CAAC,GAAG;oBACd,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,qBAAqB,EAAE,KAAK,CAAC,EAAE;oBAC/B,SAAS;iBACgC,CAAC,CAAC;gBAC7C,OAAO;YACT,CAAC;YAED,wCAAwC;YACxC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE;gBACpD,IAAI,EAAE,OAAO;gBACb,GAAG,EAAE,aAAa;gBAClB,SAAS;aACgC,CAAC,CAAC;QAC/C,CAAC;QAED,oDAAoD;QAC5C,oBAAoB,CAAC,GAAW;YACtC,MAAM,KAAK,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YAChC,QAAQ,KAAK,EAAE,CAAC;gBACd,gBAAgB;gBAChB,KAAK,KAAK,CAAC;gBACX,KAAK,SAAS,CAAC;gBACf,KAAK,eAAe;oBAClB,qEAAqE;oBACrE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7C,KAAK,KAAK,CAAC;gBACX,KAAK,SAAS;oBACZ,OAAO,MAAM,CAAC;gBAChB,KAAK,MAAM,CAAC;gBACZ,KAAK,SAAS;oBACZ,OAAO,SAAS,CAAC;gBACnB,KAAK,QAAQ,CAAC;gBACd,KAAK,KAAK;oBACR,OAAO,KAAK,CAAC;gBACf,KAAK,OAAO;oBACV,OAAO,OAAO,CAAC;gBACjB,KAAK,MAAM;oBACT,OAAO,MAAM,CAAC;gBAChB,cAAc;gBACd,KAAK,OAAO,CAAC;gBACb,KAAK,QAAQ;oBACX,OAAO,OAAO,CAAC;gBACjB,KAAK,KAAK,CAAC;gBACX,KAAK,QAAQ;oBACX,OAAO,QAAQ,CAAC;gBAClB,KAAK,WAAW;oBACd,OAAO,WAAW,CAAC;gBACrB,KAAK,KAAK;oBACR,OAAO,KAAK,CAAC;gBACf,KAAK,OAAO,CAAC;gBACb,KAAK,UAAU;oBACb,OAAO,GAAG,CAAC;gBACb,KAAK,QAAQ,CAAC;gBACd,KAAK,KAAK;oBACR,OAAO,QAAQ,CAAC;gBAClB,aAAa;gBACb,KAAK,MAAM,CAAC;gBACZ,KAAK,WAAW;oBACd,OAAO,WAAW,CAAC;gBACrB,KAAK,OAAO,CAAC;gBACb,KAAK,YAAY;oBACf,OAAO,YAAY,CAAC;gBACtB,KAAK,IAAI,CAAC;gBACV,KAAK,SAAS;oBACZ,OAAO,SAAS,CAAC;gBACnB,KAAK,MAAM,CAAC;gBACZ,KAAK,WAAW;oBACd,OAAO,WAAW,CAAC;gBACrB,kBAAkB;gBAClB,KAAK,MAAM;oBACT,OAAO,MAAM,CAAC;gBAChB,KAAK,KAAK;oBACR,OAAO,KAAK,CAAC;gBACf,KAAK,QAAQ,CAAC;gBACd,KAAK,MAAM;oBACT,OAAO,QAAQ,CAAC;gBAClB,KAAK,UAAU,CAAC;gBAChB,KAAK,MAAM;oBACT,OAAO,UAAU,CAAC;gBACpB;oBACE,OAAO,GAAG,CAAC;YACf,CAAC;QACH,CAAC;QAED;;WAEG;QACK,YAAY;YAUlB,OAAO;gBACL,KAAK,EAAE;oBACL,GAAG,EAAE,OAAO;oBACZ,IAAI,EAAE,OAAO;oBACb,EAAE,EAAE,EAAE;oBACN,IAAI,EAAE,IAAI;oBACV,cAAc,EAAE,IAAI;iBACrB;gBACD,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,EAAE;gBACvC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE;gBACzD,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;gBACjD,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;gBACjD,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE;gBAC1D,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE;gBACpD,UAAU,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,EAAE;gBAC7D,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE;gBAC1D,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE;gBAC3C,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE;gBACxC,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;gBACjD,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;gBACvD,gBAAgB;gBAChB,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE;gBAC5C,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,EAAE;gBACxD,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE;gBAC/C,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,EAAE;aACnD,CAAC;QACJ,CAAC;QAED;;;WAGG;QACK,oBAAoB,CAAC,EAAU;YAKrC,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEnC,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC/B,OAAO;oBACL,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE;oBAC5C,IAAI,EAAE,MAAM,KAAK,EAAE;oBACnB,EAAE,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,qBAAqB;iBAC/C,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO;oBACL,GAAG,EAAE,EAAE;oBACP,IAAI,EAAE,QAAQ,EAAE,EAAE;oBAClB,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,qBAAqB;iBAC5C,CAAC;YACJ,CAAC;YAED,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YAC7C,CAAC;YAED,uEAAuE;YACvE,OAAO;gBACL,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;gBACtC,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;aACnC,CAAC;QACJ,CAAC;QAEO,OAAO;YACb,IAAI,CAAC;gBACH,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;YACvC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED;;;WAGG;QACK,cAAc,CAAC,IAAY;YACjC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBAAE,OAAO,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC7D,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,KAAK,GAAsC;gBAC/C,WAAW,EAAE,YAAY;gBACzB,WAAW,EAAE,OAAO;gBACpB,WAAW,EAAE,MAAM;gBACnB,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE,OAAO;aACrB,CAAC;YACF,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK;gBAAE,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACpD,OAAO,IAAI;iBACR,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;iBACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC;QAED,yEAAyE;QAEzE,2EAA2E;QACnE,KAAK,CAAC,2BAA2B;YACvC,OAAO,iBAAiB,CAAC,gBAAgB,CACvC,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,WAAW,EAAE,EAClB,IAAI,CACL,CAAC;QACJ,CAAC;QAEO,KAAK,CAAC,oBAAoB,CAChC,KAAkC;YAElC,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACvD,MAAM,EAAE,MAAM,EAAE,GACd,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CACzB,kBAAkB,EAClB;oBACE,UAAU,EAAE,qBAAqB;oBACjC,SAAS,EAAE,KAAK;oBAChB,aAAa,EAAE,IAAI;iBACpB,CACF,CAAC;gBACJ,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;gBAC/C,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;oBACjC,OAAO,UAAU,KAAK,aAAa,IAAI,UAAU,KAAK,UAAU,CAAC;gBACnE,CAAC;gBACD,OAAO,UAAU,KAAK,UAAU,CAAC;YACnC,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;QAED;;;;;WAKG;QACH,KAAK,CAAC,oBAAoB,CACxB,KAAgB,EAChB,SAAS,GAAG,KAAK;YAEjB,MAAM,IAAI,CAAC,WAAW;iBACnB,IAAI,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;iBACzD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEnB,0DAA0D;YAC1D,IACE,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,MAAM,CAAC;gBAClD,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EACxC,CAAC;gBACD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC3C,IAAI,IAAI,GAAG,KAAK,CAAC;gBACjB,IAAI,KAAK,GAAyC,IAAI,CAAC;gBACvD,IAAI,SAAS,GAAyC,IAAI,CAAC;gBAC3D,IAAI,YAAY,GAAG,KAAK,CAAC;gBAEzB,MAAM,GAAG,GAAG,GAAG,EAAE;oBACf,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;oBACzD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;oBAChE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACtD,CAAC,CAAC;gBACF,MAAM,cAAc,GAAG,GAAG,EAAE;oBAC1B,IAAI,SAAS,EAAE,CAAC;wBACd,YAAY,CAAC,SAAS,CAAC,CAAC;wBACxB,SAAS,GAAG,IAAI,CAAC;oBACnB,CAAC;gBACH,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,IAAI,IAAI;wBAAE,OAAO;oBACjB,IAAI,GAAG,IAAI,CAAC;oBACZ,IAAI,KAAK,EAAE,CAAC;wBACV,YAAY,CAAC,KAAK,CAAC,CAAC;wBACpB,KAAK,GAAG,IAAI,CAAC;oBACf,CAAC;oBACD,cAAc,EAAE,CAAC;oBACjB,GAAG,EAAE,CAAC;oBACN,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBAEF,MAAM,WAAW,GAAG,CAAC,GAAsC,EAAE,EAAE;oBAC7D,IAAI,GAAG,CAAC,IAAI,KAAK,MAAM;wBAAE,OAAO;oBAChC,sEAAsE;oBACtE,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;wBAAE,MAAM,EAAE,CAAC;gBACnD,CAAC,CAAC;gBAEF,MAAM,YAAY,GAAG,GAAG,EAAE;oBACxB,IAAI,KAAK,KAAK,kBAAkB;wBAAE,MAAM,EAAE,CAAC;gBAC7C,CAAC,CAAC;gBAEF,MAAM,MAAM,GAAG,GAAG,EAAE;oBAClB,IAAI,KAAK,KAAK,MAAM;wBAAE,MAAM,EAAE,CAAC;gBACjC,CAAC,CAAC;gBAEF,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;gBACxD,2DAA2D;gBAC3D,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,2BAA2B,EAAE,YAAY,CAAC,CAAC;gBAC/D,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBAEnD,uEAAuE;gBACvE,wEAAwE;gBACxE,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;oBAChC,IAAI,IAAI,IAAI,YAAY;wBAAE,OAAO;oBACjC,YAAY,GAAG,IAAI,CAAC;oBACpB,IAAI,CAAC;wBACH,IAAI,IAAI;4BAAE,OAAO;wBACjB,IACE,CAAC,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,MAAM,CAAC;4BAClD,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EACxC,CAAC;4BACD,MAAM,EAAE,CAAC;4BACT,OAAO;wBACT,CAAC;oBACH,CAAC;4BAAS,CAAC;wBACT,YAAY,GAAG,KAAK,CAAC;oBACvB,CAAC;oBACD,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,cAAc,EAAE,CAAC;wBACjB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;4BAC1B,KAAK,cAAc,EAAE,CAAC;wBACxB,CAAC,EAAE,GAAG,CAAC,CAAC;oBACV,CAAC;gBACH,CAAC,CAAC;gBACF,KAAK,cAAc,EAAE,CAAC;gBAEtB,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBACtB,IAAI,IAAI;wBAAE,OAAO;oBACjB,IAAI,GAAG,IAAI,CAAC;oBACZ,cAAc,EAAE,CAAC;oBACjB,GAAG,EAAE,CAAC;oBACN,MAAM,CACJ,IAAI,KAAK,CACP,wBAAwB,KAAK,qBAAqB,SAAS,IAAI,CAChE,CACF,CAAC;gBACJ,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;;;SA7qEU,IAAI","sourcesContent":["import { Protocol } from \"devtools-protocol\";\nimport { promises as fs } from \"fs\";\nimport { v3Logger } from \"../logger.js\";\nimport { logAction } from \"../flowLogger.js\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport { CdpConnection } from \"./cdp.js\";\nimport { Frame } from \"./frame.js\";\nimport { FrameLocator } from \"./frameLocator.js\";\nimport { deepLocatorFromPage, resolveLocatorTarget } from \"./deepLocator.js\";\nimport {\n captureHybridSnapshot,\n resolveXpathForLocation,\n} from \"./a11y/snapshot/index.js\";\nimport { FrameRegistry } from \"./frameRegistry.js\";\nimport { executionContexts } from \"./executionContextRegistry.js\";\nimport {\n LoadState,\n SnapshotResult,\n PageSnapshotOptions,\n} from \"../types/public/page.js\";\nimport { NetworkManager } from \"./networkManager.js\";\nimport { LifecycleWatcher } from \"./lifecycleWatcher.js\";\nimport { NavigationResponseTracker } from \"./navigationResponseTracker.js\";\nimport { Response, isSerializableResponse } from \"./response.js\";\nimport { ConsoleMessage, ConsoleListener } from \"./consoleMessage.js\";\nimport type { StagehandAPIClient } from \"../api.js\";\nimport {\n LocalBrowserLaunchOptions,\n StagehandSnapshotError,\n} from \"../types/public/index.js\";\nimport type { Locator } from \"./locator.js\";\nimport {\n StagehandInvalidArgumentError,\n StagehandEvalError,\n} from \"../types/public/sdkErrors.js\";\nimport { normalizeInitScriptSource } from \"./initScripts.js\";\nimport { buildLocatorInvocation } from \"./locatorInvocation.js\";\nimport type {\n ScreenshotAnimationsOption,\n ScreenshotCaretOption,\n ScreenshotOptions,\n ScreenshotScaleOption,\n} from \"../types/public/screenshotTypes.js\";\nimport {\n applyMaskOverlays,\n applyStyleToFrames,\n collectFramesForScreenshot,\n computeScreenshotScale,\n disableAnimations,\n hideCaret,\n normalizeScreenshotClip,\n runScreenshotCleanups,\n setTransparentBackground,\n withScreenshotTimeout,\n type ScreenshotCleanup,\n} from \"./screenshotUtils.js\";\nimport { InitScriptSource } from \"../types/private/index.js\";\n\n/**\n * Page\n *\n * One instance per **top-level target**. It owns:\n * - the top-level CDP session (for the page target)\n * - all adopted OOPIF child sessions (Target.attachToTarget with flatten: true)\n * - a **FrameRegistry** that is the single source of truth for BOTH:\n * • frame topology (parent/children, root swaps, last-seen CDP Frame)\n * • frame → session ownership (which session owns which frameId)\n *\n * Page exposes convenient APIs (goto/reload/url/screenshot/locator),\n * and simple bridges that Context uses to feed Page/Target events in.\n */\n\nconst LIFECYCLE_NAME: Record<LoadState, string> = {\n load: \"load\",\n domcontentloaded: \"DOMContentLoaded\",\n networkidle: \"networkIdle\",\n};\n\nexport class Page {\n /** Every CDP child session this page owns (top-level + adopted OOPIF sessions). */\n private readonly sessions = new Map<string, CDPSessionLike>(); // sessionId -> session\n\n /** Unified truth for frame topology + ownership. */\n private readonly registry: FrameRegistry;\n\n /** A convenience wrapper bound to the current main frame id (top-level session). */\n private mainFrameWrapper: Frame;\n\n /** Compact ordinal per frameId (used by snapshot encoding). */\n private frameOrdinals = new Map<string, number>();\n private nextOrdinal = 0;\n\n /** cache Frames per frameId so everyone uses the same one */\n private readonly frameCache = new Map<string, Frame>();\n private readonly browserIsRemote: boolean;\n\n /** Stable id for Frames created by this Page (use top-level TargetId). */\n private readonly pageId: string;\n /** Cached current URL for synchronous page.url() */\n private _currentUrl: string = \"about:blank\";\n\n private navigationCommandSeq = 0;\n private latestNavigationCommandId = 0;\n\n private readonly networkManager: NetworkManager;\n /** Optional API client for routing page operations to the API */\n private readonly apiClient: StagehandAPIClient | null = null;\n private readonly consoleListeners = new Set<ConsoleListener>();\n private readonly consoleHandlers = new Map<\n string,\n (evt: Protocol.Runtime.ConsoleAPICalledEvent) => void\n >();\n /** Document-start scripts installed across every session this page owns. */\n private readonly initScripts: string[] = [];\n\n private constructor(\n private readonly conn: CdpConnection,\n private readonly mainSession: CDPSessionLike,\n private readonly _targetId: string,\n mainFrameId: string,\n apiClient?: StagehandAPIClient | null,\n browserIsRemote = false,\n ) {\n this.pageId = _targetId;\n this.apiClient = apiClient ?? null;\n this.browserIsRemote = browserIsRemote;\n\n // own the main session\n if (mainSession.id) this.sessions.set(mainSession.id, mainSession);\n\n // initialize registry with root/main frame id\n this.registry = new FrameRegistry(_targetId, mainFrameId);\n\n // main-frame wrapper is always bound to the **top-level** session\n this.mainFrameWrapper = new Frame(\n this.mainSession,\n mainFrameId,\n this.pageId,\n this.browserIsRemote,\n );\n\n this.networkManager = new NetworkManager();\n this.networkManager.trackSession(this.mainSession);\n }\n\n // Send a single init script to a specific CDP session.\n private async installInitScriptOnSession(\n session: CDPSessionLike,\n source: string,\n ): Promise<void> {\n await session.send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source: source,\n });\n }\n\n // Replay every previously registered init script onto a newly adopted session.\n private async applyInitScriptsToSession(\n session: CDPSessionLike,\n ): Promise<void> {\n for (const source of this.initScripts) {\n await this.installInitScriptOnSession(session, source);\n }\n }\n\n // Register a new init script and fan it out to all active sessions for this page.\n public async registerInitScript(source: string): Promise<void> {\n if (this.initScripts.includes(source)) return;\n this.initScripts.push(source);\n\n const installs: Array<Promise<void>> = [];\n installs.push(this.installInitScriptOnSession(this.mainSession, source));\n for (const session of this.sessions.values()) {\n if (session === this.mainSession) continue;\n installs.push(this.installInitScriptOnSession(session, source));\n }\n await Promise.all(installs);\n }\n\n // Seed an init script without re-installing it on the current sessions.\n public seedInitScript(source: string): void {\n if (this.initScripts.includes(source)) return;\n this.initScripts.push(source);\n }\n\n // --- Optional visual cursor overlay management ---\n private cursorEnabled = false;\n private async ensureCursorScript(): Promise<void> {\n const script = `(() => {\n const ID = '__v3_cursor_overlay__';\n const state = { el: null, last: null };\n // Expose API early so move() calls before install are buffered\n try {\n if (!window.__v3Cursor || !window.__v3Cursor.__installed) {\n const api = {\n __installed: false,\n move(x, y) {\n if (state.el) {\n state.el.style.left = Math.max(0, x) + 'px';\n state.el.style.top = Math.max(0, y) + 'px';\n } else {\n state.last = [x, y];\n }\n },\n show() { if (state.el) state.el.style.display = 'block'; },\n hide() { if (state.el) state.el.style.display = 'none'; },\n };\n window.__v3Cursor = api;\n }\n } catch {}\n\n function install() {\n try {\n if (state.el) return; // already installed\n let el = document.getElementById(ID);\n if (!el) {\n const root = document.documentElement || document.body || document.head;\n if (!root) { setTimeout(install, 50); return; }\n el = document.createElement('div');\n el.id = ID;\n el.style.position = 'fixed';\n el.style.left = '0px';\n el.style.top = '0px';\n el.style.width = '16px';\n el.style.height = '24px';\n el.style.zIndex = '2147483647';\n el.style.pointerEvents = 'none';\n el.style.userSelect = 'none';\n el.style.mixBlendMode = 'normal';\n el.style.contain = 'layout style paint';\n el.style.willChange = 'transform,left,top';\n el.innerHTML = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"24\" viewBox=\"0 0 16 24\"><path d=\"M1 0 L1 22 L6 14 L15 14 Z\" fill=\"black\" stroke=\"white\" stroke-width=\"0.7\"/></svg>';\n root.appendChild(el);\n }\n state.el = el;\n try { window.__v3Cursor.__installed = true; } catch {}\n if (state.last) {\n window.__v3Cursor.move(state.last[0], state.last[1]);\n state.last = null;\n }\n } catch {}\n }\n\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n install();\n } else {\n document.addEventListener('DOMContentLoaded', install, { once: true });\n setTimeout(install, 100);\n }\n })();`;\n\n // Ensure future documents get the cursor at doc-start\n await this.mainSession\n .send(\"Page.addScriptToEvaluateOnNewDocument\", { source: script })\n .catch(() => {});\n // Inject into current document now\n await this.mainSession\n .send(\"Runtime.evaluate\", {\n expression: script,\n includeCommandLineAPI: false,\n })\n .catch(() => {});\n }\n\n public async enableCursorOverlay(): Promise<void> {\n if (this.cursorEnabled) return;\n await this.ensureCursorScript();\n this.cursorEnabled = true;\n }\n\n private async updateCursor(x: number, y: number): Promise<void> {\n if (!this.cursorEnabled) return;\n try {\n await this.mainSession.send(\"Runtime.evaluate\", {\n expression: `typeof window.__v3Cursor!==\"undefined\"&&window.__v3Cursor.move(${Math.round(x)}, ${Math.round(y)})`,\n });\n } catch {\n //\n }\n }\n\n public async addInitScript<Arg>(\n script: InitScriptSource<Arg>,\n arg?: Arg,\n ): Promise<void> {\n const source = await normalizeInitScriptSource(\n script,\n arg,\n \"page.addInitScript\",\n );\n await this.registerInitScript(source);\n }\n\n /**\n * Factory: create Page and seed registry with the shallow tree from Page.getFrameTree.\n * Assumes Page domain is already enabled on the session passed in.\n */\n static async create(\n conn: CdpConnection,\n session: CDPSessionLike,\n targetId: string,\n apiClient?: StagehandAPIClient | null,\n localBrowserLaunchOptions?: LocalBrowserLaunchOptions | null,\n browserIsRemote = false,\n ): Promise<Page> {\n await session.send(\"Page.enable\").catch(() => {});\n await session\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n const { frameTree } = await session.send<{\n frameTree: Protocol.Page.FrameTree;\n }>(\"Page.getFrameTree\");\n const mainFrameId = frameTree.frame.id;\n\n const page = new Page(\n conn,\n session,\n targetId,\n mainFrameId,\n apiClient,\n browserIsRemote,\n );\n // Seed current URL from initial frame tree\n try {\n page._currentUrl = String(frameTree?.frame?.url ?? page._currentUrl);\n if (localBrowserLaunchOptions?.viewport) {\n await page.setViewportSize(\n localBrowserLaunchOptions.viewport.width,\n localBrowserLaunchOptions.viewport.height,\n {\n deviceScaleFactor: localBrowserLaunchOptions.deviceScaleFactor ?? 1,\n },\n );\n }\n } catch {\n // ignore\n }\n\n // Seed topology + ownership for nodes known at creation time.\n page.registry.seedFromFrameTree(session.id ?? \"root\", frameTree);\n\n return page;\n }\n\n // ---------------- Event-driven updates from Context ----------------\n\n /**\n * Parent/child session emitted a `frameAttached`.\n * Topology update + ownership stamped to **emitting session**.\n */\n public onFrameAttached(\n frameId: string,\n parentId: string | null,\n session: CDPSessionLike,\n ): void {\n this.ensureOrdinal(frameId);\n this.registry.onFrameAttached(frameId, parentId, session.id ?? \"root\");\n // Cache is keyed by frameId → invalidate to ensure future frameForId resolves with latest owner\n this.frameCache.delete(frameId);\n }\n\n /**\n * Parent/child session emitted a `frameDetached`.\n */\n public onFrameDetached(\n frameId: string,\n reason: \"remove\" | \"swap\" | string = \"remove\",\n ): void {\n this.registry.onFrameDetached(frameId, reason);\n this.frameCache.delete(frameId);\n }\n\n /**\n * Parent/child session emitted a `frameNavigated`.\n * Topology + ownership update. Handles root swaps.\n */\n public onFrameNavigated(\n frame: Protocol.Page.Frame,\n session: CDPSessionLike,\n ): void {\n const prevRoot = this.mainFrameId();\n this.registry.onFrameNavigated(frame, session.id ?? \"root\");\n\n // If the root changed, keep the convenience wrapper in sync\n const newRoot = this.mainFrameId();\n if (newRoot !== prevRoot) {\n const oldOrd = this.frameOrdinals.get(prevRoot) ?? 0;\n this.frameOrdinals.set(newRoot, oldOrd);\n this.mainFrameWrapper = new Frame(\n this.mainSession,\n newRoot,\n this.pageId,\n this.browserIsRemote,\n );\n }\n\n // Update cached URL if this navigation pertains to the current main frame\n if (frame.id === this.mainFrameId()) {\n try {\n // Prefer frame.url; fallback keeps previous value\n this._currentUrl = String(\n (frame as { url?: string })?.url ?? this._currentUrl,\n );\n } catch {\n // ignore\n }\n }\n\n // Invalidate the cached Frame for this id (session may have changed)\n this.frameCache.delete(frame.id);\n }\n\n public onNavigatedWithinDocument(\n frameId: string,\n url: string,\n session: CDPSessionLike,\n ): void {\n const normalized = String(url ?? \"\").trim();\n if (!normalized) return;\n\n this.registry.onNavigatedWithinDocument(\n frameId,\n normalized,\n session.id ?? \"root\",\n );\n\n if (frameId === this.mainFrameId()) {\n this._currentUrl = normalized;\n }\n }\n\n /**\n * An OOPIF child session whose **main** frame id equals the parent iframe’s frameId\n * has been attached; adopt the session into this Page and seed ownership for its subtree.\n */\n public adoptOopifSession(\n childSession: CDPSessionLike,\n childMainFrameId: string,\n ): void {\n if (childSession.id) this.sessions.set(childSession.id, childSession);\n\n this.networkManager.trackSession(childSession);\n\n void this.applyInitScriptsToSession(childSession).catch(() => {});\n\n if (this.consoleListeners.size > 0) {\n this.installConsoleTap(childSession);\n }\n\n // session will start emitting its own page events; mark ownership seed now\n this.registry.adoptChildSession(\n childSession.id ?? \"child\",\n childMainFrameId,\n );\n this.frameCache.delete(childMainFrameId);\n\n // Bridge events from the child session to keep registry in sync\n childSession.on<Protocol.Page.FrameNavigatedEvent>(\n \"Page.frameNavigated\",\n (evt) => {\n this.onFrameNavigated(evt.frame, childSession);\n },\n );\n childSession.on<Protocol.Page.FrameAttachedEvent>(\n \"Page.frameAttached\",\n (evt) => {\n this.onFrameAttached(\n evt.frameId,\n evt.parentFrameId ?? null,\n childSession,\n );\n },\n );\n childSession.on<Protocol.Page.FrameDetachedEvent>(\n \"Page.frameDetached\",\n (evt) => {\n this.onFrameDetached(evt.frameId, evt.reason ?? \"remove\");\n },\n );\n\n // One-shot seed the child's subtree ownership from its current tree\n void (async () => {\n try {\n await childSession.send(\"Page.enable\").catch(() => {});\n let { frameTree } =\n await childSession.send<Protocol.Page.GetFrameTreeResponse>(\n \"Page.getFrameTree\",\n );\n\n // Normalize: ensure the child’s reported root id matches our known main id\n if (frameTree.frame.id !== childMainFrameId) {\n frameTree = {\n ...frameTree,\n frame: { ...frameTree.frame, id: childMainFrameId },\n };\n }\n\n this.registry.seedFromFrameTree(childSession.id ?? \"child\", frameTree);\n } catch {\n // If snapshot races, live events will still converge the registry.\n }\n })();\n }\n\n /** Detach an adopted child session and prune its subtree */\n public detachOopifSession(sessionId: string): void {\n // Find which frames were owned by this session and prune by tree starting from each root.\n for (const fid of this.registry.framesForSession(sessionId)) {\n this.registry.onFrameDetached(fid, \"remove\");\n this.frameCache.delete(fid);\n }\n this.teardownConsoleTap(sessionId);\n this.sessions.delete(sessionId);\n this.networkManager.untrackSession(sessionId);\n }\n\n // ---------------- Ownership helpers / lookups ----------------\n\n /** Return the owning CDP session for a frameId (falls back to main session) */\n public getSessionForFrame(frameId: string): CDPSessionLike {\n const sid = this.registry.getOwnerSessionId(frameId);\n if (!sid) return this.mainSession;\n return this.sessions.get(sid) ?? this.mainSession;\n }\n\n /** Always returns a Frame bound to the owning session */\n public frameForId(frameId: string): Frame {\n const hit = this.frameCache.get(frameId);\n if (hit) return hit;\n\n const sess = this.getSessionForFrame(frameId);\n const f = new Frame(sess, frameId, this.pageId, this.browserIsRemote);\n this.frameCache.set(frameId, f);\n return f;\n }\n\n /** Expose a session by id (used by snapshot to resolve session id -> session) */\n public getSessionById(id: string): CDPSessionLike | undefined {\n return this.sessions.get(id);\n }\n\n public registerSessionForNetwork(session: CDPSessionLike): void {\n this.networkManager.trackSession(session);\n }\n\n public unregisterSessionForNetwork(sessionId: string | undefined): void {\n this.networkManager.untrackSession(sessionId);\n }\n\n public on(event: \"console\", listener: ConsoleListener): Page {\n if (event !== \"console\") {\n throw new StagehandInvalidArgumentError(`Unsupported event: ${event}`);\n }\n\n const firstListener = this.consoleListeners.size === 0;\n this.consoleListeners.add(listener);\n\n if (firstListener) {\n this.ensureConsoleTaps();\n }\n\n return this;\n }\n\n public once(event: \"console\", listener: ConsoleListener): Page {\n if (event !== \"console\") {\n throw new StagehandInvalidArgumentError(`Unsupported event: ${event}`);\n }\n\n const wrapper: ConsoleListener = (message) => {\n this.off(\"console\", wrapper);\n listener(message);\n };\n\n return this.on(\"console\", wrapper);\n }\n\n public off(event: \"console\", listener: ConsoleListener): Page {\n if (event !== \"console\") {\n throw new StagehandInvalidArgumentError(`Unsupported event: ${event}`);\n }\n\n this.consoleListeners.delete(listener);\n\n if (this.consoleListeners.size === 0) {\n this.removeAllConsoleTaps();\n }\n\n return this;\n }\n\n // ---------------- MAIN APIs ----------------\n\n public targetId(): string {\n return this._targetId;\n }\n\n /**\n * Send a CDP command through the main session.\n * Allows external consumers to execute arbitrary Chrome DevTools Protocol commands.\n *\n * @param method - The CDP method name (e.g., \"Page.enable\", \"Runtime.evaluate\")\n * @param params - Optional parameters for the CDP command\n * @returns Promise resolving to the typed CDP response\n *\n * @example\n * // Enable the Runtime domain\n * await page.sendCDP(\"Runtime.enable\");\n *\n * @example\n * // Evaluate JavaScript with typed response\n * const result = await page.sendCDP<Protocol.Runtime.EvaluateResponse>(\n * \"Runtime.evaluate\",\n * { expression: \"1 + 1\" }\n * );\n */\n public sendCDP<T = unknown>(method: string, params?: object): Promise<T> {\n return this.mainSession.send<T>(method, params);\n }\n\n /** Seed the cached URL before navigation events converge. */\n public seedCurrentUrl(url: string | undefined | null): void {\n if (!url) return;\n try {\n const normalized = String(url).trim();\n if (!normalized) return;\n this._currentUrl = normalized;\n } catch {\n // ignore invalid url seeds\n }\n }\n\n public mainFrameId(): string {\n return this.registry.mainFrameId();\n }\n\n public mainFrame(): Frame {\n return this.mainFrameWrapper;\n }\n\n /**\n * Close this top-level page (tab). Best-effort via Target.closeTarget.\n */\n @logAction(\"Page.close\")\n public async close(): Promise<void> {\n try {\n await this.conn.send(\"Target.closeTarget\", { targetId: this._targetId });\n } catch {\n // ignore\n }\n const deadline = Date.now() + 2000;\n while (Date.now() < deadline) {\n try {\n const targets = await this.conn.getTargets();\n if (!targets.some((t) => t.targetId === this._targetId)) {\n this.networkManager.dispose();\n return;\n }\n } catch {\n // ignore and retry\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n this.networkManager.dispose();\n this.removeAllConsoleTaps();\n this.consoleListeners.clear();\n }\n\n public getFullFrameTree(): Protocol.Page.FrameTree {\n return this.asProtocolFrameTree(this.mainFrameId());\n }\n\n public asProtocolFrameTree(rootMainFrameId: string): Protocol.Page.FrameTree {\n return this.registry.asProtocolFrameTree(rootMainFrameId);\n }\n\n private ensureOrdinal(frameId: string): number {\n const hit = this.frameOrdinals.get(frameId);\n if (hit !== undefined) return hit;\n const ord = this.nextOrdinal++;\n this.frameOrdinals.set(frameId, ord);\n return ord;\n }\n\n /** Public getter for snapshot code / handlers. */\n public getOrdinal(frameId: string): number {\n return this.ensureOrdinal(frameId);\n }\n\n public listAllFrameIds(): string[] {\n return this.registry.listAllFrames();\n }\n\n private ensureConsoleTaps(): void {\n if (this.consoleListeners.size === 0) return;\n\n this.installConsoleTap(this.mainSession);\n for (const session of this.sessions.values()) {\n this.installConsoleTap(session);\n }\n }\n\n private installConsoleTap(session: CDPSessionLike): void {\n const key = this.sessionKey(session);\n if (this.consoleHandlers.has(key)) return;\n\n void session.send(\"Runtime.enable\").catch(() => {});\n\n const handler = (evt: Protocol.Runtime.ConsoleAPICalledEvent) => {\n this.emitConsole(evt);\n };\n\n session.on<Protocol.Runtime.ConsoleAPICalledEvent>(\n \"Runtime.consoleAPICalled\",\n handler,\n );\n\n this.consoleHandlers.set(key, handler);\n }\n\n private sessionKey(session: CDPSessionLike): string {\n return session.id ?? \"__root__\";\n }\n\n private resolveSessionByKey(key: string): CDPSessionLike | undefined {\n if (this.mainSession.id) {\n if (this.mainSession.id === key) return this.mainSession;\n } else if (key === \"__root__\") {\n return this.mainSession;\n }\n\n return this.sessions.get(key);\n }\n\n private teardownConsoleTap(key: string): void {\n const handler = this.consoleHandlers.get(key);\n if (!handler) return;\n\n const session = this.resolveSessionByKey(key);\n session?.off(\"Runtime.consoleAPICalled\", handler);\n this.consoleHandlers.delete(key);\n }\n\n private removeAllConsoleTaps(): void {\n for (const key of [...this.consoleHandlers.keys()]) {\n this.teardownConsoleTap(key);\n }\n }\n\n private emitConsole(evt: Protocol.Runtime.ConsoleAPICalledEvent): void {\n if (this.consoleListeners.size === 0) return;\n\n const message = new ConsoleMessage(evt, this);\n const listeners = [...this.consoleListeners];\n\n for (const listener of listeners) {\n try {\n listener(message);\n } catch (error) {\n v3Logger({\n category: \"page\",\n message: \"Console listener threw\",\n level: 2,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n type: { value: evt.type, type: \"string\" },\n },\n });\n }\n }\n }\n\n // -------- Convenience APIs delegated to the current main frame --------\n\n /**\n * Navigate the page; optionally wait for a lifecycle state.\n * Waits on the **current** main frame and follows root swaps during navigation.\n */\n @logAction(\"Page.goto\")\n async goto(\n url: string,\n options?: { waitUntil?: LoadState; timeoutMs?: number },\n ): Promise<Response | null> {\n const waitUntil: LoadState = options?.waitUntil ?? \"domcontentloaded\";\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n\n const watcher = new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n });\n\n try {\n // Route to API if available\n if (this.apiClient) {\n const result = await this.apiClient.goto(\n url,\n { waitUntil: options?.waitUntil },\n this.mainFrameId(),\n );\n this._currentUrl = url;\n\n if (isSerializableResponse(result)) {\n return Response.fromSerializable(result, {\n page: this,\n session: this.mainSession,\n });\n }\n return result;\n }\n const response =\n await this.mainSession.send<Protocol.Page.NavigateResponse>(\n \"Page.navigate\",\n { url },\n );\n this._currentUrl = url;\n if (response?.loaderId) {\n watcher.setExpectedLoaderId(response.loaderId);\n tracker.setExpectedLoaderId(response.loaderId);\n }\n await watcher.wait();\n return await tracker.navigationCompleted();\n } finally {\n watcher.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Reload the page; optionally wait for a lifecycle state.\n */\n @logAction(\"Page.reload\")\n async reload(options?: {\n waitUntil?: LoadState;\n timeoutMs?: number;\n ignoreCache?: boolean;\n }): Promise<Response | null> {\n const waitUntil = options?.waitUntil;\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n tracker.expectNavigationWithoutKnownLoader();\n\n const watcher = waitUntil\n ? new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n })\n : null;\n\n try {\n await this.mainSession.send(\"Page.reload\", {\n ignoreCache: options?.ignoreCache ?? false,\n });\n\n if (watcher) {\n await watcher.wait();\n }\n return await tracker.navigationCompleted();\n } finally {\n watcher?.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Navigate back in history if possible; optionally wait for a lifecycle state.\n */\n @logAction(\"Page.goBack\")\n async goBack(options?: {\n waitUntil?: LoadState;\n timeoutMs?: number;\n }): Promise<Response | null> {\n const { entries, currentIndex } =\n await this.mainSession.send<Protocol.Page.GetNavigationHistoryResponse>(\n \"Page.getNavigationHistory\",\n );\n const prev = entries[currentIndex - 1];\n if (!prev) return null; // nothing to do\n const waitUntil = options?.waitUntil;\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n tracker.expectNavigationWithoutKnownLoader();\n\n const watcher = waitUntil\n ? new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n })\n : null;\n\n try {\n await this.mainSession.send(\"Page.navigateToHistoryEntry\", {\n entryId: prev.id,\n });\n this._currentUrl = prev.url ?? this._currentUrl;\n\n if (watcher) {\n await watcher.wait();\n }\n return await tracker.navigationCompleted();\n } finally {\n watcher?.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Navigate forward in history if possible; optionally wait for a lifecycle state.\n */\n @logAction(\"Page.goForward\")\n async goForward(options?: {\n waitUntil?: LoadState;\n timeoutMs?: number;\n }): Promise<Response | null> {\n const { entries, currentIndex } =\n await this.mainSession.send<Protocol.Page.GetNavigationHistoryResponse>(\n \"Page.getNavigationHistory\",\n );\n const next = entries[currentIndex + 1];\n if (!next) return null; // nothing to do\n const waitUntil = options?.waitUntil;\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n tracker.expectNavigationWithoutKnownLoader();\n\n const watcher = waitUntil\n ? new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n })\n : null;\n\n try {\n await this.mainSession.send(\"Page.navigateToHistoryEntry\", {\n entryId: next.id,\n });\n this._currentUrl = next.url ?? this._currentUrl;\n\n if (watcher) {\n await watcher.wait();\n }\n return await tracker.navigationCompleted();\n } finally {\n watcher?.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Return the current page URL (synchronous, cached from navigation events).\n */\n url(): string {\n return this._currentUrl;\n }\n\n private beginNavigationCommand(): number {\n const id = ++this.navigationCommandSeq;\n this.latestNavigationCommandId = id;\n return id;\n }\n\n public isCurrentNavigationCommand(id: number): boolean {\n return this.latestNavigationCommandId === id;\n }\n\n /**\n * Return the current page title.\n * Prefers reading from the active document via Runtime.evaluate to reflect dynamic changes.\n * Falls back to navigation history title if evaluation is unavailable.\n */\n async title(): Promise<string> {\n try {\n await this.mainSession.send(\"Runtime.enable\").catch(() => {});\n const ctxId = await this.mainWorldExecutionContextId();\n const { result } =\n await this.mainSession.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression: \"document.title\",\n contextId: ctxId,\n returnByValue: true,\n },\n );\n return String(result?.value ?? \"\");\n } catch {\n // Fallback: use navigation history entry title\n try {\n const { entries, currentIndex } =\n await this.mainSession.send<Protocol.Page.GetNavigationHistoryResponse>(\n \"Page.getNavigationHistory\",\n );\n return entries[currentIndex]?.title ?? \"\";\n } catch {\n return \"\";\n }\n }\n }\n\n /**\n * Capture a screenshot with Playwright-style options.\n *\n * @param options Optional screenshot configuration.\n * @param options.animations Control CSS/Web animations during capture. Use\n * \"disabled\" to fast-forward finite animations and pause infinite ones.\n * @param options.caret Either hide the text caret (default) or leave it\n * visible via \"initial\".\n * @param options.clip Restrict capture to a specific rectangle (in CSS\n * pixels). Cannot be combined with `fullPage`.\n * @param options.fullPage Capture the full scrollable page instead of the\n * current viewport.\n * @param options.mask Array of locators that should be covered with an\n * overlay while the screenshot is taken.\n * @param options.maskColor CSS color used for the mask overlay (default\n * `#FF00FF`).\n * @param options.omitBackground Make the default page background transparent\n * (PNG only).\n * @param options.path File path to write the screenshot to. The file extension\n * determines the image type when `type` is not explicitly provided.\n * @param options.quality JPEG quality (0–100). Only applies when\n * `type === \"jpeg\"`.\n * @param options.scale Render scale: use \"css\" for one pixel per CSS pixel,\n * otherwise the default \"device\" leverages the current device pixel ratio.\n * @param options.style Additional CSS text injected into every frame before\n * capture (removed afterwards).\n * @param options.timeout Maximum capture duration in milliseconds before a\n * timeout error is thrown.\n * @param options.type Image format (`\"png\"` by default).\n */\n @logAction(\"Page.screenshot\")\n async screenshot(options?: ScreenshotOptions): Promise<Buffer> {\n const opts = options ?? {};\n const type = opts.type ?? \"png\";\n\n if (type !== \"png\" && type !== \"jpeg\") {\n throw new StagehandInvalidArgumentError(\n `screenshot: unsupported image type \"${type}\"`,\n );\n }\n\n if (opts.fullPage && opts.clip) {\n throw new StagehandInvalidArgumentError(\n \"screenshot: clip and fullPage cannot be used together\",\n );\n }\n\n if (type === \"png\" && typeof opts.quality === \"number\") {\n throw new StagehandInvalidArgumentError(\n 'screenshot: quality option is only valid for type=\"jpeg\"',\n );\n }\n\n const caretMode: ScreenshotCaretOption = opts.caret ?? \"hide\";\n const animationsMode: ScreenshotAnimationsOption =\n opts.animations ?? \"allow\";\n const scaleMode: ScreenshotScaleOption = opts.scale ?? \"device\";\n const frames = collectFramesForScreenshot(this);\n const clip = opts.clip ? normalizeScreenshotClip(opts.clip) : undefined;\n const captureScale = await computeScreenshotScale(this, scaleMode);\n const maskLocators = (opts.mask ?? []).filter(\n (locator): locator is Locator => Boolean(locator),\n );\n\n const cleanupTasks: ScreenshotCleanup[] = [];\n\n const exec = async (): Promise<Buffer> => {\n try {\n if (opts.omitBackground) {\n cleanupTasks.push(await setTransparentBackground(this.mainSession));\n }\n\n if (animationsMode === \"disabled\") {\n cleanupTasks.push(await disableAnimations(frames));\n }\n\n if (caretMode === \"hide\") {\n cleanupTasks.push(await hideCaret(frames));\n }\n\n if (opts.style && opts.style.trim()) {\n cleanupTasks.push(\n await applyStyleToFrames(frames, opts.style, \"custom\"),\n );\n }\n\n if (maskLocators.length > 0) {\n cleanupTasks.push(\n await applyMaskOverlays(maskLocators, opts.maskColor ?? \"#FF00FF\"),\n );\n }\n\n const buffer = await this.mainFrameWrapper.screenshot({\n fullPage: opts.fullPage,\n clip,\n type,\n quality: type === \"jpeg\" ? opts.quality : undefined,\n scale: captureScale,\n });\n\n if (opts.path) {\n await fs.writeFile(opts.path, buffer);\n }\n\n return buffer;\n } finally {\n await runScreenshotCleanups(cleanupTasks);\n }\n };\n\n return withScreenshotTimeout(opts.timeout, exec);\n }\n\n /**\n * Create a locator bound to the current main frame.\n */\n locator(selector: string): ReturnType<Frame[\"locator\"]> {\n return this.mainFrameWrapper.locator(selector);\n }\n\n /**\n * Deep locator that supports cross-iframe traversal.\n * - Recognizes '>>' hop notation to enter iframe contexts.\n * - Supports deep XPath that includes iframe steps (e.g., '/html/body/iframe[2]//div').\n * Returns a Locator scoped to the appropriate frame.\n */\n deepLocator(selector: string) {\n return deepLocatorFromPage(this, this.mainFrameWrapper, selector);\n }\n\n /**\n * Frame locator similar to Playwright: targets iframe elements and scopes\n * subsequent locators to that frame. Supports chaining.\n */\n frameLocator(selector: string): FrameLocator {\n return new FrameLocator(this, selector);\n }\n\n /**\n * List all frames belonging to this page as Frame objects bound to their owning sessions.\n * The list is ordered by a stable ordinal assigned during the page lifetime.\n */\n frames(): Frame[] {\n const ids = this.listAllFrameIds();\n const withOrd = ids.map((id) => ({ id, ord: this.getOrdinal(id) }));\n withOrd.sort((a, b) => a.ord - b.ord);\n return withOrd.map(({ id }) => this.frameForId(id));\n }\n\n /**\n * Wait until the page reaches a lifecycle state on the current main frame.\n * Mirrors Playwright's API signatures.\n */\n @logAction(\"Page.waitForLoadState\")\n async waitForLoadState(state: LoadState, timeoutMs?: number): Promise<void> {\n await this.waitForMainLoadState(state, timeoutMs ?? 15000);\n }\n\n /**\n * Wait for a specified amount of time.\n *\n * @param ms The number of milliseconds to wait.\n */\n async waitForTimeout(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Wait for an element matching the selector to appear in the DOM.\n * Uses MutationObserver for efficiency\n * Pierces shadow DOM by default.\n * Supports iframe hop notation with '>>' (e.g., 'iframe#checkout >> .submit-btn').\n *\n * @param selector CSS selector to wait for (supports '>>' for iframe hops)\n * @param options\n * @param options.state Element state to wait for: 'attached' | 'detached' | 'visible' | 'hidden' (default: 'visible')\n * @param options.timeout Maximum time to wait in milliseconds (default: 30000)\n * @param options.pierceShadow Whether to search inside shadow DOM (default: true)\n * @returns True when the condition is met\n * @throws Error if timeout is reached before the condition is met\n */\n @logAction(\"Page.waitForSelector\")\n async waitForSelector(\n selector: string,\n options?: {\n state?: \"attached\" | \"detached\" | \"visible\" | \"hidden\";\n timeout?: number;\n pierceShadow?: boolean;\n },\n ): Promise<boolean> {\n const timeout = options?.timeout ?? 30000;\n const state = options?.state ?? \"visible\";\n const pierceShadow = options?.pierceShadow ?? true;\n const startTime = Date.now();\n const root = this.mainFrameWrapper;\n const { frame: targetFrame, selector: finalSelector } =\n await resolveLocatorTarget(this, root, selector);\n const elapsed = Date.now() - startTime;\n const remainingTimeout = Math.max(0, timeout - elapsed);\n\n const expression = buildLocatorInvocation(\"waitForSelector\", [\n JSON.stringify(finalSelector),\n JSON.stringify(state),\n String(remainingTimeout),\n String(pierceShadow),\n ]);\n return targetFrame.evaluate(expression);\n }\n\n /**\n * Evaluate a function or expression in the current main frame's main world.\n * - If a string is provided, it is treated as a JS expression.\n * - If a function is provided, it is stringified and invoked with the optional argument.\n * - The return value should be JSON-serializable. Non-serializable objects will\n * best-effort serialize via JSON.stringify inside the page context.\n */\n @logAction(\"Page.evaluate\")\n async evaluate<R = unknown, Arg = unknown>(\n pageFunctionOrExpression: string | ((arg: Arg) => R | Promise<R>),\n arg?: Arg,\n ): Promise<R> {\n await this.mainSession.send(\"Runtime.enable\").catch(() => {});\n const ctxId = await this.mainWorldExecutionContextId();\n\n const isString = typeof pageFunctionOrExpression === \"string\";\n let expression: string;\n\n if (isString) {\n expression = String(pageFunctionOrExpression);\n } else {\n const fnSrc = pageFunctionOrExpression.toString();\n const argJson = JSON.stringify(arg);\n expression = `(() => {\n const __fn = ${fnSrc};\n const __arg = ${argJson};\n try {\n const __res = __fn(__arg);\n return Promise.resolve(__res).then(v => {\n try { return JSON.parse(JSON.stringify(v)); } catch { return v; }\n });\n } catch (e) { throw e; }\n })()`;\n }\n\n const { result, exceptionDetails } =\n await this.mainSession.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression,\n contextId: ctxId,\n returnByValue: true,\n awaitPromise: true,\n },\n );\n\n if (exceptionDetails) {\n const msg =\n exceptionDetails.text ||\n exceptionDetails.exception?.description ||\n \"Evaluation failed\";\n throw new StagehandEvalError(msg);\n }\n\n return result?.value as R;\n }\n\n /**\n * Force the page viewport to an exact CSS size and device scale factor.\n * Ensures screenshots match width x height pixels when deviceScaleFactor = 1.\n */\n // @logAction(\"Page.setViewportSize\") // disabled because it's pretty noisy, can always re-enable if needed for debugging\n async setViewportSize(\n width: number,\n height: number,\n options?: { deviceScaleFactor?: number },\n ): Promise<void> {\n const dsf = Math.max(0.01, options?.deviceScaleFactor ?? 1);\n await this.mainSession\n .send(\"Emulation.setDeviceMetricsOverride\", {\n width,\n height,\n deviceScaleFactor: dsf,\n mobile: false,\n screenWidth: width,\n screenHeight: height,\n positionX: 0,\n positionY: 0,\n scale: 1,\n } as Protocol.Emulation.SetDeviceMetricsOverrideRequest)\n .catch(() => {});\n\n // Best-effort ensure visible size in headless\n await this.mainSession\n .send(\"Emulation.setVisibleSize\", { width, height })\n .catch(() => {});\n }\n\n /**\n * Click at absolute page coordinates (CSS pixels).\n * Dispatches mouseMoved → mousePressed → mouseReleased via CDP Input domain\n * on the top-level page target's session. Coordinates are relative to the\n * viewport origin (top-left). Does not scroll.\n */\n @logAction(\"Page.click\")\n async click(\n x: number,\n y: number,\n options?: {\n button?: \"left\" | \"right\" | \"middle\";\n clickCount?: number;\n returnXpath?: boolean;\n },\n ): Promise<string> {\n const button = options?.button ?? \"left\";\n const clickCount = options?.clickCount ?? 1;\n\n let xpathResult: string | undefined;\n if (options?.returnXpath) {\n // Resolve the deepest node at the given coordinates and compute absolute XPath efficiently\n try {\n const hit = await resolveXpathForLocation(this, x, y);\n if (hit) {\n v3Logger({\n category: \"page\",\n message: \"click resolved hit\",\n level: 2,\n auxiliary: {\n frameId: { value: String(hit.frameId), type: \"string\" },\n backendNodeId: {\n value: String(hit.backendNodeId),\n type: \"string\",\n },\n x: { value: String(x), type: \"integer\" },\n y: { value: String(y), type: \"integer\" },\n },\n });\n xpathResult = hit.absoluteXPath;\n v3Logger({\n category: \"page\",\n message: `click resolved xpath`,\n level: 2,\n auxiliary: {\n xpath: { value: String(xpathResult ?? \"\"), type: \"string\" },\n },\n });\n }\n } catch {\n // best-effort; fall through if any step fails\n }\n }\n\n // Synthesize a simple mouse move + press + release sequence.\n // Fire events without waiting between them to keep multi-clicks tight.\n await this.updateCursor(x, y);\n const dispatches: Array<Promise<unknown>> = [];\n dispatches.push(\n this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n\n for (let i = 1; i <= clickCount; i++) {\n dispatches.push(\n this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mousePressed\",\n x,\n y,\n button,\n clickCount: i,\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n\n dispatches.push(\n this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseReleased\",\n x,\n y,\n button,\n clickCount: i,\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n }\n\n await Promise.all(dispatches);\n\n return xpathResult ?? \"\";\n }\n\n /**\n * Hover at absolute page coordinates (CSS pixels).\n * Dispatches mouseMoved via CDP Input domain on the top-level page target's\n * session.\n */\n @logAction(\"Page.hover\")\n async hover(\n x: number,\n y: number,\n options?: { returnXpath?: boolean },\n ): Promise<string> {\n let xpathResult: string | undefined;\n if (options?.returnXpath) {\n try {\n const hit = await resolveXpathForLocation(this, x, y);\n if (hit) {\n v3Logger({\n category: \"page\",\n message: \"hover resolved hit\",\n level: 2,\n auxiliary: {\n frameId: { value: String(hit.frameId), type: \"string\" },\n backendNodeId: {\n value: String(hit.backendNodeId),\n type: \"string\",\n },\n x: { value: String(x), type: \"integer\" },\n y: { value: String(y), type: \"integer\" },\n },\n });\n xpathResult = hit.absoluteXPath;\n }\n } catch {\n v3Logger({\n category: \"page\",\n message: \"Failed to resolve xpath for hover\",\n level: 2,\n auxiliary: {\n x: { value: String(x), type: \"integer\" },\n y: { value: String(y), type: \"integer\" },\n },\n });\n }\n }\n\n await this.updateCursor(x, y);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n\n return xpathResult ?? \"\";\n }\n\n @logAction(\"Page.scroll\")\n async scroll(\n x: number,\n y: number,\n deltaX: number,\n deltaY: number,\n options?: { returnXpath?: boolean },\n ): Promise<string> {\n let xpathResult: string | undefined;\n if (options?.returnXpath) {\n try {\n const hit = await resolveXpathForLocation(this, x, y);\n if (hit) xpathResult = hit.absoluteXPath;\n } catch {\n // best-effort\n }\n }\n\n await this.updateCursor(x, y);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n\n // Synthesize a simple mouse move + press + release sequence\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseWheel\",\n x,\n y,\n button: \"none\",\n deltaX,\n deltaY,\n } as Protocol.Input.DispatchMouseEventRequest);\n\n return xpathResult ?? \"\";\n }\n\n /**\n * Drag from (fromX, fromY) to (toX, toY) using mouse events.\n * Sends mouseMoved → mousePressed → mouseMoved (steps) → mouseReleased.\n */\n @logAction(\"Page.dragAndDrop\")\n async dragAndDrop(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number,\n options?: {\n button?: \"left\" | \"right\" | \"middle\";\n steps?: number;\n delay?: number;\n returnXpath?: boolean;\n },\n ): Promise<[string, string]> {\n const button = options?.button ?? \"left\";\n const steps = Math.max(1, Math.floor(options?.steps ?? 1));\n const delay = Math.max(0, options?.delay ?? 0);\n\n const sleep = (ms: number) =>\n new Promise<void>((r) => (ms > 0 ? setTimeout(r, ms) : r()));\n\n const buttonMask = (b: typeof button): number => {\n switch (b) {\n case \"left\":\n return 1;\n case \"right\":\n return 2;\n case \"middle\":\n return 4;\n default:\n return 1;\n }\n };\n\n let fromXpath: string | undefined;\n let toXpath: string | undefined;\n if (options?.returnXpath) {\n try {\n const start = await resolveXpathForLocation(this, fromX, fromY);\n if (start) fromXpath = start.absoluteXPath;\n } catch {\n //\n }\n try {\n const end = await resolveXpathForLocation(this, toX, toY);\n if (end) toXpath = end.absoluteXPath;\n } catch {\n //\n }\n }\n\n // Move to start\n await this.updateCursor(fromX, fromY);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x: fromX,\n y: fromY,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n\n // Press\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mousePressed\",\n x: fromX,\n y: fromY,\n button,\n buttons: buttonMask(button),\n clickCount: 1,\n } as Protocol.Input.DispatchMouseEventRequest);\n\n // Intermediate moves\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const x = fromX + (toX - fromX) * t;\n const y = fromY + (toY - fromY) * t;\n await this.updateCursor(x, y);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button,\n buttons: buttonMask(button),\n } as Protocol.Input.DispatchMouseEventRequest);\n if (delay) await sleep(delay);\n }\n\n // Release at end\n await this.updateCursor(toX, toY);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseReleased\",\n x: toX,\n y: toY,\n button,\n buttons: buttonMask(button),\n clickCount: 1,\n } as Protocol.Input.DispatchMouseEventRequest);\n\n return [fromXpath ?? \"\", toXpath ?? \"\"];\n }\n\n /**\n * Type a string by dispatching keyDown/keyUp events per character.\n * Focus must already be on the desired element. Uses CDP Input.dispatchKeyEvent\n * and never falls back to Input.insertText. Optional delay applies between\n * successive characters.\n */\n @logAction(\"Page.type\")\n async type(\n text: string,\n options?: { delay?: number; withMistakes?: boolean },\n ): Promise<void> {\n const delay = Math.max(0, options?.delay ?? 0);\n const withMistakes = !!options?.withMistakes;\n\n const sleep = (ms: number) =>\n new Promise<void>((r) => (ms > 0 ? setTimeout(r, ms) : r()));\n\n const keyStroke = async (\n ch: string,\n override?: {\n key?: string;\n code?: string;\n windowsVirtualKeyCode?: number;\n },\n ) => {\n if (override) {\n const base: Protocol.Input.DispatchKeyEventRequest = {\n type: \"keyDown\",\n key: override.key,\n code: override.code,\n windowsVirtualKeyCode: override.windowsVirtualKeyCode,\n } as Protocol.Input.DispatchKeyEventRequest;\n await this.mainSession.send(\"Input.dispatchKeyEvent\", base);\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n ...base,\n type: \"keyUp\",\n } as Protocol.Input.DispatchKeyEventRequest);\n return;\n }\n\n // Printable character: include key, code, and text for maximum compatibility\n // Some sites (like Wordle) check event.key rather than relying on text input\n const isLetter = /^[a-zA-Z]$/.test(ch);\n const isDigit = /^[0-9]$/.test(ch);\n\n let key = ch;\n let code = \"\";\n let windowsVirtualKeyCode: number | undefined;\n\n if (isLetter) {\n // For letters, key is the character, code is KeyX where X is uppercase\n key = ch;\n code = `Key${ch.toUpperCase()}`;\n windowsVirtualKeyCode = ch.toUpperCase().charCodeAt(0);\n } else if (isDigit) {\n key = ch;\n code = `Digit${ch}`;\n windowsVirtualKeyCode = ch.charCodeAt(0);\n } else if (ch === \" \") {\n key = \" \";\n code = \"Space\";\n windowsVirtualKeyCode = 32;\n }\n\n const down: Protocol.Input.DispatchKeyEventRequest = {\n type: \"keyDown\",\n key,\n code: code || undefined,\n text: ch,\n unmodifiedText: ch,\n windowsVirtualKeyCode,\n };\n await this.mainSession.send(\"Input.dispatchKeyEvent\", down);\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key,\n code: code || undefined,\n windowsVirtualKeyCode,\n } as Protocol.Input.DispatchKeyEventRequest);\n };\n\n const pressBackspace = async () =>\n keyStroke(\"\\b\", {\n key: \"Backspace\",\n code: \"Backspace\",\n windowsVirtualKeyCode: 8,\n });\n\n const randomPrintable = (avoid: string): string => {\n const pool =\n \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,;:'\\\"!?@#$%^&*()-_=+[]{}<>/\\\\|`~\";\n let c = avoid;\n while (c === avoid) {\n c = pool[Math.floor(Math.random() * pool.length)];\n }\n return c;\n };\n\n for (const ch of text) {\n // Control keys that we explicitly map\n if (ch === \"\\n\" || ch === \"\\r\") {\n await keyStroke(ch, {\n key: \"Enter\",\n code: \"Enter\",\n windowsVirtualKeyCode: 13,\n });\n } else if (ch === \"\\t\") {\n await keyStroke(ch, {\n key: \"Tab\",\n code: \"Tab\",\n windowsVirtualKeyCode: 9,\n });\n } else {\n if (withMistakes && Math.random() < 0.12) {\n // Type a wrong character, then backspace to correct\n const wrong = randomPrintable(ch);\n await keyStroke(wrong);\n if (delay) await sleep(delay);\n await pressBackspace();\n if (delay) await sleep(delay);\n }\n await keyStroke(ch);\n }\n\n if (delay) await sleep(delay);\n }\n }\n\n /**\n * Press a single key or key combination (keyDown then keyUp).\n * For printable characters, uses the text path on keyDown; for named keys, sets key/code/VK.\n * Supports key combinations with modifiers like \"Cmd+A\", \"Ctrl+C\", \"Shift+Tab\", etc.\n */\n @logAction(\"Page.keyPress\")\n async keyPress(key: string, options?: { delay?: number }): Promise<void> {\n const delay = Math.max(0, options?.delay ?? 0);\n const sleep = (ms: number) =>\n new Promise<void>((r) => (ms > 0 ? setTimeout(r, ms) : r()));\n\n // Split key combination by + but handle the special case of \"+\" key itself\n function split(keyString: string): string[] {\n // Special case: if the entire string is just \"+\", return it as-is\n if (keyString === \"+\") {\n return [\"+\"];\n }\n\n const keys: string[] = [];\n let building = \"\";\n for (const char of keyString) {\n if (char === \"+\" && building) {\n keys.push(building);\n building = \"\";\n } else {\n building += char;\n }\n }\n if (building) {\n keys.push(building);\n }\n return keys;\n }\n\n const tokens = split(key);\n const mainKey = tokens[tokens.length - 1];\n const modifierKeys = tokens.slice(0, -1);\n\n try {\n for (const modKey of modifierKeys) {\n await this.keyDown(modKey);\n }\n\n await this.keyDown(mainKey);\n if (delay) await sleep(delay);\n await this.keyUp(mainKey);\n\n for (let i = modifierKeys.length - 1; i >= 0; i--) {\n await this.keyUp(modifierKeys[i]);\n }\n } catch (error) {\n // Clear stuck modifiers on error to prevent affecting subsequent keyPress calls\n this._pressedModifiers.clear();\n throw error;\n }\n }\n\n @logAction(\"Page.snapshot\")\n async snapshot(options?: PageSnapshotOptions): Promise<SnapshotResult> {\n try {\n const { combinedTree, combinedXpathMap, combinedUrlMap } =\n await captureHybridSnapshot(this, {\n pierceShadow: true,\n includeIframes: options?.includeIframes,\n });\n\n return {\n formattedTree: combinedTree,\n xpathMap: combinedXpathMap,\n urlMap: combinedUrlMap,\n };\n } catch (err) {\n throw new StagehandSnapshotError(err);\n }\n }\n\n // Track pressed modifier keys\n private _pressedModifiers = new Set<string>();\n\n /** Press a key down without releasing it */\n private async keyDown(key: string): Promise<void> {\n const normalizedKey = this.normalizeModifierKey(key);\n\n const modifierKeys = [\"Alt\", \"Control\", \"Meta\", \"Shift\"];\n if (modifierKeys.includes(normalizedKey)) {\n this._pressedModifiers.add(normalizedKey);\n }\n\n let modifiers = 0;\n if (this._pressedModifiers.has(\"Alt\")) modifiers |= 1;\n if (this._pressedModifiers.has(\"Control\")) modifiers |= 2;\n if (this._pressedModifiers.has(\"Meta\")) modifiers |= 4;\n if (this._pressedModifiers.has(\"Shift\")) modifiers |= 8;\n\n const named = this.getNamedKeys();\n\n if (normalizedKey.length === 1) {\n const hasNonShiftModifier =\n this._pressedModifiers.has(\"Alt\") ||\n this._pressedModifiers.has(\"Control\") ||\n this._pressedModifiers.has(\"Meta\");\n if (hasNonShiftModifier) {\n // For accelerators (e.g., Cmd/Ctrl/Alt + key), do not send text. Use rawKeyDown with key/code/VK.\n const desc = this.describePrintableKey(normalizedKey);\n const macCommands = this.isMacOS()\n ? this.macCommandsFor(desc.code ?? \"\")\n : [];\n const req: Protocol.Input.DispatchKeyEventRequest = {\n type: \"rawKeyDown\",\n modifiers,\n key: desc.key,\n ...(desc.code ? { code: desc.code } : {}),\n ...(typeof desc.vk === \"number\"\n ? { windowsVirtualKeyCode: desc.vk }\n : {}),\n ...(macCommands.length ? { commands: macCommands } : {}),\n } as Protocol.Input.DispatchKeyEventRequest;\n await this.mainSession.send(\"Input.dispatchKeyEvent\", req);\n } else {\n // Typing path (no non-Shift modifiers): send text to generate input\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyDown\",\n text: normalizedKey,\n unmodifiedText: normalizedKey,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n }\n return;\n }\n\n const entry = named[normalizedKey] ?? null;\n if (entry) {\n const macCommands = this.isMacOS() ? this.macCommandsFor(entry.code) : [];\n const includeText = !!entry.text && modifiers === 0;\n const keyDown: Protocol.Input.DispatchKeyEventRequest = {\n type: includeText ? \"keyDown\" : \"rawKeyDown\",\n key: entry.key,\n code: entry.code,\n windowsVirtualKeyCode: entry.vk,\n modifiers,\n ...(includeText\n ? {\n text: entry.text,\n unmodifiedText: entry.unmodifiedText ?? entry.text,\n }\n : {}),\n ...(macCommands.length ? { commands: macCommands } : {}),\n } as Protocol.Input.DispatchKeyEventRequest;\n await this.mainSession.send(\"Input.dispatchKeyEvent\", keyDown);\n return;\n }\n\n // Fallback: send with key property only\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyDown\",\n key: normalizedKey,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n }\n\n /** Release a pressed key */\n private async keyUp(key: string): Promise<void> {\n const normalizedKey = this.normalizeModifierKey(key);\n\n let modifiers = 0;\n if (this._pressedModifiers.has(\"Alt\")) modifiers |= 1;\n if (this._pressedModifiers.has(\"Control\")) modifiers |= 2;\n if (this._pressedModifiers.has(\"Meta\")) modifiers |= 4;\n if (this._pressedModifiers.has(\"Shift\")) modifiers |= 8;\n\n const modifierKeys = [\"Alt\", \"Control\", \"Meta\", \"Shift\"];\n if (modifierKeys.includes(normalizedKey)) {\n this._pressedModifiers.delete(normalizedKey);\n }\n\n const named = this.getNamedKeys();\n\n if (normalizedKey.length === 1) {\n const desc = this.describePrintableKey(normalizedKey);\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: desc.key,\n code: desc.code,\n windowsVirtualKeyCode:\n typeof desc.vk === \"number\" ? desc.vk : undefined,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n return;\n }\n\n const entry = named[normalizedKey] ?? null;\n if (entry) {\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: entry.key,\n code: entry.code,\n windowsVirtualKeyCode: entry.vk,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n return;\n }\n\n // Fallback: send with key property only\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: normalizedKey,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n }\n\n /** Normalize key names to match CDP expectations */\n private normalizeModifierKey(key: string): string {\n const lower = key.toLowerCase();\n switch (lower) {\n // Modifier keys\n case \"cmd\":\n case \"command\":\n case \"controlormeta\":\n // On Mac, Cmd is Meta; elsewhere map to Control for common shortcuts\n return this.isMacOS() ? \"Meta\" : \"Control\";\n case \"win\":\n case \"windows\":\n return \"Meta\";\n case \"ctrl\":\n case \"control\":\n return \"Control\";\n case \"option\":\n case \"alt\":\n return \"Alt\";\n case \"shift\":\n return \"Shift\";\n case \"meta\":\n return \"Meta\";\n // Action keys\n case \"enter\":\n case \"return\":\n return \"Enter\";\n case \"esc\":\n case \"escape\":\n return \"Escape\";\n case \"backspace\":\n return \"Backspace\";\n case \"tab\":\n return \"Tab\";\n case \"space\":\n case \"spacebar\":\n return \" \";\n case \"delete\":\n case \"del\":\n return \"Delete\";\n // Arrow keys\n case \"left\":\n case \"arrowleft\":\n return \"ArrowLeft\";\n case \"right\":\n case \"arrowright\":\n return \"ArrowRight\";\n case \"up\":\n case \"arrowup\":\n return \"ArrowUp\";\n case \"down\":\n case \"arrowdown\":\n return \"ArrowDown\";\n // Navigation keys\n case \"home\":\n return \"Home\";\n case \"end\":\n return \"End\";\n case \"pageup\":\n case \"pgup\":\n return \"PageUp\";\n case \"pagedown\":\n case \"pgdn\":\n return \"PageDown\";\n default:\n return key;\n }\n }\n\n /**\n * Get the map of named keys with their properties\n */\n private getNamedKeys(): Record<\n string,\n {\n key: string;\n code: string;\n vk: number;\n text?: string;\n unmodifiedText?: string;\n }\n > {\n return {\n Enter: {\n key: \"Enter\",\n code: \"Enter\",\n vk: 13,\n text: \"\\r\",\n unmodifiedText: \"\\r\",\n },\n Tab: { key: \"Tab\", code: \"Tab\", vk: 9 },\n Backspace: { key: \"Backspace\", code: \"Backspace\", vk: 8 },\n Escape: { key: \"Escape\", code: \"Escape\", vk: 27 },\n Delete: { key: \"Delete\", code: \"Delete\", vk: 46 },\n ArrowLeft: { key: \"ArrowLeft\", code: \"ArrowLeft\", vk: 37 },\n ArrowUp: { key: \"ArrowUp\", code: \"ArrowUp\", vk: 38 },\n ArrowRight: { key: \"ArrowRight\", code: \"ArrowRight\", vk: 39 },\n ArrowDown: { key: \"ArrowDown\", code: \"ArrowDown\", vk: 40 },\n Home: { key: \"Home\", code: \"Home\", vk: 36 },\n End: { key: \"End\", code: \"End\", vk: 35 },\n PageUp: { key: \"PageUp\", code: \"PageUp\", vk: 33 },\n PageDown: { key: \"PageDown\", code: \"PageDown\", vk: 34 },\n // Modifier keys\n Alt: { key: \"Alt\", code: \"AltLeft\", vk: 18 },\n Control: { key: \"Control\", code: \"ControlLeft\", vk: 17 },\n Meta: { key: \"Meta\", code: \"MetaLeft\", vk: 91 },\n Shift: { key: \"Shift\", code: \"ShiftLeft\", vk: 16 },\n };\n }\n\n /**\n * Minimal description for printable keys (letters/digits/space) to provide code and VK.\n * Used when non-Shift modifiers are pressed to avoid sending text while keeping accelerator info.\n */\n private describePrintableKey(ch: string): {\n key: string;\n code?: string;\n vk?: number;\n } {\n const shiftDown = this._pressedModifiers.has(\"Shift\");\n const isLetter = /^[a-zA-Z]$/.test(ch);\n const isDigit = /^[0-9]$/.test(ch);\n\n if (isLetter) {\n const upper = ch.toUpperCase();\n return {\n key: shiftDown ? upper : upper.toLowerCase(),\n code: `Key${upper}`,\n vk: upper.charCodeAt(0), // 'A'..'Z' => 65..90\n };\n }\n\n if (isDigit) {\n return {\n key: ch,\n code: `Digit${ch}`,\n vk: ch.charCodeAt(0), // '0'..'9' => 48..57\n };\n }\n\n if (ch === \" \") {\n return { key: \" \", code: \"Space\", vk: 32 };\n }\n\n // Fallback: just return the character as-is; VK best-effort from ASCII\n return {\n key: shiftDown ? ch.toUpperCase() : ch,\n vk: ch.toUpperCase().charCodeAt(0),\n };\n }\n\n private isMacOS(): boolean {\n try {\n return process.platform === \"darwin\";\n } catch {\n return false;\n }\n }\n\n /**\n * Return Chromium mac editing commands (without trailing ':') for a given code like 'KeyA'\n * Only used on macOS to trigger system editing shortcuts (e.g., selectAll, copy, paste...).\n */\n private macCommandsFor(code: string): string[] {\n if (!this.isMacOS()) return [];\n const parts: string[] = [];\n if (this._pressedModifiers.has(\"Shift\")) parts.push(\"Shift\");\n if (this._pressedModifiers.has(\"Control\")) parts.push(\"Control\");\n if (this._pressedModifiers.has(\"Alt\")) parts.push(\"Alt\");\n if (this._pressedModifiers.has(\"Meta\")) parts.push(\"Meta\");\n parts.push(code);\n const shortcut = parts.join(\"+\");\n const table: Record<string, string | string[]> = {\n \"Meta+KeyA\": \"selectAll:\",\n \"Meta+KeyC\": \"copy:\",\n \"Meta+KeyX\": \"cut:\",\n \"Meta+KeyV\": \"paste:\",\n \"Meta+KeyZ\": \"undo:\",\n };\n const value = table[shortcut];\n if (!value) return [];\n const list = Array.isArray(value) ? value : [value];\n return list\n .filter((c) => !c.startsWith(\"insert\"))\n .map((c) => c.substring(0, c.length - 1));\n }\n\n // ---- Page-level lifecycle waiter that follows main frame id swaps ----\n\n /** Resolve the main-world execution context for the current main frame. */\n private async mainWorldExecutionContextId(): Promise<number> {\n return executionContexts.waitForMainWorld(\n this.mainSession,\n this.mainFrameId(),\n 1000,\n );\n }\n\n private async isMainLoadStateReady(\n state: \"domcontentloaded\" | \"load\",\n ): Promise<boolean> {\n try {\n const ctxId = await this.mainWorldExecutionContextId();\n const { result } =\n await this.mainSession.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression: \"document.readyState\",\n contextId: ctxId,\n returnByValue: true,\n },\n );\n const readyState = String(result?.value ?? \"\");\n if (state === \"domcontentloaded\") {\n return readyState === \"interactive\" || readyState === \"complete\";\n }\n return readyState === \"complete\";\n } catch {\n return false;\n }\n }\n\n /**\n * Wait until the **current** main frame reaches a lifecycle state.\n * - Fast path via `document.readyState`.\n * - Event path listens at the session level and compares incoming `frameId`\n * to `mainFrameId()` **at event time** to follow root swaps.\n */\n async waitForMainLoadState(\n state: LoadState,\n timeoutMs = 15000,\n ): Promise<void> {\n await this.mainSession\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n\n // Fast path: check the *current* main frame's readyState.\n if (\n (state === \"domcontentloaded\" || state === \"load\") &&\n (await this.isMainLoadStateReady(state))\n ) {\n return;\n }\n\n const wanted = LIFECYCLE_NAME[state];\n return new Promise<void>((resolve, reject) => {\n let done = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let pollTimer: ReturnType<typeof setTimeout> | null = null;\n let pollInFlight = false;\n\n const off = () => {\n this.mainSession.off(\"Page.lifecycleEvent\", onLifecycle);\n this.mainSession.off(\"Page.domContentEventFired\", onDomContent);\n this.mainSession.off(\"Page.loadEventFired\", onLoad);\n };\n const clearPollTimer = () => {\n if (pollTimer) {\n clearTimeout(pollTimer);\n pollTimer = null;\n }\n };\n\n const finish = () => {\n if (done) return;\n done = true;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n clearPollTimer();\n off();\n resolve();\n };\n\n const onLifecycle = (evt: Protocol.Page.LifecycleEventEvent) => {\n if (evt.name !== wanted) return;\n // Compare against the *current* main frame id when the event arrives.\n if (evt.frameId === this.mainFrameId()) finish();\n };\n\n const onDomContent = () => {\n if (state === \"domcontentloaded\") finish();\n };\n\n const onLoad = () => {\n if (state === \"load\") finish();\n };\n\n this.mainSession.on(\"Page.lifecycleEvent\", onLifecycle);\n // Backups for sites that don't emit lifecycle consistently\n this.mainSession.on(\"Page.domContentEventFired\", onDomContent);\n this.mainSession.on(\"Page.loadEventFired\", onLoad);\n\n // Fallback polling closes lifecycle-event races in remote environments\n // where readyState has advanced but the corresponding event was missed.\n const pollReadyState = async () => {\n if (done || pollInFlight) return;\n pollInFlight = true;\n try {\n if (done) return;\n if (\n (state === \"domcontentloaded\" || state === \"load\") &&\n (await this.isMainLoadStateReady(state))\n ) {\n finish();\n return;\n }\n } finally {\n pollInFlight = false;\n }\n if (!done) {\n clearPollTimer();\n pollTimer = setTimeout(() => {\n void pollReadyState();\n }, 100);\n }\n };\n void pollReadyState();\n\n timer = setTimeout(() => {\n if (done) return;\n done = true;\n clearPollTimer();\n off();\n reject(\n new Error(\n `waitForMainLoadState(${state}) timed out after ${timeoutMs}ms`,\n ),\n );\n }, timeoutMs);\n });\n }\n}\n"]}
1
+ {"version":3,"file":"page.js","sourceRoot":"","sources":["../../../../../lib/v3/understudy/page.ts"],"names":[],"mappings":"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","sourcesContent":["import { Protocol } from \"devtools-protocol\";\nimport { promises as fs } from \"fs\";\nimport { v3Logger } from \"../logger.js\";\nimport { logAction } from \"../flowLogger.js\";\nimport type { CDPSessionLike } from \"./cdp.js\";\nimport { CdpConnection } from \"./cdp.js\";\nimport { Frame } from \"./frame.js\";\nimport { FrameLocator } from \"./frameLocator.js\";\nimport { deepLocatorFromPage, resolveLocatorTarget } from \"./deepLocator.js\";\nimport {\n captureHybridSnapshot,\n resolveXpathForLocation,\n} from \"./a11y/snapshot/index.js\";\nimport { FrameRegistry } from \"./frameRegistry.js\";\nimport { executionContexts } from \"./executionContextRegistry.js\";\nimport {\n LoadState,\n SnapshotResult,\n PageSnapshotOptions,\n} from \"../types/public/page.js\";\nimport { NetworkManager } from \"./networkManager.js\";\nimport { LifecycleWatcher } from \"./lifecycleWatcher.js\";\nimport { NavigationResponseTracker } from \"./navigationResponseTracker.js\";\nimport { Response, isSerializableResponse } from \"./response.js\";\nimport { ConsoleMessage, ConsoleListener } from \"./consoleMessage.js\";\nimport type { StagehandAPIClient } from \"../api.js\";\nimport {\n LocalBrowserLaunchOptions,\n StagehandSnapshotError,\n} from \"../types/public/index.js\";\nimport type { Locator } from \"./locator.js\";\nimport {\n StagehandInvalidArgumentError,\n StagehandEvalError,\n} from \"../types/public/sdkErrors.js\";\nimport { normalizeInitScriptSource } from \"./initScripts.js\";\nimport { buildLocatorInvocation } from \"./locatorInvocation.js\";\nimport type {\n ScreenshotAnimationsOption,\n ScreenshotCaretOption,\n ScreenshotOptions,\n ScreenshotScaleOption,\n} from \"../types/public/screenshotTypes.js\";\nimport {\n applyMaskOverlays,\n applyStyleToFrames,\n collectFramesForScreenshot,\n computeScreenshotScale,\n disableAnimations,\n hideCaret,\n normalizeScreenshotClip,\n runScreenshotCleanups,\n setTransparentBackground,\n withScreenshotTimeout,\n type ScreenshotCleanup,\n} from \"./screenshotUtils.js\";\nimport { InitScriptSource } from \"../types/private/index.js\";\n\n/**\n * Page\n *\n * One instance per **top-level target**. It owns:\n * - the top-level CDP session (for the page target)\n * - all adopted OOPIF child sessions (Target.attachToTarget with flatten: true)\n * - a **FrameRegistry** that is the single source of truth for BOTH:\n * • frame topology (parent/children, root swaps, last-seen CDP Frame)\n * • frame → session ownership (which session owns which frameId)\n *\n * Page exposes convenient APIs (goto/reload/url/screenshot/locator),\n * and simple bridges that Context uses to feed Page/Target events in.\n */\n\nconst LIFECYCLE_NAME: Record<LoadState, string> = {\n load: \"load\",\n domcontentloaded: \"DOMContentLoaded\",\n networkidle: \"networkIdle\",\n};\n\nexport class Page {\n /** Every CDP child session this page owns (top-level + adopted OOPIF sessions). */\n private readonly sessions = new Map<string, CDPSessionLike>(); // sessionId -> session\n\n /** Unified truth for frame topology + ownership. */\n private readonly registry: FrameRegistry;\n\n /** A convenience wrapper bound to the current main frame id (top-level session). */\n private mainFrameWrapper: Frame;\n\n /** Compact ordinal per frameId (used by snapshot encoding). */\n private frameOrdinals = new Map<string, number>();\n private nextOrdinal = 0;\n\n /** cache Frames per frameId so everyone uses the same one */\n private readonly frameCache = new Map<string, Frame>();\n private readonly browserIsRemote: boolean;\n\n /** Stable id for Frames created by this Page (use top-level TargetId). */\n private readonly pageId: string;\n /** Cached current URL for synchronous page.url() */\n private _currentUrl: string = \"about:blank\";\n\n private navigationCommandSeq = 0;\n private latestNavigationCommandId = 0;\n\n private readonly networkManager: NetworkManager;\n /** Optional API client for routing page operations to the API */\n private readonly apiClient: StagehandAPIClient | null = null;\n private readonly consoleListeners = new Set<ConsoleListener>();\n private readonly consoleHandlers = new Map<\n string,\n (evt: Protocol.Runtime.ConsoleAPICalledEvent) => void\n >();\n /** Document-start scripts installed across every session this page owns. */\n private readonly initScripts: string[] = [];\n\n private constructor(\n private readonly conn: CdpConnection,\n private readonly mainSession: CDPSessionLike,\n private readonly _targetId: string,\n mainFrameId: string,\n apiClient?: StagehandAPIClient | null,\n browserIsRemote = false,\n ) {\n this.pageId = _targetId;\n this.apiClient = apiClient ?? null;\n this.browserIsRemote = browserIsRemote;\n\n // own the main session\n if (mainSession.id) this.sessions.set(mainSession.id, mainSession);\n\n // initialize registry with root/main frame id\n this.registry = new FrameRegistry(_targetId, mainFrameId);\n\n // main-frame wrapper is always bound to the **top-level** session\n this.mainFrameWrapper = new Frame(\n this.mainSession,\n mainFrameId,\n this.pageId,\n this.browserIsRemote,\n );\n\n this.networkManager = new NetworkManager();\n this.networkManager.trackSession(this.mainSession);\n }\n\n // Send a single init script to a specific CDP session.\n private async installInitScriptOnSession(\n session: CDPSessionLike,\n source: string,\n ): Promise<void> {\n await session.send(\"Page.addScriptToEvaluateOnNewDocument\", {\n source: source,\n });\n }\n\n // Replay every previously registered init script onto a newly adopted session.\n private async applyInitScriptsToSession(\n session: CDPSessionLike,\n ): Promise<void> {\n for (const source of this.initScripts) {\n await this.installInitScriptOnSession(session, source);\n }\n }\n\n // Register a new init script and fan it out to all active sessions for this page.\n public async registerInitScript(source: string): Promise<void> {\n if (this.initScripts.includes(source)) return;\n this.initScripts.push(source);\n\n const installs: Array<Promise<void>> = [];\n installs.push(this.installInitScriptOnSession(this.mainSession, source));\n for (const session of this.sessions.values()) {\n if (session === this.mainSession) continue;\n installs.push(this.installInitScriptOnSession(session, source));\n }\n await Promise.all(installs);\n }\n\n // Seed an init script without re-installing it on the current sessions.\n public seedInitScript(source: string): void {\n if (this.initScripts.includes(source)) return;\n this.initScripts.push(source);\n }\n\n // --- Optional visual cursor overlay management ---\n private cursorEnabled = false;\n private async ensureCursorScript(): Promise<void> {\n const script = `(() => {\n const ID = '__v3_cursor_overlay__';\n const state = { el: null, last: null };\n // Expose API early so move() calls before install are buffered\n try {\n if (!window.__v3Cursor || !window.__v3Cursor.__installed) {\n const api = {\n __installed: false,\n move(x, y) {\n if (state.el) {\n state.el.style.left = Math.max(0, x) + 'px';\n state.el.style.top = Math.max(0, y) + 'px';\n } else {\n state.last = [x, y];\n }\n },\n show() { if (state.el) state.el.style.display = 'block'; },\n hide() { if (state.el) state.el.style.display = 'none'; },\n };\n window.__v3Cursor = api;\n }\n } catch {}\n\n function install() {\n try {\n if (state.el) return; // already installed\n let el = document.getElementById(ID);\n if (!el) {\n const root = document.documentElement || document.body || document.head;\n if (!root) { setTimeout(install, 50); return; }\n el = document.createElement('div');\n el.id = ID;\n el.style.position = 'fixed';\n el.style.left = '0px';\n el.style.top = '0px';\n el.style.width = '16px';\n el.style.height = '24px';\n el.style.zIndex = '2147483647';\n el.style.pointerEvents = 'none';\n el.style.userSelect = 'none';\n el.style.mixBlendMode = 'normal';\n el.style.contain = 'layout style paint';\n el.style.willChange = 'transform,left,top';\n el.innerHTML = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"24\" viewBox=\"0 0 16 24\"><path d=\"M1 0 L1 22 L6 14 L15 14 Z\" fill=\"black\" stroke=\"white\" stroke-width=\"0.7\"/></svg>';\n root.appendChild(el);\n }\n state.el = el;\n try { window.__v3Cursor.__installed = true; } catch {}\n if (state.last) {\n window.__v3Cursor.move(state.last[0], state.last[1]);\n state.last = null;\n }\n } catch {}\n }\n\n if (document.readyState === 'complete' || document.readyState === 'interactive') {\n install();\n } else {\n document.addEventListener('DOMContentLoaded', install, { once: true });\n setTimeout(install, 100);\n }\n })();`;\n\n // Ensure future documents get the cursor at doc-start\n await this.mainSession\n .send(\"Page.addScriptToEvaluateOnNewDocument\", { source: script })\n .catch(() => {});\n // Inject into current document now\n await this.mainSession\n .send(\"Runtime.evaluate\", {\n expression: script,\n includeCommandLineAPI: false,\n })\n .catch(() => {});\n }\n\n public async enableCursorOverlay(): Promise<void> {\n if (this.cursorEnabled) return;\n await this.ensureCursorScript();\n this.cursorEnabled = true;\n }\n\n private async updateCursor(x: number, y: number): Promise<void> {\n if (!this.cursorEnabled) return;\n try {\n await this.mainSession.send(\"Runtime.evaluate\", {\n expression: `typeof window.__v3Cursor!==\"undefined\"&&window.__v3Cursor.move(${Math.round(x)}, ${Math.round(y)})`,\n });\n } catch {\n //\n }\n }\n\n public async addInitScript<Arg>(\n script: InitScriptSource<Arg>,\n arg?: Arg,\n ): Promise<void> {\n const source = await normalizeInitScriptSource(\n script,\n arg,\n \"page.addInitScript\",\n );\n await this.registerInitScript(source);\n }\n\n /**\n * Factory: create Page and seed registry with the shallow tree from Page.getFrameTree.\n * Assumes Page domain is already enabled on the session passed in.\n */\n static async create(\n conn: CdpConnection,\n session: CDPSessionLike,\n targetId: string,\n apiClient?: StagehandAPIClient | null,\n localBrowserLaunchOptions?: LocalBrowserLaunchOptions | null,\n browserIsRemote = false,\n ): Promise<Page> {\n await session.send(\"Page.enable\").catch(() => {});\n await session\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n const { frameTree } = await session.send<{\n frameTree: Protocol.Page.FrameTree;\n }>(\"Page.getFrameTree\");\n const mainFrameId = frameTree.frame.id;\n\n const page = new Page(\n conn,\n session,\n targetId,\n mainFrameId,\n apiClient,\n browserIsRemote,\n );\n // Seed current URL from initial frame tree\n try {\n page._currentUrl = String(frameTree?.frame?.url ?? page._currentUrl);\n if (localBrowserLaunchOptions?.viewport) {\n await page.setViewportSize(\n localBrowserLaunchOptions.viewport.width,\n localBrowserLaunchOptions.viewport.height,\n {\n deviceScaleFactor: localBrowserLaunchOptions.deviceScaleFactor ?? 1,\n },\n );\n }\n } catch {\n // ignore\n }\n\n // Seed topology + ownership for nodes known at creation time.\n page.registry.seedFromFrameTree(session.id ?? \"root\", frameTree);\n\n return page;\n }\n\n // ---------------- Event-driven updates from Context ----------------\n\n /**\n * Parent/child session emitted a `frameAttached`.\n * Topology update + ownership stamped to **emitting session**.\n */\n public onFrameAttached(\n frameId: string,\n parentId: string | null,\n session: CDPSessionLike,\n ): void {\n this.ensureOrdinal(frameId);\n this.registry.onFrameAttached(frameId, parentId, session.id ?? \"root\");\n // Cache is keyed by frameId → invalidate to ensure future frameForId resolves with latest owner\n this.frameCache.delete(frameId);\n }\n\n /**\n * Parent/child session emitted a `frameDetached`.\n */\n public onFrameDetached(\n frameId: string,\n reason: \"remove\" | \"swap\" | string = \"remove\",\n ): void {\n this.registry.onFrameDetached(frameId, reason);\n this.frameCache.delete(frameId);\n }\n\n /**\n * Parent/child session emitted a `frameNavigated`.\n * Topology + ownership update. Handles root swaps.\n */\n public onFrameNavigated(\n frame: Protocol.Page.Frame,\n session: CDPSessionLike,\n ): void {\n const prevRoot = this.mainFrameId();\n this.registry.onFrameNavigated(frame, session.id ?? \"root\");\n\n // If the root changed, keep the convenience wrapper in sync\n const newRoot = this.mainFrameId();\n if (newRoot !== prevRoot) {\n const oldOrd = this.frameOrdinals.get(prevRoot) ?? 0;\n this.frameOrdinals.set(newRoot, oldOrd);\n this.mainFrameWrapper = new Frame(\n this.mainSession,\n newRoot,\n this.pageId,\n this.browserIsRemote,\n );\n }\n\n // Update cached URL if this navigation pertains to the current main frame\n if (frame.id === this.mainFrameId()) {\n try {\n // Prefer frame.url; fallback keeps previous value\n this._currentUrl = String(\n (frame as { url?: string })?.url ?? this._currentUrl,\n );\n } catch {\n // ignore\n }\n }\n\n // Invalidate the cached Frame for this id (session may have changed)\n this.frameCache.delete(frame.id);\n }\n\n public onNavigatedWithinDocument(\n frameId: string,\n url: string,\n session: CDPSessionLike,\n ): void {\n const normalized = String(url ?? \"\").trim();\n if (!normalized) return;\n\n this.registry.onNavigatedWithinDocument(\n frameId,\n normalized,\n session.id ?? \"root\",\n );\n\n if (frameId === this.mainFrameId()) {\n this._currentUrl = normalized;\n }\n }\n\n /**\n * An OOPIF child session whose **main** frame id equals the parent iframe’s frameId\n * has been attached; adopt the session into this Page and seed ownership for its subtree.\n */\n public adoptOopifSession(\n childSession: CDPSessionLike,\n childMainFrameId: string,\n ): void {\n if (childSession.id) this.sessions.set(childSession.id, childSession);\n\n this.networkManager.trackSession(childSession);\n\n void this.applyInitScriptsToSession(childSession).catch(() => {});\n\n if (this.consoleListeners.size > 0) {\n this.installConsoleTap(childSession);\n }\n\n // session will start emitting its own page events; mark ownership seed now\n this.registry.adoptChildSession(\n childSession.id ?? \"child\",\n childMainFrameId,\n );\n this.frameCache.delete(childMainFrameId);\n\n // Bridge events from the child session to keep registry in sync\n childSession.on<Protocol.Page.FrameNavigatedEvent>(\n \"Page.frameNavigated\",\n (evt) => {\n this.onFrameNavigated(evt.frame, childSession);\n },\n );\n childSession.on<Protocol.Page.FrameAttachedEvent>(\n \"Page.frameAttached\",\n (evt) => {\n this.onFrameAttached(\n evt.frameId,\n evt.parentFrameId ?? null,\n childSession,\n );\n },\n );\n childSession.on<Protocol.Page.FrameDetachedEvent>(\n \"Page.frameDetached\",\n (evt) => {\n this.onFrameDetached(evt.frameId, evt.reason ?? \"remove\");\n },\n );\n\n // One-shot seed the child's subtree ownership from its current tree\n void (async () => {\n try {\n await childSession.send(\"Page.enable\").catch(() => {});\n let { frameTree } =\n await childSession.send<Protocol.Page.GetFrameTreeResponse>(\n \"Page.getFrameTree\",\n );\n\n // Normalize: ensure the child’s reported root id matches our known main id\n if (frameTree.frame.id !== childMainFrameId) {\n frameTree = {\n ...frameTree,\n frame: { ...frameTree.frame, id: childMainFrameId },\n };\n }\n\n this.registry.seedFromFrameTree(childSession.id ?? \"child\", frameTree);\n } catch {\n // If snapshot races, live events will still converge the registry.\n }\n })();\n }\n\n /** Detach an adopted child session and prune its subtree */\n public detachOopifSession(sessionId: string): void {\n // Find which frames were owned by this session and prune by tree starting from each root.\n for (const fid of this.registry.framesForSession(sessionId)) {\n this.registry.onFrameDetached(fid, \"remove\");\n this.frameCache.delete(fid);\n }\n this.teardownConsoleTap(sessionId);\n this.sessions.delete(sessionId);\n this.networkManager.untrackSession(sessionId);\n }\n\n // ---------------- Ownership helpers / lookups ----------------\n\n /** Return the owning CDP session for a frameId (falls back to main session) */\n public getSessionForFrame(frameId: string): CDPSessionLike {\n const sid = this.registry.getOwnerSessionId(frameId);\n if (!sid) return this.mainSession;\n return this.sessions.get(sid) ?? this.mainSession;\n }\n\n /** Always returns a Frame bound to the owning session */\n public frameForId(frameId: string): Frame {\n const hit = this.frameCache.get(frameId);\n if (hit) return hit;\n\n const sess = this.getSessionForFrame(frameId);\n const f = new Frame(sess, frameId, this.pageId, this.browserIsRemote);\n this.frameCache.set(frameId, f);\n return f;\n }\n\n /** Expose a session by id (used by snapshot to resolve session id -> session) */\n public getSessionById(id: string): CDPSessionLike | undefined {\n return this.sessions.get(id);\n }\n\n public registerSessionForNetwork(session: CDPSessionLike): void {\n this.networkManager.trackSession(session);\n }\n\n public unregisterSessionForNetwork(sessionId: string | undefined): void {\n this.networkManager.untrackSession(sessionId);\n }\n\n public on(event: \"console\", listener: ConsoleListener): Page {\n if (event !== \"console\") {\n throw new StagehandInvalidArgumentError(`Unsupported event: ${event}`);\n }\n\n const firstListener = this.consoleListeners.size === 0;\n this.consoleListeners.add(listener);\n\n if (firstListener) {\n this.ensureConsoleTaps();\n }\n\n return this;\n }\n\n public once(event: \"console\", listener: ConsoleListener): Page {\n if (event !== \"console\") {\n throw new StagehandInvalidArgumentError(`Unsupported event: ${event}`);\n }\n\n const wrapper: ConsoleListener = (message) => {\n this.off(\"console\", wrapper);\n listener(message);\n };\n\n return this.on(\"console\", wrapper);\n }\n\n public off(event: \"console\", listener: ConsoleListener): Page {\n if (event !== \"console\") {\n throw new StagehandInvalidArgumentError(`Unsupported event: ${event}`);\n }\n\n this.consoleListeners.delete(listener);\n\n if (this.consoleListeners.size === 0) {\n this.removeAllConsoleTaps();\n }\n\n return this;\n }\n\n // ---------------- MAIN APIs ----------------\n\n public targetId(): string {\n return this._targetId;\n }\n\n /**\n * Send a CDP command through the main session.\n * Allows external consumers to execute arbitrary Chrome DevTools Protocol commands.\n *\n * @param method - The CDP method name (e.g., \"Page.enable\", \"Runtime.evaluate\")\n * @param params - Optional parameters for the CDP command\n * @returns Promise resolving to the typed CDP response\n *\n * @example\n * // Enable the Runtime domain\n * await page.sendCDP(\"Runtime.enable\");\n *\n * @example\n * // Evaluate JavaScript with typed response\n * const result = await page.sendCDP<Protocol.Runtime.EvaluateResponse>(\n * \"Runtime.evaluate\",\n * { expression: \"1 + 1\" }\n * );\n */\n public sendCDP<T = unknown>(method: string, params?: object): Promise<T> {\n return this.mainSession.send<T>(method, params);\n }\n\n /** Seed the cached URL before navigation events converge. */\n public seedCurrentUrl(url: string | undefined | null): void {\n if (!url) return;\n try {\n const normalized = String(url).trim();\n if (!normalized) return;\n this._currentUrl = normalized;\n } catch {\n // ignore invalid url seeds\n }\n }\n\n public mainFrameId(): string {\n return this.registry.mainFrameId();\n }\n\n public mainFrame(): Frame {\n return this.mainFrameWrapper;\n }\n\n /**\n * Close this top-level page (tab). Best-effort via Target.closeTarget.\n */\n @logAction(\"Page.close\")\n public async close(): Promise<void> {\n try {\n await this.conn.send(\"Target.closeTarget\", { targetId: this._targetId });\n } catch {\n // ignore\n }\n const deadline = Date.now() + 2000;\n while (Date.now() < deadline) {\n try {\n const targets = await this.conn.getTargets();\n if (!targets.some((t) => t.targetId === this._targetId)) {\n this.networkManager.dispose();\n return;\n }\n } catch {\n // ignore and retry\n }\n await new Promise((r) => setTimeout(r, 25));\n }\n this.networkManager.dispose();\n this.removeAllConsoleTaps();\n this.consoleListeners.clear();\n }\n\n public getFullFrameTree(): Protocol.Page.FrameTree {\n return this.asProtocolFrameTree(this.mainFrameId());\n }\n\n public asProtocolFrameTree(rootMainFrameId: string): Protocol.Page.FrameTree {\n return this.registry.asProtocolFrameTree(rootMainFrameId);\n }\n\n private ensureOrdinal(frameId: string): number {\n const hit = this.frameOrdinals.get(frameId);\n if (hit !== undefined) return hit;\n const ord = this.nextOrdinal++;\n this.frameOrdinals.set(frameId, ord);\n return ord;\n }\n\n /** Public getter for snapshot code / handlers. */\n public getOrdinal(frameId: string): number {\n return this.ensureOrdinal(frameId);\n }\n\n public listAllFrameIds(): string[] {\n return this.registry.listAllFrames();\n }\n\n private ensureConsoleTaps(): void {\n if (this.consoleListeners.size === 0) return;\n\n this.installConsoleTap(this.mainSession);\n for (const session of this.sessions.values()) {\n this.installConsoleTap(session);\n }\n }\n\n private installConsoleTap(session: CDPSessionLike): void {\n const key = this.sessionKey(session);\n if (this.consoleHandlers.has(key)) return;\n\n void session.send(\"Runtime.enable\").catch(() => {});\n\n const handler = (evt: Protocol.Runtime.ConsoleAPICalledEvent) => {\n this.emitConsole(evt);\n };\n\n session.on<Protocol.Runtime.ConsoleAPICalledEvent>(\n \"Runtime.consoleAPICalled\",\n handler,\n );\n\n this.consoleHandlers.set(key, handler);\n }\n\n private sessionKey(session: CDPSessionLike): string {\n return session.id ?? \"__root__\";\n }\n\n private resolveSessionByKey(key: string): CDPSessionLike | undefined {\n if (this.mainSession.id) {\n if (this.mainSession.id === key) return this.mainSession;\n } else if (key === \"__root__\") {\n return this.mainSession;\n }\n\n return this.sessions.get(key);\n }\n\n private teardownConsoleTap(key: string): void {\n const handler = this.consoleHandlers.get(key);\n if (!handler) return;\n\n const session = this.resolveSessionByKey(key);\n session?.off(\"Runtime.consoleAPICalled\", handler);\n this.consoleHandlers.delete(key);\n }\n\n private removeAllConsoleTaps(): void {\n for (const key of [...this.consoleHandlers.keys()]) {\n this.teardownConsoleTap(key);\n }\n }\n\n private emitConsole(evt: Protocol.Runtime.ConsoleAPICalledEvent): void {\n if (this.consoleListeners.size === 0) return;\n\n const message = new ConsoleMessage(evt, this);\n const listeners = [...this.consoleListeners];\n\n for (const listener of listeners) {\n try {\n listener(message);\n } catch (error) {\n v3Logger({\n category: \"page\",\n message: \"Console listener threw\",\n level: 2,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n type: { value: evt.type, type: \"string\" },\n },\n });\n }\n }\n }\n\n // -------- Convenience APIs delegated to the current main frame --------\n\n /**\n * Navigate the page; optionally wait for a lifecycle state.\n * Waits on the **current** main frame and follows root swaps during navigation.\n */\n @logAction(\"Page.goto\")\n async goto(\n url: string,\n options?: { waitUntil?: LoadState; timeoutMs?: number },\n ): Promise<Response | null> {\n const waitUntil: LoadState = options?.waitUntil ?? \"domcontentloaded\";\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n\n const watcher = new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n });\n\n try {\n // Route to API if available\n if (this.apiClient) {\n const result = await this.apiClient.goto(\n url,\n { waitUntil: options?.waitUntil },\n this.mainFrameId(),\n );\n this._currentUrl = url;\n\n if (isSerializableResponse(result)) {\n return Response.fromSerializable(result, {\n page: this,\n session: this.mainSession,\n });\n }\n return result;\n }\n const response =\n await this.mainSession.send<Protocol.Page.NavigateResponse>(\n \"Page.navigate\",\n { url },\n );\n this._currentUrl = url;\n if (response?.loaderId) {\n watcher.setExpectedLoaderId(response.loaderId);\n tracker.setExpectedLoaderId(response.loaderId);\n }\n await watcher.wait();\n return await tracker.navigationCompleted();\n } finally {\n watcher.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Reload the page; optionally wait for a lifecycle state.\n */\n @logAction(\"Page.reload\")\n async reload(options?: {\n waitUntil?: LoadState;\n timeoutMs?: number;\n ignoreCache?: boolean;\n }): Promise<Response | null> {\n const waitUntil = options?.waitUntil;\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n tracker.expectNavigationWithoutKnownLoader();\n\n const watcher = waitUntil\n ? new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n })\n : null;\n\n try {\n await this.mainSession.send(\"Page.reload\", {\n ignoreCache: options?.ignoreCache ?? false,\n });\n\n if (watcher) {\n await watcher.wait();\n }\n return await tracker.navigationCompleted();\n } finally {\n watcher?.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Navigate back in history if possible; optionally wait for a lifecycle state.\n */\n @logAction(\"Page.goBack\")\n async goBack(options?: {\n waitUntil?: LoadState;\n timeoutMs?: number;\n }): Promise<Response | null> {\n const { entries, currentIndex } =\n await this.mainSession.send<Protocol.Page.GetNavigationHistoryResponse>(\n \"Page.getNavigationHistory\",\n );\n const prev = entries[currentIndex - 1];\n if (!prev) return null; // nothing to do\n const waitUntil = options?.waitUntil;\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n tracker.expectNavigationWithoutKnownLoader();\n\n const watcher = waitUntil\n ? new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n })\n : null;\n\n try {\n await this.mainSession.send(\"Page.navigateToHistoryEntry\", {\n entryId: prev.id,\n });\n this._currentUrl = prev.url ?? this._currentUrl;\n\n if (watcher) {\n await watcher.wait();\n }\n return await tracker.navigationCompleted();\n } finally {\n watcher?.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Navigate forward in history if possible; optionally wait for a lifecycle state.\n */\n @logAction(\"Page.goForward\")\n async goForward(options?: {\n waitUntil?: LoadState;\n timeoutMs?: number;\n }): Promise<Response | null> {\n const { entries, currentIndex } =\n await this.mainSession.send<Protocol.Page.GetNavigationHistoryResponse>(\n \"Page.getNavigationHistory\",\n );\n const next = entries[currentIndex + 1];\n if (!next) return null; // nothing to do\n const waitUntil = options?.waitUntil;\n const timeout = options?.timeoutMs ?? 15000;\n\n const navigationCommandId = this.beginNavigationCommand();\n\n const tracker = new NavigationResponseTracker({\n page: this,\n session: this.mainSession,\n navigationCommandId,\n });\n tracker.expectNavigationWithoutKnownLoader();\n\n const watcher = waitUntil\n ? new LifecycleWatcher({\n page: this,\n mainSession: this.mainSession,\n networkManager: this.networkManager,\n waitUntil,\n timeoutMs: timeout,\n navigationCommandId,\n })\n : null;\n\n try {\n await this.mainSession.send(\"Page.navigateToHistoryEntry\", {\n entryId: next.id,\n });\n this._currentUrl = next.url ?? this._currentUrl;\n\n if (watcher) {\n await watcher.wait();\n }\n return await tracker.navigationCompleted();\n } finally {\n watcher?.dispose();\n tracker.dispose();\n }\n }\n\n /**\n * Return the current page URL (synchronous, cached from navigation events).\n */\n url(): string {\n return this._currentUrl;\n }\n\n private beginNavigationCommand(): number {\n const id = ++this.navigationCommandSeq;\n this.latestNavigationCommandId = id;\n return id;\n }\n\n public isCurrentNavigationCommand(id: number): boolean {\n return this.latestNavigationCommandId === id;\n }\n\n /**\n * Return the current page title.\n * Prefers reading from the active document via Runtime.evaluate to reflect dynamic changes.\n * Falls back to navigation history title if evaluation is unavailable.\n */\n async title(): Promise<string> {\n try {\n await this.mainSession.send(\"Runtime.enable\").catch(() => {});\n const ctxId = await this.mainWorldExecutionContextId();\n const { result } =\n await this.mainSession.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression: \"document.title\",\n contextId: ctxId,\n returnByValue: true,\n },\n );\n return String(result?.value ?? \"\");\n } catch {\n // Fallback: use navigation history entry title\n try {\n const { entries, currentIndex } =\n await this.mainSession.send<Protocol.Page.GetNavigationHistoryResponse>(\n \"Page.getNavigationHistory\",\n );\n return entries[currentIndex]?.title ?? \"\";\n } catch {\n return \"\";\n }\n }\n }\n\n /**\n * Capture a screenshot with Playwright-style options.\n *\n * @param options Optional screenshot configuration.\n * @param options.animations Control CSS/Web animations during capture. Use\n * \"disabled\" to fast-forward finite animations and pause infinite ones.\n * @param options.caret Either hide the text caret (default) or leave it\n * visible via \"initial\".\n * @param options.clip Restrict capture to a specific rectangle (in CSS\n * pixels). Cannot be combined with `fullPage`.\n * @param options.fullPage Capture the full scrollable page instead of the\n * current viewport.\n * @param options.mask Array of locators that should be covered with an\n * overlay while the screenshot is taken.\n * @param options.maskColor CSS color used for the mask overlay (default\n * `#FF00FF`).\n * @param options.omitBackground Make the default page background transparent\n * (PNG only).\n * @param options.path File path to write the screenshot to. The file extension\n * determines the image type when `type` is not explicitly provided.\n * @param options.quality JPEG quality (0–100). Only applies when\n * `type === \"jpeg\"`.\n * @param options.scale Render scale: use \"css\" for one pixel per CSS pixel,\n * otherwise the default \"device\" leverages the current device pixel ratio.\n * @param options.style Additional CSS text injected into every frame before\n * capture (removed afterwards).\n * @param options.timeout Maximum capture duration in milliseconds before a\n * timeout error is thrown.\n * @param options.type Image format (`\"png\"` by default).\n */\n @logAction(\"Page.screenshot\")\n async screenshot(options?: ScreenshotOptions): Promise<Buffer> {\n const opts = options ?? {};\n const type = opts.type ?? \"png\";\n\n if (type !== \"png\" && type !== \"jpeg\") {\n throw new StagehandInvalidArgumentError(\n `screenshot: unsupported image type \"${type}\"`,\n );\n }\n\n if (opts.fullPage && opts.clip) {\n throw new StagehandInvalidArgumentError(\n \"screenshot: clip and fullPage cannot be used together\",\n );\n }\n\n if (type === \"png\" && typeof opts.quality === \"number\") {\n throw new StagehandInvalidArgumentError(\n 'screenshot: quality option is only valid for type=\"jpeg\"',\n );\n }\n\n const caretMode: ScreenshotCaretOption = opts.caret ?? \"hide\";\n const animationsMode: ScreenshotAnimationsOption =\n opts.animations ?? \"allow\";\n const scaleMode: ScreenshotScaleOption = opts.scale ?? \"device\";\n const frames = collectFramesForScreenshot(this);\n const clip = opts.clip ? normalizeScreenshotClip(opts.clip) : undefined;\n const captureScale = await computeScreenshotScale(this, scaleMode);\n const maskLocators = (opts.mask ?? []).filter(\n (locator): locator is Locator => Boolean(locator),\n );\n\n const cleanupTasks: ScreenshotCleanup[] = [];\n\n const exec = async (): Promise<Buffer> => {\n try {\n if (opts.omitBackground) {\n cleanupTasks.push(await setTransparentBackground(this.mainSession));\n }\n\n if (animationsMode === \"disabled\") {\n cleanupTasks.push(await disableAnimations(frames));\n }\n\n if (caretMode === \"hide\") {\n cleanupTasks.push(await hideCaret(frames));\n }\n\n if (opts.style && opts.style.trim()) {\n cleanupTasks.push(\n await applyStyleToFrames(frames, opts.style, \"custom\"),\n );\n }\n\n if (maskLocators.length > 0) {\n cleanupTasks.push(\n await applyMaskOverlays(maskLocators, opts.maskColor ?? \"#FF00FF\"),\n );\n }\n\n const buffer = await this.mainFrameWrapper.screenshot({\n fullPage: opts.fullPage,\n clip,\n type,\n quality: type === \"jpeg\" ? opts.quality : undefined,\n scale: captureScale,\n });\n\n if (opts.path) {\n await fs.writeFile(opts.path, buffer);\n }\n\n return buffer;\n } finally {\n await runScreenshotCleanups(cleanupTasks);\n }\n };\n\n return withScreenshotTimeout(opts.timeout, exec);\n }\n\n /**\n * Create a locator bound to the current main frame.\n */\n locator(selector: string): ReturnType<Frame[\"locator\"]> {\n return this.mainFrameWrapper.locator(selector);\n }\n\n /**\n * Deep locator that supports cross-iframe traversal.\n * - Recognizes '>>' hop notation to enter iframe contexts.\n * - Supports deep XPath that includes iframe steps (e.g., '/html/body/iframe[2]//div').\n * Returns a Locator scoped to the appropriate frame.\n */\n deepLocator(selector: string) {\n return deepLocatorFromPage(this, this.mainFrameWrapper, selector);\n }\n\n /**\n * Frame locator similar to Playwright: targets iframe elements and scopes\n * subsequent locators to that frame. Supports chaining.\n */\n frameLocator(selector: string): FrameLocator {\n return new FrameLocator(this, selector);\n }\n\n /**\n * List all frames belonging to this page as Frame objects bound to their owning sessions.\n * The list is ordered by a stable ordinal assigned during the page lifetime.\n */\n frames(): Frame[] {\n const ids = this.listAllFrameIds();\n const withOrd = ids.map((id) => ({ id, ord: this.getOrdinal(id) }));\n withOrd.sort((a, b) => a.ord - b.ord);\n return withOrd.map(({ id }) => this.frameForId(id));\n }\n\n /**\n * Wait until the page reaches a lifecycle state on the current main frame.\n * Mirrors Playwright's API signatures.\n */\n @logAction(\"Page.waitForLoadState\")\n async waitForLoadState(state: LoadState, timeoutMs?: number): Promise<void> {\n await this.waitForMainLoadState(state, timeoutMs ?? 15000);\n }\n\n /**\n * Wait for a specified amount of time.\n *\n * @param ms The number of milliseconds to wait.\n */\n async waitForTimeout(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n\n /**\n * Wait for an element matching the selector to appear in the DOM.\n * Uses MutationObserver for efficiency\n * Pierces shadow DOM by default.\n * Supports iframe hop notation with '>>' (e.g., 'iframe#checkout >> .submit-btn').\n *\n * @param selector CSS selector to wait for (supports '>>' for iframe hops)\n * @param options\n * @param options.state Element state to wait for: 'attached' | 'detached' | 'visible' | 'hidden' (default: 'visible')\n * @param options.timeout Maximum time to wait in milliseconds (default: 30000)\n * @param options.pierceShadow Whether to search inside shadow DOM (default: true)\n * @returns True when the condition is met\n * @throws Error if timeout is reached before the condition is met\n */\n @logAction(\"Page.waitForSelector\")\n async waitForSelector(\n selector: string,\n options?: {\n state?: \"attached\" | \"detached\" | \"visible\" | \"hidden\";\n timeout?: number;\n pierceShadow?: boolean;\n },\n ): Promise<boolean> {\n const timeout = options?.timeout ?? 30000;\n const state = options?.state ?? \"visible\";\n const pierceShadow = options?.pierceShadow ?? true;\n const startTime = Date.now();\n const root = this.mainFrameWrapper;\n const { frame: targetFrame, selector: finalSelector } =\n await resolveLocatorTarget(this, root, selector);\n const elapsed = Date.now() - startTime;\n const remainingTimeout = Math.max(0, timeout - elapsed);\n\n const expression = buildLocatorInvocation(\"waitForSelector\", [\n JSON.stringify(finalSelector),\n JSON.stringify(state),\n String(remainingTimeout),\n String(pierceShadow),\n ]);\n return targetFrame.evaluate(expression);\n }\n\n /**\n * Evaluate a function or expression in the current main frame's main world.\n * - If a string is provided, it is treated as a JS expression.\n * - If a function is provided, it is stringified and invoked with the optional argument.\n * - The return value should be JSON-serializable. Non-serializable objects will\n * best-effort serialize via JSON.stringify inside the page context.\n */\n @logAction(\"Page.evaluate\")\n async evaluate<R = unknown, Arg = unknown>(\n pageFunctionOrExpression: string | ((arg: Arg) => R | Promise<R>),\n arg?: Arg,\n ): Promise<R> {\n await this.mainSession.send(\"Runtime.enable\").catch(() => {});\n const ctxId = await this.mainWorldExecutionContextId();\n\n const isString = typeof pageFunctionOrExpression === \"string\";\n let expression: string;\n\n if (isString) {\n expression = String(pageFunctionOrExpression);\n } else {\n const fnSrc = pageFunctionOrExpression.toString();\n const argJson = JSON.stringify(arg);\n expression = `(() => {\n const __fn = ${fnSrc};\n const __arg = ${argJson};\n try {\n const __res = __fn(__arg);\n return Promise.resolve(__res).then(v => {\n try { return JSON.parse(JSON.stringify(v)); } catch { return v; }\n });\n } catch (e) { throw e; }\n })()`;\n }\n\n const { result, exceptionDetails } =\n await this.mainSession.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression,\n contextId: ctxId,\n returnByValue: true,\n awaitPromise: true,\n },\n );\n\n if (exceptionDetails) {\n const msg =\n exceptionDetails.text ||\n exceptionDetails.exception?.description ||\n \"Evaluation failed\";\n throw new StagehandEvalError(msg);\n }\n\n return result?.value as R;\n }\n\n /**\n * Force the page viewport to an exact CSS size and device scale factor.\n * Ensures screenshots match width x height pixels when deviceScaleFactor = 1.\n */\n // @logAction(\"Page.setViewportSize\") // disabled because it's pretty noisy, can always re-enable if needed for debugging\n async setViewportSize(\n width: number,\n height: number,\n options?: { deviceScaleFactor?: number },\n ): Promise<void> {\n const dsf = Math.max(0.01, options?.deviceScaleFactor ?? 1);\n await this.mainSession\n .send(\"Emulation.setDeviceMetricsOverride\", {\n width,\n height,\n deviceScaleFactor: dsf,\n mobile: false,\n screenWidth: width,\n screenHeight: height,\n positionX: 0,\n positionY: 0,\n scale: 1,\n } as Protocol.Emulation.SetDeviceMetricsOverrideRequest)\n .catch(() => {});\n\n // Best-effort ensure visible size in headless\n await this.mainSession\n .send(\"Emulation.setVisibleSize\", { width, height })\n .catch(() => {});\n }\n\n /**\n * Click at absolute page coordinates (CSS pixels).\n * Dispatches mouseMoved → mousePressed → mouseReleased via CDP Input domain\n * on the top-level page target's session. Coordinates are relative to the\n * viewport origin (top-left). Does not scroll.\n */\n @logAction(\"Page.click\")\n async click(\n x: number,\n y: number,\n options?: {\n button?: \"left\" | \"right\" | \"middle\";\n clickCount?: number;\n returnXpath?: boolean;\n },\n ): Promise<string> {\n const button = options?.button ?? \"left\";\n const clickCount = options?.clickCount ?? 1;\n\n let xpathResult: string | undefined;\n if (options?.returnXpath) {\n // Resolve the deepest node at the given coordinates and compute absolute XPath efficiently\n try {\n const hit = await resolveXpathForLocation(this, x, y);\n if (hit) {\n v3Logger({\n category: \"page\",\n message: \"click resolved hit\",\n level: 2,\n auxiliary: {\n frameId: { value: String(hit.frameId), type: \"string\" },\n backendNodeId: {\n value: String(hit.backendNodeId),\n type: \"string\",\n },\n x: { value: String(x), type: \"integer\" },\n y: { value: String(y), type: \"integer\" },\n },\n });\n xpathResult = hit.absoluteXPath;\n v3Logger({\n category: \"page\",\n message: `click resolved xpath`,\n level: 2,\n auxiliary: {\n xpath: { value: String(xpathResult ?? \"\"), type: \"string\" },\n },\n });\n }\n } catch {\n // best-effort; fall through if any step fails\n }\n }\n\n // Synthesize a simple mouse move + press + release sequence.\n await this.updateCursor(x, y);\n // Dispatch click events in a pipelined burst to reduce inter-click delay\n // from network/CPU jitter between round trips.\n const dispatches: Array<Promise<unknown>> = [];\n dispatches.push(\n this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n\n for (let i = 1; i <= clickCount; i++) {\n dispatches.push(\n this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mousePressed\",\n x,\n y,\n button,\n clickCount: i,\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n dispatches.push(\n this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseReleased\",\n x,\n y,\n button,\n clickCount: i,\n } as Protocol.Input.DispatchMouseEventRequest),\n );\n }\n await Promise.all(dispatches);\n\n return xpathResult ?? \"\";\n }\n\n /**\n * Hover at absolute page coordinates (CSS pixels).\n * Dispatches mouseMoved via CDP Input domain on the top-level page target's\n * session.\n */\n @logAction(\"Page.hover\")\n async hover(\n x: number,\n y: number,\n options?: { returnXpath?: boolean },\n ): Promise<string> {\n let xpathResult: string | undefined;\n if (options?.returnXpath) {\n try {\n const hit = await resolveXpathForLocation(this, x, y);\n if (hit) {\n v3Logger({\n category: \"page\",\n message: \"hover resolved hit\",\n level: 2,\n auxiliary: {\n frameId: { value: String(hit.frameId), type: \"string\" },\n backendNodeId: {\n value: String(hit.backendNodeId),\n type: \"string\",\n },\n x: { value: String(x), type: \"integer\" },\n y: { value: String(y), type: \"integer\" },\n },\n });\n xpathResult = hit.absoluteXPath;\n }\n } catch {\n v3Logger({\n category: \"page\",\n message: \"Failed to resolve xpath for hover\",\n level: 2,\n auxiliary: {\n x: { value: String(x), type: \"integer\" },\n y: { value: String(y), type: \"integer\" },\n },\n });\n }\n }\n\n await this.updateCursor(x, y);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n\n return xpathResult ?? \"\";\n }\n\n @logAction(\"Page.scroll\")\n async scroll(\n x: number,\n y: number,\n deltaX: number,\n deltaY: number,\n options?: { returnXpath?: boolean },\n ): Promise<string> {\n let xpathResult: string | undefined;\n if (options?.returnXpath) {\n try {\n const hit = await resolveXpathForLocation(this, x, y);\n if (hit) xpathResult = hit.absoluteXPath;\n } catch {\n // best-effort\n }\n }\n\n await this.updateCursor(x, y);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n\n // Synthesize a simple mouse move + press + release sequence\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseWheel\",\n x,\n y,\n button: \"none\",\n deltaX,\n deltaY,\n } as Protocol.Input.DispatchMouseEventRequest);\n\n return xpathResult ?? \"\";\n }\n\n /**\n * Drag from (fromX, fromY) to (toX, toY) using mouse events.\n * Sends mouseMoved → mousePressed → mouseMoved (steps) → mouseReleased.\n */\n @logAction(\"Page.dragAndDrop\")\n async dragAndDrop(\n fromX: number,\n fromY: number,\n toX: number,\n toY: number,\n options?: {\n button?: \"left\" | \"right\" | \"middle\";\n steps?: number;\n delay?: number;\n returnXpath?: boolean;\n },\n ): Promise<[string, string]> {\n const button = options?.button ?? \"left\";\n const steps = Math.max(1, Math.floor(options?.steps ?? 1));\n const delay = Math.max(0, options?.delay ?? 0);\n\n const sleep = (ms: number) =>\n new Promise<void>((r) => (ms > 0 ? setTimeout(r, ms) : r()));\n\n const buttonMask = (b: typeof button): number => {\n switch (b) {\n case \"left\":\n return 1;\n case \"right\":\n return 2;\n case \"middle\":\n return 4;\n default:\n return 1;\n }\n };\n\n let fromXpath: string | undefined;\n let toXpath: string | undefined;\n if (options?.returnXpath) {\n try {\n const start = await resolveXpathForLocation(this, fromX, fromY);\n if (start) fromXpath = start.absoluteXPath;\n } catch {\n //\n }\n try {\n const end = await resolveXpathForLocation(this, toX, toY);\n if (end) toXpath = end.absoluteXPath;\n } catch {\n //\n }\n }\n\n // Move to start\n await this.updateCursor(fromX, fromY);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x: fromX,\n y: fromY,\n button: \"none\",\n } as Protocol.Input.DispatchMouseEventRequest);\n\n // Press\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mousePressed\",\n x: fromX,\n y: fromY,\n button,\n buttons: buttonMask(button),\n clickCount: 1,\n } as Protocol.Input.DispatchMouseEventRequest);\n\n // Intermediate moves\n for (let i = 1; i <= steps; i++) {\n const t = i / steps;\n const x = fromX + (toX - fromX) * t;\n const y = fromY + (toY - fromY) * t;\n await this.updateCursor(x, y);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseMoved\",\n x,\n y,\n button,\n buttons: buttonMask(button),\n } as Protocol.Input.DispatchMouseEventRequest);\n if (delay) await sleep(delay);\n }\n\n // Release at end\n await this.updateCursor(toX, toY);\n await this.mainSession.send<never>(\"Input.dispatchMouseEvent\", {\n type: \"mouseReleased\",\n x: toX,\n y: toY,\n button,\n buttons: buttonMask(button),\n clickCount: 1,\n } as Protocol.Input.DispatchMouseEventRequest);\n\n return [fromXpath ?? \"\", toXpath ?? \"\"];\n }\n\n /**\n * Type a string by dispatching keyDown/keyUp events per character.\n * Focus must already be on the desired element. Uses CDP Input.dispatchKeyEvent\n * and never falls back to Input.insertText. Optional delay applies between\n * successive characters.\n */\n @logAction(\"Page.type\")\n async type(\n text: string,\n options?: { delay?: number; withMistakes?: boolean },\n ): Promise<void> {\n const delay = Math.max(0, options?.delay ?? 0);\n const withMistakes = !!options?.withMistakes;\n\n const sleep = (ms: number) =>\n new Promise<void>((r) => (ms > 0 ? setTimeout(r, ms) : r()));\n\n const keyStroke = async (\n ch: string,\n override?: {\n key?: string;\n code?: string;\n windowsVirtualKeyCode?: number;\n },\n ) => {\n if (override) {\n const base: Protocol.Input.DispatchKeyEventRequest = {\n type: \"keyDown\",\n key: override.key,\n code: override.code,\n windowsVirtualKeyCode: override.windowsVirtualKeyCode,\n } as Protocol.Input.DispatchKeyEventRequest;\n await this.mainSession.send(\"Input.dispatchKeyEvent\", base);\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n ...base,\n type: \"keyUp\",\n } as Protocol.Input.DispatchKeyEventRequest);\n return;\n }\n\n // Printable character: include key, code, and text for maximum compatibility\n // Some sites (like Wordle) check event.key rather than relying on text input\n const isLetter = /^[a-zA-Z]$/.test(ch);\n const isDigit = /^[0-9]$/.test(ch);\n\n let key = ch;\n let code = \"\";\n let windowsVirtualKeyCode: number | undefined;\n\n if (isLetter) {\n // For letters, key is the character, code is KeyX where X is uppercase\n key = ch;\n code = `Key${ch.toUpperCase()}`;\n windowsVirtualKeyCode = ch.toUpperCase().charCodeAt(0);\n } else if (isDigit) {\n key = ch;\n code = `Digit${ch}`;\n windowsVirtualKeyCode = ch.charCodeAt(0);\n } else if (ch === \" \") {\n key = \" \";\n code = \"Space\";\n windowsVirtualKeyCode = 32;\n }\n\n const down: Protocol.Input.DispatchKeyEventRequest = {\n type: \"keyDown\",\n key,\n code: code || undefined,\n text: ch,\n unmodifiedText: ch,\n windowsVirtualKeyCode,\n };\n await this.mainSession.send(\"Input.dispatchKeyEvent\", down);\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key,\n code: code || undefined,\n windowsVirtualKeyCode,\n } as Protocol.Input.DispatchKeyEventRequest);\n };\n\n const pressBackspace = async () =>\n keyStroke(\"\\b\", {\n key: \"Backspace\",\n code: \"Backspace\",\n windowsVirtualKeyCode: 8,\n });\n\n const randomPrintable = (avoid: string): string => {\n const pool =\n \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 .,;:'\\\"!?@#$%^&*()-_=+[]{}<>/\\\\|`~\";\n let c = avoid;\n while (c === avoid) {\n c = pool[Math.floor(Math.random() * pool.length)];\n }\n return c;\n };\n\n for (const ch of text) {\n // Control keys that we explicitly map\n if (ch === \"\\n\" || ch === \"\\r\") {\n await keyStroke(ch, {\n key: \"Enter\",\n code: \"Enter\",\n windowsVirtualKeyCode: 13,\n });\n } else if (ch === \"\\t\") {\n await keyStroke(ch, {\n key: \"Tab\",\n code: \"Tab\",\n windowsVirtualKeyCode: 9,\n });\n } else {\n if (withMistakes && Math.random() < 0.12) {\n // Type a wrong character, then backspace to correct\n const wrong = randomPrintable(ch);\n await keyStroke(wrong);\n if (delay) await sleep(delay);\n await pressBackspace();\n if (delay) await sleep(delay);\n }\n await keyStroke(ch);\n }\n\n if (delay) await sleep(delay);\n }\n }\n\n /**\n * Press a single key or key combination (keyDown then keyUp).\n * For printable characters, uses the text path on keyDown; for named keys, sets key/code/VK.\n * Supports key combinations with modifiers like \"Cmd+A\", \"Ctrl+C\", \"Shift+Tab\", etc.\n */\n @logAction(\"Page.keyPress\")\n async keyPress(key: string, options?: { delay?: number }): Promise<void> {\n const delay = Math.max(0, options?.delay ?? 0);\n const sleep = (ms: number) =>\n new Promise<void>((r) => (ms > 0 ? setTimeout(r, ms) : r()));\n\n // Split key combination by + but handle the special case of \"+\" key itself\n function split(keyString: string): string[] {\n // Special case: if the entire string is just \"+\", return it as-is\n if (keyString === \"+\") {\n return [\"+\"];\n }\n\n const keys: string[] = [];\n let building = \"\";\n for (const char of keyString) {\n if (char === \"+\" && building) {\n keys.push(building);\n building = \"\";\n } else {\n building += char;\n }\n }\n if (building) {\n keys.push(building);\n }\n return keys;\n }\n\n const tokens = split(key);\n const mainKey = tokens[tokens.length - 1];\n const modifierKeys = tokens.slice(0, -1);\n\n try {\n for (const modKey of modifierKeys) {\n await this.keyDown(modKey);\n }\n\n await this.keyDown(mainKey);\n if (delay) await sleep(delay);\n await this.keyUp(mainKey);\n\n for (let i = modifierKeys.length - 1; i >= 0; i--) {\n await this.keyUp(modifierKeys[i]);\n }\n } catch (error) {\n // Clear stuck modifiers on error to prevent affecting subsequent keyPress calls\n this._pressedModifiers.clear();\n throw error;\n }\n }\n\n @logAction(\"Page.snapshot\")\n async snapshot(options?: PageSnapshotOptions): Promise<SnapshotResult> {\n try {\n const { combinedTree, combinedXpathMap, combinedUrlMap } =\n await captureHybridSnapshot(this, {\n pierceShadow: true,\n includeIframes: options?.includeIframes,\n });\n\n return {\n formattedTree: combinedTree,\n xpathMap: combinedXpathMap,\n urlMap: combinedUrlMap,\n };\n } catch (err) {\n throw new StagehandSnapshotError(err);\n }\n }\n\n // Track pressed modifier keys\n private _pressedModifiers = new Set<string>();\n\n /** Press a key down without releasing it */\n private async keyDown(key: string): Promise<void> {\n const normalizedKey = this.normalizeModifierKey(key);\n\n const modifierKeys = [\"Alt\", \"Control\", \"Meta\", \"Shift\"];\n if (modifierKeys.includes(normalizedKey)) {\n this._pressedModifiers.add(normalizedKey);\n }\n\n let modifiers = 0;\n if (this._pressedModifiers.has(\"Alt\")) modifiers |= 1;\n if (this._pressedModifiers.has(\"Control\")) modifiers |= 2;\n if (this._pressedModifiers.has(\"Meta\")) modifiers |= 4;\n if (this._pressedModifiers.has(\"Shift\")) modifiers |= 8;\n\n const named = this.getNamedKeys();\n\n if (normalizedKey.length === 1) {\n const hasNonShiftModifier =\n this._pressedModifiers.has(\"Alt\") ||\n this._pressedModifiers.has(\"Control\") ||\n this._pressedModifiers.has(\"Meta\");\n if (hasNonShiftModifier) {\n // For accelerators (e.g., Cmd/Ctrl/Alt + key), do not send text. Use rawKeyDown with key/code/VK.\n const desc = this.describePrintableKey(normalizedKey);\n const macCommands = this.isMacOS()\n ? this.macCommandsFor(desc.code ?? \"\")\n : [];\n const req: Protocol.Input.DispatchKeyEventRequest = {\n type: \"rawKeyDown\",\n modifiers,\n key: desc.key,\n ...(desc.code ? { code: desc.code } : {}),\n ...(typeof desc.vk === \"number\"\n ? { windowsVirtualKeyCode: desc.vk }\n : {}),\n ...(macCommands.length ? { commands: macCommands } : {}),\n } as Protocol.Input.DispatchKeyEventRequest;\n await this.mainSession.send(\"Input.dispatchKeyEvent\", req);\n } else {\n // Typing path (no non-Shift modifiers): send text to generate input\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyDown\",\n text: normalizedKey,\n unmodifiedText: normalizedKey,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n }\n return;\n }\n\n const entry = named[normalizedKey] ?? null;\n if (entry) {\n const macCommands = this.isMacOS() ? this.macCommandsFor(entry.code) : [];\n const includeText = !!entry.text && modifiers === 0;\n const keyDown: Protocol.Input.DispatchKeyEventRequest = {\n type: includeText ? \"keyDown\" : \"rawKeyDown\",\n key: entry.key,\n code: entry.code,\n windowsVirtualKeyCode: entry.vk,\n modifiers,\n ...(includeText\n ? {\n text: entry.text,\n unmodifiedText: entry.unmodifiedText ?? entry.text,\n }\n : {}),\n ...(macCommands.length ? { commands: macCommands } : {}),\n } as Protocol.Input.DispatchKeyEventRequest;\n await this.mainSession.send(\"Input.dispatchKeyEvent\", keyDown);\n return;\n }\n\n // Fallback: send with key property only\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyDown\",\n key: normalizedKey,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n }\n\n /** Release a pressed key */\n private async keyUp(key: string): Promise<void> {\n const normalizedKey = this.normalizeModifierKey(key);\n\n let modifiers = 0;\n if (this._pressedModifiers.has(\"Alt\")) modifiers |= 1;\n if (this._pressedModifiers.has(\"Control\")) modifiers |= 2;\n if (this._pressedModifiers.has(\"Meta\")) modifiers |= 4;\n if (this._pressedModifiers.has(\"Shift\")) modifiers |= 8;\n\n const modifierKeys = [\"Alt\", \"Control\", \"Meta\", \"Shift\"];\n if (modifierKeys.includes(normalizedKey)) {\n this._pressedModifiers.delete(normalizedKey);\n }\n\n const named = this.getNamedKeys();\n\n if (normalizedKey.length === 1) {\n const desc = this.describePrintableKey(normalizedKey);\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: desc.key,\n code: desc.code,\n windowsVirtualKeyCode:\n typeof desc.vk === \"number\" ? desc.vk : undefined,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n return;\n }\n\n const entry = named[normalizedKey] ?? null;\n if (entry) {\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: entry.key,\n code: entry.code,\n windowsVirtualKeyCode: entry.vk,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n return;\n }\n\n // Fallback: send with key property only\n await this.mainSession.send(\"Input.dispatchKeyEvent\", {\n type: \"keyUp\",\n key: normalizedKey,\n modifiers,\n } as Protocol.Input.DispatchKeyEventRequest);\n }\n\n /** Normalize key names to match CDP expectations */\n private normalizeModifierKey(key: string): string {\n const lower = key.toLowerCase();\n switch (lower) {\n // Modifier keys\n case \"cmd\":\n case \"command\":\n case \"controlormeta\":\n // On Mac, Cmd is Meta; elsewhere map to Control for common shortcuts\n return this.isMacOS() ? \"Meta\" : \"Control\";\n case \"win\":\n case \"windows\":\n return \"Meta\";\n case \"ctrl\":\n case \"control\":\n return \"Control\";\n case \"option\":\n case \"alt\":\n return \"Alt\";\n case \"shift\":\n return \"Shift\";\n case \"meta\":\n return \"Meta\";\n // Action keys\n case \"enter\":\n case \"return\":\n return \"Enter\";\n case \"esc\":\n case \"escape\":\n return \"Escape\";\n case \"backspace\":\n return \"Backspace\";\n case \"tab\":\n return \"Tab\";\n case \"space\":\n case \"spacebar\":\n return \" \";\n case \"delete\":\n case \"del\":\n return \"Delete\";\n // Arrow keys\n case \"left\":\n case \"arrowleft\":\n return \"ArrowLeft\";\n case \"right\":\n case \"arrowright\":\n return \"ArrowRight\";\n case \"up\":\n case \"arrowup\":\n return \"ArrowUp\";\n case \"down\":\n case \"arrowdown\":\n return \"ArrowDown\";\n // Navigation keys\n case \"home\":\n return \"Home\";\n case \"end\":\n return \"End\";\n case \"pageup\":\n case \"pgup\":\n return \"PageUp\";\n case \"pagedown\":\n case \"pgdn\":\n return \"PageDown\";\n default:\n return key;\n }\n }\n\n /**\n * Get the map of named keys with their properties\n */\n private getNamedKeys(): Record<\n string,\n {\n key: string;\n code: string;\n vk: number;\n text?: string;\n unmodifiedText?: string;\n }\n > {\n return {\n Enter: {\n key: \"Enter\",\n code: \"Enter\",\n vk: 13,\n text: \"\\r\",\n unmodifiedText: \"\\r\",\n },\n Tab: { key: \"Tab\", code: \"Tab\", vk: 9 },\n Backspace: { key: \"Backspace\", code: \"Backspace\", vk: 8 },\n Escape: { key: \"Escape\", code: \"Escape\", vk: 27 },\n Delete: { key: \"Delete\", code: \"Delete\", vk: 46 },\n ArrowLeft: { key: \"ArrowLeft\", code: \"ArrowLeft\", vk: 37 },\n ArrowUp: { key: \"ArrowUp\", code: \"ArrowUp\", vk: 38 },\n ArrowRight: { key: \"ArrowRight\", code: \"ArrowRight\", vk: 39 },\n ArrowDown: { key: \"ArrowDown\", code: \"ArrowDown\", vk: 40 },\n Home: { key: \"Home\", code: \"Home\", vk: 36 },\n End: { key: \"End\", code: \"End\", vk: 35 },\n PageUp: { key: \"PageUp\", code: \"PageUp\", vk: 33 },\n PageDown: { key: \"PageDown\", code: \"PageDown\", vk: 34 },\n // Modifier keys\n Alt: { key: \"Alt\", code: \"AltLeft\", vk: 18 },\n Control: { key: \"Control\", code: \"ControlLeft\", vk: 17 },\n Meta: { key: \"Meta\", code: \"MetaLeft\", vk: 91 },\n Shift: { key: \"Shift\", code: \"ShiftLeft\", vk: 16 },\n };\n }\n\n /**\n * Minimal description for printable keys (letters/digits/space) to provide code and VK.\n * Used when non-Shift modifiers are pressed to avoid sending text while keeping accelerator info.\n */\n private describePrintableKey(ch: string): {\n key: string;\n code?: string;\n vk?: number;\n } {\n const shiftDown = this._pressedModifiers.has(\"Shift\");\n const isLetter = /^[a-zA-Z]$/.test(ch);\n const isDigit = /^[0-9]$/.test(ch);\n\n if (isLetter) {\n const upper = ch.toUpperCase();\n return {\n key: shiftDown ? upper : upper.toLowerCase(),\n code: `Key${upper}`,\n vk: upper.charCodeAt(0), // 'A'..'Z' => 65..90\n };\n }\n\n if (isDigit) {\n return {\n key: ch,\n code: `Digit${ch}`,\n vk: ch.charCodeAt(0), // '0'..'9' => 48..57\n };\n }\n\n if (ch === \" \") {\n return { key: \" \", code: \"Space\", vk: 32 };\n }\n\n // Fallback: just return the character as-is; VK best-effort from ASCII\n return {\n key: shiftDown ? ch.toUpperCase() : ch,\n vk: ch.toUpperCase().charCodeAt(0),\n };\n }\n\n private isMacOS(): boolean {\n try {\n return process.platform === \"darwin\";\n } catch {\n return false;\n }\n }\n\n /**\n * Return Chromium mac editing commands (without trailing ':') for a given code like 'KeyA'\n * Only used on macOS to trigger system editing shortcuts (e.g., selectAll, copy, paste...).\n */\n private macCommandsFor(code: string): string[] {\n if (!this.isMacOS()) return [];\n const parts: string[] = [];\n if (this._pressedModifiers.has(\"Shift\")) parts.push(\"Shift\");\n if (this._pressedModifiers.has(\"Control\")) parts.push(\"Control\");\n if (this._pressedModifiers.has(\"Alt\")) parts.push(\"Alt\");\n if (this._pressedModifiers.has(\"Meta\")) parts.push(\"Meta\");\n parts.push(code);\n const shortcut = parts.join(\"+\");\n const table: Record<string, string | string[]> = {\n \"Meta+KeyA\": \"selectAll:\",\n \"Meta+KeyC\": \"copy:\",\n \"Meta+KeyX\": \"cut:\",\n \"Meta+KeyV\": \"paste:\",\n \"Meta+KeyZ\": \"undo:\",\n };\n const value = table[shortcut];\n if (!value) return [];\n const list = Array.isArray(value) ? value : [value];\n return list\n .filter((c) => !c.startsWith(\"insert\"))\n .map((c) => c.substring(0, c.length - 1));\n }\n\n // ---- Page-level lifecycle waiter that follows main frame id swaps ----\n\n /** Resolve the main-world execution context for the current main frame. */\n private async mainWorldExecutionContextId(): Promise<number> {\n return executionContexts.waitForMainWorld(\n this.mainSession,\n this.mainFrameId(),\n 1000,\n );\n }\n\n private async isMainLoadStateReady(\n state: \"domcontentloaded\" | \"load\",\n ): Promise<boolean> {\n try {\n const ctxId = await this.mainWorldExecutionContextId();\n const { result } =\n await this.mainSession.send<Protocol.Runtime.EvaluateResponse>(\n \"Runtime.evaluate\",\n {\n expression: \"document.readyState\",\n contextId: ctxId,\n returnByValue: true,\n },\n );\n const readyState = String(result?.value ?? \"\");\n if (state === \"domcontentloaded\") {\n return readyState === \"interactive\" || readyState === \"complete\";\n }\n return readyState === \"complete\";\n } catch {\n return false;\n }\n }\n\n /**\n * Wait until the **current** main frame reaches a lifecycle state.\n * - Fast path via `document.readyState`.\n * - Event path listens at the session level and compares incoming `frameId`\n * to `mainFrameId()` **at event time** to follow root swaps.\n */\n async waitForMainLoadState(\n state: LoadState,\n timeoutMs = 15000,\n ): Promise<void> {\n await this.mainSession\n .send(\"Page.setLifecycleEventsEnabled\", { enabled: true })\n .catch(() => {});\n\n // Fast path: check the *current* main frame's readyState.\n if (\n (state === \"domcontentloaded\" || state === \"load\") &&\n (await this.isMainLoadStateReady(state))\n ) {\n return;\n }\n\n const wanted = LIFECYCLE_NAME[state];\n return new Promise<void>((resolve, reject) => {\n let done = false;\n let timer: ReturnType<typeof setTimeout> | null = null;\n let pollTimer: ReturnType<typeof setTimeout> | null = null;\n let pollInFlight = false;\n\n const off = () => {\n this.mainSession.off(\"Page.lifecycleEvent\", onLifecycle);\n this.mainSession.off(\"Page.domContentEventFired\", onDomContent);\n this.mainSession.off(\"Page.loadEventFired\", onLoad);\n };\n const clearPollTimer = () => {\n if (pollTimer) {\n clearTimeout(pollTimer);\n pollTimer = null;\n }\n };\n\n const finish = () => {\n if (done) return;\n done = true;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n clearPollTimer();\n off();\n resolve();\n };\n\n const onLifecycle = (evt: Protocol.Page.LifecycleEventEvent) => {\n if (evt.name !== wanted) return;\n // Compare against the *current* main frame id when the event arrives.\n if (evt.frameId === this.mainFrameId()) finish();\n };\n\n const onDomContent = () => {\n if (state === \"domcontentloaded\") finish();\n };\n\n const onLoad = () => {\n if (state === \"load\") finish();\n };\n\n this.mainSession.on(\"Page.lifecycleEvent\", onLifecycle);\n // Backups for sites that don't emit lifecycle consistently\n this.mainSession.on(\"Page.domContentEventFired\", onDomContent);\n this.mainSession.on(\"Page.loadEventFired\", onLoad);\n\n // Fallback polling closes lifecycle-event races in remote environments\n // where readyState has advanced but the corresponding event was missed.\n const pollReadyState = async () => {\n if (done || pollInFlight) return;\n pollInFlight = true;\n try {\n if (done) return;\n if (\n (state === \"domcontentloaded\" || state === \"load\") &&\n (await this.isMainLoadStateReady(state))\n ) {\n finish();\n return;\n }\n } finally {\n pollInFlight = false;\n }\n if (!done) {\n clearPollTimer();\n pollTimer = setTimeout(() => {\n void pollReadyState();\n }, 100);\n }\n };\n void pollReadyState();\n\n timer = setTimeout(() => {\n if (done) return;\n done = true;\n clearPollTimer();\n off();\n reject(\n new Error(\n `waitForMainLoadState(${state}) timed out after ${timeoutMs}ms`,\n ),\n );\n }, timeoutMs);\n });\n }\n}\n"]}