@tinkerlandai/indiana-react-native 0.9.2 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/IndianaReactNative.podspec +19 -0
  2. package/README.md +62 -5
  3. package/THIRD_PARTY_NOTICES.md +74 -0
  4. package/android/build.gradle +24 -0
  5. package/android/src/main/AndroidManifest.xml +3 -0
  6. package/android/src/main/java/ai/tinkerland/indiana/reactnative/IndianaBridgeModule.kt +237 -0
  7. package/android/src/main/java/ai/tinkerland/indiana/reactnative/IndianaBridgePackage.kt +11 -0
  8. package/dist/index.cjs +17 -1
  9. package/dist/index.d.cts +96889 -6007
  10. package/dist/index.d.ts +96889 -6007
  11. package/dist/index.js +17 -1
  12. package/ios/IndianaBridge.m +11 -0
  13. package/ios/IndianaBridge.swift +275 -0
  14. package/native-sdk/android/assets/indiana/index.html +268 -0
  15. package/native-sdk/android/java/ai/tinkerland/indiana/BillingAuthorizationTerms.kt +55 -0
  16. package/native-sdk/android/java/ai/tinkerland/indiana/BundledWebView.kt +90 -0
  17. package/native-sdk/android/java/ai/tinkerland/indiana/ContentSession.kt +45 -0
  18. package/native-sdk/android/java/ai/tinkerland/indiana/ContentView.kt +36 -0
  19. package/native-sdk/android/java/ai/tinkerland/indiana/CustomerOperations.generated.kt +84 -0
  20. package/native-sdk/android/java/ai/tinkerland/indiana/CustomerResponseSemantics.kt +197 -0
  21. package/native-sdk/android/java/ai/tinkerland/indiana/CustomerSemantics.kt +120 -0
  22. package/native-sdk/android/java/ai/tinkerland/indiana/CustomerSession.kt +106 -0
  23. package/native-sdk/android/java/ai/tinkerland/indiana/FeatureClient.kt +65 -0
  24. package/native-sdk/android/java/ai/tinkerland/indiana/FunnelCommandStorage.kt +163 -0
  25. package/native-sdk/android/java/ai/tinkerland/indiana/FunnelConfigurationRelay.kt +50 -0
  26. package/native-sdk/android/java/ai/tinkerland/indiana/FunnelSession.kt +208 -0
  27. package/native-sdk/android/java/ai/tinkerland/indiana/FunnelView.kt +71 -0
  28. package/native-sdk/android/java/ai/tinkerland/indiana/GeneratedProtocol.kt +16 -0
  29. package/native-sdk/android/java/ai/tinkerland/indiana/GoogleStorefront.kt +165 -0
  30. package/native-sdk/android/java/ai/tinkerland/indiana/HTTPTransport.kt +43 -0
  31. package/native-sdk/android/java/ai/tinkerland/indiana/IndianaClient.kt +526 -0
  32. package/native-sdk/android/java/ai/tinkerland/indiana/MerchantCommerceSemantics.kt +38 -0
  33. package/native-sdk/android/java/ai/tinkerland/indiana/NativePendingKeystore.kt +81 -0
  34. package/native-sdk/android/java/ai/tinkerland/indiana/NativeReceiptRelay.kt +28 -0
  35. package/native-sdk/android/java/ai/tinkerland/indiana/NativeStoreOffer.kt +24 -0
  36. package/native-sdk/android/java/ai/tinkerland/indiana/PaywallContent.kt +75 -0
  37. package/native-sdk/android/java/ai/tinkerland/indiana/PaywallSession.kt +144 -0
  38. package/native-sdk/android/java/ai/tinkerland/indiana/PaywallView.kt +74 -0
  39. package/native-sdk/android/java/ai/tinkerland/indiana/Protocol.kt +28 -0
  40. package/native-sdk/android/java/ai/tinkerland/indiana/PushInstallation.kt +170 -0
  41. package/native-sdk/android/java/ai/tinkerland/indiana/RendererNavigation.kt +13 -0
  42. package/native-sdk/android/java/ai/tinkerland/indiana/SDKVersion.kt +6 -0
  43. package/native-sdk/android/java/ai/tinkerland/indiana/StoreSubscriptionManagement.kt +19 -0
  44. package/native-sdk/android/java/ai/tinkerland/indiana/WireSchema.kt +76 -0
  45. package/native-sdk/android/resources/funnel-wire-schemas.json +1 -0
  46. package/native-sdk/android/resources/indiana-third-party-notices.txt +101 -0
  47. package/native-sdk/android/resources/renderer-data-url.txt +1 -0
  48. package/native-sdk/ios/AnalyticsReceipt.swift +10 -0
  49. package/native-sdk/ios/AppleStorefront.swift +218 -0
  50. package/native-sdk/ios/BillingAuthorizationTerms.swift +57 -0
  51. package/native-sdk/ios/BundledWebView.swift +87 -0
  52. package/native-sdk/ios/ContentSession.swift +48 -0
  53. package/native-sdk/ios/ContentView.swift +51 -0
  54. package/native-sdk/ios/CustomerOperations.generated.swift +166 -0
  55. package/native-sdk/ios/CustomerResponseSemantics.swift +236 -0
  56. package/native-sdk/ios/CustomerSemantics.swift +145 -0
  57. package/native-sdk/ios/CustomerSession.swift +129 -0
  58. package/native-sdk/ios/FeatureClient.swift +86 -0
  59. package/native-sdk/ios/FunnelCommandStorage.swift +163 -0
  60. package/native-sdk/ios/FunnelConfigurationRelay.swift +48 -0
  61. package/native-sdk/ios/FunnelSession.swift +232 -0
  62. package/native-sdk/ios/FunnelView.swift +125 -0
  63. package/native-sdk/ios/GeneratedProtocol.swift +16 -0
  64. package/native-sdk/ios/HTTPTransport.swift +74 -0
  65. package/native-sdk/ios/IndianaClient.swift +601 -0
  66. package/native-sdk/ios/MerchantCommerceSemantics.swift +51 -0
  67. package/native-sdk/ios/NativePendingKeychain.swift +52 -0
  68. package/native-sdk/ios/NativeReceiptRelay.swift +28 -0
  69. package/native-sdk/ios/NativeStoreOffer.swift +34 -0
  70. package/native-sdk/ios/PaywallContent.swift +75 -0
  71. package/native-sdk/ios/PaywallSession.swift +124 -0
  72. package/native-sdk/ios/PaywallView.swift +87 -0
  73. package/native-sdk/ios/Protocol.swift +49 -0
  74. package/native-sdk/ios/PushInstallation.swift +154 -0
  75. package/native-sdk/ios/RendererNavigation.swift +8 -0
  76. package/native-sdk/ios/Resources.swift +15 -0
  77. package/native-sdk/ios/SDKVersion.swift +4 -0
  78. package/native-sdk/ios/StoreSubscriptionManagement.swift +11 -0
  79. package/native-sdk/ios/WebView/THIRD_PARTY_NOTICES.txt +101 -0
  80. package/native-sdk/ios/WebView/index.html +268 -0
  81. package/native-sdk/ios/WebView/renderer-data-url.txt +1 -0
  82. package/native-sdk/ios/WireSchema.swift +107 -0
  83. package/native-sdk/ios/funnel-wire-schemas.json +1 -0
  84. package/package.json +8 -3
  85. package/react-native.config.cjs +12 -0
@@ -0,0 +1,101 @@
1
+ # GrowthBook core
2
+
3
+ MIT core port from growthbook/growthbook at ed29827a453ae6b9eba181bdf4e9280d4b670817. No enterprise-licensed code is included.
4
+
5
+ Copyright (c) 2025 GrowthBook, Inc.
6
+
7
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
8
+ furnished to do so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
20
+
21
+ # @noble/hashes 2.4.0
22
+
23
+ SHA-256 for hashed saved-group membership is bundled from `@noble/hashes` 2.4.0.
24
+ Source: https://github.com/paulmillr/noble-hashes
25
+
26
+ The MIT License (MIT)
27
+
28
+ Copyright (c) 2022 Paul Miller (https://paulmillr.com)
29
+
30
+ Permission is hereby granted, free of charge, to any person obtaining a copy
31
+ of this software and associated documentation files (the “Software”), to deal
32
+ in the Software without restriction, including without limitation the rights
33
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
34
+ copies of the Software, and to permit persons to whom the Software is
35
+ furnished to do so, subject to the following conditions:
36
+
37
+ The above copyright notice and this permission notice shall be included in
38
+ all copies or substantial portions of the Software.
39
+
40
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
44
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
45
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
46
+ THE SOFTWARE.
47
+
48
+ # dom-mutator 0.7.0
49
+
50
+ GrowthBook declarative DOM mutations use the original `dom-mutator` package.
51
+ Source: https://github.com/growthbook/dom-mutator
52
+
53
+ MIT License
54
+
55
+ Copyright (c) 2021 Jeremy Dorn
56
+
57
+ Permission is hereby granted, free of charge, to any person obtaining a copy
58
+ of this software and associated documentation files (the "Software"), to deal
59
+ in the Software without restriction, including without limitation the rights
60
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
61
+ copies of the Software, and to permit persons to whom the Software is
62
+ furnished to do so, subject to the following conditions:
63
+
64
+ The above copyright notice and this permission notice shall be included in all
65
+ copies or substantial portions of the Software.
66
+
67
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
68
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
69
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
70
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
71
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
72
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
73
+ SOFTWARE.
74
+
75
+ # whatwg-url-minimum 0.2.0
76
+
77
+ Bundled URL implementation from https://github.com/expo/whatwg-url-minimum.
78
+
79
+ MIT License
80
+
81
+ Copyright (c) Phil Pluckthun,
82
+ Copyright (c) 650 Industries, Inc. (aka Expo),
83
+ Copyright (c) Sebastian Mayr
84
+
85
+ Permission is hereby granted, free of charge, to any person obtaining a copy
86
+ of this software and associated documentation files (the "Software"), to deal
87
+ in the Software without restriction, including without limitation the rights
88
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
89
+ copies of the Software, and to permit persons to whom the Software is
90
+ furnished to do so, subject to the following conditions:
91
+
92
+ The above copyright notice and this permission notice shall be included in all
93
+ copies or substantial portions of the Software.
94
+
95
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
96
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
97
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
98
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
99
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
100
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
101
+ SOFTWARE.
@@ -0,0 +1 @@
1
+ data:text/html;charset=utf-8,%3C!doctype%20html%3E%3Chtml%3E%3Chead%3E%3Cmeta%20charset%3D%22utf-8%22%3E%3Cmeta%20name%3D%22viewport%22%20content%3D%22width%3Ddevice-width%2Cinitial-scale%3D1%22%3E%3Cmeta%20http-equiv%3D%22Content-Security-Policy%22%20content%3D%22default-src%20'none'%3B%20script-src%20'sha256-UznZYYJO84QL7WE307bb%2F%2F1369HDvk9x2sY%2BtHsxToI%3D'%3B%20style-src%20'unsafe-inline'%3B%20img-src%20https%3A%20data%3A%3B%20connect-src%20'none'%3B%20font-src%20'none'%3B%20media-src%20'none'%3B%20frame-src%20'none'%3B%20base-uri%20'none'%3B%20form-action%20'none'%22%3E%3C%2Fhead%3E%3Cbody%3E%3Cscript%3E(()%20%3D%3E%20%7B%0A%20%20%20%20try%20%7B%0A%20%20%20%20%20%20const%20input%20%3D%20JSON.parse(decodeURIComponent(location.hash.slice(1)))%3B%0A%20%20%20%20%20%20if%20(!input%20%7C%7C%20!%2F%5E%5Ba-f0-9-%5D%7B36%7D%24%2F.test(input.channel)%20%7C%7C%20input.mode%20!%3D%3D%20%22live%22%20%7C%7C%20!Number.isInteger(input.hostDepth)%20%7C%7C%20input.hostDepth%20%3C%201%20%7C%7C%20input.hostDepth%20%3E%2016)%20return%3B%0A%20%20%20%20%20%20const%20origin%20%3D%20new%20URL(input.parentOrigin)%3B%0A%20%20%20%20%20%20if%20(!%5B%22https%3A%22%2C%20%22http%3A%22%5D.includes(origin.protocol)%20%7C%7C%20origin.origin%20!%3D%3D%20input.parentOrigin)%20return%3B%0A%20%20%20%20%20%20const%20boot%20%3D%20%7B%20channel%3A%20input.channel%2C%20parentOrigin%3A%20origin.origin%2C%20hostDepth%3A%20input.hostDepth%2C%20mode%3A%20%22live%22%20%7D%3B%0A%20%20%20%20%20%20(function%20ct(y)%7Bfunction%20C(e)%7Breturn%20e.type%3D%3D%3D%22stack%22%26%26e.interaction%3F.type%3D%3D%3D%22select%22%26%26e.interaction.purpose%3D%3D%3D%22product%22%26%26!!e.interaction.pickerId%7Dfunction%20O(e)%7Blet%20a%3D%7B%7D%3Bfunction%20t(r)%7Bif(C(r))%7Blet%20n%3Da%5Br.interaction.pickerId%5D%3F%3F%3D%7Bids%3A%5B%5D%2CdefaultId%3Anull%7D%3Bfor(let%20i%20of%20r.children)%7Blet%20l%3Di.type%3D%3D%3D%22stack%22%3Fi.bind%3F.plan%3Avoid%200%3Bl%26%26!n.ids.includes(l)%26%26n.ids.push(l)%7Dlet%20s%3Dr.children%5Br.interaction.defaultIndex%5D%3B!n.defaultId%26%26s%3F.type%3D%3D%3D%22stack%22%26%26(n.defaultId%3Ds.bind%3F.plan%3F%3Fnull)%7Dr.type%3D%3D%3D%22stack%22%26%26r.children.forEach(t)%7Dreturn%20e.pages.forEach(r%3D%3Et(r.root))%2Ca%7Dfunction%20pe(e%2Ca%2Ct)%7Blet%20r%3D%7B%7D%3Bfunction%20n(d)%7Bif(d.hidden)return%3Bif(d.type%3D%3D%3D%22plan_picker%22)%7Blet%20o%3Dt.pickers%5Bd.id%5D%3Br%5Bd.id%5D%3D%7Bids%3Ao%3F.options%3F%3F%5B%5D%2Cdefaults%3Ao%3F.selected%3F%5Bo.selected%5D%3A%5B%5D%2Cremembered%3A%5B%5D%7D%3Breturn%7Dif(d.type!%3D%3D%22stack%22)return%3Blet%20p%3Dd.children.filter(o%3D%3E!o.hidden)%2Cf%3Dd.interaction%3Bif(C(d))%7Blet%20o%3Dr%5Bd.interaction.pickerId%5D%3F%3F%3D%7Bids%3A%5B%5D%2Cdefaults%3A%5B%5D%2Cremembered%3A%5B%5D%7D%2Cc%3Dt.pickers%5Bd.interaction.pickerId%5D%3F.options%3F%3F%5B%5D%3Bfor(let%20m%20of%20p)%7Blet%20w%3Dm.type%3D%3D%3D%22stack%22%3Fm.bind%3F.plan%3Avoid%200%3Bw%26%26c.includes(w)%26%26!o.ids.includes(w)%26%26o.ids.push(w)%2Cw%26%26m.id%3D%3D%3Da%5Bd.id%5D%26%26o.remembered.push(w)%7Dlet%20u%3Dd.children%5Bd.interaction.defaultIndex%5D%3Bu%3F.type%3D%3D%3D%22stack%22%26%26!u.hidden%26%26u.bind%3F.plan%26%26o.defaults.push(u.bind.plan)%7Dif(f%3F.type%3D%3D%3D%22tabs%22)%7Blet%20o%3Dp.find(c%3D%3Ec.id%3D%3D%3Da%5Bd.id%5D)%3F%3Fd.children%5Bf.defaultIndex%5D%3Bo%26%26n(o)%7Delse%20if(f%3F.type%3D%3D%3D%22toggle%22)%7Blet%20o%3Dtypeof%20a%5Bd.id%5D%3D%3D%22boolean%22%3Fa%5Bd.id%5D%3Af.defaultEnabled%2Cc%3Dd.children%5Bo%3F0%3A1%5D%3Bc%26%26n(c)%7Delse%20p.forEach(n)%7Dlet%20s%3Dtypeof%20a.__page%3D%3D%22string%22%3Fa.__page%3Ae.initialPageId%3F%3Fe.pages%5B0%5D%3F.id%2Ci%3De.pages.find(d%3D%3Ed.id%3D%3D%3Ds)%3Bi%26%26n(i.root)%3Blet%20l%3D%7B%7D%3Bfor(let%5Bd%2Cp%5Dof%20Object.entries(r))%7Blet%20f%3Da%5Bd%5D%2Co%3Dp.remembered%5B0%5D%3F%3F(p.ids.includes(t.pickers%5Bd%5D%3F.selected%3F%3F%22%22)%3Ft.pickers%5Bd%5D%3F.selected%3Ap.defaults%5B0%5D)%3Bl%5Bd%5D%3Dtypeof%20f%3D%3D%22string%22%3Fp.ids.includes(f)%3Ff%3A%22%22%3Ao%26%26p.ids.includes(o)%3Fo%3A%22%22%7Dfor(let%20d%20of%20Object.keys(O(e)))l%5Bd%5D%3F%3F%3D%22%22%3Breturn%20l%7Dlet%20F%3Dwindow%3Bfor(let%20e%3D0%3Be%3Cy.hostDepth%3Be%2B%2B)F%3DF.parent%3Blet%20ut%3Dwindow%2Cgt%3D%7Bnone%3A0%2Cxs%3A4%2Csm%3A8%2Cmd%3A12%2Clg%3A20%2Cxl%3A32%7D%2Cft%3D%7Bnone%3A0%2Csm%3A4%2Cmd%3A8%2Clg%3A14%2Cfull%3A9999%7D%2CY%3D%7Bsystem%3A'system-ui%2C-apple-system%2C%22Segoe%20UI%22%2CRoboto%2C%22PingFang%20SC%22%2C%22Hiragino%20Sans%20GB%22%2C%22Microsoft%20YaHei%22%2C%22Noto%20Sans%20CJK%20SC%22%2Csans-serif'%2Cserif%3A'Georgia%2C%22Times%20New%20Roman%22%2C%22Songti%20SC%22%2C%22Noto%20Serif%20CJK%20SC%22%2Cserif'%2Crounded%3A'ui-rounded%2C%22SF%20Pro%20Rounded%22%2C%22Hiragino%20Maru%20Gothic%20ProN%22%2Csystem-ui%2Csans-serif'%2Cmono%3A%22ui-monospace%2CSFMono-Regular%2CMenlo%2CConsolas%2Cmonospace%22%7D%2CBe%3D%7Bstart%3A%22flex-start%22%2Ccenter%3A%22center%22%2Cend%3A%22flex-end%22%2Cstretch%3A%22stretch%22%7D%2Cqe%3D%7Bstart%3A%22flex-start%22%2Ccenter%3A%22center%22%2Cend%3A%22flex-end%22%2Cbetween%3A%22space-between%22%7D%2Cmt%3D%7Bstart%3A%22start%22%2Ccenter%3A%22center%22%2Cend%3A%22end%22%2Cbetween%3A%22stretch%22%7D%2Cht%3D%7Bstart%3A%22start%22%2Ccenter%3A%22center%22%2Cend%3A%22end%22%2Cstretch%3A%22stretch%22%7D%2CUe%3D%7B%221%3A1%22%3A%221%20%2F%201%22%2C%224%3A3%22%3A%224%20%2F%203%22%2C%2216%3A9%22%3A%2216%20%2F%209%22%2C%223%3A1%22%3A%223%20%2F%201%22%7D%2Cyt%3D%60%0A*%2C*%3A%3Abefore%2C*%3A%3Aafter%7Bbox-sizing%3Aborder-box%7D%0Ahtml%2Cbody%7Bmargin%3A0%3Bpadding%3A0%3Bbackground%3Atransparent%7D%0Abody%7Bfont-family%3Avar(--g-font)%3Bcolor%3Avar(--g-text)%3B-webkit-font-smoothing%3Aantialiased%3Btext-rendering%3AoptimizeLegibility%7D%0A%23g-card%7Bbackground%3Avar(--g-bg)%3Bmin-height%3A1px%7D%0A%23g-card%5Bdata-g-presentation%3Dfullscreen%5D%7Bmin-height%3A100vh%3Bdisplay%3Aflex%3Bflex-direction%3Acolumn%7D%0A%23g-card%5Bdata-g-presentation%3Dfullscreen%5D%3E%5Bdata-g-node%5D%7Bflex%3A1%200%20auto%7D%0A%5Bhidden%5D%7Bdisplay%3Anone!important%7D%0A.g-stack%7Bdisplay%3Aflex%3Bmin-width%3A0%7D%0A.g-empty%7Bmin-height%3A48px%3Boutline%3A1px%20dashed%20%23c9cfee%3Boutline-offset%3A-1px%3Bbackground%3A%23eef0fa44%7D%0A.g-empty%3A%3Aafter%7Bcontent%3Aattr(data-g-editor-placeholder)%3Bfont-size%3A12px%3Bcolor%3A%23737b8e%3Balign-self%3Acenter%3Bmargin%3Aauto%3Bpointer-events%3Anone%7D%0A.g-v%7Bflex-direction%3Acolumn%7D%0A.g-h%7Bflex-direction%3Arow%3Bflex-wrap%3Awrap%7D%0A.g-o%7Bdisplay%3Agrid%3Bgrid-template-columns%3Aminmax(0%2C1fr)%7D%0A%2F*%20Each%20authored%20overlay%20layer%20paints%20as%20a%20unit%20in%20document%20order.%20*%2F%0A.g-o%3E*%7Bgrid-area%3A1%2F1%3Bmin-width%3A0%3Bisolation%3Aisolate%7D%0A.g-text%7Bmargin%3A0%3Bwhite-space%3Apre-line%3Boverflow-wrap%3Aanywhere%3Bmin-width%3A0%7D%0A.g-title%7Bfont-size%3A26px%3Bline-height%3A1.2%3Bfont-weight%3A700%3Bletter-spacing%3A-.01em%7D%0A.g-heading%7Bfont-size%3A20px%3Bline-height%3A1.3%3Bfont-weight%3A650%7D%0A.g-body%7Bfont-size%3A15px%3Bline-height%3A1.6%7D%0A.g-caption%7Bfont-size%3A12px%3Bline-height%3A1.5%3Bletter-spacing%3A.02em%7D%0A.g-btn%7Bappearance%3Anone%3Bborder%3A0%3Bmargin%3A0%3Bfont%3Ainherit%3Bfont-size%3A15px%3Bfont-weight%3A600%3Bline-height%3A1.25%3Bpadding%3A12px%2018px%3Bborder-radius%3Avar(--g-radius)%3Bcursor%3Apointer%3Bmin-height%3A44px%3Btext-align%3Acenter%3Boverflow-wrap%3Aanywhere%7D%0A.g-btn-primary%7Bbackground%3Avar(--g-primary)%3Bcolor%3Avar(--g-on-primary)%7D%0A.g-btn.g-stack%20.g-text%7Bcolor%3Ainherit%7D%0A.g-btn-primary%3Ahover%7Bfilter%3Abrightness(1.06)%7D%0A.g-btn-secondary%7Bbackground%3Atransparent%3Bcolor%3Avar(--g-text)%3Bbox-shadow%3Ainset%200%200%200%201px%20var(--g-border)%7D%0A.g-btn-secondary%3Ahover%7Bbackground%3Avar(--g-surface)%7D%0A.g-btn-link%7Bbackground%3Atransparent%3Bcolor%3Avar(--g-muted)%3Bpadding%3A8px%2012px%3Bmin-height%3A36px%3Bfont-weight%3A500%7D%0A.g-btn-link%3Ahover%7Bcolor%3Avar(--g-text)%7D%0A.g-btn%3Afocus-visible%7Boutline%3A3px%20solid%20var(--g-focus)%3Boutline-offset%3A2px%7D%0A.g-img%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Boverflow%3Ahidden%7D%0A.g-img%20img%7Bdisplay%3Ablock%3Bwidth%3A100%25%3Bheight%3Aauto%7D%0A.g-img%5Bdata-aspect%5D%20img%7Bheight%3A100%25%7D%0A.g-divider%7Bborder%3A0%3Bborder-top%3A1px%20solid%20var(--g-border)%3Bmargin%3A0%3Balign-self%3Astretch%7D%0A.g-custom%7Bdisplay%3Ablock%3Bmin-width%3A0%7D%0A.g-missing%7Bopacity%3A.45%7D%0A.g-box%7Bposition%3Aabsolute%3Bpointer-events%3Anone%3Bz-index%3A2147483646%3Bborder%3A1px%20solid%20var(--g-edit)%3Bborder-radius%3A2px%3Bdisplay%3Anone%7D%0A.g-box%5Bdata-kind%3Dselect%5D%7Bborder-width%3A2px%7D%0A.g-box%20span%7Bposition%3Aabsolute%3Bleft%3A-2px%3Bbottom%3A100%25%3Bmargin-bottom%3A2px%3Bpadding%3A1px%206px%3Bfont%3A500%2011px%2F16px%20system-ui%2Csans-serif%3Bcolor%3A%23fff%3Bbackground%3Avar(--g-edit)%3Bborder-radius%3A3px%3Bwhite-space%3Anowrap%3Bmax-width%3A240px%3Boverflow%3Ahidden%3Btext-overflow%3Aellipsis%7D%0A.g-box%5Bdata-below%5D%20span%7Bbottom%3Aauto%3Btop%3A100%25%3Bmargin%3A2px%200%200%7D%0A%5Bdata-g-editor%5D%20.g-btn%7Bcursor%3Adefault%7D%0A.g-data%7B--g-data-ink%3Avar(--g-text)%3B--g-data-muted%3Avar(--g-muted)%3B--g-data-line%3Avar(--g-border)%3B--g-data-surface%3Avar(--g-surface)%3Bwidth%3A100%25%3Bmin-width%3A0%3Bcolor%3Avar(--g-data-ink)%3Bfont-variant-numeric%3Atabular-nums%3Bcontainer-type%3Ainline-size%3Bcontainer-name%3Acustomer-data%7D%0A.g-data-header%7Bdisplay%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Aspace-between%3Bgap%3A12px%3Bmargin-bottom%3A18px%7D%0A.g-data-heading%7Bdisplay%3Aflex%3Balign-items%3Acenter%3Bgap%3A10px%3Bfont-size%3A18px%3Bline-height%3A1.35%3Bfont-weight%3A600%3Bmargin%3A0%3Bletter-spacing%3A-.025em%7D%0A.g-data-icon%7Bdisplay%3Ablock%3Bwidth%3A18px%3Bheight%3A18px%3Bflex%3Anone%7D%0A.g-data-controls%7Bdisplay%3Aflex%3Balign-items%3Acenter%3Bgap%3A8px%3Bflex-wrap%3Awrap%7D%0A.g-data-button%2C.g-data-select%7Bfont%3A500%2013px%2F1.4%20var(--g-font)%3Bcolor%3Avar(--g-data-ink)%3Bbackground%3Atransparent%3Bborder%3A1px%20solid%20color-mix(in%20srgb%2Cvar(--g-data-ink)%2052%25%2Ctransparent)%3Bborder-radius%3A6px%3Bmin-height%3A36px%3Bpadding%3A7px%2010px%3Bcursor%3Apointer%3Btransition%3Abackground%20.15s%2Cborder-color%20.15s%2Ctransform%20.15s%7D%0A.g-data-button%3Ahover%7Bbackground%3Avar(--g-data-surface)%7D%0A.g-data-button%3Afocus-visible%2C.g-data-select%3Afocus-visible%2C.g-data-sources%3Esummary%3Afocus-visible%7Boutline%3A3px%20solid%20var(--g-data-ink)%3Boutline-offset%3A3px%7D%0A.g-data-button%3Adisabled%2C.g-data-select%3Adisabled%7Bopacity%3A.4%3Bcursor%3Adefault%7D%0A.g-data-refresh%7Bborder-color%3Atransparent%3Bwidth%3A32px%3Bmin-height%3A32px%3Bdisplay%3Agrid%3Bplace-items%3Acenter%3Bpadding%3A6px%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data-refresh%3Ahover%7Bcolor%3Avar(--g-data-ink)%7D%0A.g-data-refreshing%20.g-data-icon%7Banimation%3Ag-data-spin%201.2s%20linear%20infinite%7D%0A%40keyframes%20g-data-spin%7Bto%7Btransform%3Arotate(360deg)%7D%7D%0A.g-data-buy%7Bbackground%3Avar(--g-primary)%3Bcolor%3Avar(--g-on-primary)%3Bborder-color%3Atransparent%3Bmin-height%3A40px%3Bfont-size%3A13px%3Bfont-weight%3A600%7D%0A.g-data-buy%3Ahover%7Bbackground%3Avar(--g-primary)%3Bfilter%3Abrightness(.95)%3Btransform%3AtranslateY(-1px)%7D%0A.g-data%5Bdata-preview%3Dtrue%5D%20.g-data-buy%3Adisabled%7Bopacity%3A.8%7D%0A.g-data-note%7Bfont-size%3A13px%3Bline-height%3A1.6%3Bcolor%3Avar(--g-data-muted)%3Bmargin%3A12px%200%3Boverflow-wrap%3Aanywhere%7D%0A.g-data-error%7Bpadding%3A12px%200%3Bborder-block%3A1px%20solid%20var(--g-data-line)%3Bcolor%3Avar(--g-data-ink)%3Bfont-size%3A13px%3Bline-height%3A1.6%7D%0A.g-data-resource%2B.g-data-resource%7Bborder-top%3A1px%20solid%20var(--g-data-line)%3Bpadding-top%3A24px%3Bmargin-top%3A24px%7D%0A.g-data-name%7Bfont-size%3A12px%3Bcolor%3Avar(--g-data-muted)%3Bfont-weight%3A500%3Bmargin%3A0%200%2010px%7D%0A.g-data-balance%7Bdisplay%3Aflex%3Balign-items%3Abaseline%3Bgap%3A14px%3Bflex-wrap%3Awrap%3Bmargin-bottom%3A18px%7D%0A.g-data-number%7Bfont-family%3Avar(--g-data-number-font%2Cvar(--g-font))%3Bfont-size%3Avar(--g-data-number-size%2Cclamp(44px%2C7vw%2C72px))%3Bfont-weight%3Avar(--g-data-number-weight%2C500)%3Bline-height%3A1.08%3Bletter-spacing%3A-.055em%3Boverflow-wrap%3Aanywhere%3Bmax-width%3A100%25%7D%0A.g-data-fraction%7Bfont-size%3A22px%3Bletter-spacing%3A-.025em%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data-unit%7Bfont-size%3A13px%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data-facts%7Bdisplay%3Aflex%3Bgap%3A24px%3Bflex-wrap%3Awrap%3Bfont-size%3A13px%3Bline-height%3A1.6%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data-facts%20strong%7Bfont-weight%3A600%3Bcolor%3Avar(--g-data-ink)%3Bmargin-inline-start%3A6px%7D%0A.g-data-expiry%7Bmargin-inline-start%3Aauto%3Bfont-size%3A12px%7D%0A.g-data-resource-label%7Bfont-size%3A12px%3Bletter-spacing%3A0%3Bcolor%3Avar(--g-data-muted)%3Bpadding-inline-start%3A10px%3Bborder-inline-start%3A1px%20solid%20var(--g-data-line)%3Bfont-weight%3A400%7D%0A.g-data-sources%7Bmargin-top%3A20px%3Bborder-top%3A1px%20solid%20var(--g-data-line)%3Bpadding-top%3A12px%7D%0A.g-data-sources%3Esummary%7Bdisplay%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Aspace-between%3Bgap%3A10px%3Bfont-size%3A13px%3Bfont-weight%3A500%3Bcursor%3Apointer%3Bline-height%3A1.5%3Blist-style%3Anone%3Bborder-radius%3A3px%3Bpadding%3A6px%200%7D%0A.g-data-sources%3Esummary%3A%3A-webkit-details-marker%7Bdisplay%3Anone%7D%0A.g-data-sources%3Esummary%3E.g-data-icon%7Bwidth%3A16px%3Bheight%3A16px%3Btransition%3Atransform%20.18s%7D%0A.g-data-sources%5Bopen%5D%3Esummary%3E.g-data-icon%7Btransform%3Arotate(180deg)%7D%0A.g-data-sources%5Bopen%5D%3E.g-data-list%7Banimation%3Ag-data-reveal%20.18s%20ease-out%7D%0A%40keyframes%20g-data-reveal%7Bfrom%7Bopacity%3A0%3Btransform%3AtranslateY(-3px)%7Dto%7Bopacity%3A1%3Btransform%3AtranslateY(0)%7D%7D%0A.g-data-list%7Blist-style%3Anone%3Bpadding%3A0%3Bmargin%3A0%3Bborder-top%3A1px%20solid%20var(--g-data-line)%7D%0A.g-data-row%7Bdisplay%3Agrid%3Bgrid-template-columns%3Aminmax(120px%2C1.5fr)%20minmax(80px%2C.75fr)%20minmax(90px%2C1fr)%3Bcolumn-gap%3A20px%3Brow-gap%3A10px%3Balign-items%3Astart%3Bpadding%3A18px%200%3Bborder-bottom%3A1px%20solid%20var(--g-data-line)%3Bmin-width%3A0%7D%0A.g-data-row-no-value%2C.g-data-row-no-status%7Bgrid-template-columns%3Aminmax(0%2C1fr)%20auto%3Bcolumn-gap%3A16px%7D%0A.g-data-row-no-value%20.g-data-row-status%7Btext-align%3Aend%7D%0A.g-data-row-main%7Bdisplay%3Aflex%3Balign-items%3Aflex-start%3Bgap%3A12px%3Bmin-width%3A0%7D%0A.g-data-row-copy%7Bmin-width%3A0%7D%0A.g-data-row-mark%7Bdisplay%3Agrid%3Bplace-items%3Acenter%3Bwidth%3A34px%3Bheight%3A34px%3Bflex%3Anone%3Bbackground%3Avar(--g-data-surface)%3Bcolor%3Avar(--g-data-muted)%3Bborder%3A1px%20solid%20var(--g-data-line)%3Bborder-radius%3A50%25%7D%0A.g-data-row-mark%20.g-data-icon%7Bwidth%3A16px%3Bheight%3A16px%7D%0A.g-data-row-label%7Bfont-size%3A15px%3Bfont-weight%3A600%3Bline-height%3A1.5%3Boverflow-wrap%3Aanywhere%3Bmargin%3A0%7D%0A.g-data-row-detail%7Bfont-size%3A13px%3Bline-height%3A1.65%3Bcolor%3Avar(--g-data-muted)%3Bmargin-top%3A4px%3Boverflow-wrap%3Aanywhere%7D%0A.g-data-row-status%7Bfont-size%3A12px%3Bline-height%3A1.6%3Bcolor%3Avar(--g-data-muted)%3Bpadding%3A4px%208px%3Bborder-radius%3A4px%3Bbackground%3Avar(--g-data-surface)%3Bwidth%3Afit-content%3Bjustify-self%3Aend%3Boverflow-wrap%3Aanywhere%7D%0A.g-data-row-value%7Bfont-size%3A15px%3Bfont-weight%3A650%3Btext-align%3Aend%3Bline-height%3A1.5%3Boverflow-wrap%3Aanywhere%7D%0A.g-data-row-extra%7Bgrid-column%3A1%2F-1%3Bdisplay%3Aflex%3Bjustify-content%3Aspace-between%3Balign-items%3Acenter%3Bgap%3A16px%3Bflex-wrap%3Awrap%7D%0A.g-data-footer%7Bdisplay%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Aspace-between%3Bgap%3A16px%3Bmargin-top%3A16px%3Bfont-size%3A12px%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data-empty%7Bdisplay%3Aflex%3Balign-items%3Acenter%3Bgap%3A10px%3Bpadding%3A28px%200%3Bborder-block%3A1px%20solid%20var(--g-data-line)%3Bfont-size%3A13px%3Bline-height%3A1.6%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data-empty%3E.g-data-icon%7Bwidth%3A20px%3Bheight%3A20px%3Bopacity%3A.65%7D%0A.g-data-skeleton%7Bpadding-block%3A8px%3Banimation%3Ag-data-reveal%20.18s%20ease-out%7D%0A.g-data-skeleton-line%7Bdisplay%3Ablock%3Bbackground%3Avar(--g-data-line)%3Bborder-radius%3A4px%3Banimation%3Ag-data-pulse%201.4s%20ease-in-out%20infinite%7D%0A.g-data-skeleton-value%7Bwidth%3A42%25%3Bheight%3Avar(--g-data-number-size%2C64px)%3Bmargin%3A4px%200%2022px%7D%0A.g-data-skeleton-meta%7Bwidth%3A65%25%3Bheight%3A12px%3Bmargin-bottom%3A20px%7D%0A.g-data-skeleton-row%7Bdisplay%3Aflex%3Bjustify-content%3Aspace-between%3Bgap%3A24px%3Bpadding%3A20px%200%3Bborder-block-end%3A1px%20solid%20var(--g-data-line)%7D%0A.g-data-skeleton-row%3E.g-data-skeleton-line%3Afirst-child%7Bwidth%3A52%25%3Bheight%3A14px%7D%0A.g-data-skeleton-row%3E.g-data-skeleton-line%3Alast-child%7Bwidth%3A18%25%3Bheight%3A14px%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-skeleton-value%7Bheight%3Avar(--g-data-number-size%2C34px)%3Bmargin-bottom%3A16px%7D%0A.g-data-recovery%7Bmargin%3A12px%200%7D%0A.g-data-live-status%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A-1px%3Boverflow%3Ahidden%3Bclip-path%3Ainset(50%25)%3Bwhite-space%3Anowrap%7D%0A%40keyframes%20g-data-pulse%7B50%25%7Bopacity%3A.4%7D%7D%0A.g-data-updated%7Bfont-size%3A11px%3Bmargin-bottom%3A0%7D%0A.g-data-preview%7Bfont-size%3A11px%3Bcolor%3Avar(--g-data-muted)%3Bborder%3A1px%20solid%20var(--g-data-line)%3Bborder-radius%3A4px%3Bpadding%3A3px%206px%3Bwhite-space%3Anowrap%7D%0A.g-data%5Bdata-source%3Dcredit_balance%5D%20.g-data-heading%7Bfont-size%3A15px%3Bfont-weight%3A500%3Bletter-spacing%3A0%7D%0A.g-data%5Bdata-source%3Dcredit_balance%5D%20.g-data-header%7Bmargin-bottom%3A18px%7D%0A.g-data%5Bdata-source%3Dcredit_balance%5D%20.g-data-updated%7Bmargin%3A0%3Bfont-size%3A11px%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data%5Bdata-source%3Dcredit_balance%5D%20.g-data-sources%3Esummary%7Bmax-width%3A100%25%7D%0A.g-data-table-head%7Bdisplay%3Agrid%3Bgrid-template-columns%3Aminmax(0%2C1fr)%2092px%20minmax(120px%2C.45fr)%3Bgap%3A16px%3Bpadding%3A10px%200%3Bfont-size%3A12px%3Bcolor%3Avar(--g-data-muted)%3Bborder-block%3A1px%20solid%20var(--g-data-line)%7D%0A.g-data-table-head%3Espan%3Anot(%3Afirst-child)%7Btext-align%3Aend%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-list%7Bborder-top%3A0%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%2092px%20minmax(120px%2C.45fr)%3Bgap%3A16px%3Bpadding%3A18px%200%3Balign-items%3Acenter%3Btransition%3Abackground%20.15s%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row%3Ahover%7Bbackground%3Avar(--g-data-surface)%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row-status%7Bgrid-column%3A2%3Bgrid-row%3A1%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row-extra%7Bgrid-column%3A3%3Bgrid-row%3A1%3Bjustify-content%3Aflex-end%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-facts%7Bflex-direction%3Acolumn%3Balign-items%3Aflex-end%3Bgap%3A8px%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-facts%3Espan%7Bdisplay%3Aflex%3Bflex-direction%3Acolumn-reverse%3Balign-items%3Aflex-end%3Bfont-size%3A12px%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-facts%20strong%7Bfont-size%3A15px%3Bmargin-inline-start%3A0%3Bfont-weight%3A600%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-row%7Bborder%3A0%3Bpadding%3A16px%200%3Bgrid-template-columns%3Aminmax(0%2C1fr)%20auto%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-list%7Bborder%3A0%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-row%2B.g-data-row%7Bborder-top%3A1px%20solid%20var(--g-data-line)%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-row-value%7Bfont-size%3A22px%3Bletter-spacing%3A-.04em%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-row-extra%7Bdisplay%3Ablock%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-buy%7Bwidth%3A100%25%3Bmargin-top%3A2px%7D%0A.g-data%5Bdata-source%3Dcredit_packs%5D%20.g-data-header%7Bmargin-bottom%3A4px%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-header%7Bmargin-bottom%3A10px%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-heading%7Bfont-size%3A14px%3Bcolor%3Avar(--g-data-muted)%3Bletter-spacing%3A0%3Bfont-weight%3A500%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-number%7Bfont-size%3Avar(--g-data-number-size%2C34px)%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-row%7Bpadding%3A10px%200%3Bcolumn-gap%3A12px%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%20auto%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-row-status%7Bgrid-column%3A1%3Bgrid-row%3A2%3Bjustify-self%3Astart%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-row-value%7Bgrid-column%3A2%3Bgrid-row%3A1%7D%0A.g-data%5Bdata-layout%3Dcompact%5D%20.g-data-updated%7Bposition%3Aabsolute%3Bwidth%3A1px%3Bheight%3A1px%3Bpadding%3A0%3Bmargin%3A-1px%3Boverflow%3Ahidden%3Bclip-path%3Ainset(50%25)%3Bwhite-space%3Anowrap%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-table-head%7Bdisplay%3Anone%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%2092px%20minmax(120px%2C.45fr)%3Bgap%3A16px%3Bpadding%3A14px%200%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row-status%7Bgrid-column%3A2%3Bgrid-row%3A1%7D%0A.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row-extra%7Bgrid-column%3A3%3Bgrid-row%3A1%3Bjustify-content%3Aflex-end%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dcompact%5D%20.g-data-list%7Bborder%3A0%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row%7Bpadding%3A0%3Bborder%3A0%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row-status%7Bgrid-column%3A2%3Bgrid-row%3A1%3Bjustify-self%3Aend%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dcompact%5D%20.g-data-header%7Bmargin-bottom%3A6px%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-heading%7Bfont-size%3A14px%3Bfont-weight%3A500%3Bcolor%3Avar(--g-data-muted)%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-list%7Bborder-top%3A0%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-row%7Bpadding%3A12px%200%2022px%3Bcolumn-gap%3A24px%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-label%7Bfont-family%3Avar(--g-data-display-font%2Cvar(--g-font))%3Bfont-size%3Avar(--g-data-display-size%2C30px)%3Bfont-weight%3Avar(--g-data-display-weight%2C600)%3Bletter-spacing%3A-.035em%3Bline-height%3A1.25%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-detail%7Bfont-size%3A13px%3Bmargin-top%3A12px%7D%0A.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-status%7Bfont-size%3A12px%3Bpadding%3A5px%209px%7D%0A.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-row%7Bpadding%3A24px%200%3Bgrid-template-columns%3Aminmax(0%2C1fr)%20140px%20180px%3Bgap%3A24px%3Balign-items%3Acenter%7D%0A.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-label%7Bfont-family%3Avar(--g-data-display-font%2Cvar(--g-font))%3Bfont-size%3A22px%3Bfont-weight%3A600%7D%0A.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-value%7Bfont-size%3A24px%3Bfont-weight%3A500%3Bletter-spacing%3A-.035em%7D%0A.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-status%7Bfont-size%3A12px%3Bpadding%3A5px%209px%7D%0A%40container%20customer-data%20(min-width%3A600px)%7B%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%2C.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%7Bdisplay%3Agrid%3Bgrid-template-columns%3Arepeat(auto-fit%2Cminmax(250px%2C1fr))%3Bgap%3A24px%3Bborder%3A0%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%2C.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%3Bgrid-template-rows%3Aauto%20auto%201fr%3Bgap%3A20px%3Bpadding%3A24px%3Bborder%3A1px%20solid%20var(--g-data-line)%3Bborder-radius%3A14px%3Balign-items%3Astart%3Balign-content%3Astart%3Btransition%3Aborder-color%20.16s%2Cbackground%20.16s%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3Ahover%7Bborder-color%3Avar(--g-data-ink)%3Bbackground%3Avar(--g-data-surface)%7D%0A%20%20.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%7Bpadding%3A24px%200%3Bborder%3A0%3Bborder-top%3A1px%20solid%20var(--g-data-ink)%3Bborder-radius%3A0%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-main%2C.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-main%7Bgrid-column%3A1%3Bgrid-row%3A1%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-value%2C.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-value%7Bgrid-column%3A1%3Bgrid-row%3A2%3Btext-align%3Astart%3Bfont-size%3A30px%3Bline-height%3A1.3%3Bletter-spacing%3A-.035em%3Bfont-weight%3A500%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-extra%7Bgrid-column%3A1%3Bgrid-row%3A3%3Balign-self%3Aend%7D%0A%20%20.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-status%7Bgrid-column%3A1%3Bgrid-row%3A3%3Bjustify-self%3Astart%3Balign-self%3Aend%7D%0A%20%20.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%3E.g-data-list%3E.g-data-row%3E.g-data-row-extra%7Bgrid-column%3A1%3Bgrid-row%3Aauto%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%20.g-data-header%2C.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-header%7Bmargin-bottom%3A20px%7D%0A%20%20.g-data%5Bdata-source%3Dcredit_packs%5D%5Bdata-layout%3Dfull%5D%20.g-data-buy%7Bmin-height%3A44px%3Bborder-radius%3A8px%7D%0A%7D%0A%40media(max-width%3A560px)%7B.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%20auto%3Bgap%3A12px%7D.g-data%5Bdata-source%3Dcustomer_plans%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-value%7Bfont-size%3A20px%7D.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dfull%5D%20.g-data-row-label%7Bfont-size%3Avar(--g-data-display-size%2C24px)%7D%7D%0A%40media(max-width%3A560px)%7B.g-data-header%7Bgap%3A10px%7D.g-data-controls%7Bgap%3A6px%7D.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%20auto%3Bcolumn-gap%3A12px%7D.g-data-row-status%7Bgrid-column%3A1%3Bgrid-row%3A2%7D.g-data-row-value%7Bgrid-column%3A2%3Bgrid-row%3A1%7D.g-data-row-extra%7Bgrid-column%3A1%2F-1%7D.g-data-facts%7Bgap%3A12px%7D.g-data-button%2C.g-data-select%7Bmin-height%3A40px%3Bpadding%3A8px%2010px%7D.g-data-refresh%7Bwidth%3A40px%3Bpadding%3A10px%7D.g-data-sources%3Esummary%7Bmin-height%3A36px%7D.g-data-table-head%7Bdisplay%3Anone%7D.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%20minmax(95px%2C.45fr)%3Bgap%3A12px%7D.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row-status%7Bgrid-column%3A1%3Bgrid-row%3A2%3Bmargin-inline-start%3A46px%3Bjustify-self%3Astart%7D.g-data%5Bdata-source%3Dcredit_transactions%5D%20.g-data-row-extra%7Bgrid-column%3A2%3Bgrid-row%3A1%2F3%7D.g-data%5Bdata-source%3Dmembership%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row-status%7Bgrid-column%3A2%3Bgrid-row%3A1%7D%7D%0A%40media(max-width%3A560px)%7B.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row%7Bgrid-template-columns%3Aminmax(0%2C1fr)%20minmax(95px%2C.45fr)%3Bgap%3A12px%7D.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row-status%7Bgrid-column%3A1%3Bgrid-row%3A2%3Bmargin-inline-start%3A46px%3Bjustify-self%3Astart%7D.g-data%5Bdata-source%3Dcredit_transactions%5D%5Bdata-layout%3Dcompact%5D%20.g-data-row-extra%7Bgrid-column%3A2%3Bgrid-row%3A1%2F3%7D%7D%0A%40media(max-width%3A560px)%7B.g-data%5Bdata-source%3Dmembership%5D%20.g-data-row-no-value%20.g-data-row-status%7Bgrid-column%3A2%3Bgrid-row%3A1%3Balign-self%3Astart%3Bjustify-self%3Aend%7D%7D%0A%40media%20(prefers-reduced-motion%3Areduce)%7B*%2C*%3A%3Abefore%2C*%3A%3Aafter%7Banimation%3Anone!important%3Btransition%3Anone!important%7D%7D%0A%60%3Bfunction%20X()%7Breturn%20Object.create(null)%7Dlet%20k%3Dnull%2C%24%2CAe%3Dnew%20Set%2CE%2Cee%2CZ%3Dnew%20Map%2Cle%3Dnew%20Map%2C_e%3Dnew%20Map%2Cte%3Dnew%20Map%2Cue%3D0%2CH%3Dnew%20Map%2Cge%3Dnew%20WeakMap%2Cae%3D0%2Cre%3D0%2Cfe%2CB%3Dnull%2Ch%3DX()%2Cie%3DX()%2CG%3DX()%2CP%3D%22%22%2CJe%3D!1%2CNe%3D-1%2CIe%3D!1%2CVe%3D%22%22%2Cme%3Dnull%2CLe%3Dnull%2Che%3Dnull%2CI%3Ddocument.createElement(%22div%22)%3BI.id%3D%22g-card%22%3Blet%20ye%3Ddocument.createElement(%22div%22)%2Cce%3Ddocument.createElement(%22div%22)%3Bye.className%3Dce.className%3D%22g-box%22%2Cce.dataset.kind%3D%22select%22%2Cye.append(document.createElement(%22span%22))%2Cce.append(document.createElement(%22span%22))%3Bfunction%20N(e)%7Blet%20a%3D%7B...e%2Cchannel%3Ay.channel%7D%3Btry%7BF.postMessage(a%2Cy.parentOrigin)%7Dcatch%7B%7D%7Dfunction%20Te(e)%7Blet%20a%3DparseInt(e.slice(1)%2C16)%3Breturn%5Ba%3E%3E16%26255%2Ca%3E%3E8%26255%2Ca%26255%5D%7Dfunction%20be(e%2Ca%2Ct)%7Blet%20r%3DTe(e)%2Cn%3DTe(a)%2Cs%3Dr.map((i%2Cl)%3D%3EMath.round(i*t%2Bn%5Bl%5D*(1-t)))%3Breturn%60rgb(%24%7Bs%5B0%5D%7D%2C%24%7Bs%5B1%5D%7D%2C%24%7Bs%5B2%5D%7D)%60%7Dfunction%20bt(e)%7Blet%5Ba%2Ct%2Cr%5D%3DTe(e).map(n%3D%3E%7Blet%20s%3Dn%2F255%3Breturn%20s%3C%3D.03928%3Fs%2F12.92%3A((s%2B.055)%2F1.055)**2.4%7D)%3Breturn%20.2126*a%2B.7152*t%2B.0722*r%7Dfunction%20ne(e)%7Breturn%20typeof%20e!%3D%22string%22%3F%22%22%3Ae.startsWith(%22%23%22)%3Fe%3A%60var(--g-%24%7Be%3D%3D%3D%22background%22%3F%22bg%22%3Ae%7D)%60%7Dfunction%20xt(e)%7Blet%20a%3De.theme%2Ct%3Ddocument.documentElement.style%2Cr%3Dbt(a.primary)%2Cn%3D(r%2B.05)%2F.05%3E1.05%2F(r%2B.05)%3F%22%23111318%22%3A%22%23FFFFFF%22%3Bt.setProperty(%22--g-primary%22%2Ca.primary)%2Ct.setProperty(%22--g-on-primary%22%2Cn)%2Ct.setProperty(%22--g-bg%22%2Ca.background)%2Ct.setProperty(%22--g-text%22%2Ca.text)%2Ct.setProperty(%22--g-muted%22%2Cbe(a.text%2Ca.background%2C.62))%2Ct.setProperty(%22--g-surface%22%2Cbe(a.text%2Ca.background%2C.05))%2Ct.setProperty(%22--g-border%22%2Cbe(a.text%2Ca.background%2C.16))%2Ct.setProperty(%22--g-focus%22%2Cbe(a.primary%2Ca.background%2C.45))%2Ct.setProperty(%22--g-radius%22%2C%60%24%7Bft%5Ba.radius%5D%3F%3F8%7Dpx%60)%2Ct.setProperty(%22--g-font%22%2CY%5Ba.font%5D%3F%3FY.system)%2Ct.setProperty(%22--g-edit%22%2C%22%232C3C96%22)%7Dfunction%20_(e)%7Blet%20a%3Dk%3F.strings.locales%5BP%5D%3F.%5Be%5D%3Breturn%20a%26%26a.trim()%3F%7Bvalue%3Aa%2Cmissing%3A!1%7D%3A%7Bvalue%3Ak%3F.strings.locales%5Bk.strings.defaultLocale%5D%3F.%5Be%5D%3F%3F%22%22%2Cmissing%3A!0%7D%7Dfunction%20q(e)%7Blet%20a%3DE%3F.nodes%5Be%5D%3Bif(!a)return%3Blet%20t%3Da.picker%3Fh%5Ba.picker%5D%3F%3FE%3F.pickers%5Ba.picker%5D%3F.selected%3Avoid%200%3Bif(!(a.picker%26%26typeof%20t%3D%3D%22string%22%26%26!E%3F.pickers%5Ba.picker%5D%3F.options.includes(t)))return%20typeof%20t%3D%3D%22string%22%3Fa.byPlan%3F.%5Bt%5D%3F%3Fa.base%3Aa.base%7Dfunction%20K()%7Breturn%7B...k%3F.surface%3D%3D%3D%22paywall%22%26%26B%3F%7B__page%3AB%7D%3A%7B%7D%2C...Object.fromEntries(Object.entries(h).filter(e%3D%3E!Array.isArray(e%5B1%5D)))%7D%7Dfunction%20Me(e)%7Breturn%20%24%26%26Object.hasOwn(%24.answers%2Ce)%26%26%24.bindings.some(a%3D%3Ea.variable%3D%3D%3De)%3F%24.answers%5Be%5D%3A%24%3F.values%3F.%5Be%5D%7Dfunction%20Ke(e)%7Blet%20a%3Dte.get(e)%3Bif(a)return%20a%3Blet%20t%3D%5B...new%20Set(%5B...e.matchAll(%2F%5C%7B%5C%7B%5Cs*variables%5C.(%5B%5E%7B%7D%5D%2B%3F)%5Cs*%5C%7D%5C%7D%2Fg)%5D.map(r%3D%3Er%5B1%5D.trim()))%5D%3Bif(e.length%3C%3D1e6)for(te.set(e%2Ct)%2Cue%2B%3De.length%3Bte.size%3E128%7C%7Cue%3E1e6%3B)%7Blet%20r%3Dte.keys().next().value%3Bte.delete(r)%2Cue-%3Dr.length%7Dreturn%20t%7Dfunction%20%24e(e)%7Blet%20a%3De.html%5BP%5D%3Breturn%20q(e.id)%3F.html%3F%3FE%3F.nodes%5Be.id%5D%3F.base.html%3F%3F(a%26%26a.trim()%3Fa%3Ae.html%5Bk%3F.strings.defaultLocale%3F%3F%22%22%5D%3F%3F%22%22)%7Dfunction%20We()%7Bte.clear()%2Cue%3D0%3Blet%20e%3D%5B%5D%2Ca%3D%5B%5D%2Ct%3Dl%3D%3E%7Bif(!l.hidden)%7Bif(l.type%3D%3D%3D%22stack%22)l.children.forEach(t)%3Belse%20if(l.type%3D%3D%3D%22custom_html%22)%7Be.push(%24e(l))%3Blet%20d%3DE%3F.nodes%5Bl.id%5D%3Bfor(let%20p%20of%5Bd%3F.base%2C...Object.values(d%3F.byPlan%3F%3F%7B%7D)%5D)p%3F.html!%3D%3Dvoid%200%26%26a.push(p.html)%7D%7D%7D%2Cr%3DB%3F%3Fk%3F.initialPageId%2Cn%3Dk%3F.pages%3F%3F%5B%5D%2Cs%3Dnew%20Set%3Bfor(let%20l%20of%5B...n.filter(d%3D%3Ed.id%3D%3D%3Dr)%2C...n.filter(d%3D%3Ed.id!%3D%3Dr)%5D)%7Be.length%3Da.length%3D0%2Ct(l.root)%3Bfor(let%20d%20of%5B...e%2C...a%5D)s.add(d)%7Dlet%20i%3Dnew%20Set(%5B...s%5D.map(ze))%3Bfor(let%5Bl%2Cd%5Dof%20H)i.has(l)%7C%7CYe(l%2Cd)%3Bfor(let%20l%20of%20s)Ke(l)%2C!H.has(ze(l))%26%26(H.size%3E%3D32%7C%7Cre%2B500%3E4e3%7C%7Cae%2Bl.length%2B2%3E262144%7C%7CRe(l%2C!0))%7Dfunction%20ze(e)%7Breturn(y.mode%3D%3D%3D%22live%22%26%26%24%3F%22b%3A%22%3A%22s%3A%22)%2Be%7Dfunction%20Ye(e%2Ca)%7BH.delete(e)%2Cae-%3De.length%2Cre-%3Da.elements%7Dfunction%20Re(e%2Ca%3D!1)%7Blet%20t%3Dze(e)%2Cr%3DH.get(t)%3Bif(r)return%20H.delete(t)%2CH.set(t%2Cr)%2Cr%3Blet%20n%3D%22data-indiana-html-binding%22%3Bfor(%3Be.includes(n)%3B)n%2B%3D%22-next%22%3Blet%20s%3D%5B%5D%2Ci%3Dy.mode%3D%3D%3D%22live%22%26%26!!%24%2Cl%3D%2F%5C%7B%5C%7B%5Cs*variables%5C.(%5B%5E%7B%7D%5D%2B%3F)%5Cs*%5C%7D%5C%7D%2Fg%2Cd%3Di%3Fe.replace(l%2C(u%2Cm)%3D%3E(s.push(m.trim())%2C%60%3Cspan%20%24%7Bn%7D%3D%22%24%7Bs.length-1%7D%22%3E%3C%2Fspan%3E%60))%3Ae%2Cp%3Ddocument.createElement(%22template%22)%3Bp.innerHTML%3D%60%3Cdiv%3E%24%7Bd%7D%3C%2Fdiv%3E%60%3Blet%20f%3Dp.content.firstElementChild%2Co%3D%5B%5D%3Bfor(let%20u%20of%20f.querySelectorAll(%60%5B%24%7Bn%7D%5D%60))%7Blet%20m%3Ddocument.createTextNode(%22%22)%2Cw%3Ds%5BNumber(u.getAttribute(n))%5D%3Bu.replaceWith(m)%3Blet%20S%3D%5B%5D%3Bfor(let%20v%3Dm%3Bv!%3D%3Df%3B)%7Blet%20L%3Dv.parentNode%3BS.unshift(Array.prototype.indexOf.call(L.childNodes%2Cv))%2Cv%3DL%7Do.push(%7Bpath%3AS%2Cvariable%3Aw%7D)%7Dlet%20c%3D%7Bkey%3At%2Ccontent%3Af%2CinUse%3A!1%2Cbindings%3Ao%2Cunresolved%3A(i%3Fe.replace(l%2C%22%22)%3Ae).includes(%22%7B%7B%22)%2Celements%3Af.getElementsByTagName(%22*%22).length%7D%3Bif(t.length%3C%3D262144%26%26c.elements%3C%3D4e3)%7Bif(!a)for(%3BH.size%3E%3D32%7C%7Cae%2Bt.length%3E262144%7C%7Cre%2Bc.elements%3E4e3%3B)%7Blet%5Bu%2Cm%5D%3DH.entries().next().value%3BYe(u%2Cm)%7DH.size%3C32%26%26ae%2Bt.length%3C%3D262144%26%26re%2Bc.elements%3C%3D4e3%26%26(H.set(t%2Cc)%2Cae%2B%3Dt.length%2Cre%2B%3Dc.elements)%7Dreturn%20c%7Dfunction%20Ce(e)%7Blet%20a%3De.template%3Bif(a%3F.content%3D%3D%3De.body%26%26H.get(a.key)%3D%3D%3Da)%7Bfor(let%20t%20of%20e.bindings)t.node.data%3D%22%22%3Ba.inUse%3D!1%2Ce.parked%3D!0%7De.template%3Dnull%7Dfunction%20Ze(e%2Ca)%7Blet%20t%3Dge.get(e)%2Cr%3D%24e(a)%2Cn%3Dy.mode%3D%3D%3D%22live%22%26%26!!%24%2Cs%3Dt.source!%3D%3Dr%7C%7Ct.bound!%3D%3Dn%2Ci%3Bs%26%26(Ce(t)%2Ci%3DRe(r)%2Ct.source%3Dr%2Ct.bound%3Dn%2Ct.unresolved%3Di.unresolved%2Ct.variables%3D%5B...new%20Set(i.bindings.map(o%3D%3Eo.variable))%5D)%3Blet%20l%3Dnew%20Map%2Cd%3Dt.unresolved%3Bif(n)for(let%20o%20of%20t.variables)%7Blet%20c%3DMe(o)%3Bif(c%3D%3Dnull)%7Bd%3D!0%3Bcontinue%7Dlet%20u%3DString(typeof%20c%3D%3D%22object%22%3FJSON.stringify(c)%3Ac).replace(%2F%5Cr%5Cn%3F%2Fg%2C%60%0A%60)%3Bu.includes(%22%7B%7B%22)%26%26(d%3D!0)%2Cl.set(o%2Cu)%7Dif(d%26%26y.mode%3D%3D%3D%22live%22)%7Bif(Ce(t)%2Ct.parked)%7Blet%20c%3Ddocument.createElement(%22div%22)%3Bt.body.replaceWith(c)%2Ct.body%3Dc%2Ct.parked%3D!1%7Dlet%20o%3D_(a.fallback%3F%3F%22%22).value.replace(%2F%5Cr%5Cn%3F%2Fg%2C%60%0A%60)%3B(!t.fallback%7C%7Ct.body.textContent!%3D%3Do)%26%26(t.body.textContent%3Do)%2Ct.fallback%3D!0%2Ct.bindings%3D%5B%5D%7Delse%20if(s%7C%7Ct.fallback%7C%7C!t.initialized)%7Bi%3F%3F%3DRe(r)%3Blet%20o%3D!i.inUse%2Cc%3Do%3Fi.content%3Ai.content.cloneNode(!0)%3Bt.bindings%3Di.bindings.map((%7Bpath%3Au%2Cvariable%3Am%7D)%3D%3E%7Blet%20w%3Dc%3Bfor(let%20S%20of%20u)w%3Dw.childNodes%5BS%5D%3Breturn%7Bnode%3Aw%2Cvariable%3Am%7D%7D)%3Bfor(let%20u%20of%20t.bindings)u.node.data%3Dl.get(u.variable)%3Bt.body.replaceWith(c)%2Ct.body%3Dc%2Ct.parked%3D!1%2Co%26%26H.get(i.key)%3D%3D%3Di%3F(i.inUse%3D!0%2Ct.template%3Di)%3At.template%3Dnull%3Bfor(let%20u%20of%20t.body.querySelectorAll(%22img%22))u.addEventListener(%22load%22%2Cke)%3Bt.fallback%3D!1%2Ct.initialized%3D!0%7Delse%20for(let%20o%20of%20t.bindings)%7Blet%20c%3Dl.get(o.variable)%3Bo.node.data!%3D%3Dc%26%26(o.node.data%3Dc)%7Dlet%20p%3Dq(a.id)%2Cf%3Da.html%5BP%5D%3Be.classList.toggle(%22g-missing%22%2Cy.mode%3D%3D%3D%22editor%22%26%26(!!p%3F.missing%3F.length%7C%7C!p%26%26r.includes(%22%7B%7B%22)%7C%7C!(f%26%26f.trim())))%7Dfunction%20se(e%2Ca%2Ct)%7Blet%20r%3Dq(e.id)%2Cn%3Dr%3F.%5Ba%5D%2Cs%3Dn!%3D%3Dvoid%200%3F%7Bvalue%3An%2Cmissing%3A!!r%3F.missing%3F.length%7D%3A_(t)%3Bif(y.mode%3D%3D%3D%22live%22%26%26%24)%7Blet%20i%3D!1%2Cl%3Ds.value.replace(%2F%5C%7B%5C%7B%5Cs*variables%5C.(%5B%5E%7B%7D%5D%2B%3F)%5Cs*%5C%7D%5C%7D%2Fg%2C(d%2Cp)%3D%3E%7Bp%3Dp.trim()%3Blet%20f%3DMe(p)%3Breturn%20f%3D%3Dnull%7C%7Cf%3D%3D%3D%22%22%7C%7CArray.isArray(f)%26%26!f.length%3F(i%3D!0%2C%22%22)%3AArray.isArray(f)%3Ff.join(%22%2C%20%22)%3AString(f)%7D)%3Bif(i)return%7Bvalue%3Ae.fallback%3F_(e.fallback).value%3A%22%22%2Cmissing%3A!0%7D%3Bif(!l.includes(%22%7B%7B%22))return%7Bvalue%3Al%2Cmissing%3As.missing%7D%7Dreturn%20n!%3D%3Dvoid%200%3Fs%3As.value.includes(%22%7B%7B%22)%26%26y.mode%3D%3D%3D%22live%22%3F%7Bvalue%3Ae.fallback%3F_(e.fallback).value%3A%22%22%2Cmissing%3A!0%7D%3A%7Bvalue%3As.value%2Cmissing%3As.missing%7C%7Cs.value.includes(%22%7B%7B%22)%7D%7Dfunction%20wt(e)%7Bif(e.name)return%20e.name%3Blet%20a%3Dy.editorMessages%3F.nodeTypes%3F.%5Be.type%5D%3Breturn%20y.mode%3D%3D%3D%22editor%22%26%26typeof%20a%3D%3D%22string%22%3Fa%3A%7Bstack%3A%22%5Cu5BB9%5Cu5668%22%2Ctext%3A%22%5Cu6587%5Cu672C%22%2Cimage%3A%22%5Cu56FE%5Cu7247%22%2Cbutton%3A%22%5Cu6309%5Cu94AE%22%2Cdivider%3A%22%5Cu5206%5Cu9694%5Cu7EBF%22%2Cspacer%3A%22%5Cu7559%5Cu767D%22%2Ccustom_html%3A%22%5Cu81EA%5Cu5B9A%5Cu4E49%20HTML%22%2Cprice%3A%22%5Cu4EF7%5Cu683C%22%2Ccoupon_code%3A%22%5Cu4F18%5Cu60E0%5Cu7801%22%2Ccountdown%3A%22%5Cu5012%5Cu8BA1%5Cu65F6%22%2Cplan_picker%3A%22%5Cu771F%5Cu5B9E%5Cu5957%5Cu9910%5Cu9009%5Cu62E9%22%7D%5Be.type%5D%3F%3Fe.type%7Dfunction%20vt(e%2Ca)%7Bif(a.type%3D%3D%3D%22color%22)e.background%3D%22none%22%2Ce.backgroundColor%3Dne(a.color)%3Belse%20if(a.type%3D%3D%3D%22linear%22)%7Blet%20t%3Da.stops.map(r%3D%3E%60%24%7Bne(r.color)%7D%20%24%7BNumber(r.at)%7D%25%60).join(%22%2C%22)%3Be.backgroundColor%3D%22transparent%22%2Ce.backgroundImage%3D%60linear-gradient(%24%7BNumber(a.angle)%7Ddeg%2C%24%7Bt%7D)%60%7Delse%20if(a.type%3D%3D%3D%22image%22%26%26typeof%20a.src%3D%3D%22string%22)%7Blet%20t%3D%2F%5Edata%3Aimage%5C%2F(%3F%3Asvg%5C%2Bxml%7Cjpeg%7Cpng)%3Bbase64%2C%5BA-Za-z0-9%2B%2F%5D%2B%3D%7B0%2C2%7D%24%2F.test(a.src)%3Fa.src%3Aa.src.replace(%2F%5B%5EA-Za-z0-9%5C-._~%3A%2F%3F%23%5B%5C%5D%40!%24%26*%2B%3B%3D%25%5D%2Fgu%2Cn%3D%3En.length%3D%3D%3D1%26%26n.charCodeAt(0)%3C128%3F%60%25%24%7Bn.charCodeAt(0).toString(16).toUpperCase().padStart(2%2C%220%22)%7D%60%3AencodeURIComponent(n))%3Be.backgroundImage%3D%60url(%22%24%7Bt%7D%22)%60%3Blet%20r%3Da.position%3Be.backgroundPosition%3Dr%3F%60%24%7Br.x%7D%25%20%24%7Br.y%7D%25%60%3A%22center%22%2Ce.backgroundSize%3Da.fit%3D%3D%3D%22contain%22%3F%22contain%22%3A%22cover%22%2Ce.backgroundRepeat%3D%22no-repeat%22%7D%7Dfunction%20Ge(e)%7Breturn%60%24%7BNumber(e.top)%7Dpx%20%24%7BNumber(e.right)%7Dpx%20%24%7BNumber(e.bottom)%7Dpx%20%24%7BNumber(e.left)%7Dpx%60%7Dfunction%20Qe(e%2Ca%2Ct%2Cr%2Cn)%7Bif(a%3D%3D%3Dvoid%200)return%3Blet%20s%3Dr%3F.direction%3F%3F%22vertical%22%2Ci%3Ds!%3D%3D%22overlay%22%26%26t%3D%3D%3D%22width%22%3D%3D(s%3D%3D%3D%22horizontal%22)%2Cl%3Dt%3D%3D%3D%22width%22%3F%22minWidth%22%3A%22minHeight%22%3Ba%3D%3D%3D%22fill%22%3Fs%3D%3D%3D%22overlay%22%3F(e.style%5Bt%5D%3D%22100%25%22%2Ce.style%5Bt%3D%3D%3D%22width%22%3F%22justifySelf%22%3A%22alignSelf%22%5D%3D%22stretch%22)%3Ai%3F(e.style.flex%3D%221%201%200%22%2Ce.style%5Bl%5D%3D%220%22)%3A(e.style.alignSelf%3D%22stretch%22%2Ce.style%5Bt%5D%3D%22auto%22)%3Aa%3D%3D%3D%22fit%22%3F(e.style%5Bt%5D%3D%22fit-content%22%2Ct%3D%3D%3D%22width%22%26%26(e.style.maxWidth%3D%22100%25%22)%2C!i%26%26s!%3D%3D%22overlay%22%26%26(!r%7C%7Cr.align%3D%3D%3D%22stretch%22)%26%26(e.style.alignSelf%3Dn%3D%3D%3D%22center%22%3F%22center%22%3An%3D%3D%3D%22end%22%3F%22flex-end%22%3A%22flex-start%22))%3Atypeof%20a%3D%3D%22number%22%26%26(e.style%5Bt%5D%3D%60%24%7Ba%7Dpx%60%2Ct%3D%3D%3D%22width%22%26%26(e.style.maxWidth%3D%22100%25%22)%2Ci%26%26(e.style.flex%3D%220%200%20auto%22))%7Dfunction%20oe(e%2Ca%2Ct)%7Blet%20r%3Da.style%2Cn%3Dr.text%3F%3F%7B%7D%2Cs%3De.style%3Bif(a.type%3D%3D%3D%22customer_data%22%26%26(n.font%26%26s.setProperty(%22--g-data-display-font%22%2CY%5BString(n.font)%5D%3F%3FY.system)%2Ca.data.source%3D%3D%3D%22membership%22%26%26(typeof%20n.size%3D%3D%22number%22%26%26s.setProperty(%22--g-data-display-size%22%2C%60clamp(%24%7BMath.min(n.size%2C28)%7Dpx%2C%20%24%7Bn.size%2F12%7Dvw%2C%20%24%7Bn.size%7Dpx)%60)%2Ctypeof%20n.weight%3D%3D%22number%22%26%26s.setProperty(%22--g-data-display-weight%22%2CString(n.weight))))%2Ca.type%3D%3D%3D%22customer_data%22%26%26a.data.source%3D%3D%3D%22credit_balance%22%26%26(typeof%20n.size%3D%3D%22number%22%26%26s.setProperty(%22--g-data-number-size%22%2C%60clamp(%24%7BMath.min(n.size%2C48)%7Dpx%2C%20%24%7Bn.size%2F10%7Dvw%2C%20%24%7Bn.size%7Dpx)%60)%2Cn.font%26%26s.setProperty(%22--g-data-number-font%22%2CY%5BString(n.font)%5D%3F%3FY.system)%2Ctypeof%20n.weight%3D%3D%22number%22%26%26s.setProperty(%22--g-data-number-weight%22%2CString(n.weight)))%2Ca.type%3D%3D%3D%22customer_data%22%26%26n.color)%7Blet%20p%3Dne(n.color)%3Bs.setProperty(%22--g-data-ink%22%2Cp)%2Cs.setProperty(%22--g-data-muted%22%2C%60color-mix(in%20srgb%2C%20%24%7Bp%7D%2072%25%2C%20transparent)%60)%2Cs.setProperty(%22--g-data-line%22%2C%60color-mix(in%20srgb%2C%20%24%7Bp%7D%2020%25%2C%20transparent)%60)%2Cs.setProperty(%22--g-data-surface%22%2C%60color-mix(in%20srgb%2C%20%24%7Bp%7D%208%25%2C%20transparent)%60)%7Dr.padding%26%26(s.padding%3DGe(r.padding))%2Cr.margin%26%26(s.margin%3DGe(r.margin))%2Ctypeof%20r.gap%3D%3D%22number%22%26%26a.type%3D%3D%3D%22stack%22%26%26(s.gap%3D%60%24%7Br.gap%7Dpx%60)%2Cr.background%26%26vt(s%2Cr.background)%2Ctypeof%20r.opacity%3D%3D%22number%22%26%26(s.opacity%3DString(r.opacity))%3Blet%20i%3Dr.shape%3Bif(i%3F.type%3D%3D%3D%22pill%22)s.borderRadius%3D%229999px%22%3Belse%20if(i%3F.type%3D%3D%3D%22rect%22)%7Blet%20p%3Di.radius%3Bs.borderRadius%3Dtypeof%20p%3D%3D%22number%22%3F%60%24%7Bp%7Dpx%60%3A%60%24%7BNumber(p.topLeft)%7Dpx%20%24%7BNumber(p.topRight)%7Dpx%20%24%7BNumber(p.bottomRight)%7Dpx%20%24%7BNumber(p.bottomLeft)%7Dpx%60%7D(r.clipContent%3D%3D%3D!0%7C%7Cr.clipContent!%3D%3D!1%26%26i%26%26(r.background%7C%7Ca.type%3D%3D%3D%22image%22))%26%26(s.overflow%3D%22hidden%22)%3Blet%20l%3Dr.border%3Bl%26%26(s.border%3DNumber(l.width)%3E0%3F%60%24%7BNumber(l.width)%7Dpx%20%24%7Bl.style%3D%3D%3D%22dashed%22%3F%22dashed%22%3A%22solid%22%7D%20%24%7Bne(l.color)%7D%60%3A%220%22)%3Blet%20d%3Dr.shadow%3Bd%26%26(s.boxShadow%3D%60%24%7BNumber(d.x)%7Dpx%20%24%7BNumber(d.y)%7Dpx%20%24%7BNumber(d.blur)%7Dpx%20%24%7BNumber(d.spread)%7Dpx%20%24%7Bne(d.color)%7D%60)%2C%5B%22text%22%2C%22button%22%2C%22price%22%2C%22coupon_code%22%2C%22countdown%22%2C%22plan_picker%22%5D.includes(a.type)%26%26(n.font%26%26(s.fontFamily%3DY%5BString(n.font)%5D%3F%3F%22%22)%2Ctypeof%20n.size%3D%3D%22number%22%26%26(s.fontSize%3D%60%24%7Bn.size%7Dpx%60)%2Ctypeof%20n.weight%3D%3D%22number%22%26%26(s.fontWeight%3DString(n.weight))%2Ctypeof%20n.lineHeight%3D%3D%22number%22%26%26(s.lineHeight%3DString(n.lineHeight))%2Ctypeof%20n.letterSpacing%3D%3D%22number%22%26%26(s.letterSpacing%3D%60%24%7Bn.letterSpacing%7Dpx%60)%2Cn.color%26%26(s.color%3Dne(n.color))%2Cn.align%26%26(s.textAlign%3DString(n.align))%2Cn.italic%26%26(s.fontStyle%3D%22italic%22)%2Cn.decoration%26%26(s.textDecoration%3DString(n.decoration))%2Cn.transform%26%26(s.textTransform%3DString(n.transform)))%2CQe(e%2Cr.width%2C%22width%22%2Ct%2Cn.align)%2CQe(e%2Cr.height%2C%22height%22%2Ct%2Cn.align)%2Ct%3F.direction%3D%3D%3D%22horizontal%22%26%26r.grow!%3D%3Dvoid%200%26%26(s.flexGrow%3DString(r.grow%3D%3D%3D!0%3F1%3Ar.grow%3D%3D%3D!1%3F0%3Ar.grow))%7Dfunction%20xe(e%2Ca)%7Bif(%24)%7Blet%20t%3D%24.bindings.find(r%3D%3Er.componentId%3D%3D%3De)%3Bif(!t)return%3B%24.answers%5Bt.variable%5D%3Da%2CAe.add(e)%2CN(%7Btype%3A%22answers%22%2Canswers%3AXe()%7D)%2CU()%3Breturn%7D%7Dfunction%20Xe()%7Blet%20e%3D%7B%7D%3Bfor(let%20a%20of%20%24%3F.bindings%3F%3F%5B%5D)%7Blet%20t%3Dh%5Ba.componentId%5D%3Bt!%3D%3Dvoid%200%26%26typeof%20t!%3D%22number%22%26%26(e%5Ba.variable%5D%3Dt)%7Dreturn%20e%7Dfunction%20kt(e)%7Blet%20a%3Ddocument.createElement(%22section%22)%3Ba.className%3D%22g-data%22%2Ca.dataset.layout%3De.data.layout%2Ca.dataset.source%3De.data.source%3Blet%20t%3Dee%3F.nodes%5Be.id%5D%3Ba.dataset.status%3Dt%3F.status%3F%3F%22idle%22%2Ca.dataset.preview%3DString(!!t%3F.preview)%3Blet%20r%3Dt%3F.status%3D%3D%3D%22loading%22%2Cn%3DP.startsWith(%22zh%22)%2Cs%3D(g%2Cb)%3D%3En%3Fg%3Ab%3Ba.setAttribute(%22aria-busy%22%2CString(!!r))%3Blet%20i%3D(g%2Cb%2CT)%3D%3E%7Blet%20x%3Ddocument.createElement(g)%3Breturn%20x.className%3Db%2CT!%3D%3Dvoid%200%26%26(x.textContent%3DT)%2Cx%7D%2Cl%3Dg%3D%3E%7Blet%20b%3Ddocument.createElementNS(%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%2C%22svg%22)%3Bb.setAttribute(%22viewBox%22%2C%220%200%2024%2024%22)%2Cb.setAttribute(%22fill%22%2C%22none%22)%2Cb.setAttribute(%22stroke%22%2C%22currentColor%22)%2Cb.setAttribute(%22stroke-width%22%2C%221.7%22)%2Cb.setAttribute(%22stroke-linecap%22%2C%22round%22)%2Cb.setAttribute(%22stroke-linejoin%22%2C%22round%22)%2Cb.setAttribute(%22aria-hidden%22%2C%22true%22)%2Cb.classList.add(%22g-data-icon%22)%3Blet%20T%3D%7Brefresh%3A%5B%22M20%207v5h-5%22%2C%22M4%2017v-5h5%22%2C%22M6.1%207a7%207%200%200%201%2011.5-1.5L20%208M4%2016l2.4%202.5A7%207%200%200%200%2018%2017%22%5D%2Cdown%3A%5B%22M7%207l10%2010M7%2017h10V7%22%5D%2Cup%3A%5B%22M7%2017L17%207M7%207h10v10%22%5D%2Cchevron%3A%5B%22M6%209l6%206%206-6%22%5D%2Cempty%3A%5B%22M4%208l8-4%208%204v10l-8%204-8-4V8Z%22%2C%22M4%208l8%204%208-4M12%2012v10%22%5D%2Ccredit%3A%5B%22M12%203a9%209%200%201%200%200%2018%209%209%200%200%200%200-18Z%22%2C%22M12%207v10M8%2012h8%22%5D%7D%3Bfor(let%20x%20of%20T%5Bg%5D)%7Blet%20A%3Ddocument.createElementNS(%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%2C%22path%22)%3BA.setAttribute(%22d%22%2Cx)%2Cb.append(A)%7Dreturn%20b%7D%2Cd%3D(g%2Cb%2CT%2Cx%3D!1%2CA%3Db)%3D%3E%7Blet%20z%3Di(%22button%22%2C%22g-data-button%22%2Cg)%3Breturn%20z.type%3D%22button%22%2Cz.disabled%3Dx%7C%7C!!r%26%26b!%3D%3D%22refresh%22%7C%7C!!t%3F.preview%7C%7Cy.mode!%3D%3D%22live%22%2Cr%26%26b%3D%3D%3D%22refresh%22%26%26z.setAttribute(%22aria-disabled%22%2C%22true%22)%2Cz.dataset.gDataFocus%3D%60%24%7Be.id%7D%3A%24%7BA%7D%3A%24%7BT%3F%3F%22%22%7D%60%2Cz.addEventListener(%22click%22%2Cj%3D%3E%7B!j.isTrusted%7C%7Cz.disabled%7C%7Cr%7C%7CN(%7Btype%3A%22customer-data-intent%22%2Cintent%3A%7BnodeId%3Ae.id%2Caction%3Ab%2C...T%3F%7Bvalue%3AT%7D%3A%7B%7D%7D%7D)%7D)%2Cz%7D%2Cp%3Di(%22div%22%2C%22g-data-header%22)%2Cf%3Di(%22h2%22%2C%22g-data-heading%22%2C_(e.title).value)%3Bf.id%3D%60g-data-title-%24%7Be.id%7D%60%2Ca.setAttribute(%22aria-labelledby%22%2Cf.id)%3Blet%20o%3Di(%22div%22%2C%22g-data-controls%22)%2Cc%3D%5B%5D%2Cu%3Dg%3D%3E%7Bg.hidden%7C%7C(g.type%3D%3D%3D%22customer_data%22%26%26c.push(g)%2Cg.type%3D%3D%3D%22stack%22%26%26g.children.forEach(u))%7D%2Cm%3Dk%3F.pages%5B0%5D%3Bm%26%26u(m.root)%3Blet%20w%3Dc.every(g%3D%3Eee%3F.nodes%5Bg.id%5D%3F.preview)%2CS%3Dc.find(g%3D%3Eg.data.source%3D%3D%3D%22credit_balance%22)%3F%3Fc%5B0%5D%3Bt%3F.preview%26%26(!w%7C%7CS%3F.id%3D%3D%3De.id)%26%26o.append(i(%22span%22%2C%22g-data-preview%22%2Cs(%22%5Cu793A%5Cu4F8B%5Cu6570%5Cu636E%22%2C%22Sample%20data%22)))%3Blet%20v%3Dr%3Fs(%22%5Cu66F4%5Cu65B0%5Cu4E2D%5Cu2026%22%2C%22Updating%5Cu2026%22)%3As(%22%5Cu5237%5Cu65B0%22%2C%22Refresh%22)%2CL%3Dd(v%2C%22refresh%22)%3Bif(L.replaceChildren(l(%22refresh%22))%2CL.setAttribute(%22aria-label%22%2Cv)%2CL.title%3Dv%2CL.classList.add(%22g-data-refresh%22)%2Cr%26%26L.classList.add(%22g-data-refreshing%22)%2Co.append(L)%2Ce.data.source%3D%3D%3D%22billing%22%26%26e.data.outputs%3F.billing_portal%26%26o.append(d(t%3F.billingBusy%3Fs(%22%5Cu6B63%5Cu5728%5Cu51C6%5Cu5907%5Cu2026%22%2C%22Preparing%5Cu2026%22)%3As(%22%5Cu7BA1%5Cu7406%5Cu652F%5Cu4ED8%5Cu65B9%5Cu5F0F%22%2C%22Manage%20payment%20method%22)%2C%22billing_portal%22%2Cvoid%200%2C!!t%3F.billingBusy%7C%7Ct%3F.status!%3D%3D%22ready%22))%2Ce.data.source%3D%3D%3D%22credit_balance%22%26%26(f.prepend(l(%22credit%22))%2Ct%3F.resources.length%3D%3D%3D1%26%26f.append(i(%22span%22%2C%22g-data-resource-label%22%2Ct.resources%5B0%5D.name))%2Ct%3F.updatedAt))%7Blet%20g%3Di(%22time%22%2C%22g-data-updated%22%2C%60%24%7Bs(%22%5Cu66F4%5Cu65B0%5Cu4E8E%22%2C%22Updated%22)%7D%20%24%7Bnew%20Intl.DateTimeFormat(P%2C%7BtimeStyle%3A%22short%22%7D).format(new%20Date(t.updatedAt))%7D%60)%3Bg.dateTime%3Dt.updatedAt%2Cg.title%3Dnew%20Intl.DateTimeFormat(P%2C%7BdateStyle%3A%22medium%22%2CtimeStyle%3A%22short%22%7D).format(new%20Date(t.updatedAt))%2Co.prepend(g)%7Dif(p.append(f%2Co)%2Ca.append(p)%2C!t%7C%7Ct.source!%3D%3De.data.source)return%20a.append(i(%22p%22%2C%22g-data-empty%22%2Cs(%22%5Cu8FDE%5Cu63A5%5Cu5BA2%5Cu6237%5Cu6570%5Cu636E%5Cu540E%5Cu663E%5Cu793A%5Cu6B64%5Cu5185%5Cu5BB9%5Cu3002%22%2C%22Connect%20customer%20data%20to%20display%20this%20content.%22)))%2Ca%3Bif(t.errorMessage)%7Blet%20g%3Di(%22div%22%2C%22g-data-error%22%2Ct.errorMessage)%3Bg.setAttribute(%22role%22%2C%22alert%22)%2Ca.append(g)%3Blet%20b%3Di(%22div%22%2C%22g-data-recovery%22)%3Bb.append(d(s(%22%5Cu91CD%5Cu8BD5%22%2C%22Retry%22)%2C%22refresh%22))%2Ca.append(b)%7Dif(t.membershipResult)%7Blet%20g%3Di(%22p%22%2C%22g-data-note%22%2Ct.membershipResult)%3Bg.setAttribute(%22role%22%2C%22status%22)%2Ca.append(g)%7Dif(t.membershipReview)%7Blet%20g%3Dt.membershipReview%2Cb%3Di(%22section%22%2C%22g-data-resource%22)%3Bb.dataset.gDataReview%3D%22%22%2Cb.setAttribute(%22aria-label%22%2Cg.title)%2Cb.setAttribute(%22aria-busy%22%2CString(!!t.membershipBusy))%3Blet%20T%3Di(%22h3%22%2C%22g-data-row-label%22%2Cg.title)%3BT.tabIndex%3D-1%2Cb.append(T)%3Blet%20x%3Di(%22dl%22%2C%22g-data-facts%22)%3Bfor(let%20z%20of%20g.facts)%7Blet%20j%3Di(%22div%22%2C%22%22)%3Bj.append(i(%22dt%22%2C%22%22%2Cz.label)%2Ci(%22dd%22%2C%22%22%2Cz.value))%2Cx.append(j)%7Db.append(x%2Ci(%22p%22%2C%22g-data-note%22%2Cg.note))%3Blet%20A%3Di(%22div%22%2C%22g-data-controls%22)%3BA.append(d(s(%22%5Cu8FD4%5Cu56DE%22%2C%22Back%22)%2C%22membership_dismiss%22%2Cvoid%200%2C!!t.membershipBusy)%2Cd(t.membershipBusy%3Fs(%22%5Cu6B63%5Cu5728%5Cu5904%5Cu7406%5Cu2026%22%2C%22Processing%5Cu2026%22)%3As(%22%5Cu786E%5Cu8BA4%22%2C%22Confirm%22)%2C%22membership_confirm%22%2Cvoid%200%2C!!t.membershipBusy))%2Cb.append(A)%2Ca.append(b)%7Dif(t.stale%26%26(t.resources.length%7C%7Ct.rows.length)%26%26a.append(i(%22p%22%2Cr%3F%22g-data-live-status%22%3A%22g-data-note%22%2Cr%3Fs(%22%5Cu6B63%5Cu5728%5Cu66F4%5Cu65B0%5Cu8D26%5Cu6237%5Cu6570%5Cu636E%5Cu3002%22%2C%22Updating%20account%20data.%22)%3As(%22%5Cu663E%5Cu793A%5Cu4E0A%5Cu6B21%5Cu8BFB%5Cu53D6%5Cu7684%5Cu7ED3%5Cu679C%5CuFF0C%5Cu6B63%5Cu5728%5Cu7B49%5Cu5F85%5Cu66F4%5Cu65B0%5Cu3002%22%2C%22Showing%20the%20last%20result%20while%20awaiting%20an%20update.%22)))%2Cr%26%26!t.resources.length%26%26!t.rows.length)%7Blet%20g%3Di(%22div%22%2C%22g-data-skeleton%22)%3Bif(g.setAttribute(%22aria-hidden%22%2C%22true%22)%2Ce.data.source%3D%3D%3D%22credit_balance%22)g.append(i(%22span%22%2C%22g-data-skeleton-line%20g-data-skeleton-value%22)%2Ci(%22span%22%2C%22g-data-skeleton-line%20g-data-skeleton-meta%22))%3Belse%7Blet%20T%3DMath.min(e.data.pageSize%2Ce.data.layout%3D%3D%3D%22compact%22%3F2%3A4)%3Bfor(let%20x%3D0%3Bx%3CT%3Bx%2B%2B)%7Blet%20A%3Di(%22div%22%2C%22g-data-skeleton-row%22)%3BA.append(i(%22span%22%2C%22g-data-skeleton-line%22)%2Ci(%22span%22%2C%22g-data-skeleton-line%22))%2Cg.append(A)%7D%7Dlet%20b%3Di(%22p%22%2C%22g-data-live-status%22%2Cs(%22%5Cu6B63%5Cu5728%5Cu8BFB%5Cu53D6%5Cu8D26%5Cu6237%5Cu6570%5Cu636E%5Cu2026%22%2C%22Loading%20account%20data%5Cu2026%22))%3Breturn%20b.setAttribute(%22role%22%2C%22status%22)%2Ca.append(g%2Cb)%2Ca%7Dlet%20R%3D%7Bcredit_transactions%3A%5B%5B%22all%22%2C%22%5Cu5168%5Cu90E8%5Cu8BB0%5Cu5F55%22%2C%22All%20activity%22%5D%2C%5B%22consume%22%2C%22%5Cu6D88%5Cu8D39%22%2C%22Usage%22%5D%2C%5B%22reserve%22%2C%22%5Cu9884%5Cu6263%22%2C%22Reserved%22%5D%2C%5B%22confirm%22%2C%22%5Cu786E%5Cu8BA4%5Cu6263%5Cu8D39%22%2C%22Confirmed%22%5D%2C%5B%22release%22%2C%22%5Cu91CA%5Cu653E%22%2C%22Released%22%5D%2C%5B%22refund%22%2C%22%5Cu9000%5Cu56DE%22%2C%22Refund%22%5D%5D%2Ccredit_pack_orders%3A%5B%5B%22all%22%2C%22%5Cu5168%5Cu90E8%5Cu8BA2%5Cu5355%22%2C%22All%20orders%22%5D%2C%5B%22pending%22%2C%22%5Cu7B49%5Cu5F85%5Cu4ED8%5Cu6B3E%22%2C%22Pending%22%5D%2C%5B%22paid%22%2C%22%5Cu5DF2%5Cu4ED8%5Cu6B3E%22%2C%22Paid%22%5D%2C%5B%22expired%22%2C%22%5Cu5DF2%5Cu8FC7%5Cu671F%22%2C%22Expired%22%5D%2C%5B%22refunded%22%2C%22%5Cu5DF2%5Cu9000%5Cu6B3E%22%2C%22Refunded%22%5D%2C%5B%22disputed%22%2C%22%5Cu4E89%5Cu8BAE%5Cu4E2D%22%2C%22Disputed%22%5D%5D%2Coffer_history%3A%5B%5B%22all%22%2C%22%5Cu5168%5Cu90E8%5Cu8BB0%5Cu5F55%22%2C%22All%20offers%22%5D%2C%5B%22issued%22%2C%22%5Cu672A%5Cu4F7F%5Cu7528%22%2C%22Unused%22%5D%2C%5B%22reserved%22%2C%22%5Cu4ED8%5Cu6B3E%5Cu5904%5Cu7406%5Cu4E2D%22%2C%22Payment%20pending%22%5D%2C%5B%22redeemed%22%2C%22%5Cu5DF2%5Cu4F7F%5Cu7528%22%2C%22Redeemed%22%5D%2C%5B%22expired%22%2C%22%5Cu5DF2%5Cu5230%5Cu671F%22%2C%22Expired%22%5D%2C%5B%22revoked%22%2C%22%5Cu5DF2%5Cu4F5C%5Cu5E9F%22%2C%22Revoked%22%5D%5D%7D%3Bif(R%5Be.data.source%5D)%7Blet%20g%3Di(%22select%22%2C%22g-data-select%22)%3Bg.setAttribute(%22aria-label%22%2Cs(%22%5Cu7B5B%5Cu9009%5Cu8BB0%5Cu5F55%22%2C%22Filter%20records%22))%2Cg.dataset.gDataFocus%3D%60%24%7Be.id%7D%3Afilter%60%2Cg.disabled%3D!!r%7C%7Ct.preview%7C%7Cy.mode!%3D%3D%22live%22%3Bfor(let%5Bb%2CT%2Cx%5Dof%20R%5Be.data.source%5D)%7Blet%20A%3Ddocument.createElement(%22option%22)%3BA.value%3Db%2CA.textContent%3Ds(T%2Cx)%2Cg.append(A)%7Dg.value%3Dt.filter%2Cg.addEventListener(%22change%22%2C()%3D%3E%7B!g.disabled%26%26y.mode%3D%3D%3D%22live%22%26%26N(%7Btype%3A%22customer-data-intent%22%2Cintent%3A%7BnodeId%3Ae.id%2Caction%3A%22filter%22%2Cvalue%3Ag.value%7D%7D)%7D)%2Co.prepend(g)%7Dlet%20ot%3D(g%2Cb%3D!1)%3D%3E%7Blet%20T%3Di(%22ul%22%2C%22g-data-list%22)%3Bif(e.data.source%3D%3D%3D%22credit_transactions%22%26%26g.length%26%26!b)%7Blet%20x%3Di(%22div%22%2C%22g-data-table-head%22)%3Bx.setAttribute(%22aria-hidden%22%2C%22true%22)%2Cx.append(i(%22span%22%2C%22%22%2Cs(%22%5Cu8BB0%5Cu5F55%22%2C%22Record%22))%2Ci(%22span%22%2C%22%22%2Cs(%22%5Cu7C7B%5Cu578B%22%2C%22Type%22))%2Ci(%22span%22%2C%22%22%2Cs(%22%5Cu79EF%5Cu5206%22%2C%22Credits%22)))%2Ca.append(x)%7Dfor(let%20x%20of%20g)%7Blet%20A%3Di(%22li%22%2C%22g-data-row%22)%2Cz%3Di(%22div%22%2C%22g-data-row-main%22)%2Cj%3Di(%22div%22%2C%22g-data-row-copy%22)%3Bj.append(i(%22p%22%2C%22g-data-row-label%22%2Cx.label))%3Bfor(let%20M%20of%20x.detail)M!%3D%3Dx.status%26%26j.append(i(%22div%22%2C%22g-data-row-detail%22%2CM))%3Bif(e.data.source%3D%3D%3D%22credit_transactions%22%26%26!b)%7Blet%20M%3Di(%22span%22%2C%22g-data-row-mark%22)%3BM.append(l(%5B%22Refund%22%2C%22%5Cu9000%5Cu56DE%22%5D.includes(x.status%3F%3F%22%22)%3F%22up%22%3A%22down%22))%2Cz.append(M)%7Dif(z.append(j)%2CA.append(z)%2Cx.status%3FA.append(i(%22div%22%2C%22g-data-row-status%22%2Cx.status))%3AA.classList.add(%22g-data-row-no-status%22)%2Cx.value%3FA.append(i(%22div%22%2C%22g-data-row-value%22%2Cx.value))%3AA.classList.add(%22g-data-row-no-value%22)%2Cx.facts.length%7C%7Cx.purchaseId%7C%7Cx.membershipActions%3F.length%7C%7Cx.billingActions%3F.length)%7Blet%20M%3Di(%22div%22%2C%22g-data-row-extra%22)%2CV%3Di(%22div%22%2C%22g-data-facts%22)%2CW%3D(D%2CEe)%3D%3E%7Bfor(let%20dt%20of%20D)%7Blet%20lt%3Di(%22span%22%2C%22%22%2Cdt.label)%3Blt.append(i(%22strong%22%2C%22%22%2Cdt.value))%2CEe.append(lt)%7D%7D%3Bif(W(x.facts.slice(0%2C3)%2CV)%2Cx.facts.length%3E3)%7Blet%20D%3Di(%22details%22%2C%22g-data-sources%22)%3BD.dataset.gDataSources%3D%60facts%3A%24%7Bx.id%7D%60%2CD.append(i(%22summary%22%2C%22%22%2C%60%24%7Be.data.source%3D%3D%3D%22billing%22%3Fs(%22%5Cu8D26%5Cu5355%5Cu8BE6%5Cu60C5%22%2C%22Invoice%20details%22)%3Ae.data.source%3D%3D%3D%22offer_history%22%3Fs(%22%5Cu4F18%5Cu60E0%5Cu5238%5Cu660E%5Cu7EC6%22%2C%22Coupon%20details%22)%3As(%22%5Cu5168%5Cu90E8%5Cu6263%5Cu8D39%5Cu660E%5Cu7EC6%22%2C%22All%20allocations%22)%7D%20%5CxB7%20%24%7Bx.facts.length%7D%60))%3Blet%20Ee%3Di(%22div%22%2C%22g-data-facts%22)%3BW(x.facts.slice(3)%2CEe)%2CD.append(Ee)%2CV.append(D)%7Dif(M.append(V)%2C!b)for(let%20D%20of%20x.billingActions%3F%3F%5B%5D)M.append(d(D.label%2CD.action%2Cx.id%2C!!t.billingBusy))%3Bif(x.purchaseId%26%26e.data.allowPurchase%26%26!b)%7Blet%20D%3Dd(t.buyingId%3D%3D%3Dx.purchaseId%3Fs(%22%5Cu6B63%5Cu5728%5Cu51C6%5Cu5907%5Cu2026%22%2C%22Preparing%5Cu2026%22)%3As(%22%5Cu8D2D%5Cu4E70%5Cu79EF%5Cu5206%22%2C%22Buy%20credits%22)%2C%22buy_pack%22%2Cx.purchaseId%2C!!t.preview%7C%7C!!t.buyingId)%3BD.classList.add(%22g-data-buy%22)%2CM.append(D)%7Dif(e.data.allowPurchase%26%26!b)for(let%20D%20of%20x.membershipActions%3F%3F%5B%5D)M.append(d(D.label%2C%22membership_preview%22%2CD.value%2C!!t.preview%7C%7C!!t.membershipBusy%7C%7C!!t.membershipReview))%3BA.append(M)%7DT.append(A)%7Dreturn%20T%7D%3Bfor(let%20g%20of%20t.resources)%7Blet%20b%3Di(%22article%22%2C%22g-data-resource%22)%3Bb.setAttribute(%22aria-label%22%2Cg.name)%2Ct.resources.length%3E1%26%26b.append(i(%22p%22%2C%22g-data-name%22%2Cg.name))%3Blet%20T%3Di(%22div%22%2C%22g-data-balance%22)%2Cx%3Dnew%20Intl.NumberFormat(P).formatToParts(1.1).find(M%3D%3EM.type%3D%3D%3D%22decimal%22)%3F.value%3F%3F%22.%22%2CA%3Dg.spendable.lastIndexOf(x)%2Cz%3Di(%22strong%22%2C%22g-data-number%22%2CA%3C0%3Fg.spendable%3Ag.spendable.slice(0%2CA))%3BA%3E%3D0%26%26z.append(i(%22span%22%2C%22g-data-fraction%22%2Cg.spendable.slice(A)))%2CT.append(z%2Ci(%22span%22%2C%22g-data-unit%22%2Cs(%22%5Cu53EF%5Cu7528%5Cu79EF%5Cu5206%22%2C%22Spendable%20credits%22)))%2Cb.append(T)%3Blet%20j%3Di(%22div%22%2C%22g-data-facts%22)%3Bfor(let%5BM%2CV%5Dof%5B%5Bs(%22%5Cu4F59%5Cu989D%22%2C%22Balance%22)%2Cg.available%5D%2C%5Bs(%22%5Cu51BB%5Cu7ED3%22%2C%22Reserved%22)%2Cg.reserved%5D%5D)%7Blet%20W%3Di(%22span%22%2C%22%22%2CM)%3BW.append(i(%22strong%22%2C%22%22%2CV))%2Cj.append(W)%7Dif(g.expiry%26%26j.append(i(%22span%22%2C%22g-data-expiry%22%2C%60%24%7Bs(%22%5Cu6700%5Cu8FD1%5Cu5230%5Cu671F%22%2C%22Next%20expiry%22)%7D%20%5CxB7%20%24%7Bg.expiry%7D%60))%2Cb.append(j)%2Ce.data.showSources%26%26g.sourceCount)%7Blet%20M%3Di(%22details%22%2C%22g-data-sources%22)%3Bif(M.dataset.gDataSources%3Dg.key%2CM.append(i(%22summary%22%2C%22%22%2C%60%24%7Bs(%22%5Cu79EF%5Cu5206%5Cu6765%5Cu6E90%22%2C%22Credit%20sources%22)%7D%20%5CxB7%20%24%7Bg.sourceCount%7D%60)%2Cot(g.sources%2C!0))%2CM.querySelector(%22summary%22)%3F.append(l(%22chevron%22))%2Cg.hasNextSources%7C%7Cg.hasPreviousSources)%7Blet%20V%3Di(%22div%22%2C%22g-data-footer%22)%3BV.append(i(%22span%22%2C%22%22%2C%60%24%7Bs(%22%5Cu7B2C%22%2C%22Page%22)%7D%20%24%7Bg.sourcePage%7D%60))%3Blet%20W%3Di(%22div%22%2C%22g-data-controls%22)%3BW.append(d(s(%22%5Cu4E0A%5Cu4E00%5Cu9875%22%2C%22Previous%22)%2C%22sources_previous%22%2Cg.key%2C!g.hasPreviousSources)%2Cd(s(%22%5Cu4E0B%5Cu4E00%5Cu9875%22%2C%22Next%22)%2C%22sources_next%22%2Cg.key%2C!g.hasNextSources))%2CV.append(W)%2CM.append(V)%7Db.append(M)%7Da.append(b)%7Dif(t.rows.length%26%26a.append(ot(t.rows))%2Ce.data.source%3D%3D%3D%22billing_controls%22%26%26(e.data.outputs%3F.billing_authorization%7C%7Ce.data.outputs%3F.billing_adjustment))%7Blet%20g%3Di(%22div%22%2C%22g-data-controls%22)%3Be.data.outputs%3F.billing_authorization%26%26g.append(d(s(%22%5Cu8BBE%5Cu7F6E%5Cu81EA%5Cu52A8%5Cu4ED8%5Cu6B3E%5Cu6388%5Cu6743%22%2C%22Set%20up%20payment%20authorization%22)%2C%22billing_authorization%22))%2Ce.data.outputs%3F.billing_adjustment%26%26g.append(d(s(%22%5Cu67E5%5Cu770B%5Cu5F85%5Cu786E%5Cu8BA4%5Cu8865%5Cu6B3E%22%2C%22Review%20pending%20adjustment%22)%2C%22billing_adjustment%22))%2Ca.append(g)%7Dif(!t.rows.length%26%26!t.resources.length%26%26t.status!%3D%3D%22error%22)%7Blet%20g%3Di(%22p%22%2C%22g-data-empty%22%2Cr%3Fs(%22%5Cu6B63%5Cu5728%5Cu8BFB%5Cu53D6%5Cu8D26%5Cu6237%5Cu6570%5Cu636E%5Cu2026%22%2C%22Loading%20account%20data%5Cu2026%22)%3At.status%3D%3D%3D%22idle%22%3Fs(%22%5Cu767B%5Cu5F55%5Cu540E%5Cu67E5%5Cu770B%5Cu4F60%5Cu7684%5Cu8D26%5Cu6237%5Cu6570%5Cu636E%5Cu3002%22%2C%22Sign%20in%20to%20view%20your%20account%20data.%22)%3At.filter!%3D%3D%22all%22%3Fs(%22%5Cu6CA1%5Cu6709%5Cu7B26%5Cu5408%5Cu7B5B%5Cu9009%5Cu6761%5Cu4EF6%5Cu7684%5Cu8BB0%5Cu5F55%5Cu3002%22%2C%22No%20records%20match%20this%20filter.%22)%3Ae.data.source%3D%3D%3D%22credit_pack_orders%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu8D2D%5Cu4E70%5Cu8BB0%5Cu5F55%22%2C%22No%20purchases%20yet%22)%3Ae.data.source%3D%3D%3D%22credit_balance%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu79EF%5Cu5206%5Cu6765%5Cu6E90%22%2C%22No%20credit%20balances%20yet%22)%3Ae.data.source%3D%3D%3D%22membership%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu4F1A%5Cu5458%5Cu65B9%5Cu6848%22%2C%22No%20memberships%20yet%22)%3Ae.data.source%3D%3D%3D%22customer_plans%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu53EF%5Cu9009%5Cu5957%5Cu9910%22%2C%22No%20plans%20available%22)%3Ae.data.source%3D%3D%3D%22credit_packs%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu53EF%5Cu8D2D%5Cu4E70%5Cu7684%5Cu79EF%5Cu5206%5Cu5305%22%2C%22No%20credit%20packs%20available%22)%3Ae.data.source%3D%3D%3D%22billing_controls%22%3Fs(%22%5Cu5C1A%5Cu672A%5Cu8BBE%5Cu7F6E%5Cu7528%5Cu91CF%5Cu9650%5Cu5236%5Cu6216%5Cu81EA%5Cu52A8%5Cu4ED8%5Cu6B3E%5Cu6388%5Cu6743%22%2C%22No%20usage%20limits%20or%20payment%20authorizations%20configured%22)%3Ae.data.source%3D%3D%3D%22offer_history%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu4F18%5Cu60E0%5Cu8BB0%5Cu5F55%22%2C%22No%20offers%20yet%22)%3Ae.data.source%3D%3D%3D%22billing%22%3Fs(%22%5Cu6682%5Cu65E0%5Cu8D26%5Cu5355%22%2C%22No%20invoices%20yet%22)%3As(%22%5Cu8FD9%5Cu91CC%5Cu8FD8%5Cu6CA1%5Cu6709%5Cu8BB0%5Cu5F55%5Cu3002%22%2C%22There%20are%20no%20records%20yet.%22))%3Bg.prepend(l(%22empty%22))%2Cg.setAttribute(%22role%22%2C%22status%22)%2Ca.append(g)%7Dif(t.hasNext%7C%7Ct.hasPrevious)%7Blet%20g%3Di(%22div%22%2C%22g-data-footer%22)%3Bg.append(i(%22span%22%2C%22%22%2C%60%24%7Bs(%22%5Cu7B2C%22%2C%22Page%22)%7D%20%24%7Bt.page%7D%60))%3Blet%20b%3Di(%22div%22%2C%22g-data-controls%22)%3Bb.append(d(s(%22%5Cu4E0A%5Cu4E00%5Cu9875%22%2C%22Previous%22)%2C%22previous%22%2Cvoid%200%2C!t.hasPrevious)%2Cd(s(%22%5Cu4E0B%5Cu4E00%5Cu9875%22%2C%22Next%22)%2C%22next%22%2Cvoid%200%2C!t.hasNext))%2Cg.append(b)%2Ca.append(g)%7Dreturn%20t.updatedAt%26%26e.data.source!%3D%3D%22credit_balance%22%26%26a.append(i(%22p%22%2C%22g-data-note%20g-data-updated%22%2C%60%24%7Bs(%22%5Cu6570%5Cu636E%5Cu66F4%5Cu65B0%5Cu4E8E%22%2C%22Updated%22)%7D%20%24%7Bnew%20Intl.DateTimeFormat(P%2C%7BdateStyle%3A%22medium%22%2CtimeStyle%3A%22short%22%7D).format(new%20Date(t.updatedAt))%7D%60))%2Ca%7Dlet%20Q%3Dnew%20Map%2CPe%3Dnew%20Map%2Cet%3De%3D%3E%7Blet%20a%3De.target%3Bfor(let%20t%20of%20Q.keys())a%26%26!J(t)%3F.contains(a)%26%26Q.delete(t)%7D%3Bdocument.addEventListener(%22focusin%22%2Cet)%2Cdocument.addEventListener(%22pointerdown%22%2Cet)%3Bfunction%20St(e)%7Blet%20a%3Dee%3Bif(ee%3De%2C!k)return%3Blet%20t%3D(n%2Cs)%3D%3E%7Bif(n.type%3D%3D%3D%22stack%22)%7Bn.children.forEach(m%3D%3Et(m%2Cn))%3Breturn%7Dif(n.type!%3D%3D%22customer_data%22%7C%7CJSON.stringify(a%3F.nodes%5Bn.id%5D)%3D%3D%3DJSON.stringify(e.nodes%5Bn.id%5D))return%3Blet%20i%3DJ(n.id)%3Bif(!i)return%3Blet%20l%3Ddocument.activeElement%3Bl%26%26i.contains(l)%26%26l.dataset.gDataFocus%26%26Q.set(n.id%2Cl.dataset.gDataFocus)%3Blet%20d%3Dnew%20Set(%5B...i.querySelectorAll(%22details%5Bdata-g-data-sources%5D%22)%5D.filter(m%3D%3Em.open).map(m%3D%3Em.dataset.gDataSources))%2Cp%3Dwe(n%2Cs)%3Bif(!p)return%3Bfor(let%20m%20of%20p.querySelectorAll(%22details%5Bdata-g-data-sources%5D%22))m.open%3Dd.has(m.dataset.gDataSources)%3Blet%20f%3Di.scrollTop%3Bi.replaceWith(p)%2Cp.scrollTop%3Df%3Blet%20o%3D!!e.nodes%5Bn.id%5D%3F.membershipReview%26%26!a%3F.nodes%5Bn.id%5D%3F.membershipReview%2Cc%3D!e.nodes%5Bn.id%5D%3F.membershipReview%26%26!!a%3F.nodes%5Bn.id%5D%3F.membershipReview%3Bo%26%26Q.get(n.id)%26%26Pe.set(n.id%2CQ.get(n.id))%3Blet%20u%3Dc%3FPe.get(n.id)%3AQ.get(n.id)%3Bu%26%26%5B...p.querySelectorAll(%22%5Bdata-g-data-focus%5D%22)%5D.find(m%3D%3Em.dataset.gDataFocus%3D%3D%3Du)%3F.focus(%7BpreventScroll%3A!0%7D)%2Co%26%26p.querySelector(%22%5Bdata-g-data-review%5D%20h3%22)%3F.focus(%7BpreventScroll%3A!0%7D)%2Cc%26%26Pe.delete(n.id)%2Cp.animate%26%26e.nodes%5Bn.id%5D%3F.status%3D%3D%3D%22ready%22%26%26!window.matchMedia(%22(prefers-reduced-motion%3Areduce)%22).matches%26%26p.animate(%5B%7Bopacity%3A.7%7D%2C%7Bopacity%3A1%7D%5D%2C%7Bduration%3A140%2Ceasing%3A%22ease-out%22%7D)%7D%2Cr%3Dk.pages.find(n%3D%3En.id%3D%3D%3DB)%3F%3Fk.pages%5B0%5D%3Bt(r.root%2Cnull)%2Cde()%7Dfunction%20we(e%2Ca)%7Bif(e.hidden)return%20null%3Blet%20t%3Bif(e.type%3D%3D%3D%22customer_data%22)t%3Dkt(e)%3Belse%20if(e.type%3D%3D%3D%22stack%22)%7Bt%3Ddocument.createElement(e.purchaseAction%3F%22button%22%3A%22div%22)%2Ce.purchaseAction%26%26(t.type%3D%22button%22%2Ct.dataset.gAction%3De.purchaseAction)%2Ct.className%3D%60%24%7Be.purchaseAction%3F%60g-btn%20g-btn-%24%7Be.buttonVariant%3F%3F%22primary%22%7D%20%60%3A%22%22%7Dg-stack%20%24%7Be.direction%3D%3D%3D%22horizontal%22%3F%22g-h%22%3Ae.direction%3D%3D%3D%22overlay%22%3F%22g-o%22%3A%22g-v%22%7D%60%2Ce.direction%3D%3D%3D%22overlay%22%3F(t.style.alignItems%3Dht%5Be.align%5D%3F%3F%22stretch%22%2Ct.style.justifyItems%3Dmt%5Be.justify%5D%3F%3F%22stretch%22)%3A(t.style.alignItems%3DBe%5Be.align%5D%3F%3F%22stretch%22%2Ct.style.justifyContent%3Dqe%5Be.justify%5D%3F%3F%22flex-start%22)%3Bfor(let%20r%20of%20e.children)%7Blet%20n%3Dwe(r%2Ce)%3Bn%26%26t.append(n)%7Dif(e.interaction%26%26Et(t%2Ce)%2Ce.purchaseAction%26%26y.mode%3D%3D%3D%22live%22)%7Blet%20r%3DE%3F.nodes%5Be.id%5D%2Cn%3Dr%3F.picker%3Bn%26%26(t.disabled%3D!E%3F.pickers%5Bn%5D%3F.options.includes(String(h%5Bn%5D%3F%3F%22%22)))%2Cq(e.id)%3F.unavailable%26%26(t.disabled%3D!0)%7Dy.mode%3D%3D%3D%22editor%22%26%26!t.childElementCount%26%26(t.classList.add(%22g-empty%22)%2Ct.dataset.gEditorPlaceholder%3Dy.editorMessages%3F.emptyContainer%3F%3F%22%5Cu62D6%5Cu5165%5Cu7EC4%5Cu4EF6%22)%7Delse%20if(e.type%3D%3D%3D%22text%22)%7Blet%20r%3De.variant%3D%3D%3D%22title%22%3F%22h1%22%3Ae.variant%3D%3D%3D%22heading%22%3F%22h2%22%3A%22p%22%3Bt%3Ddocument.createElement(r)%2Ct.className%3D%60g-text%20g-%24%7Be.variant%7D%60%3Blet%20n%3Dse(e%2C%22text%22%2Ce.text)%3Bt.textContent%3Dn.value%2Cn.missing%26%26y.mode%3D%3D%3D%22editor%22%26%26t.classList.add(%22g-missing%22)%7Delse%20if(e.type%3D%3D%3D%22button%22)%7Bt%3Ddocument.createElement(%22button%22)%2Ct.type%3D%22button%22%2Ct.className%3D%60g-btn%20g-btn-%24%7Be.variant%7D%60%3Blet%20r%3Dse(e%2C%22label%22%2Ce.label)%3Bt.textContent%3Dr.value%2Cr.missing%26%26y.mode%3D%3D%3D%22editor%22%26%26t.classList.add(%22g-missing%22)%2Ct.dataset.gAction%3De.action%3Blet%20n%3DE%3F.nodes%5Be.id%5D%3F.picker%3Bif(n%26%26y.mode%3D%3D%3D%22live%22)%7Blet%20s%3Dn%2Ci%3DE%3F.pickers%5Bs%5D%2Cl%3Dh%5Bs%5D%3F%3Fi%3F.selected%3Bt.disabled%3D!i%3F.options.includes(String(l))%2Ct.disabled%26%26t.setAttribute(%22aria-disabled%22%2C%22true%22)%7Dy.mode%3D%3D%3D%22live%22%26%26q(e.id)%3F.unavailable%26%26(t.disabled%3D!0%2Ct.setAttribute(%22aria-disabled%22%2C%22true%22))%2Cy.mode%3D%3D%3D%22editor%22%26%26(t.tabIndex%3D-1)%7Delse%20if(e.type%3D%3D%3D%22image%22)%7Bt%3Ddocument.createElement(%22div%22)%2Ct.className%3D%22g-img%22%2CUe%5Be.aspect%5D%26%26(t.dataset.aspect%3De.aspect%2Ct.style.aspectRatio%3DUe%5Be.aspect%5D)%3Blet%20r%3Ddocument.createElement(%22img%22)%3Br.src%3De.localizedSrc%3F.%5BP%5D%3F%3Fe.localizedSrc%3F.%5Bk.strings.defaultLocale%5D%3F%3Fe.src%2Cr.alt%3Dse(e%2C%22alt%22%2Ce.alt).value%2Cr.referrerPolicy%3D%22no-referrer%22%2Cr.decoding%3D%22async%22%2Cr.style.objectFit%3De.fit%2Ce.position%26%26(r.style.objectPosition%3D%60%24%7Be.position.x%7D%25%20%24%7Be.position.y%7D%25%60)%2Cr.addEventListener(%22load%22%2Cke)%2Ct.append(r)%7Delse%20if(e.type%3D%3D%3D%22price%22)%7Bt%3Ddocument.createElement(%22div%22)%2Ct.className%3D%22g-price%22%2Ct.style.cssText%3D%22display%3Aflex%3Balign-items%3Abaseline%3Bgap%3A8px%3Bflex-wrap%3Awrap%3Bfont-variant-numeric%3Atabular-nums%22%3Blet%20r%3Dq(e.id)%3Bif(!r%3F.price)t.textContent%3Dr%3F.text%3F%3F_(e.fallback).value%2Cy.mode%3D%3D%3D%22editor%22%26%26t.classList.add(%22g-missing%22)%3Belse%20for(let%20n%20of%5B%22current%22%2C%22original%22%2C%22period%22%5D)%7Blet%20s%3Dr.price%5Bn%5D%3Bif(!s)continue%3Blet%20i%3Ddocument.createElement(n%3D%3D%3D%22original%22%3F%22s%22%3A%22span%22)%3Bi.textContent%3Ds%2Cn%3D%3D%3D%22original%22%26%26(i.style.opacity%3D%22.6%22)%2Ce.parts%3F.%5Bn%5D%26%26oe(i%2C%7Btype%3A%22text%22%2Cid%3Ae.id%2Ctext%3Ae.fallback%2Cvariant%3A%22body%22%2Cstyle%3Ae.parts%5Bn%5D%7D%2Cnull)%2Ct.append(i)%7D%7Delse%20if(e.type%3D%3D%3D%22coupon_code%22)%7Bt%3Ddocument.createElement(%22div%22)%2Ct.style.cssText%3D%22display%3Aflex%3Balign-items%3Acenter%3Bgap%3A12px%3Bflex-wrap%3Awrap%22%3Blet%20r%3Dq(e.id)%3Bif(r%3F.code)%7Blet%20n%3Ddocument.createElement(%22code%22)%3Bn.textContent%3Dr.code%3Blet%20s%3Ddocument.createElement(%22button%22)%3Bs.type%3D%22button%22%2Cs.className%3D%22g-btn%20g-btn-secondary%22%2Cs.textContent%3D_(e.label).value%2Cs.addEventListener(%22click%22%2Ci%3D%3E%7By.mode!%3D%3D%22editor%22%26%26(i.stopPropagation()%2CN(%7Btype%3A%22copy%22%2CnodeId%3Ae.id%7D))%7D)%2Ct.append(n%2Cs)%7Delse%20t.textContent%3Dr%3F.text%3F%3F_(e.fallback).value%2Cy.mode%3D%3D%3D%22editor%22%26%26t.classList.add(%22g-missing%22)%7Delse%20if(e.type%3D%3D%3D%22countdown%22)%7Bt%3Ddocument.createElement(%22span%22)%2Ct.setAttribute(%22role%22%2C%22timer%22)%2Ct.style.fontVariantNumeric%3D%22tabular-nums%22%3Blet%20r%3Dq(e.id)%2Cn%3Dr%3F.countdownAt%3FDate.parse(r.countdownAt)%3ANaN%2Cs%3De.granularity%3D%3D%3D%22second%22%3Fvoid%200%3Anew%20Intl.NumberFormat(P%2C%7Bstyle%3A%22unit%22%2Cunit%3Ae.granularity%2CunitDisplay%3A%22short%22%7D)%3B!Number.isFinite(n)%26%26y.mode%3D%3D%3D%22editor%22%26%26t.classList.add(%22g-missing%22)%3Blet%20i%3D()%3D%3E%7Bif(!Number.isFinite(n))%7Bt.textContent%3Dr%3F.text%3F%3F_(e.fallback).value%3Breturn%7Dlet%20l%3DMath.max(0%2CMath.ceil((n-Date.now())%2F1e3))%3Bif(!l)%7Bt.textContent%3D_(e.expired).value%3Blet%20o%3DZ.get(e.id)%3Bo!%3D%3Dvoid%200%26%26clearInterval(o)%2CZ.delete(e.id)%3Breturn%7Dlet%20d%3De.granularity%2Cp%3Dd%3D%3D%3D%22day%22%3F86400%3Ad%3D%3D%3D%22hour%22%3F3600%3Ad%3D%3D%3D%22minute%22%3F60%3A1%2Cf%3Ds%3Fs.format(Math.ceil(l%2Fp))%3A%5BMath.floor(l%2F86400)%2CMath.floor(l%2F3600)%2524%2CMath.floor(l%2F60)%2560%2Cl%2560%5D.map(o%3D%3EString(o).padStart(2%2C%220%22)).join(%22%3A%22)%3Bt.textContent!%3D%3Df%26%26(t.textContent%3Df)%7D%3Bi()%2CNumber.isFinite(n)%26%26n%3EDate.now()%26%26Z.set(e.id%2CsetInterval(i%2C1e3))%7Delse%20if(e.type%3D%3D%3D%22quantity_picker%22)%7Bt%3Ddocument.createElement(%22div%22)%3Blet%20r%3DE%3F.quantities%3F.%5Be.id%5D%2Cn%3Ddocument.createElement(%22label%22)%3Bn.textContent%3D_(e.label).value%3Blet%20s%3Ddocument.createElement(%22input%22)%3Bs.type%3D%22range%22%2Cs.id%3D%60quantity-%24%7Be.id%7D%60%2Cn.htmlFor%3Ds.id%2Cs.min%3DString(r%3F.minimum%3F%3Fe.minimumQuantity)%2Cs.max%3DString(r%3F.maximum%3F%3Fe.maximumQuantity)%2Cs.step%3DString(e.step)%2Cs.value%3DString(typeof%20h%5Be.id%5D%3D%3D%22number%22%3Fh%5Be.id%5D%3Ae.defaultQuantity)%2Ch%5Be.id%5D%3DNumber(s.value)%2Cs.disabled%3Dy.mode!%3D%3D%22editor%22%26%26!r%3F.available%2Cs.style.cssText%3D%22width%3A100%25%3Baccent-color%3Avar(--g-primary)%22%3Blet%20i%3Ddocument.createElement(%22output%22)%3Bi.textContent%3Dr%3F.label%7C%7C_(e.fallback).value%2Cs.setAttribute(%22aria-valuetext%22%2Cr%3F.label%3F%3FString(s.value))%2Cs.oninput%3D()%3D%3E%7Bh%5Be.id%5D%3DNumber(s.value)%2CN(%7Btype%3A%22selection%22%2Cselection%3AK()%7D)%7D%2Ct.append(n%2Cs%2Ci)%7Delse%20if(e.type%3D%3D%3D%22plan_picker%22)%7Bt%3Ddocument.createElement(%22div%22)%2Ct.setAttribute(%22role%22%2Ce.grouping%3F%22group%22%3A%22radiogroup%22)%2Ct.setAttribute(%22aria-label%22%2C_(e.label).value)%2Ct.style.cssText%3D%22display%3Aflex%3Bflex-direction%3Acolumn%3Bgap%3A8px%22%3Blet%20r%3DE%3F.pickers%5Be.id%5D%2Cn%3De.grouping%3Bif(!r%3F.options.length)t.textContent%3D_(e.fallback).value%2Cy.mode%3D%3D%3D%22editor%22%26%26t.classList.add(%22g-missing%22)%3Belse%7Blet%20s%3Dtypeof%20h%5Be.id%5D%3D%3D%22string%22%3FString(h%5Be.id%5D)%3Ar.selected%2Ci%3DG%5Be.id%5D%3Bif(n)%7Bif(!i)%7Blet%20S%3Dn.assignments.find(v%3D%3Ev.productVersionId%3D%3D%3Ds)%3Bi%3D%7Bperiod%3AS%3F.period%3F%3F%22month%22%2CtierId%3AS%3F.tierId%3F%3Fn.tiers%5B0%5D.id%7D%2CG%5Be.id%5D%3Di%7Dlet%20o%3Dn.assignments.find(S%3D%3ES.tierId%3D%3D%3Di.tierId%26%26S.period%3D%3D%3Di.period)%3Bs%3Do%26%26r.options.includes(o.productVersionId)%3Fo.productVersionId%3A%22%22%3Blet%20c%3Ddocument.createElement(%22div%22)%3Bc.setAttribute(%22role%22%2C%22radiogroup%22)%2Cc.setAttribute(%22aria-label%22%2C%60%24%7B_(n.monthLabel).value%7D%20%2F%20%24%7B_(n.yearLabel).value%7D%60)%2Cc.style.cssText%3D%22display%3Aflex%3Bgap%3A4px%3Bpadding%3A4px%3Bborder%3A1px%20solid%20var(--g-border)%3Bborder-radius%3A10px%22%3Blet%20u%3D%5B%22month%22%2C%22year%22%5D%2Cm%3Du.filter(S%3D%3En.assignments.some(v%3D%3Ev.period%3D%3D%3DS%26%26r.options.includes(v.productVersionId)))%2Cw%3DS%3D%3E%7Bi.period%3DS%3Blet%20v%3Dn.assignments.find(L%3D%3EL.tierId%3D%3D%3Di.tierId%26%26L.period%3D%3D%3DS)%3Bh%5Be.id%5D%3Dv%26%26r.options.includes(v.productVersionId)%3Fv.productVersionId%3A%22%22%2CU()%2CN(%7Btype%3A%22selection%22%2Cselection%3AK()%7D)%2CJ(e.id)%3F.querySelector(%60%5Bdata-product-period%3D%22%24%7BS%7D%22%5D%60)%3F.focus()%7D%3Bfor(let%20S%20of%20u)%7Blet%20v%3Ddocument.createElement(%22button%22)%3Bv.type%3D%22button%22%2Cv.className%3D%60g-btn%20g-btn-%24%7BS%3D%3D%3Di.period%3F%22primary%22%3A%22secondary%22%7D%60%2Cv.style.cssText%3D%22flex%3A1%3Bmin-width%3A0%3Bmin-height%3A40px%22%2Cv.dataset.productPeriod%3DS%2Cv.setAttribute(%22role%22%2C%22radio%22)%2Cv.setAttribute(%22aria-checked%22%2CString(S%3D%3D%3Di.period))%2Cv.textContent%3D_(S%3D%3D%3D%22month%22%3Fn.monthLabel%3An.yearLabel).value%2Cv.disabled%3D!m.includes(S)%2Cv.tabIndex%3Dy.mode%3D%3D%3D%22editor%22%7C%7Cv.disabled%3F-1%3AS%3D%3D%3Di.period%7C%7C!m.includes(i.period)%26%26S%3D%3D%3Dm%5B0%5D%3F0%3A-1%2Cv.addEventListener(%22click%22%2CL%3D%3E%7By.mode!%3D%3D%22editor%22%26%26(L.stopPropagation()%2Cw(S))%7D)%2Cv.addEventListener(%22keydown%22%2CL%3D%3E%7Bif(y.mode%3D%3D%3D%22editor%22%7C%7C!m.length)return%3Blet%20R%3B%5B%22ArrowRight%22%2C%22ArrowDown%22%5D.includes(L.key)%3FR%3D(m.indexOf(S)%2B1)%25m.length%3A%5B%22ArrowLeft%22%2C%22ArrowUp%22%5D.includes(L.key)%3FR%3D(m.indexOf(S)-1%2Bm.length)%25m.length%3AL.key%3D%3D%3D%22Home%22%3FR%3D0%3AL.key%3D%3D%3D%22End%22%26%26(R%3Dm.length-1)%2CR!%3D%3Dvoid%200%26%26(L.preventDefault()%2Cw(m%5BR%5D))%7D)%2Cc.append(v)%7Dt.append(c)%7Dh%5Be.id%5D%3Ds%3F%3F%22%22%3Blet%20l%3Dn%3Fn.tiers.map(o%3D%3E(%7Btier%3Ao%2Cid%3An.assignments.find(c%3D%3Ec.tierId%3D%3D%3Do.id%26%26c.period%3D%3D%3Di.period)%3F.productVersionId%7D))%3Ar.options.map(o%3D%3E(%7Bid%3Ao%2Ctier%3Avoid%200%7D))%2Cd%3Dl.filter(o%3D%3Eo.id%26%26r.options.includes(o.id))%2Cp%3Dn%3Fdocument.createElement(%22div%22)%3At%3Bn%26%26(p.setAttribute(%22role%22%2C%22radiogroup%22)%2Cp.setAttribute(%22aria-label%22%2C_(e.label).value)%2Cp.style.cssText%3D%22display%3Aflex%3Bflex-direction%3Acolumn%3Bgap%3A8px%22%2Ct.append(p))%3Blet%20f%3Do%3D%3E%7B!o.id%7C%7C!r.options.includes(o.id)%7C%7C(n%26%26o.tier%26%26(i.tierId%3Do.tier.id)%2Ch%5Be.id%5D%3Do.id%2CU()%2CN(%7Btype%3A%22selection%22%2Cselection%3AK()%7D)%2CJ(e.id)%3F.querySelector(%60%5Bdata-plan-id%3D%22%24%7Bo.id%7D%22%5D%60)%3F.focus())%7D%3Bfor(let%20o%20of%20l)%7Blet%20c%3Do.id%3FE.plans%5Bo.id%5D%3Avoid%200%2Cu%3D!!c%26%26r.options.includes(o.id)%2Cm%3Ddocument.createElement(%22button%22)%3Bm.type%3D%22button%22%2Cm.className%3D%22g-btn%20g-btn-secondary%22%2Cm.style.cssText%3D%22width%3A100%25%3Btext-align%3Astart%3Bmin-height%3A44px%22%2Cm.setAttribute(%22role%22%2C%22radio%22)%3Blet%20w%3Dn%3Fo.tier%3F.id%3D%3D%3Di.tierId%3Ao.id%3D%3D%3Ds%3Bm.setAttribute(%22aria-checked%22%2CString(w))%2Cm.disabled%3D!u%2Cm.tabIndex%3Dy.mode%3D%3D%3D%22editor%22%7C%7C!u%3F-1%3Aw%7C%7C!s%26%26o%3D%3D%3Dd%5B0%5D%3F0%3A-1%2Co.id%26%26(m.dataset.planId%3Do.id)%2Co.tier%26%26(m.dataset.productTier%3Do.tier.id)%3Blet%20S%3Do.id%3FE.nodes%5Be.id%5D%3F.byPlan%3F.%5Bo.id%5D%3F.price%3Avoid%200%3Bm.textContent%3Du%3F%60%24%7Bo.tier%3F.name%3F%3Fc.name%7D%20%5CxB7%20%24%7BS%3F.current%3F%3Fc.price%7D%24%7BS%3F.period%3F%3Fc.period%7D%60%3A%60%24%7Bo.tier%3F.name%3F%3F%22%22%7D%20%5CxB7%20%24%7B_(n%3F.unavailableLabel%3F%3Fe.fallback).value%7D%60%2Cw%26%26(m.style.borderColor%3D%22var(--g-primary)%22%2Cm.style.boxShadow%3D%22inset%200%200%200%201px%20var(--g-primary)%22%2Ce.states%3F.selected%26%26oe(m%2C%7Btype%3A%22text%22%2Cid%3Ae.id%2Ctext%3Ae.label%2Cvariant%3A%22body%22%2Cstyle%3Ae.states.selected%7D%2Cnull))%2Cm.addEventListener(%22click%22%2Cv%3D%3E%7By.mode%3D%3D%3D%22editor%22%7C%7C!u%7C%7C(v.stopPropagation()%2Cf(o))%7D)%2Cm.addEventListener(%22keydown%22%2Cv%3D%3E%7Bif(y.mode%3D%3D%3D%22editor%22%7C%7C!d.length)return%3Blet%20L%3Dd.indexOf(o)%2CR%3B%5B%22ArrowRight%22%2C%22ArrowDown%22%5D.includes(v.key)%3FR%3D(L%2B1)%25d.length%3A%5B%22ArrowLeft%22%2C%22ArrowUp%22%5D.includes(v.key)%3FR%3D(L-1%2Bd.length)%25d.length%3Av.key%3D%3D%3D%22Home%22%3FR%3D0%3Av.key%3D%3D%3D%22End%22%26%26(R%3Dd.length-1)%2CR!%3D%3Dvoid%200%26%26(v.preventDefault()%2Cf(d%5BR%5D))%7D)%2Cp.append(m)%7Dif(n%26%26!s)%7Blet%20o%3Ddocument.createElement(%22p%22)%3Bo.setAttribute(%22role%22%2C%22status%22)%2Co.textContent%3D_(n.unavailableLabel).value%2Ct.append(o)%7D%7D%7Delse%20if(e.type%3D%3D%3D%22divider%22)t%3Ddocument.createElement(%22hr%22)%2Ct.className%3D%22g-divider%22%3Belse%20if(e.type%3D%3D%3D%22spacer%22)t%3Ddocument.createElement(%22div%22)%2Ct.setAttribute(%22aria-hidden%22%2C%22true%22)%2Ct.style.flex%3D%220%200%20auto%22%2Ct.style.width%3Dt.style.height%3D%60%24%7Bgt%5Be.size%5D%3F%3F0%7Dpx%60%3Belse%20if(e.type%3D%3D%3D%22custom_html%22)%7Bt%3Ddocument.createElement(%22div%22)%2Ct.className%3D%22g-custom%22%3Blet%20r%3Dt.attachShadow(%7Bmode%3A%22open%22%7D)%2Cn%3Ddocument.createElement(%22style%22)%2Cs%3D%22%40media(prefers-reduced-motion%3Areduce)%7B%3Ahost%2C%3Ahost%3A%3Abefore%2C%3Ahost%3A%3Aafter%2C*%2C*%3A%3Abefore%2C*%3A%3Aafter%7Banimation%3Anone!important%3Btransition%3Anone!important%3Bscroll-behavior%3Aauto!important%7D%7D%22%3Bn.textContent%3D%60%3Ahost%7Bdisplay%3Ablock%7D%24%7Bs%7D%40layer%20indiana-accessibility%7B%24%7Bs%7D%7D%24%7Be.css%7D%60%3Blet%20i%3Ddocument.createElement(%22div%22)%3Br.append(n%2Ci)%2Cge.set(t%2C%7Bbody%3Ai%2Csource%3Anull%2Cbound%3A!1%2Cunresolved%3A!1%2Cvariables%3A%5B%5D%2Cbindings%3A%5B%5D%2Cfallback%3A!1%2Cinitialized%3A!1%2Ctemplate%3Anull%2Cparked%3A!1%7D)%2CZe(t%2Ce)%7Delse%20return%20null%3Breturn%20e.style%26%26oe(t%2Ce%2Ca)%2Ct.dataset.gNode%3De.id%2Ct.dataset.gLabel%3Dwt(e)%2C_e.set(e.id%2Ct)%2Ct%7Dfunction%20Et(e%2Ca)%7Blet%20t%3Da.interaction%2Cr%3D%5B...e.children%5D%3Be.setAttribute(%22aria-label%22%2C_(t.label).value)%3Blet%20n%3D%24%3F.bindings.find(i%3D%3Ei.componentId%3D%3D%3Da.id)%2Cs%3Dn%3F%7Bid%3An.variable%2Csource%3An.componentId%2Crequired%3An.required%7D%3Avoid%200%3Bif(s)%7Blet%20i%3Ddocument.createElement(%22p%22)%3Bi.className%3D%22g-text%20g-body%22%2Ci.textContent%3D_(t.label).value%2B(s.required%3F%22%20*%22%3A%22%22)%2Ce.prepend(i)%2Cs.required%26%26e.setAttribute(%22aria-required%22%2C%22true%22)%7Dif(t.type%3D%3D%3D%22input%22)%7Blet%20i%3Ddocument.createElement(%22input%22)%3Bi.type%3Dt.keyboard%2Ci.maxLength%3Dt.maxLength%2Ci.autocomplete%3D%22off%22%2Ci.setAttribute(%22aria-label%22%2C_(t.label).value)%2Ci.setAttribute(%22aria-required%22%2CString(!!s%3F.required))%2Ci.value%3Dtypeof%20h%5Ba.id%5D%3D%3D%22string%22%3FString(h%5Ba.id%5D)%3A%22%22%2Ci.style.cssText%3D%22box-sizing%3Aborder-box%3Bwidth%3A100%25%3Bmin-height%3A44px%3Bpadding%3A10px%2014px%3Bborder%3A1px%20solid%20var(--g-border)%3Bborder-radius%3A8px%3Bbackground%3Avar(--g-surface)%3Bcolor%3Avar(--g-text)%3Bfont%3Ainherit%22%2Ci.disabled%3Dy.mode!%3D%3D%22live%22%2Ci.addEventListener(%22input%22%2C()%3D%3E%7Bh%5Ba.id%5D%3Di.value%2Cxe(a.id%2Ci.value)%7D)%2Ce.append(i)%3Breturn%7Dif(!(y.mode!%3D%3D%22live%22%7C%7C!r.length%26%26t.type!%3D%3D%22toggle%22))%7Bif(t.type%3D%3D%3D%22multiselect%22)%7Be.setAttribute(%22role%22%2C%22group%22)%2Ce.dataset.gMin%3DString(t.min)%3Blet%20i%3Da.children.filter(p%3D%3E!p.hidden)%2Cl%3Dnew%20Set(Array.isArray(h%5Ba.id%5D)%3Fh%5Ba.id%5D%3A%5B%5D)%2Cd%3D()%3D%3Er.forEach((p%2Cf)%3D%3E%7Blet%20o%3Dl.has(i%5Bf%5D.id)%3Bp.setAttribute(%22aria-checked%22%2CString(o))%2Cp.setAttribute(%22aria-disabled%22%2CString(!o%26%26l.size%3E%3Dt.max))%2Cp.style.outline%3Do%3F%222px%20solid%20var(--g-primary)%22%3A%22%22%2Cp.style.outlineOffset%3D%22-2px%22%7D)%3Br.forEach((p%2Cf)%3D%3E%7Bp.setAttribute(%22role%22%2C%22checkbox%22)%2Cp.tabIndex%3D0%2Cp.setAttribute(%22aria-label%22%2Cp.textContent%3F.trim()%7C%7CString(f%2B1))%2Cp.style.cursor%3D%22pointer%22%3Blet%20o%3D()%3D%3E%7Blet%20c%3Di%5Bf%5D.id%3Bif(l.has(c))l.delete(c)%3Belse%20if(l.size%3Ct.max)l.add(c)%3Belse%20return%3Blet%20u%3Di.filter(m%3D%3El.has(m.id)).map(m%3D%3Em.id)%3Bh%5Ba.id%5D%3Du%2Cd()%2Cxe(a.id%2Cu)%7D%3Bp.addEventListener(%22click%22%2Cc%3D%3E%7Bc.stopPropagation()%2Co()%7D)%2Cp.addEventListener(%22keydown%22%2Cc%3D%3E%7B%5B%22%20%22%2C%22Enter%22%5D.includes(c.key)%26%26(c.preventDefault()%2Cc.stopPropagation()%2Co())%7D)%7D)%2Cd()%3Breturn%7Dif(t.type%3D%3D%3D%22select%22)%7Be.setAttribute(%22role%22%2C%22radiogroup%22)%3Blet%20i%3Da.children.filter(f%3D%3E!f.hidden)%2Cl%3DC(a)%3Fa.interaction.pickerId%3Avoid%200%2Cd%3Di.findIndex(f%3D%3El%3Ff.type%3D%3D%3D%22stack%22%26%26f.bind%3F.plan%3D%3D%3Dh%5Bl%5D%3Af.id%3D%3D%3Dh%5Ba.id%5D)%3B!l%26%26d%3C0%26%26!s%3F.required%26%26(d%3DMath.min(t.defaultIndex%2Cr.length-1))%3Blet%20p%3D(f%2Co%3D!1%2Cc%3D!0)%3D%3E%7Bif(l%26%26c%26%26f%3E%3D0)%7Blet%20u%3Di%5Bf%5D%2Cm%3Du.type%3D%3D%3D%22stack%22%3Fu.bind%3F.plan%3Avoid%200%3Bif(!m%7C%7C!E%3F.pickers%5Bl%5D%3F.options.includes(m))return%3Bh%5Ba.id%5D%3Du.id%2Ch%5Bl%5D%3Dm%2CU()%2CN(%7Btype%3A%22selection%22%2Cselection%3AK()%7D)%2Co%26%26I.querySelector(%60%5Bdata-g-node%3D%22%24%7Bu.id%7D%22%5D%60)%3F.focus(%7BpreventScroll%3A!0%7D)%3Breturn%7Dd%3Df%2Cf%3E%3D0%26%26(h%5Ba.id%5D%3Di%5Bf%5D.id)%2Cc%26%26f%3E%3D0%26%26xe(a.id%2Ci%5Bf%5D.id)%2Cr.forEach((u%2Cm)%3D%3E%7Bu.setAttribute(%22aria-checked%22%2CString(m%3D%3D%3Df))%2Cu.tabIndex%3Dm%3D%3D%3D(f%3C0%3F0%3Af)%3F0%3A-1%2Cu.style.cssText%3D%22%22%3Blet%20w%3Di%5Bm%5D%3Bw.type%3D%3D%3D%22stack%22%26%26(u.style.alignItems%3DBe%5Bw.align%5D%3F%3F%22stretch%22%2Cu.style.justifyContent%3Dqe%5Bw.justify%5D%3F%3F%22flex-start%22)%2Cw.style%26%26oe(u%2Cw%2Ca)%2Cm%3D%3D%3Df%26%26(t.selectedStyle%26%26oe(u%2C%7B...w%2Cstyle%3At.selectedStyle%7D%2Ca)%2Cw.type%3D%3D%3D%22stack%22%26%26w.states%3F.selected%26%26oe(u%2C%7B...w%2Cstyle%3Aw.states.selected%7D%2Ca)%2C!t.selectedStyle%3F.border%26%26!(w.type%3D%3D%3D%22stack%22%26%26w.states%3F.selected%3F.border)%26%26(u.style.outline%3D%222px%20solid%20var(--g-primary)%22%2Cu.style.outlineOffset%3D%22-2px%22))%2Cu.style.cursor%3D%22pointer%22%7D)%2Co%26%26f%3E%3D0%26%26r%5Bf%5D.focus()%7D%3Br.forEach((f%2Co)%3D%3E%7Bif(f.setAttribute(%22role%22%2C%22radio%22)%2Cl)%7Blet%20c%3Di%5Bo%5D%2Cu%3Dc.type%3D%3D%3D%22stack%22%3Fc.bind%3F.plan%3Avoid%200%3Bf.setAttribute(%22aria-disabled%22%2CString(!u%7C%7C!E%3F.pickers%5Bl%5D%3F.options.includes(u)))%7Df.setAttribute(%22aria-label%22%2Cf.textContent%3F.trim()%7C%7CString(o%2B1))%2Cf.addEventListener(%22click%22%2Cc%3D%3E%7Bc.stopPropagation()%2Cp(o)%7D)%2Cf.addEventListener(%22keydown%22%2Cc%3D%3E%7Blet%20u%3Dc.key%3Bif(!%5B%22ArrowRight%22%2C%22ArrowLeft%22%2C%22ArrowDown%22%2C%22ArrowUp%22%2C%22Home%22%2C%22End%22%2C%22%20%22%2C%22Enter%22%5D.includes(u))return%3Bc.preventDefault()%2Cc.stopPropagation()%3Blet%20m%3Dd%3C0%3Fo%3Ad%3Bp(u%3D%3D%3D%22Home%22%3F0%3Au%3D%3D%3D%22End%22%3Fr.length-1%3Au%3D%3D%3D%22ArrowRight%22%7C%7Cu%3D%3D%3D%22ArrowDown%22%3F(m%2B1)%25r.length%3Au%3D%3D%3D%22ArrowLeft%22%7C%7Cu%3D%3D%3D%22ArrowUp%22%3F(m%2Br.length-1)%25r.length%3Ao%2C!0)%7D)%7D)%2Cp(d%2C!1%2C!1)%7Delse%20if(t.type%3D%3D%3D%22tabs%22)%7Blet%20i%3Da.children.filter(o%3D%3E!o.hidden)%2Cl%3Ddocument.createElement(%22div%22)%3Bl.setAttribute(%22role%22%2C%22tablist%22)%2Cl.setAttribute(%22aria-label%22%2C_(t.label).value)%2Cl.style.cssText%3D%22display%3Aflex%3Bgap%3A4px%3Bpadding%3A4px%3Bborder%3A1px%20solid%20var(--g-border)%3Bborder-radius%3A12px%22%3Blet%20d%3Dr.map((o%2Cc)%3D%3E%7Blet%20u%3Ddocument.createElement(%22button%22)%3Breturn%20u.type%3D%22button%22%2Cu.setAttribute(%22role%22%2C%22tab%22)%2Cu.textContent%3DDe(i%5Bc%5D)%7C%7CString(c%2B1)%2Cu.style.cssText%3D%22flex%3A1%3Bmin-width%3A0%3Bmin-height%3A44px%3Bpadding%3A8px%2016px%3Bborder%3A0%3Bborder-radius%3A8px%3Bfont%3Ainherit%3Bcursor%3Apointer%22%2Co.id%3D%60g-%24%7Ba.id%7D-%24%7Bi%5Bc%5D.id%7D%60%2Co.setAttribute(%22role%22%2C%22tabpanel%22)%2Cu.setAttribute(%22aria-controls%22%2Co.id)%2Cl.append(u)%2Cu%7D)%2Cp%3D(o%2Cc%3D!1%2Cu%3D!1)%3D%3E%7Bif(h%5Ba.id%5D%3Di%5Bo%5D.id%2Cu%26%26k%26%26Object.keys(O(k)).length)%7Bfor(let%20m%20of%20Object.keys(O(k)))delete%20h%5Bm%5D%3BU()%2CN(%7Btype%3A%22selection%22%2Cselection%3AK()%7D)%2Cc%26%26I.querySelector(%60%5Bdata-g-node%3D%22%24%7Ba.id%7D%22%5D%20%5Brole%3D%22tab%22%5D%5Baria-selected%3D%22true%22%5D%60)%3F.focus(%7BpreventScroll%3A!0%7D)%3Breturn%7Dr.forEach((m%2Cw)%3D%3E%7Bm.hidden%3Dw!%3D%3Do%2Cd%5Bw%5D.setAttribute(%22aria-selected%22%2CString(w%3D%3D%3Do))%2Cd%5Bw%5D.tabIndex%3Dw%3D%3D%3Do%3F0%3A-1%2Cd%5Bw%5D.style.background%3Dw%3D%3D%3Do%3F%22var(--g-primary)%22%3A%22transparent%22%2Cd%5Bw%5D.style.color%3Dw%3D%3D%3Do%3F%22var(--g-on-primary)%22%3A%22var(--g-text)%22%7D)%2Cc%26%26d%5Bo%5D.focus()%2Cde()%7D%3Bd.forEach((o%2Cc)%3D%3E%7Bo.addEventListener(%22click%22%2Cu%3D%3E%7Bu.stopPropagation()%2Cp(c%2C!1%2C!0)%7D)%2Co.addEventListener(%22keydown%22%2Cu%3D%3E%7B%5B%22ArrowLeft%22%2C%22ArrowRight%22%2C%22Home%22%2C%22End%22%5D.includes(u.key)%26%26(u.preventDefault()%2Cu.stopPropagation()%2Cp(u.key%3D%3D%3D%22Home%22%3F0%3Au.key%3D%3D%3D%22End%22%3Fr.length-1%3A(c%2B(u.key%3D%3D%3D%22ArrowRight%22%3F1%3Ar.length-1))%25r.length%2C!0%2C!0))%7D)%7D)%2Ce.prepend(l)%3Blet%20f%3Di.findIndex(o%3D%3Eo.id%3D%3D%3Dh%5Ba.id%5D)%3Bp(f%3E%3D0%3Ff%3AMath.min(t.defaultIndex%2Cr.length-1))%7Delse%20if(t.type%3D%3D%3D%22toggle%22)%7Blet%20i%3Ddocument.createElement(%22button%22)%3Bi.type%3D%22button%22%2Ci.setAttribute(%22role%22%2C%22switch%22)%2Ci.className%3D%22g-btn%20g-btn-secondary%22%2Ci.style.cssText%3D%22display%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Aspace-between%3Bgap%3A16px%3Bcolor%3Avar(--g-text)%22%3Blet%20l%3Ddocument.createElement(%22span%22)%3Bl.textContent%3D_(t.label).value%3Blet%20d%3Ddocument.createElement(%22span%22)%3Bd.setAttribute(%22aria-hidden%22%2C%22true%22)%2Cd.style.cssText%3D%22position%3Arelative%3Bdisplay%3Ablock%3Bflex%3Anone%3Bwidth%3A44px%3Bheight%3A24px%3Bborder-radius%3A12px%3Bbackground%3Avar(--g-border)%22%3Blet%20p%3Ddocument.createElement(%22span%22)%3Bp.style.cssText%3D%22position%3Aabsolute%3Btop%3A3px%3Bleft%3A3px%3Bwidth%3A18px%3Bheight%3A18px%3Bborder-radius%3A50%25%3Bbackground%3A%23fff%3Bbox-shadow%3A0%201px%203px%20%230003%22%2Cd.append(p)%2Ci.append(l%2Cd)%3Blet%20f%3D(o%2Cc%3D!1)%3D%3E%7Bif(h%5Ba.id%5D%3Do%2Cc%26%26k%26%26Object.keys(O(k)).length)%7Bfor(let%20u%20of%20Object.keys(O(k)))delete%20h%5Bu%5D%3BU()%2CN(%7Btype%3A%22selection%22%2Cselection%3AK()%7D)%2CI.querySelector(%60%5Bdata-g-node%3D%22%24%7Ba.id%7D%22%5D%20%5Brole%3D%22switch%22%5D%60)%3F.focus(%7BpreventScroll%3A!0%7D)%3Breturn%7Di.setAttribute(%22aria-checked%22%2CString(o))%2Cd.style.background%3Do%3F%22var(--g-primary)%22%3A%22var(--g-border)%22%2Cp.style.left%3Do%3F%2223px%22%3A%223px%22%2Cp.style.background%3Do%3F%22var(--g-on-primary)%22%3A%22%23FFFFFF%22%2Cr.forEach((u%2Cm)%3D%3Eu.hidden%3Dm!%3D%3D(o%3F0%3A1))%2Cde()%7D%3Bi.addEventListener(%22click%22%2Co%3D%3E%7Bo.stopPropagation()%2Cf(!h%5Ba.id%5D%2C!0)%2Cxe(a.id%2C!!h%5Ba.id%5D)%7D)%2Ce.prepend(i)%2Cf(typeof%20h%5Ba.id%5D%3D%3D%22boolean%22%3Fh%5Ba.id%5D%3At.defaultEnabled)%7Delse%7Be.setAttribute(%22role%22%2C%22region%22)%2Ce.setAttribute(%22aria-roledescription%22%2C%22carousel%22)%3Blet%20i%3Ddocument.createElement(%22div%22)%3Bi.style.cssText%3D%22display%3Aflex%3Balign-items%3Acenter%3Bjustify-content%3Acenter%3Bgap%3A10px%22%3Blet%20l%3Ddocument.createElement(%22button%22)%2Cd%3Ddocument.createElement(%22button%22)%2Cp%3Ddocument.createElement(%22span%22)%2Cf%3DP.startsWith(%22zh%22)%3Bl.textContent%3D%22%5Cu2190%22%2Cd.textContent%3D%22%5Cu2192%22%2Cl.setAttribute(%22aria-label%22%2Cf%3F%22%5Cu4E0A%5Cu4E00%5Cu6761%5Cu8BC4%5Cu4EF7%22%3A%22Previous%20review%22)%2Cd.setAttribute(%22aria-label%22%2Cf%3F%22%5Cu4E0B%5Cu4E00%5Cu6761%5Cu8BC4%5Cu4EF7%22%3A%22Next%20review%22)%3Bfor(let%20c%20of%5Bl%2Cd%5D)c.type%3D%22button%22%2Cc.className%3D%22g-btn%20g-btn-secondary%22%2Cc.style.color%3D%22var(--g-text)%22%3Bp.setAttribute(%22aria-live%22%2C%22polite%22)%3Blet%20o%3Dc%3D%3E%7Bie%5Ba.id%5D%3Dc%2Cr.forEach((u%2Cm)%3D%3Eu.hidden%3Dm!%3D%3Dc)%2Cp.textContent%3D%60%24%7Bc%2B1%7D%20%2F%20%24%7Br.length%7D%60%2Cde()%7D%3Bl.addEventListener(%22click%22%2Cc%3D%3E%7Bc.stopPropagation()%2Co((ie%5Ba.id%5D%2Br.length-1)%25r.length)%7D)%2Cd.addEventListener(%22click%22%2Cc%3D%3E%7Bc.stopPropagation()%2Co((ie%5Ba.id%5D%2B1)%25r.length)%7D)%2Ci.append(l%2Cp%2Cd)%2Ce.append(i)%2Co(ie%5Ba.id%5D%3F%3F0)%7D%7D%7Dfunction%20De(e)%7Bif(e.hidden)return%22%22%3Bif(e.type%3D%3D%3D%22text%22%26%26(e.variant%3D%3D%3D%22title%22%7C%7Ce.variant%3D%3D%3D%22heading%22))return%20_(e.text).value%3Bif(e.type%3D%3D%3D%22stack%22)for(let%20a%20of%20e.children)%7Blet%20t%3DDe(a)%3Bif(t)return%20t%7Dreturn%22%22%7Dfunction%20tt(e)%7Breturn%20e.type%3D%3D%3D%22stack%22%26%26!e.interaction%26%26!e.purchaseAction%7Dfunction%20ve(e)%7Blet%20a%3D%5B%5D%2Ct%3Dr%3D%3E%7Blet%20n%3DE%3F.nodes%5Br.id%5D%3Bif(a.push(r.id%2Cq(r.id))%2Cn%3F.picker%26%26a.push(h%5Bn.picker%5D%2CE%3F.pickers%5Bn.picker%5D)%2Cr.type%3D%3D%3D%22text%22)a.push(se(r%2C%22text%22%2Cr.text))%3Belse%20if(r.type%3D%3D%3D%22button%22)a.push(se(r%2C%22label%22%2Cr.label))%3Belse%20if(r.type%3D%3D%3D%22image%22)a.push(se(r%2C%22alt%22%2Cr.alt))%3Belse%20if(r.type%3D%3D%3D%22custom_html%22)%7Blet%20s%3D%24e(r)%3Ba.push(s%2Cy.mode%3D%3D%3D%22live%22%26%26%24%3FKe(s).map(i%3D%3E%5Bi%2CMe(i)%5D)%3Avoid%200)%7Delse%20if(r.type%3D%3D%3D%22customer_data%22)a.push(ee%3F.nodes%5Br.id%5D)%3Belse%20if(r.type%3D%3D%3D%22plan_picker%22)%7Blet%20s%3DE%3F.pickers%5Br.id%5D%3Ba.push(h%5Br.id%5D%2CG%5Br.id%5D%2Cs%2Cn%2Cs%3F.options.map(i%3D%3EE%3F.plans%5Bi%5D))%7Delse%20r.type%3D%3D%3D%22stack%22%26%26(r.interaction%3F.type!%3D%3D%22input%22%26%26a.push(h%5Br.id%5D%2Cie%5Br.id%5D)%2CC(r)%26%26a.push(h%5Br.interaction.pickerId%5D%2CE%3F.pickers%5Br.interaction.pickerId%5D)%2Cr.children.forEach(t))%7D%3Breturn%20t(e)%2CJSON.stringify(a)%7Dfunction%20at(e)%7Be.hidden%7C%7C(tt(e)%3Fe.children.forEach(at)%3Ale.set(e.id%2Cve(e)))%7Dfunction%20He(e)%7Bif(e.type%3D%3D%3D%22custom_html%22)%7Blet%20t%3DJ(e.id)%2Cr%3Dt%26%26ge.get(t)%3Br%26%26Ce(r)%7Dlet%20a%3DZ.get(e.id)%3Ba!%3D%3Dvoid%200%26%26clearInterval(a)%2CZ.delete(e.id)%2Ce.type%3D%3D%3D%22stack%22%26%26e.children.forEach(He)%7Dfunction%20rt(e%2Ca)%7Bif(e.hidden)return%3Bif(tt(e))%7Be.children.forEach(n%3D%3Ert(n%2Ce))%3Breturn%7Dif(le.get(e.id)%3D%3D%3Dve(e))return%3Blet%20t%3DJ(e.id)%3Bif(!t)return%3Bif(e.type%3D%3D%3D%22custom_html%22%26%26ge.has(t))%7BZe(t%2Ce)%2Cle.set(e.id%2Cve(e))%3Breturn%7DHe(e)%3Blet%20r%3Dwe(e%2Ca)%3Br%26%26(t.replaceWith(r)%2Cle.set(e.id%2Cve(e)))%7Dfunction%20At()%7Blet%20e%3Ddocument.activeElement%3Bif(!(e%20instanceof%20HTMLElement)%7C%7C!I.contains(e))return%3Blet%20a%3De.closest(%22%5Bdata-g-node%5D%22)%3Bif(!a)return%3Blet%20t%3D%5B%5D%3Bfor(let%20r%3De%3Br!%3D%3Da%3B)%7Blet%20n%3Dr.parentElement%3Bif(!n)return%3Bt.unshift(Array.prototype.indexOf.call(n.children%2Cr))%2Cr%3Dn%7Dreturn%7Bactive%3Ae%2CnodeId%3Aa.dataset.gNode%2Cpath%3At%2Cidentity%3A%5B%22productPeriod%22%2C%22planId%22%2C%22productTier%22%2C%22gDataFocus%22%5D.map(r%3D%3E%5Br%2Ce.dataset%5Br%5D%5D).find((%5B%2Cr%5D)%3D%3Er!%3D%3Dvoid%200)%2Cselection%3Ae%20instanceof%20HTMLInputElement%26%26e.selectionStart!%3D%3Dnull%3F%7Bstart%3Ae.selectionStart%2Cend%3Ae.selectionEnd%2Cdirection%3Ae.selectionDirection%7D%3Avoid%200%7D%7Dfunction%20_t(e)%7Bif(!e%7C%7Ce.active.isConnected)return%3Blet%20a%3DJ(e.nodeId)%3Bif(!a)return%3Blet%20t%3Da%3Bif(e.identity)%7Blet%5Br%2Cn%5D%3De.identity%3Bt%3D%5B...a.querySelectorAll(%22*%22)%5D.find(s%3D%3Es.dataset%5Br%5D%3D%3D%3Dn)%7Delse%20for(let%20r%20of%20e.path)t%3Dt%3F.children%5Br%5D%3B!t%7C%7Ct.hasAttribute(%22disabled%22)%7C%7C(t.focus(%7BpreventScroll%3A!0%7D)%2Ce.selection%26%26t%20instanceof%20HTMLInputElement%26%26%5B%22text%22%2C%22search%22%2C%22tel%22%2C%22url%22%2C%22password%22%5D.includes(t.type)%26%26t.setSelectionRange(e.selection.start%2Ce.selection.end%2Ce.selection.direction%3F%3Fvoid%200))%7Dfunction%20U(e%3D!1)%7Bif(!k)return%3Blet%20a%3De%3Fvoid%200%3AAt()%2Ct%3Dk.pages.find(n%3D%3En.id%3D%3D%3D(B%3F%3Fk.initialPageId))%3F%3Fk.pages%5B0%5D%3Bif(B%3Dt.id%2CE)%7Blet%20n%3D%7B%7D%2Cs%3Di%3D%3E%7Bi.type%3D%3D%3D%22stack%22%26%26i.children.forEach(s)%2Ci.type%3D%3D%3D%22plan_picker%22%26%26typeof%20h%5Bi.id%5D%3D%3D%22string%22%26%26h%5Bi.id%5D!%3D%3D%22%22%26%26(n%5Bi.id%5D%3DString(h%5Bi.id%5D))%7D%3Bs(t.root)%2CObject.assign(h%2Cpe(%7B...k%2Cpages%3A%5Bt%5D%7D%2CK()%2CE))%2CObject.assign(h%2Cn)%7Dlet%20r%3Dn%3D%3E%7Bif(n.type%3D%3D%3D%22stack%22%26%26n.children.forEach(r)%2Cn.type!%3D%3D%22plan_picker%22%7C%7C!n.grouping)return%3Blet%20s%3Dn.grouping%2Ci%3DE%3F.pickers%5Bn.id%5D%2Cl%3DG%5Bn.id%5D%3Bif(!l)%7Blet%20p%3Ds.assignments.find(f%3D%3Ef.productVersionId%3D%3D%3D(h%5Bn.id%5D%3F%3Fi%3F.selected))%3Bl%3D%7Bperiod%3Ap%3F.period%3F%3F%22month%22%2CtierId%3Ap%3F.tierId%3F%3Fs.tiers%5B0%5D.id%7D%2CG%5Bn.id%5D%3Dl%7Dlet%20d%3Ds.assignments.find(p%3D%3Ep.tierId%3D%3D%3Dl.tierId%26%26p.period%3D%3D%3Dl.period)%3Bh%5Bn.id%5D%3Dd%26%26i%3F.options.includes(d.productVersionId)%3Fd.productVersionId%3A%22%22%7D%3Bif(r(t.root)%2Ce%7C%7Cfe!%3D%3Dt)%7Bfe%26%26He(fe.root)%2CZ.forEach(i%3D%3EclearInterval(i))%2CZ.clear()%2Cle.clear()%2C_e.clear()%2CI.style.cssText%3D%22%22%2Cxt(t.theme%3F%7B...k%2Ctheme%3At.theme%7D%3Ak)%3Blet%20n%3DP.split(%22-%22)%5B0%5D%3Bdocument.documentElement.lang%3DP%2Cdocument.documentElement.dir%3D%5B%22ar%22%2C%22he%22%2C%22fa%22%2C%22ur%22%5D.includes(n)%3F%22rtl%22%3A%22ltr%22%2CI.dataset.gPresentation%3Dk.presentation.type%3Blet%20s%3Dwe(t.root%2Cnull)%3BI.replaceChildren(...s%3F%5Bs%5D%3A%5B%5D)%2Cfe%3Dt%2Cat(t.root)%7Delse%20rt(t.root%2Cnull)%3Bif(_t(a)%2CI.dataset.gPage%3Dt.id%2Cy.mode%3D%3D%3D%22live%22%26%26N(%7Btype%3A%22page%22%2CpageId%3At.id%7D)%2CJe)de()%3Belse%7BOe()%2Cje()%3Blet%20n%3DMath.ceil(I.getBoundingClientRect().height)%3BJe%3D!0%2CNe%3Dn%2CN(%7Btype%3A%22rendered%22%2Cheight%3An%2Clabel%3ADe(t.root)%7C%7Ck.name%7D)%7D%7Dfunction%20de()%7Blet%20e%3DMath.ceil(I.getBoundingClientRect().height)%3Be!%3D%3DNe%26%26(Ne%3De%2CN(%7Btype%3A%22resize%22%2Cheight%3Ae%7D))%2COe()%2Cje()%7Dfunction%20ke()%7BIe%7C%7C(Ie%3D!0%2Cwindow.requestAnimationFrame(()%3D%3E%7BIe%3D!1%2Cde()%7D))%7Dfunction%20je()%7Bif(y.mode!%3D%3D%22editor%22)return%3Blet%20e%3D%5B%5D%3Bfor(let%20t%20of%20I.querySelectorAll(%22%5Bdata-g-node%5D%22))%7Blet%20r%3Dt.getBoundingClientRect()%3B!r.width%7C%7C!r.height%7C%7Ce.push(%7Bid%3At.dataset.gNode%2Cx%3Ar.x%2Cy%3Ar.y%2Cwidth%3Ar.width%2Cheight%3Ar.height%7D)%7Dlet%20a%3DJSON.stringify(e)%3Ba!%3D%3DVe%26%26(Ve%3Da%2CN(%7Btype%3A%22layout%22%2Cnodes%3Ae%7D))%7Dfunction%20J(e)%7Bif(!e%7C%7C!%2F%5E%5Ba-zA-Z%5D%5Ba-zA-Z0-9_-%5D*%24%2F.test(e))return%20null%3Blet%20a%3D_e.get(e)%3Breturn%20a%3F.isConnected%3Fa%3Anull%7Dfunction%20it(e%2Ca)%7Blet%20t%3DJ(a)%3Bif(!t)%7Be.style.display%3D%22none%22%3Breturn%7Dlet%20r%3Dt.getBoundingClientRect()%3Be.style.display%3D%22block%22%2Ce.style.left%3D%60%24%7Br.left%2Bwindow.scrollX%7Dpx%60%2Ce.style.top%3D%60%24%7Br.top%2Bwindow.scrollY%7Dpx%60%2Ce.style.width%3D%60%24%7Br.width%7Dpx%60%2Ce.style.height%3D%60%24%7Br.height%7Dpx%60%2Ce.toggleAttribute(%22data-below%22%2Cr.top%3C20)%2Ce.firstChild.textContent%3Dt.dataset.gLabel%3F%3F%22%22%7Dfunction%20Oe()%7By.mode%3D%3D%3D%22editor%22%26%26(it(ce%2CLe)%2Cit(ye%2Cme%26%26me!%3D%3DLe%3Fme%3Anull))%7Dfunction%20Se(e)%7Bfor(let%20a%20of%20e.composedPath())%7Bif(a%20instanceof%20HTMLElement%26%26a.dataset.gNode)return%20a.dataset.gNode%3Bif(a%3D%3D%3DI)break%7Dreturn%20null%7Dfunction%20Nt(e)%7Bif(e.isTrusted)%7Bif(y.mode%3D%3D%3D%22editor%22)%7Be.preventDefault()%2Ce.stopPropagation()%2CN(%7Btype%3A%22select%22%2Cid%3ASe(e)%7D)%3Breturn%7Dfor(let%20a%20of%20e.composedPath())%7Bif(!(a%20instanceof%20HTMLElement))continue%3Blet%20t%3Da.dataset.gAction%3F%3F(a.tagName%3D%3D%3D%22BUTTON%22%3Fa.getAttribute(%22data-grow-action%22)%3Anull)%3Bif(t%26%26!a.disabled)%7Be.preventDefault()%3Blet%20r%3Dk%3F.actions.find(n%3D%3En.id%3D%3D%3Dt)%3Bif(r%3F.type%3D%3D%3D%22navigate%22)%7Bif(B%3Dr.pageId%2Ck)for(let%20s%20of%20Object.keys(O(k)))delete%20h%5Bs%5D%3BU()%3Blet%20n%3DI.querySelector(%22h1%2Ch2%22)%3F%3FI%3Bn%3D%3D%3DI%26%26(I.setAttribute(%22role%22%2C%22group%22)%2CI.setAttribute(%22aria-label%22%2Ck%3F.pages.find(s%3D%3Es.id%3D%3D%3DB)%3F.name%3F%3Fk%3F.name%3F%3F%22Page%22))%2Cn.tabIndex%3D-1%2Cn.focus(%7BpreventScroll%3A!0%7D)%3Breturn%7DN(%7Btype%3A%22action%22%2CactionId%3At%2CnodeId%3ASe(e)%3F%3Fvoid%200%2C...Object.keys(h).length%3F%7Bselection%3AK()%7D%3A%7B%7D%2C...%24%3F%7Banswers%3AXe()%7D%3A%7B%7D%7D)%3Breturn%7Dif(a%3D%3D%3DI)return%7D%7D%7Dfunction%20nt(e)%7Blet%20a%3De%3Bif(!(!a%7C%7Ca.channel!%3D%3Dy.channel))try%7Bif(a.type%3D%3D%3D%22render%22)%7Blet%20t%3Da.doc%3Bif(!t%7C%7Ct.kind!%3D%3D%22screen%22%7C%7Ct.schemaVersion!%3D%3D4%7C%7CObject.hasOwn(t%2C%22funnel%22)%7C%7C!t.pages%3F.length%7C%7Ct.pages.length%3E(t.surface%3D%3D%3D%22paywall%22%3F10%3A1)%7C%7Ct.pages.some(r%3D%3EObject.hasOwn(r%2C%22source%22))%7C%7Ct.actions%3F.some(r%3D%3E!%5B%22event%22%2C%22close%22%2C%22open_url%22%2C%22claim_offer%22%2C...t.surface%3D%3D%3D%22paywall%22%3F%5B%22navigate%22%5D%3A%5B%5D%5D.includes(r.type)))throw%20new%20Error(%22Unsupported%20screen%20document%3B%20use%20the%20current%20Funnel%20runtime%20for%20flows%22)%3BH.clear()%2Cae%3Dre%3D0%2Ck%3Dt%2CB%3Dnull%2CP%3DString(a.locale)%2CAe%3Dnew%20Set%2C%24%3Da.serverInput%2Ch%3DX()%2CG%3DX()%2CE%3Da.capabilities%2Cee%3Da.customerData%2CQ.clear()%3Bfor(let%5Br%2Cn%5Dof%20Object.entries(E%3F.pickers%3F%3F%7B%7D))n.selected%26%26(h%5Br%5D%3Dn.selected)%3Bif(a.selection%26%26typeof%20a.selection%3D%3D%22object%22%26%26!Array.isArray(a.selection))%7Blet%20r%3Da.selection%2Cn%3Di%3D%3E%7Blet%20l%3Dr%5Bi.id%5D%3Bif(i.type%3D%3D%3D%22quantity_picker%22%26%26typeof%20l%3D%3D%22number%22%26%26(h%5Bi.id%5D%3Dl)%2Ci.type%3D%3D%3D%22plan_picker%22%26%26typeof%20l%3D%3D%22string%22%26%26i.planIds%3F.includes(l)%26%26(h%5Bi.id%5D%3Dl)%2Ci.type%3D%3D%3D%22stack%22)%7Bif(i.interaction%3F.type%3D%3D%3D%22toggle%22%26%26typeof%20l%3D%3D%22boolean%22%26%26(h%5Bi.id%5D%3Dl)%2Ci.interaction%26%26%5B%22select%22%2C%22tabs%22%5D.includes(i.interaction.type)%26%26typeof%20l%3D%3D%22string%22%26%26i.children.some(d%3D%3Ed.id%3D%3D%3Dl)%26%26(h%5Bi.id%5D%3Dl)%2CC(i))%7Blet%20d%3Dr%5Bi.interaction.pickerId%5D%3Btypeof%20d%3D%3D%22string%22%26%26i.children.some(p%3D%3Ep.type%3D%3D%3D%22stack%22%26%26p.bind%3F.plan%3D%3D%3Dd)%26%26(h%5Bi.interaction.pickerId%5D%3Dd)%7Di.children.forEach(n)%7D%7D%3Bk.pages.forEach(i%3D%3En(i.root))%3Blet%20s%3Dr.__page%3Btypeof%20s%3D%3D%22string%22%26%26k.pages.some(i%3D%3Ei.id%3D%3D%3Ds)%26%26(B%3Ds)%7Dfor(let%20r%20of%20%24%3F.bindings%3F%3F%5B%5D)Object.hasOwn(%24.answers%2Cr.variable)%26%26(h%5Br.componentId%5D%3D%24.answers%5Br.variable%5D%2CAe.add(r.componentId))%3Bie%3DX()%2CP%3DString(a.locale)%2CWe()%2CU(!0)%7Delse%20if(a.type%3D%3D%3D%22capabilities%22)%7BE%3Da.capabilities%3Bfor(let%5Bt%2Cr%5Dof%20Object.entries(E.quantities%3F%3F%7B%7D))%7Blet%20n%3DJ(t)%2Cs%3Dn%3F.querySelector('input%5Btype%3D%22range%22%5D')%3Bif(s)%7Bs.min%3DString(r.minimum)%2Cs.max%3DString(r.maximum)%2Cs.disabled%3D!r.available%2Cs.setAttribute(%22aria-valuetext%22%2Cr.label)%3Blet%20i%3Dn%3F.querySelector(%22output%22)%3Bi%26%26(i.textContent%3Dr.label)%7D%7DWe()%3Bfor(let%5Bt%2Cr%5Dof%20Object.entries(E.pickers))!G%5Bt%5D%26%26(h%5Bt%5D%3D%3D%3Dvoid%200%7C%7Ch%5Bt%5D%3D%3D%3D%22%22)%26%26(h%5Bt%5D%3Dr.selected%3F%3F%22%22)%3BU()%7Delse%20a.type%3D%3D%3D%22customer-data%22%3FSt(a.data)%3Aa.type%3D%3D%3D%22restore-action-focus%22%26%26y.mode%3D%3D%3D%22live%22%3F%5B...I.querySelectorAll(%22button%5Bdata-g-node%5D%22)%5D.find(t%3D%3Et.dataset.gNode%3D%3D%3Da.nodeId%26%26!t.disabled)%3F.focus(%7BpreventScroll%3A!0%7D)%3Aa.type%3D%3D%3D%22highlight%22%26%26y.mode%3D%3D%3D%22editor%22%26%26(me%3Da.hoverId%3F%3Fnull%2CLe%3Da.selectedId%3F%3Fnull%2COe())%7Dcatch(t)%7BN(%7Btype%3A%22error%22%2Cmessage%3At%20instanceof%20Error%3Ft.message%3A%22render%20failed%22%7D)%7D%7Dlet%20st%3Ddocument.createElement(%22style%22)%3Bif(st.textContent%3Dyt%2Cdocument.head.append(st)%2Cdocument.body.append(I)%2Cy.mode%3D%3D%3D%22editor%22)%7Bdocument.body.dataset.gEditor%3D%22%22%2Cdocument.body.append(ye%2Cce)%2Cdocument.addEventListener(%22mouseover%22%2Ca%3D%3E%7Blet%20t%3DSe(a)%3Bt!%3D%3Dhe%26%26(he%3Dt%2CN(%7Btype%3A%22hover%22%2Cid%3At%7D))%7D)%2Cdocument.documentElement.addEventListener(%22mouseleave%22%2C()%3D%3E%7Bhe!%3D%3Dnull%26%26(he%3Dnull%2CN(%7Btype%3A%22hover%22%2Cid%3Anull%7D))%7D)%2Cdocument.addEventListener(%22dblclick%22%2Ca%3D%3E%7Blet%20t%3DSe(a)%3Bt%26%26a.isTrusted%26%26N(%7Btype%3A%22edit%22%2Cid%3At%7D)%7D)%2Cdocument.addEventListener(%22click%22%2Ca%3D%3E%7BI.contains(a.target)%7C%7CN(%7Btype%3A%22select%22%2Cid%3Anull%7D)%7D)%3Blet%20e%3D(a%2Ct)%3D%3E%7Bif(!a.isTrusted)return%3Blet%20r%3Da.metaKey%7C%7Ca.ctrlKey%2Cn%3Da.key%3B(n%3D%3D%3D%22%20%22%7C%7Ct%3D%3D%3D%22down%22%26%26(%5B%22Delete%22%2C%22Backspace%22%2C%22Escape%22%5D.includes(n)%7C%7Cr%26%26%2F%5E%5Bzysdcvg0%3D%2B-%5D%24%2Fi.test(n)))%26%26((r%7C%7Cn%3D%3D%3D%22%20%22)%26%26a.preventDefault()%2CN(%7Btype%3A%22key%22%2Ckey%3A%7Bkey%3An%2Cphase%3At%2Cmeta%3Aa.metaKey%2Cctrl%3Aa.ctrlKey%2Cshift%3Aa.shiftKey%2Calt%3Aa.altKey%7D%7D))%7D%3Bdocument.addEventListener(%22keydown%22%2Ca%3D%3Ee(a%2C%22down%22))%2Cdocument.addEventListener(%22keyup%22%2Ca%3D%3Ee(a%2C%22up%22))%2Cdocument.addEventListener(%22wheel%22%2Ca%3D%3E%7B!a.isTrusted%7C%7C!(a.ctrlKey%7C%7Ca.metaKey)%7C%7C(a.preventDefault()%2CN(%7Btype%3A%22zoom%22%2Cdelta%3Aa.deltaY%7D))%7D%2C%7Bpassive%3A!1%7D)%7DI.addEventListener(%22click%22%2CNt)%2Cdocument.addEventListener(%22keydown%22%2Ce%3D%3E%7Be.key%3D%3D%3D%22Escape%22%26%26e.isTrusted%26%26N(%7Btype%3A%22escape%22%7D)%7D)%2Ctypeof%20ResizeObserver%3D%3D%22function%22%26%26new%20ResizeObserver(ke).observe(I)%2Cwindow.addEventListener(%22resize%22%2Cke)%2Cy.mode%3D%3D%3D%22editor%22%26%26window.addEventListener(%22scroll%22%2Cje)%2Cwindow.addEventListener(%22message%22%2Ce%3D%3E%7Be.source%3D%3D%3DF%26%26nt(e.data)%7D)%2Cut.__indianaReceive%3Dnt%2CN(%7Btype%3A%22ready%22%7D)%7D)(boot)%3B%0A%20%20%20%20%7D%20catch%20%7B%20%2F*%20No%20valid%20host%20bridge%3A%20leave%20the%20public%20shell%20empty.%20*%2F%20%7D%0A%20%20%7D)()%3B%3C%2Fscript%3E%3C%2Fbody%3E%3C%2Fhtml%3E
@@ -0,0 +1,10 @@
1
+ import Foundation
2
+
3
+ public struct IndianaAnalyticsReceipt: Codable, Sendable {
4
+ public private(set) var inserted = 0
5
+ public private(set) var duplicates = 0
6
+ public private(set) var rejected = 0
7
+ public private(set) var skipped = 0
8
+ public init() {}
9
+ mutating func add(_ value: Self) { inserted += value.inserted; duplicates += value.duplicates; rejected += value.rejected; skipped += value.skipped }
10
+ }
@@ -0,0 +1,218 @@
1
+ import Foundation
2
+ import StoreKit
3
+
4
+ public enum IndianaStoreError: Error, Sendable {
5
+ case productUnavailable, unsupportedProduct, invalidEvidence, confirmationRequired
6
+ }
7
+ public struct AppleStoreQuote: Sendable {
8
+ public let productID: String
9
+ public let displayName: String
10
+ public let displayPrice: String
11
+ public let terms: String
12
+ }
13
+ public struct AppleStoreTerms: Sendable {
14
+ let offerKind: String; let offerID: String?; let currency: String; let productKind: String
15
+ let catalogMinor: Int; let discountMinor: Int; let trialDays: Int?
16
+ let seats: [(String, Int)]
17
+ let promotion: ApplePromotion?
18
+ let sourceProductID: String?
19
+ struct ApplePromotion: Sendable { let offerID: String; let keyID: String; let nonce: UUID; let signature: Data; let timestamp: Int }
20
+ public init(_ instruction: [String: IndianaJSON]) throws {
21
+ func integer(_ key: String) throws -> Int {
22
+ guard case .number(let raw)? = instruction[key], raw >= 0, raw <= 100000000, raw.rounded() == raw else { throw IndianaFunnelError.invalidResponse }; return Int(raw)
23
+ }
24
+ guard let productKind = instruction["productKind"]?.string, ["membership","lifetime","credit_pack"].contains(productKind),
25
+ let kind = instruction["offerKind"]?.string, ["none", "introductory", "promotional"].contains(kind),
26
+ let currency = instruction["currency"]?.string, currency.range(of: "^[A-Z]{3}$", options: .regularExpression) != nil,
27
+ case .array(let bundles)? = instruction["seatBundle"], bundles.count <= 20 else { throw IndianaFunnelError.invalidResponse }
28
+ let sourceProductID: String?
29
+ if let replacement = instruction["replacement"]?.object {
30
+ guard productKind == "membership", kind == "none", replacement["policy"] == .string("apple_store"), let source = replacement["sourceProductId"]?.string, !source.isEmpty else { throw IndianaFunnelError.invalidResponse }; sourceProductID = source
31
+ } else { guard instruction["replacement"] == .null else { throw IndianaFunnelError.invalidResponse }; sourceProductID = nil }
32
+ self.sourceProductID = sourceProductID
33
+ let offerID = instruction["offerId"]?.string
34
+ let catalogMinor = try integer("catalogAmountMinor"), discountMinor = try integer("discountMinor")
35
+ guard discountMinor <= catalogMinor else { throw IndianaFunnelError.invalidResponse }
36
+ let trialDays: Int?
37
+ if case .null? = instruction["trialDays"] { trialDays = nil }
38
+ else { let days = try integer("trialDays"); guard days >= 1 && days <= 730 else { throw IndianaFunnelError.invalidResponse }; trialDays = days }
39
+ let seats: [(String, Int)] = try bundles.map { item in
40
+ guard let value = item.object, Set(value.keys) == Set(["key", "quantity"]), let key = value["key"]?.string, key.range(of: "^[a-z][a-z0-9_]{0,63}$", options: .regularExpression) != nil,
41
+ case .number(let quantity)? = value["quantity"], quantity >= 1, quantity <= 10000, quantity.rounded() == quantity else { throw IndianaFunnelError.invalidResponse }
42
+ return (key, Int(quantity))
43
+ }
44
+ guard Set(seats.map { $0.0 }).count == seats.count else { throw IndianaFunnelError.invalidResponse }
45
+ let promotion: ApplePromotion?
46
+ if instruction["applePromotionalOffer"] == .null { promotion = nil }
47
+ else {
48
+ guard let value = instruction["applePromotionalOffer"]?.object, Set(value.keys) == Set(["offerId", "keyId", "nonce", "signature", "timestamp"]),
49
+ let offer = value["offerId"]?.string, offer == offerID, let key = value["keyId"]?.string, !key.isEmpty, key.count <= 255,
50
+ let nonce = value["nonce"]?.string.flatMap(UUID.init(uuidString:)), let signatureText = value["signature"]?.string, signatureText.count <= 1024,
51
+ let signature = Data(base64Encoded: signatureText), !signature.isEmpty,
52
+ case .number(let timestamp)? = value["timestamp"], timestamp >= 0, timestamp <= 9007199254740991, timestamp.rounded() == timestamp else { throw IndianaFunnelError.invalidResponse }
53
+ promotion = ApplePromotion(offerID: offer, keyID: key, nonce: nonce, signature: signature, timestamp: Int(timestamp))
54
+ }
55
+ if instruction["provider"] == .string("apple") {
56
+ guard (kind == "promotional") == (promotion != nil), (kind == "promotional") == (offerID != nil) else { throw IndianaFunnelError.invalidResponse }
57
+ } else { guard promotion == nil else { throw IndianaFunnelError.invalidResponse } }
58
+ guard !(trialDays != nil && discountMinor != 0), kind != "none" || (trialDays == nil && discountMinor == 0) else { throw IndianaFunnelError.invalidResponse }
59
+ offerKind = kind; self.currency = currency; self.offerID = offerID
60
+ self.productKind = productKind
61
+ self.catalogMinor = catalogMinor; self.discountMinor = discountMinor; self.trialDays = trialDays
62
+ self.seats = seats; self.promotion = promotion
63
+ }
64
+ var scale: Decimal { ["JPY", "KRW", "VND"].contains(currency) ? 1 : 100 }
65
+ }
66
+ public struct ApplePurchaseEvidence: Sendable, CustomStringConvertible, CustomDebugStringConvertible {
67
+ public let transactionID: String
68
+ public let productID: String
69
+ public let signedTransaction: String
70
+ public let accountToken: UUID?
71
+ public var description: String { "ApplePurchaseEvidence(transactionID: \(transactionID), productID: \(productID), signedTransaction: [redacted])" }
72
+ public var debugDescription: String { description }
73
+ }
74
+ public enum ApplePurchaseResult: Sendable {
75
+ case purchased(ApplePurchaseEvidence), pending, canceled
76
+ }
77
+ protocol IndianaAppleStore: Sendable {
78
+ func quotes(productIDs: Set<String>) async throws -> [AppleStoreQuote]
79
+ func quote(productID: String, terms: AppleStoreTerms) async throws -> AppleStoreQuote
80
+ func purchase(productID: String, accountToken: UUID, terms: AppleStoreTerms) async throws -> ApplePurchaseResult
81
+ func scanCurrent() async -> [ApplePurchaseEvidence]
82
+ func scanUnfinished() async -> [ApplePurchaseEvidence]
83
+ func restore() async throws -> [ApplePurchaseEvidence]
84
+ func updates() async -> AsyncStream<ApplePurchaseEvidence>
85
+ func finish(transactionID: String, confirmedTransactionIDs: Set<String>) async throws
86
+ }
87
+
88
+ /// StoreKit kernel shared by Swift and framework bridges. Never acknowledges delivery itself.
89
+ public actor AppleStorefront: IndianaAppleStore {
90
+ private var unfinished: [String: Transaction] = [:]
91
+ public init() {}
92
+
93
+ public func quotes(productIDs: Set<String>) async throws -> [AppleStoreQuote] {
94
+ try await Product.products(for: productIDs).map {
95
+ AppleStoreQuote(productID: $0.id, displayName: $0.displayName, displayPrice: $0.displayPrice, terms: $0.displayPrice)
96
+ }
97
+ }
98
+ public func quote(productID: String, terms: AppleStoreTerms) async throws -> AppleStoreQuote {
99
+ guard let product = try await Product.products(for: [productID]).first else { throw IndianaStoreError.productUnavailable }
100
+ return try await validate(product, terms: terms)
101
+ }
102
+ private func period(_ value: Product.SubscriptionPeriod) -> String {
103
+ let unit: String
104
+ switch value.unit { case .day: unit = "day"; case .week: unit = "week"; case .month: unit = "month"; case .year: unit = "year"; @unknown default: unit = "period" }
105
+ return "\(value.value) \(unit)"
106
+ }
107
+ private func trialDays(_ offer: Product.SubscriptionOffer) -> Int? {
108
+ switch offer.period.unit { case .day: return offer.period.value * offer.periodCount; case .week: return offer.period.value * offer.periodCount * 7; default: return nil }
109
+ }
110
+ private func validate(_ product: Product, terms: AppleStoreTerms) async throws -> AppleStoreQuote {
111
+ guard product.type == (terms.productKind == "membership" ? .autoRenewable : terms.productKind == "lifetime" ? .nonConsumable : .consumable) else { throw IndianaStoreError.unsupportedProduct }
112
+ guard product.type == .autoRenewable || product.type == .consumable || product.type == .nonConsumable, product.priceFormatStyle.currencyCode == terms.currency,
113
+ product.price * terms.scale == Decimal(terms.catalogMinor) else { throw IndianaStoreError.unsupportedProduct }
114
+ if let sourceID = terms.sourceProductID {
115
+ guard let source = try await Product.products(for:[sourceID]).first, let sourceGroup = source.subscription?.subscriptionGroupID, let targetGroup = product.subscription?.subscriptionGroupID, sourceGroup == targetGroup else { throw IndianaStoreError.unsupportedProduct }
116
+ }
117
+ var detail = product.displayPrice
118
+ if let subscription = product.subscription {
119
+ let offer: Product.SubscriptionOffer?
120
+ switch terms.offerKind {
121
+ case "introductory":
122
+ guard await subscription.isEligibleForIntroOffer, let intro = subscription.introductoryOffer else { throw IndianaStoreError.unsupportedProduct }; offer = intro
123
+ case "promotional":
124
+ guard let id = terms.offerID, let promo = subscription.promotionalOffers.first(where: { $0.id == id }), let signature = terms.promotion,
125
+ signature.offerID == id, signature.timestamp <= Int(Date().timeIntervalSince1970 * 1000) + 60000,
126
+ signature.timestamp > Int(Date().timeIntervalSince1970 * 1000) - 86400000 else { throw IndianaStoreError.unsupportedProduct }; offer = promo
127
+ default:
128
+ let eligible = await subscription.isEligibleForIntroOffer
129
+ if subscription.introductoryOffer != nil && eligible { throw IndianaStoreError.unsupportedProduct }; offer = nil
130
+ }
131
+ let regular = "\(product.displayPrice) / \(period(subscription.subscriptionPeriod))"
132
+ if let offer {
133
+ if let expectedDays = terms.trialDays {
134
+ guard offer.paymentMode == .freeTrial, offer.price == 0, trialDays(offer) == expectedDays else { throw IndianaStoreError.unsupportedProduct }
135
+ } else {
136
+ guard offer.paymentMode != .freeTrial, offer.periodCount == 1, offer.period.unit == subscription.subscriptionPeriod.unit, offer.period.value == subscription.subscriptionPeriod.value,
137
+ offer.price * terms.scale == Decimal(terms.catalogMinor - terms.discountMinor) else { throw IndianaStoreError.unsupportedProduct }
138
+ }
139
+ detail = "\(offer.displayPrice) / \(period(offer.period)) × \(offer.periodCount)\nThen \(regular)"
140
+ } else { detail = regular }
141
+ detail += "\nAuto-renews until canceled in App Store settings."
142
+ } else if terms.offerKind != "none" || terms.trialDays != nil || terms.discountMinor != 0 { throw IndianaStoreError.unsupportedProduct }
143
+ if terms.sourceProductID != nil { detail += "\nApp Store determines when this plan change takes effect." }
144
+ if !terms.seats.isEmpty { detail += "\nIncluded seats: " + terms.seats.map { "\($0.0): \($0.1)" }.joined(separator: ", ") }
145
+ return AppleStoreQuote(productID: product.id, displayName: product.displayName, displayPrice: product.displayPrice, terms: detail)
146
+ }
147
+ public func purchase(productID: String, accountToken: UUID, terms: AppleStoreTerms) async throws -> ApplePurchaseResult {
148
+ guard let product = try await Product.products(for: [productID]).first else {
149
+ throw IndianaStoreError.productUnavailable
150
+ }
151
+ guard product.type == .autoRenewable || product.type == .consumable || product.type == .nonConsumable else {
152
+ throw IndianaStoreError.unsupportedProduct
153
+ }
154
+ _ = try await validate(product, terms: terms)
155
+ var options: Set<Product.PurchaseOption> = [.appAccountToken(accountToken), .quantity(1)]
156
+ if let offer = terms.promotion { options.insert(.promotionalOffer(offerID: offer.offerID, keyID: offer.keyID, nonce: offer.nonce, signature: offer.signature, timestamp: offer.timestamp)) }
157
+ switch try await product.purchase(options: options) {
158
+ case .pending: return .pending
159
+ case .userCancelled: return .canceled
160
+ case .success(let verification): return .purchased(try evidence(verification))
161
+ @unknown default: throw IndianaStoreError.unsupportedProduct
162
+ }
163
+ }
164
+ /// Called on launch/foreground. Does not open a store authentication sheet.
165
+ public func scanUnfinished() async -> [ApplePurchaseEvidence] {
166
+ var result: [ApplePurchaseEvidence] = []
167
+ for await verification in Transaction.unfinished {
168
+ if let item = try? evidence(verification) { result.append(item) }
169
+ }
170
+ return result
171
+ }
172
+ /// Reinstall and new-device recovery without showing an authentication sheet.
173
+ public func scanCurrent() async -> [ApplePurchaseEvidence] {
174
+ var result: [String: ApplePurchaseEvidence] = [:]
175
+ for await verification in Transaction.currentEntitlements {
176
+ if let item = try? evidence(verification) { result[item.transactionID] = item }
177
+ }
178
+ for item in await scanUnfinished() { result[item.transactionID] = item }
179
+ return result.values.sorted { $0.transactionID < $1.transactionID }
180
+ }
181
+ /// Explicit user restore action; finished consumables are not recreated by this scan.
182
+ public func restore() async throws -> [ApplePurchaseEvidence] {
183
+ try await AppStore.sync()
184
+ var result: [String: ApplePurchaseEvidence] = [:]
185
+ for await verification in Transaction.currentEntitlements {
186
+ if let item = try? evidence(verification) { result[item.transactionID] = item }
187
+ }
188
+ for item in await scanUnfinished() { result[item.transactionID] = item }
189
+ return result.values.sorted { $0.transactionID < $1.transactionID }
190
+ }
191
+ public func updates() -> AsyncStream<ApplePurchaseEvidence> {
192
+ AsyncStream { continuation in
193
+ let task = Task {
194
+ for await verification in Transaction.updates {
195
+ if Task.isCancelled { break }
196
+ if let item = try? self.evidence(verification) { continuation.yield(item) }
197
+ }
198
+ continuation.finish()
199
+ }
200
+ continuation.onTermination = { _ in task.cancel() }
201
+ }
202
+ }
203
+ // Internal: the authenticated commerce client supplies server confirmation for this exact ID.
204
+ func finish(transactionID: String, confirmedTransactionIDs: Set<String>) async throws {
205
+ guard confirmedTransactionIDs.contains(transactionID), let transaction = unfinished[transactionID] else {
206
+ throw IndianaStoreError.confirmationRequired
207
+ }
208
+ await transaction.finish()
209
+ unfinished.removeValue(forKey: transactionID)
210
+ }
211
+ private func evidence(_ verification: VerificationResult<Transaction>) throws -> ApplePurchaseEvidence {
212
+ guard case .verified(let transaction) = verification else { throw IndianaStoreError.invalidEvidence }
213
+ let id = String(transaction.id)
214
+ unfinished[id] = transaction
215
+ return ApplePurchaseEvidence(transactionID: id, productID: transaction.productID,
216
+ signedTransaction: verification.jwsRepresentation, accountToken: transaction.appAccountToken)
217
+ }
218
+ }