@imagina-build/ias-cli 0.2.2 → 0.3.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 (58) hide show
  1. package/README.md +188 -22
  2. package/package.json +1 -1
  3. package/schema/ias.schema.json +46 -1
  4. package/shared/vault/index.mjs +25 -0
  5. package/shared/vault/policy-vectors.mjs +237 -0
  6. package/shared/vault/policy.mjs +427 -0
  7. package/shared/vault/test-vectors/ias-policy-1/policy.json +4016 -0
  8. package/shared/vault/vectors.mjs +2 -0
  9. package/src/apple/capabilities.mjs +96 -0
  10. package/src/apple/inventory.mjs +75 -0
  11. package/src/apple/signing.mjs +134 -0
  12. package/src/applications.mjs +114 -0
  13. package/src/cli.mjs +28 -10
  14. package/src/commands/apps/index.mjs +61 -11
  15. package/src/commands/apps/store.mjs +367 -0
  16. package/src/commands/auth/index.mjs +3 -3
  17. package/src/commands/build/index.mjs +2 -0
  18. package/src/commands/builds/index.mjs +20 -0
  19. package/src/commands/credentials/apple.mjs +1118 -0
  20. package/src/commands/credentials/generate.mjs +122 -0
  21. package/src/commands/credentials/index.mjs +114 -44
  22. package/src/commands/credentials/seal.mjs +44 -0
  23. package/src/commands/devices/asc.mjs +50 -8
  24. package/src/commands/devices/index.mjs +2 -1
  25. package/src/commands/devices/sync.mjs +57 -4
  26. package/src/commands/dist/index.mjs +12 -0
  27. package/src/commands/doctor/index.mjs +3 -0
  28. package/src/commands/github/index.mjs +13 -3
  29. package/src/commands/init/index.mjs +6 -3
  30. package/src/commands/policy/index.mjs +583 -0
  31. package/src/commands/policy/policy.mjs +182 -0
  32. package/src/commands/policy/progress.mjs +20 -0
  33. package/src/commands/releases/index.mjs +225 -0
  34. package/src/commands/rollout/index.mjs +186 -0
  35. package/src/commands/runners/index.mjs +19 -0
  36. package/src/commands/sdk/index.mjs +31 -4
  37. package/src/commands/setup/index.mjs +184 -0
  38. package/src/commands/skill/index.mjs +43 -0
  39. package/src/commands/submit/index.mjs +135 -19
  40. package/src/commands/testflight/index.mjs +309 -0
  41. package/src/commands/tokens/index.mjs +99 -0
  42. package/src/commands/update/index.mjs +26 -5
  43. package/src/commands/vault/approvers.mjs +5 -1
  44. package/src/commands/vault/index.mjs +26 -6
  45. package/src/commands/vault/runners.mjs +48 -2
  46. package/src/commands/webhooks/index.mjs +19 -5
  47. package/src/config.mjs +16 -1
  48. package/src/errors.mjs +52 -6
  49. package/src/op.mjs +83 -0
  50. package/src/ota-key.mjs +53 -0
  51. package/src/provisioning.mjs +281 -0
  52. package/src/schema.mjs +3 -0
  53. package/src/setup-state.mjs +76 -0
  54. package/src/setup.mjs +701 -0
  55. package/src/skill-files.generated.mjs +10 -0
  56. package/src/skill.mjs +256 -0
  57. package/src/team-vault.mjs +2 -2
  58. package/src/token-store.mjs +1 -1
@@ -0,0 +1,4016 @@
1
+ {
2
+ "format": "ias-policy-1",
3
+ "description": "The signed approval policy (ias-policy-1, docs/technical/vault.md §2.5): documents are good ones signed with the team key of ias-vault-2/keys.json (signing.team; other-team makes the forgeries), each with the signedText the signature covers and the hash of that text. malformed must be rejected with code (validatePolicy, with options); tampered are well formed but do not verify (verifyPolicy: policy.signature); expired verifies before its date and gives policy.expired after it; matching gives the rule simulate picks for a job (or the code of its denial), and summaries what summary reports.",
4
+ "warning": "Test vectors: the keys are public. Never use them for anything else.",
5
+ "signing": {
6
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
7
+ "publicKey": "jbIoJJ_FpW_CmR9aj2o8mTDhrb-dDWV5qGH3QZdUs8s"
8
+ },
9
+ "members": {
10
+ "owner-a": "01930000-0000-7000-8000-00000000a001",
11
+ "owner-b": "01930000-0000-7000-8000-00000000a002",
12
+ "owner-c": "01930000-0000-7000-8000-00000000a003",
13
+ "without-passkey": "01930000-0000-7000-8000-00000000a004"
14
+ },
15
+ "documents": [
16
+ {
17
+ "name": "heredado",
18
+ "description": "The minimal policy of the plan's Anexo A: one * rule with every owner with a passkey, count 1. It decides nothing new.",
19
+ "signedText": "ias-policy-1\npolicy\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n1\n2027-04-28T00:00:00Z\n1\nheredado\n*\n*\n*\n*\n*\n*\n1\n2\n01930000-0000-7000-8000-00000000a001\n01930000-0000-7000-8000-00000000a002",
20
+ "hash": "ETyOyB9Ik09_SRunmsq4cwOZKkRAs6RlYcv9Bg8VFhY",
21
+ "document": {
22
+ "format": "ias-policy-1",
23
+ "version": 1,
24
+ "not_after": "2027-04-28T00:00:00Z",
25
+ "rules": [
26
+ {
27
+ "id": "heredado",
28
+ "app": "*",
29
+ "platform": "*",
30
+ "profile": "*",
31
+ "type": "*",
32
+ "target": "*",
33
+ "track": "*",
34
+ "require": {
35
+ "members": [
36
+ "01930000-0000-7000-8000-00000000a001",
37
+ "01930000-0000-7000-8000-00000000a002"
38
+ ],
39
+ "count": 1
40
+ }
41
+ }
42
+ ],
43
+ "signature": {
44
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
45
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
46
+ }
47
+ }
48
+ },
49
+ {
50
+ "name": "two-rules",
51
+ "description": "Two rules: iOS production builds need two owners, and the internal track of Google Play one.",
52
+ "signedText": "ias-policy-1\npolicy\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n2\n2027-04-28T00:00:00Z\n2\nios-production\n*\nios\nproduction\nbuild\n*\n*\n2\n2\n01930000-0000-7000-8000-00000000a001\n01930000-0000-7000-8000-00000000a002\nplay-internal\n*\nandroid\nproduction\nsubmit\ngoogle_play\ninternal\n1\n2\n01930000-0000-7000-8000-00000000a001\n01930000-0000-7000-8000-00000000a003",
53
+ "hash": "hv3Rx_a7Nv_DDstIVZjiOabz1n2eoBnhub-9c1GMPz0",
54
+ "document": {
55
+ "format": "ias-policy-1",
56
+ "version": 2,
57
+ "not_after": "2027-04-28T00:00:00Z",
58
+ "rules": [
59
+ {
60
+ "id": "ios-production",
61
+ "app": "*",
62
+ "platform": "ios",
63
+ "profile": "production",
64
+ "type": "build",
65
+ "target": "*",
66
+ "track": "*",
67
+ "require": {
68
+ "members": [
69
+ "01930000-0000-7000-8000-00000000a001",
70
+ "01930000-0000-7000-8000-00000000a002"
71
+ ],
72
+ "count": 2
73
+ }
74
+ },
75
+ {
76
+ "id": "play-internal",
77
+ "app": "*",
78
+ "platform": "android",
79
+ "profile": "production",
80
+ "type": "submit",
81
+ "target": "google_play",
82
+ "track": "internal",
83
+ "require": {
84
+ "members": [
85
+ "01930000-0000-7000-8000-00000000a001",
86
+ "01930000-0000-7000-8000-00000000a003"
87
+ ],
88
+ "count": 1
89
+ }
90
+ }
91
+ ],
92
+ "signature": {
93
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
94
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
95
+ }
96
+ }
97
+ },
98
+ {
99
+ "name": "four-rules",
100
+ "description": "Four rules with a date: one owner for everything, two for production, the client app to its owner, and an Android submission to production.",
101
+ "signedText": "ias-policy-1\npolicy\nkj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y\n4\n2027-10-28T00:00:00Z\n4\ntodo\n*\n*\n*\n*\n*\n*\n1\n1\n01930000-0000-7000-8000-00000000a001\nios-production\n*\n*\nproduction\nbuild\n*\n*\n2\n2\n01930000-0000-7000-8000-00000000a001\n01930000-0000-7000-8000-00000000a002\ncliente\nacme\n*\n*\n*\n*\n*\n1\n1\n01930000-0000-7000-8000-00000000a003\nplay-production\n*\nandroid\nproduction\nsubmit\ngoogle_play\nproduction\n1\n2\n01930000-0000-7000-8000-00000000a002\n01930000-0000-7000-8000-00000000a003",
102
+ "hash": "LWYfqwkaUaU-KUdfB0mgM0iGamtqe9QAfS2THrDu6Q0",
103
+ "document": {
104
+ "format": "ias-policy-1",
105
+ "version": 4,
106
+ "not_after": "2027-10-28T00:00:00Z",
107
+ "rules": [
108
+ {
109
+ "id": "todo",
110
+ "app": "*",
111
+ "platform": "*",
112
+ "profile": "*",
113
+ "type": "*",
114
+ "target": "*",
115
+ "track": "*",
116
+ "require": {
117
+ "members": [
118
+ "01930000-0000-7000-8000-00000000a001"
119
+ ],
120
+ "count": 1
121
+ }
122
+ },
123
+ {
124
+ "id": "ios-production",
125
+ "app": "*",
126
+ "platform": "*",
127
+ "profile": "production",
128
+ "type": "build",
129
+ "target": "*",
130
+ "track": "*",
131
+ "require": {
132
+ "members": [
133
+ "01930000-0000-7000-8000-00000000a001",
134
+ "01930000-0000-7000-8000-00000000a002"
135
+ ],
136
+ "count": 2
137
+ }
138
+ },
139
+ {
140
+ "id": "cliente",
141
+ "app": "acme",
142
+ "platform": "*",
143
+ "profile": "*",
144
+ "type": "*",
145
+ "target": "*",
146
+ "track": "*",
147
+ "require": {
148
+ "members": [
149
+ "01930000-0000-7000-8000-00000000a003"
150
+ ],
151
+ "count": 1
152
+ }
153
+ },
154
+ {
155
+ "id": "play-production",
156
+ "app": "*",
157
+ "platform": "android",
158
+ "profile": "production",
159
+ "type": "submit",
160
+ "target": "google_play",
161
+ "track": "production",
162
+ "require": {
163
+ "members": [
164
+ "01930000-0000-7000-8000-00000000a002",
165
+ "01930000-0000-7000-8000-00000000a003"
166
+ ],
167
+ "count": 1
168
+ }
169
+ }
170
+ ],
171
+ "signature": {
172
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
173
+ "sig": "YOxUNkjtcQrgL-vuilZsgo8ThUyApPppb8ovT0QzvvGyjI3Sq5134hHT2jRmJAYj0o42pPv0cHh4adcjiqTzAw"
174
+ }
175
+ }
176
+ }
177
+ ],
178
+ "malformed": [
179
+ {
180
+ "name": "array",
181
+ "code": "policy",
182
+ "description": "A list instead of an object.",
183
+ "document": [
184
+ {
185
+ "format": "ias-policy-1",
186
+ "version": 1,
187
+ "not_after": "2027-04-28T00:00:00Z",
188
+ "rules": [
189
+ {
190
+ "id": "heredado",
191
+ "app": "*",
192
+ "platform": "*",
193
+ "profile": "*",
194
+ "type": "*",
195
+ "target": "*",
196
+ "track": "*",
197
+ "require": {
198
+ "members": [
199
+ "01930000-0000-7000-8000-00000000a001",
200
+ "01930000-0000-7000-8000-00000000a002"
201
+ ],
202
+ "count": 1
203
+ }
204
+ }
205
+ ],
206
+ "signature": {
207
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
208
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
209
+ }
210
+ }
211
+ ]
212
+ },
213
+ {
214
+ "name": "not-json",
215
+ "code": "policy",
216
+ "description": "Text that is not JSON.",
217
+ "json": "{\"format\":\"ias-policy-1\","
218
+ },
219
+ {
220
+ "name": "too-large",
221
+ "code": "policy.too_large",
222
+ "description": "More than 65536 bytes of JSON.",
223
+ "json": "{\"format\":\"ias-policy-1\",\"padding\":\"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"}"
224
+ },
225
+ {
226
+ "name": "other-format",
227
+ "code": "policy.format",
228
+ "description": "Another format.",
229
+ "document": {
230
+ "format": "ias-policy-2",
231
+ "version": 1,
232
+ "not_after": "2027-04-28T00:00:00Z",
233
+ "rules": [
234
+ {
235
+ "id": "heredado",
236
+ "app": "*",
237
+ "platform": "*",
238
+ "profile": "*",
239
+ "type": "*",
240
+ "target": "*",
241
+ "track": "*",
242
+ "require": {
243
+ "members": [
244
+ "01930000-0000-7000-8000-00000000a001",
245
+ "01930000-0000-7000-8000-00000000a002"
246
+ ],
247
+ "count": 1
248
+ }
249
+ }
250
+ ],
251
+ "signature": {
252
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
253
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
254
+ }
255
+ }
256
+ },
257
+ {
258
+ "name": "missing-signature",
259
+ "code": "policy.fields",
260
+ "description": "No signature.",
261
+ "document": {
262
+ "format": "ias-policy-1",
263
+ "version": 1,
264
+ "not_after": "2027-04-28T00:00:00Z",
265
+ "rules": [
266
+ {
267
+ "id": "heredado",
268
+ "app": "*",
269
+ "platform": "*",
270
+ "profile": "*",
271
+ "type": "*",
272
+ "target": "*",
273
+ "track": "*",
274
+ "require": {
275
+ "members": [
276
+ "01930000-0000-7000-8000-00000000a001",
277
+ "01930000-0000-7000-8000-00000000a002"
278
+ ],
279
+ "count": 1
280
+ }
281
+ }
282
+ ]
283
+ }
284
+ },
285
+ {
286
+ "name": "extra-field",
287
+ "code": "policy.fields",
288
+ "description": "A field besides format, version, not_after, rules and signature.",
289
+ "document": {
290
+ "format": "ias-policy-1",
291
+ "version": 1,
292
+ "not_after": "2027-04-28T00:00:00Z",
293
+ "rules": [
294
+ {
295
+ "id": "heredado",
296
+ "app": "*",
297
+ "platform": "*",
298
+ "profile": "*",
299
+ "type": "*",
300
+ "target": "*",
301
+ "track": "*",
302
+ "require": {
303
+ "members": [
304
+ "01930000-0000-7000-8000-00000000a001",
305
+ "01930000-0000-7000-8000-00000000a002"
306
+ ],
307
+ "count": 1
308
+ }
309
+ }
310
+ ],
311
+ "signature": {
312
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
313
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
314
+ },
315
+ "issued_at": "2026-10-28T00:00:00Z"
316
+ }
317
+ },
318
+ {
319
+ "name": "not-after-null",
320
+ "code": "policy.not_after",
321
+ "description": "not_after as null: it is left out or a timestamp.",
322
+ "document": {
323
+ "format": "ias-policy-1",
324
+ "version": 1,
325
+ "not_after": null,
326
+ "rules": [
327
+ {
328
+ "id": "heredado",
329
+ "app": "*",
330
+ "platform": "*",
331
+ "profile": "*",
332
+ "type": "*",
333
+ "target": "*",
334
+ "track": "*",
335
+ "require": {
336
+ "members": [
337
+ "01930000-0000-7000-8000-00000000a001",
338
+ "01930000-0000-7000-8000-00000000a002"
339
+ ],
340
+ "count": 1
341
+ }
342
+ }
343
+ ],
344
+ "signature": {
345
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
346
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
347
+ }
348
+ }
349
+ },
350
+ {
351
+ "name": "version-zero",
352
+ "code": "policy.version",
353
+ "description": "Version 0.",
354
+ "document": {
355
+ "format": "ias-policy-1",
356
+ "version": 0,
357
+ "not_after": "2027-04-28T00:00:00Z",
358
+ "rules": [
359
+ {
360
+ "id": "heredado",
361
+ "app": "*",
362
+ "platform": "*",
363
+ "profile": "*",
364
+ "type": "*",
365
+ "target": "*",
366
+ "track": "*",
367
+ "require": {
368
+ "members": [
369
+ "01930000-0000-7000-8000-00000000a001",
370
+ "01930000-0000-7000-8000-00000000a002"
371
+ ],
372
+ "count": 1
373
+ }
374
+ }
375
+ ],
376
+ "signature": {
377
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
378
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
379
+ }
380
+ }
381
+ },
382
+ {
383
+ "name": "version-string",
384
+ "code": "policy.version",
385
+ "description": "The version as a string.",
386
+ "document": {
387
+ "format": "ias-policy-1",
388
+ "version": "1",
389
+ "not_after": "2027-04-28T00:00:00Z",
390
+ "rules": [
391
+ {
392
+ "id": "heredado",
393
+ "app": "*",
394
+ "platform": "*",
395
+ "profile": "*",
396
+ "type": "*",
397
+ "target": "*",
398
+ "track": "*",
399
+ "require": {
400
+ "members": [
401
+ "01930000-0000-7000-8000-00000000a001",
402
+ "01930000-0000-7000-8000-00000000a002"
403
+ ],
404
+ "count": 1
405
+ }
406
+ }
407
+ ],
408
+ "signature": {
409
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
410
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
411
+ }
412
+ }
413
+ },
414
+ {
415
+ "name": "version-decimal",
416
+ "code": "policy.version",
417
+ "description": "A version with decimals.",
418
+ "document": {
419
+ "format": "ias-policy-1",
420
+ "version": 1.5,
421
+ "not_after": "2027-04-28T00:00:00Z",
422
+ "rules": [
423
+ {
424
+ "id": "heredado",
425
+ "app": "*",
426
+ "platform": "*",
427
+ "profile": "*",
428
+ "type": "*",
429
+ "target": "*",
430
+ "track": "*",
431
+ "require": {
432
+ "members": [
433
+ "01930000-0000-7000-8000-00000000a001",
434
+ "01930000-0000-7000-8000-00000000a002"
435
+ ],
436
+ "count": 1
437
+ }
438
+ }
439
+ ],
440
+ "signature": {
441
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
442
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
443
+ }
444
+ }
445
+ },
446
+ {
447
+ "name": "not-after-date-only",
448
+ "code": "policy.not_after",
449
+ "description": "A date without the time, which the format does not take.",
450
+ "document": {
451
+ "format": "ias-policy-1",
452
+ "version": 1,
453
+ "not_after": "2027-04-28",
454
+ "rules": [
455
+ {
456
+ "id": "heredado",
457
+ "app": "*",
458
+ "platform": "*",
459
+ "profile": "*",
460
+ "type": "*",
461
+ "target": "*",
462
+ "track": "*",
463
+ "require": {
464
+ "members": [
465
+ "01930000-0000-7000-8000-00000000a001",
466
+ "01930000-0000-7000-8000-00000000a002"
467
+ ],
468
+ "count": 1
469
+ }
470
+ }
471
+ ],
472
+ "signature": {
473
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
474
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
475
+ }
476
+ }
477
+ },
478
+ {
479
+ "name": "not-after-impossible-day",
480
+ "code": "policy.not_after",
481
+ "description": "The 30th of February.",
482
+ "document": {
483
+ "format": "ias-policy-1",
484
+ "version": 1,
485
+ "not_after": "2027-02-30T00:00:00Z",
486
+ "rules": [
487
+ {
488
+ "id": "heredado",
489
+ "app": "*",
490
+ "platform": "*",
491
+ "profile": "*",
492
+ "type": "*",
493
+ "target": "*",
494
+ "track": "*",
495
+ "require": {
496
+ "members": [
497
+ "01930000-0000-7000-8000-00000000a001",
498
+ "01930000-0000-7000-8000-00000000a002"
499
+ ],
500
+ "count": 1
501
+ }
502
+ }
503
+ ],
504
+ "signature": {
505
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
506
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
507
+ }
508
+ }
509
+ },
510
+ {
511
+ "name": "rules-empty",
512
+ "code": "policy.rules",
513
+ "description": "No rules: a policy that denies everything is not a policy.",
514
+ "document": {
515
+ "format": "ias-policy-1",
516
+ "version": 1,
517
+ "not_after": "2027-04-28T00:00:00Z",
518
+ "rules": [],
519
+ "signature": {
520
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
521
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
522
+ }
523
+ }
524
+ },
525
+ {
526
+ "name": "rules-object",
527
+ "code": "policy.rules",
528
+ "description": "The rules as an object keyed by id.",
529
+ "document": {
530
+ "format": "ias-policy-1",
531
+ "version": 1,
532
+ "not_after": "2027-04-28T00:00:00Z",
533
+ "rules": {
534
+ "heredado": {
535
+ "id": "heredado",
536
+ "app": "*",
537
+ "platform": "*",
538
+ "profile": "*",
539
+ "type": "*",
540
+ "target": "*",
541
+ "track": "*",
542
+ "require": {
543
+ "members": [
544
+ "01930000-0000-7000-8000-00000000a001",
545
+ "01930000-0000-7000-8000-00000000a002"
546
+ ],
547
+ "count": 1
548
+ }
549
+ }
550
+ },
551
+ "signature": {
552
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
553
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
554
+ }
555
+ }
556
+ },
557
+ {
558
+ "name": "rules-too-many",
559
+ "code": "policy.rules",
560
+ "description": "More than 64 rules.",
561
+ "document": {
562
+ "format": "ias-policy-1",
563
+ "version": 1,
564
+ "not_after": "2027-04-28T00:00:00Z",
565
+ "rules": [
566
+ {
567
+ "id": "r0",
568
+ "app": "*",
569
+ "platform": "*",
570
+ "profile": "*",
571
+ "type": "*",
572
+ "target": "*",
573
+ "track": "*",
574
+ "require": {
575
+ "members": [
576
+ "01930000-0000-7000-8000-00000000a001",
577
+ "01930000-0000-7000-8000-00000000a002"
578
+ ],
579
+ "count": 1
580
+ }
581
+ },
582
+ {
583
+ "id": "r1",
584
+ "app": "*",
585
+ "platform": "*",
586
+ "profile": "*",
587
+ "type": "*",
588
+ "target": "*",
589
+ "track": "*",
590
+ "require": {
591
+ "members": [
592
+ "01930000-0000-7000-8000-00000000a001",
593
+ "01930000-0000-7000-8000-00000000a002"
594
+ ],
595
+ "count": 1
596
+ }
597
+ },
598
+ {
599
+ "id": "r2",
600
+ "app": "*",
601
+ "platform": "*",
602
+ "profile": "*",
603
+ "type": "*",
604
+ "target": "*",
605
+ "track": "*",
606
+ "require": {
607
+ "members": [
608
+ "01930000-0000-7000-8000-00000000a001",
609
+ "01930000-0000-7000-8000-00000000a002"
610
+ ],
611
+ "count": 1
612
+ }
613
+ },
614
+ {
615
+ "id": "r3",
616
+ "app": "*",
617
+ "platform": "*",
618
+ "profile": "*",
619
+ "type": "*",
620
+ "target": "*",
621
+ "track": "*",
622
+ "require": {
623
+ "members": [
624
+ "01930000-0000-7000-8000-00000000a001",
625
+ "01930000-0000-7000-8000-00000000a002"
626
+ ],
627
+ "count": 1
628
+ }
629
+ },
630
+ {
631
+ "id": "r4",
632
+ "app": "*",
633
+ "platform": "*",
634
+ "profile": "*",
635
+ "type": "*",
636
+ "target": "*",
637
+ "track": "*",
638
+ "require": {
639
+ "members": [
640
+ "01930000-0000-7000-8000-00000000a001",
641
+ "01930000-0000-7000-8000-00000000a002"
642
+ ],
643
+ "count": 1
644
+ }
645
+ },
646
+ {
647
+ "id": "r5",
648
+ "app": "*",
649
+ "platform": "*",
650
+ "profile": "*",
651
+ "type": "*",
652
+ "target": "*",
653
+ "track": "*",
654
+ "require": {
655
+ "members": [
656
+ "01930000-0000-7000-8000-00000000a001",
657
+ "01930000-0000-7000-8000-00000000a002"
658
+ ],
659
+ "count": 1
660
+ }
661
+ },
662
+ {
663
+ "id": "r6",
664
+ "app": "*",
665
+ "platform": "*",
666
+ "profile": "*",
667
+ "type": "*",
668
+ "target": "*",
669
+ "track": "*",
670
+ "require": {
671
+ "members": [
672
+ "01930000-0000-7000-8000-00000000a001",
673
+ "01930000-0000-7000-8000-00000000a002"
674
+ ],
675
+ "count": 1
676
+ }
677
+ },
678
+ {
679
+ "id": "r7",
680
+ "app": "*",
681
+ "platform": "*",
682
+ "profile": "*",
683
+ "type": "*",
684
+ "target": "*",
685
+ "track": "*",
686
+ "require": {
687
+ "members": [
688
+ "01930000-0000-7000-8000-00000000a001",
689
+ "01930000-0000-7000-8000-00000000a002"
690
+ ],
691
+ "count": 1
692
+ }
693
+ },
694
+ {
695
+ "id": "r8",
696
+ "app": "*",
697
+ "platform": "*",
698
+ "profile": "*",
699
+ "type": "*",
700
+ "target": "*",
701
+ "track": "*",
702
+ "require": {
703
+ "members": [
704
+ "01930000-0000-7000-8000-00000000a001",
705
+ "01930000-0000-7000-8000-00000000a002"
706
+ ],
707
+ "count": 1
708
+ }
709
+ },
710
+ {
711
+ "id": "r9",
712
+ "app": "*",
713
+ "platform": "*",
714
+ "profile": "*",
715
+ "type": "*",
716
+ "target": "*",
717
+ "track": "*",
718
+ "require": {
719
+ "members": [
720
+ "01930000-0000-7000-8000-00000000a001",
721
+ "01930000-0000-7000-8000-00000000a002"
722
+ ],
723
+ "count": 1
724
+ }
725
+ },
726
+ {
727
+ "id": "r10",
728
+ "app": "*",
729
+ "platform": "*",
730
+ "profile": "*",
731
+ "type": "*",
732
+ "target": "*",
733
+ "track": "*",
734
+ "require": {
735
+ "members": [
736
+ "01930000-0000-7000-8000-00000000a001",
737
+ "01930000-0000-7000-8000-00000000a002"
738
+ ],
739
+ "count": 1
740
+ }
741
+ },
742
+ {
743
+ "id": "r11",
744
+ "app": "*",
745
+ "platform": "*",
746
+ "profile": "*",
747
+ "type": "*",
748
+ "target": "*",
749
+ "track": "*",
750
+ "require": {
751
+ "members": [
752
+ "01930000-0000-7000-8000-00000000a001",
753
+ "01930000-0000-7000-8000-00000000a002"
754
+ ],
755
+ "count": 1
756
+ }
757
+ },
758
+ {
759
+ "id": "r12",
760
+ "app": "*",
761
+ "platform": "*",
762
+ "profile": "*",
763
+ "type": "*",
764
+ "target": "*",
765
+ "track": "*",
766
+ "require": {
767
+ "members": [
768
+ "01930000-0000-7000-8000-00000000a001",
769
+ "01930000-0000-7000-8000-00000000a002"
770
+ ],
771
+ "count": 1
772
+ }
773
+ },
774
+ {
775
+ "id": "r13",
776
+ "app": "*",
777
+ "platform": "*",
778
+ "profile": "*",
779
+ "type": "*",
780
+ "target": "*",
781
+ "track": "*",
782
+ "require": {
783
+ "members": [
784
+ "01930000-0000-7000-8000-00000000a001",
785
+ "01930000-0000-7000-8000-00000000a002"
786
+ ],
787
+ "count": 1
788
+ }
789
+ },
790
+ {
791
+ "id": "r14",
792
+ "app": "*",
793
+ "platform": "*",
794
+ "profile": "*",
795
+ "type": "*",
796
+ "target": "*",
797
+ "track": "*",
798
+ "require": {
799
+ "members": [
800
+ "01930000-0000-7000-8000-00000000a001",
801
+ "01930000-0000-7000-8000-00000000a002"
802
+ ],
803
+ "count": 1
804
+ }
805
+ },
806
+ {
807
+ "id": "r15",
808
+ "app": "*",
809
+ "platform": "*",
810
+ "profile": "*",
811
+ "type": "*",
812
+ "target": "*",
813
+ "track": "*",
814
+ "require": {
815
+ "members": [
816
+ "01930000-0000-7000-8000-00000000a001",
817
+ "01930000-0000-7000-8000-00000000a002"
818
+ ],
819
+ "count": 1
820
+ }
821
+ },
822
+ {
823
+ "id": "r16",
824
+ "app": "*",
825
+ "platform": "*",
826
+ "profile": "*",
827
+ "type": "*",
828
+ "target": "*",
829
+ "track": "*",
830
+ "require": {
831
+ "members": [
832
+ "01930000-0000-7000-8000-00000000a001",
833
+ "01930000-0000-7000-8000-00000000a002"
834
+ ],
835
+ "count": 1
836
+ }
837
+ },
838
+ {
839
+ "id": "r17",
840
+ "app": "*",
841
+ "platform": "*",
842
+ "profile": "*",
843
+ "type": "*",
844
+ "target": "*",
845
+ "track": "*",
846
+ "require": {
847
+ "members": [
848
+ "01930000-0000-7000-8000-00000000a001",
849
+ "01930000-0000-7000-8000-00000000a002"
850
+ ],
851
+ "count": 1
852
+ }
853
+ },
854
+ {
855
+ "id": "r18",
856
+ "app": "*",
857
+ "platform": "*",
858
+ "profile": "*",
859
+ "type": "*",
860
+ "target": "*",
861
+ "track": "*",
862
+ "require": {
863
+ "members": [
864
+ "01930000-0000-7000-8000-00000000a001",
865
+ "01930000-0000-7000-8000-00000000a002"
866
+ ],
867
+ "count": 1
868
+ }
869
+ },
870
+ {
871
+ "id": "r19",
872
+ "app": "*",
873
+ "platform": "*",
874
+ "profile": "*",
875
+ "type": "*",
876
+ "target": "*",
877
+ "track": "*",
878
+ "require": {
879
+ "members": [
880
+ "01930000-0000-7000-8000-00000000a001",
881
+ "01930000-0000-7000-8000-00000000a002"
882
+ ],
883
+ "count": 1
884
+ }
885
+ },
886
+ {
887
+ "id": "r20",
888
+ "app": "*",
889
+ "platform": "*",
890
+ "profile": "*",
891
+ "type": "*",
892
+ "target": "*",
893
+ "track": "*",
894
+ "require": {
895
+ "members": [
896
+ "01930000-0000-7000-8000-00000000a001",
897
+ "01930000-0000-7000-8000-00000000a002"
898
+ ],
899
+ "count": 1
900
+ }
901
+ },
902
+ {
903
+ "id": "r21",
904
+ "app": "*",
905
+ "platform": "*",
906
+ "profile": "*",
907
+ "type": "*",
908
+ "target": "*",
909
+ "track": "*",
910
+ "require": {
911
+ "members": [
912
+ "01930000-0000-7000-8000-00000000a001",
913
+ "01930000-0000-7000-8000-00000000a002"
914
+ ],
915
+ "count": 1
916
+ }
917
+ },
918
+ {
919
+ "id": "r22",
920
+ "app": "*",
921
+ "platform": "*",
922
+ "profile": "*",
923
+ "type": "*",
924
+ "target": "*",
925
+ "track": "*",
926
+ "require": {
927
+ "members": [
928
+ "01930000-0000-7000-8000-00000000a001",
929
+ "01930000-0000-7000-8000-00000000a002"
930
+ ],
931
+ "count": 1
932
+ }
933
+ },
934
+ {
935
+ "id": "r23",
936
+ "app": "*",
937
+ "platform": "*",
938
+ "profile": "*",
939
+ "type": "*",
940
+ "target": "*",
941
+ "track": "*",
942
+ "require": {
943
+ "members": [
944
+ "01930000-0000-7000-8000-00000000a001",
945
+ "01930000-0000-7000-8000-00000000a002"
946
+ ],
947
+ "count": 1
948
+ }
949
+ },
950
+ {
951
+ "id": "r24",
952
+ "app": "*",
953
+ "platform": "*",
954
+ "profile": "*",
955
+ "type": "*",
956
+ "target": "*",
957
+ "track": "*",
958
+ "require": {
959
+ "members": [
960
+ "01930000-0000-7000-8000-00000000a001",
961
+ "01930000-0000-7000-8000-00000000a002"
962
+ ],
963
+ "count": 1
964
+ }
965
+ },
966
+ {
967
+ "id": "r25",
968
+ "app": "*",
969
+ "platform": "*",
970
+ "profile": "*",
971
+ "type": "*",
972
+ "target": "*",
973
+ "track": "*",
974
+ "require": {
975
+ "members": [
976
+ "01930000-0000-7000-8000-00000000a001",
977
+ "01930000-0000-7000-8000-00000000a002"
978
+ ],
979
+ "count": 1
980
+ }
981
+ },
982
+ {
983
+ "id": "r26",
984
+ "app": "*",
985
+ "platform": "*",
986
+ "profile": "*",
987
+ "type": "*",
988
+ "target": "*",
989
+ "track": "*",
990
+ "require": {
991
+ "members": [
992
+ "01930000-0000-7000-8000-00000000a001",
993
+ "01930000-0000-7000-8000-00000000a002"
994
+ ],
995
+ "count": 1
996
+ }
997
+ },
998
+ {
999
+ "id": "r27",
1000
+ "app": "*",
1001
+ "platform": "*",
1002
+ "profile": "*",
1003
+ "type": "*",
1004
+ "target": "*",
1005
+ "track": "*",
1006
+ "require": {
1007
+ "members": [
1008
+ "01930000-0000-7000-8000-00000000a001",
1009
+ "01930000-0000-7000-8000-00000000a002"
1010
+ ],
1011
+ "count": 1
1012
+ }
1013
+ },
1014
+ {
1015
+ "id": "r28",
1016
+ "app": "*",
1017
+ "platform": "*",
1018
+ "profile": "*",
1019
+ "type": "*",
1020
+ "target": "*",
1021
+ "track": "*",
1022
+ "require": {
1023
+ "members": [
1024
+ "01930000-0000-7000-8000-00000000a001",
1025
+ "01930000-0000-7000-8000-00000000a002"
1026
+ ],
1027
+ "count": 1
1028
+ }
1029
+ },
1030
+ {
1031
+ "id": "r29",
1032
+ "app": "*",
1033
+ "platform": "*",
1034
+ "profile": "*",
1035
+ "type": "*",
1036
+ "target": "*",
1037
+ "track": "*",
1038
+ "require": {
1039
+ "members": [
1040
+ "01930000-0000-7000-8000-00000000a001",
1041
+ "01930000-0000-7000-8000-00000000a002"
1042
+ ],
1043
+ "count": 1
1044
+ }
1045
+ },
1046
+ {
1047
+ "id": "r30",
1048
+ "app": "*",
1049
+ "platform": "*",
1050
+ "profile": "*",
1051
+ "type": "*",
1052
+ "target": "*",
1053
+ "track": "*",
1054
+ "require": {
1055
+ "members": [
1056
+ "01930000-0000-7000-8000-00000000a001",
1057
+ "01930000-0000-7000-8000-00000000a002"
1058
+ ],
1059
+ "count": 1
1060
+ }
1061
+ },
1062
+ {
1063
+ "id": "r31",
1064
+ "app": "*",
1065
+ "platform": "*",
1066
+ "profile": "*",
1067
+ "type": "*",
1068
+ "target": "*",
1069
+ "track": "*",
1070
+ "require": {
1071
+ "members": [
1072
+ "01930000-0000-7000-8000-00000000a001",
1073
+ "01930000-0000-7000-8000-00000000a002"
1074
+ ],
1075
+ "count": 1
1076
+ }
1077
+ },
1078
+ {
1079
+ "id": "r32",
1080
+ "app": "*",
1081
+ "platform": "*",
1082
+ "profile": "*",
1083
+ "type": "*",
1084
+ "target": "*",
1085
+ "track": "*",
1086
+ "require": {
1087
+ "members": [
1088
+ "01930000-0000-7000-8000-00000000a001",
1089
+ "01930000-0000-7000-8000-00000000a002"
1090
+ ],
1091
+ "count": 1
1092
+ }
1093
+ },
1094
+ {
1095
+ "id": "r33",
1096
+ "app": "*",
1097
+ "platform": "*",
1098
+ "profile": "*",
1099
+ "type": "*",
1100
+ "target": "*",
1101
+ "track": "*",
1102
+ "require": {
1103
+ "members": [
1104
+ "01930000-0000-7000-8000-00000000a001",
1105
+ "01930000-0000-7000-8000-00000000a002"
1106
+ ],
1107
+ "count": 1
1108
+ }
1109
+ },
1110
+ {
1111
+ "id": "r34",
1112
+ "app": "*",
1113
+ "platform": "*",
1114
+ "profile": "*",
1115
+ "type": "*",
1116
+ "target": "*",
1117
+ "track": "*",
1118
+ "require": {
1119
+ "members": [
1120
+ "01930000-0000-7000-8000-00000000a001",
1121
+ "01930000-0000-7000-8000-00000000a002"
1122
+ ],
1123
+ "count": 1
1124
+ }
1125
+ },
1126
+ {
1127
+ "id": "r35",
1128
+ "app": "*",
1129
+ "platform": "*",
1130
+ "profile": "*",
1131
+ "type": "*",
1132
+ "target": "*",
1133
+ "track": "*",
1134
+ "require": {
1135
+ "members": [
1136
+ "01930000-0000-7000-8000-00000000a001",
1137
+ "01930000-0000-7000-8000-00000000a002"
1138
+ ],
1139
+ "count": 1
1140
+ }
1141
+ },
1142
+ {
1143
+ "id": "r36",
1144
+ "app": "*",
1145
+ "platform": "*",
1146
+ "profile": "*",
1147
+ "type": "*",
1148
+ "target": "*",
1149
+ "track": "*",
1150
+ "require": {
1151
+ "members": [
1152
+ "01930000-0000-7000-8000-00000000a001",
1153
+ "01930000-0000-7000-8000-00000000a002"
1154
+ ],
1155
+ "count": 1
1156
+ }
1157
+ },
1158
+ {
1159
+ "id": "r37",
1160
+ "app": "*",
1161
+ "platform": "*",
1162
+ "profile": "*",
1163
+ "type": "*",
1164
+ "target": "*",
1165
+ "track": "*",
1166
+ "require": {
1167
+ "members": [
1168
+ "01930000-0000-7000-8000-00000000a001",
1169
+ "01930000-0000-7000-8000-00000000a002"
1170
+ ],
1171
+ "count": 1
1172
+ }
1173
+ },
1174
+ {
1175
+ "id": "r38",
1176
+ "app": "*",
1177
+ "platform": "*",
1178
+ "profile": "*",
1179
+ "type": "*",
1180
+ "target": "*",
1181
+ "track": "*",
1182
+ "require": {
1183
+ "members": [
1184
+ "01930000-0000-7000-8000-00000000a001",
1185
+ "01930000-0000-7000-8000-00000000a002"
1186
+ ],
1187
+ "count": 1
1188
+ }
1189
+ },
1190
+ {
1191
+ "id": "r39",
1192
+ "app": "*",
1193
+ "platform": "*",
1194
+ "profile": "*",
1195
+ "type": "*",
1196
+ "target": "*",
1197
+ "track": "*",
1198
+ "require": {
1199
+ "members": [
1200
+ "01930000-0000-7000-8000-00000000a001",
1201
+ "01930000-0000-7000-8000-00000000a002"
1202
+ ],
1203
+ "count": 1
1204
+ }
1205
+ },
1206
+ {
1207
+ "id": "r40",
1208
+ "app": "*",
1209
+ "platform": "*",
1210
+ "profile": "*",
1211
+ "type": "*",
1212
+ "target": "*",
1213
+ "track": "*",
1214
+ "require": {
1215
+ "members": [
1216
+ "01930000-0000-7000-8000-00000000a001",
1217
+ "01930000-0000-7000-8000-00000000a002"
1218
+ ],
1219
+ "count": 1
1220
+ }
1221
+ },
1222
+ {
1223
+ "id": "r41",
1224
+ "app": "*",
1225
+ "platform": "*",
1226
+ "profile": "*",
1227
+ "type": "*",
1228
+ "target": "*",
1229
+ "track": "*",
1230
+ "require": {
1231
+ "members": [
1232
+ "01930000-0000-7000-8000-00000000a001",
1233
+ "01930000-0000-7000-8000-00000000a002"
1234
+ ],
1235
+ "count": 1
1236
+ }
1237
+ },
1238
+ {
1239
+ "id": "r42",
1240
+ "app": "*",
1241
+ "platform": "*",
1242
+ "profile": "*",
1243
+ "type": "*",
1244
+ "target": "*",
1245
+ "track": "*",
1246
+ "require": {
1247
+ "members": [
1248
+ "01930000-0000-7000-8000-00000000a001",
1249
+ "01930000-0000-7000-8000-00000000a002"
1250
+ ],
1251
+ "count": 1
1252
+ }
1253
+ },
1254
+ {
1255
+ "id": "r43",
1256
+ "app": "*",
1257
+ "platform": "*",
1258
+ "profile": "*",
1259
+ "type": "*",
1260
+ "target": "*",
1261
+ "track": "*",
1262
+ "require": {
1263
+ "members": [
1264
+ "01930000-0000-7000-8000-00000000a001",
1265
+ "01930000-0000-7000-8000-00000000a002"
1266
+ ],
1267
+ "count": 1
1268
+ }
1269
+ },
1270
+ {
1271
+ "id": "r44",
1272
+ "app": "*",
1273
+ "platform": "*",
1274
+ "profile": "*",
1275
+ "type": "*",
1276
+ "target": "*",
1277
+ "track": "*",
1278
+ "require": {
1279
+ "members": [
1280
+ "01930000-0000-7000-8000-00000000a001",
1281
+ "01930000-0000-7000-8000-00000000a002"
1282
+ ],
1283
+ "count": 1
1284
+ }
1285
+ },
1286
+ {
1287
+ "id": "r45",
1288
+ "app": "*",
1289
+ "platform": "*",
1290
+ "profile": "*",
1291
+ "type": "*",
1292
+ "target": "*",
1293
+ "track": "*",
1294
+ "require": {
1295
+ "members": [
1296
+ "01930000-0000-7000-8000-00000000a001",
1297
+ "01930000-0000-7000-8000-00000000a002"
1298
+ ],
1299
+ "count": 1
1300
+ }
1301
+ },
1302
+ {
1303
+ "id": "r46",
1304
+ "app": "*",
1305
+ "platform": "*",
1306
+ "profile": "*",
1307
+ "type": "*",
1308
+ "target": "*",
1309
+ "track": "*",
1310
+ "require": {
1311
+ "members": [
1312
+ "01930000-0000-7000-8000-00000000a001",
1313
+ "01930000-0000-7000-8000-00000000a002"
1314
+ ],
1315
+ "count": 1
1316
+ }
1317
+ },
1318
+ {
1319
+ "id": "r47",
1320
+ "app": "*",
1321
+ "platform": "*",
1322
+ "profile": "*",
1323
+ "type": "*",
1324
+ "target": "*",
1325
+ "track": "*",
1326
+ "require": {
1327
+ "members": [
1328
+ "01930000-0000-7000-8000-00000000a001",
1329
+ "01930000-0000-7000-8000-00000000a002"
1330
+ ],
1331
+ "count": 1
1332
+ }
1333
+ },
1334
+ {
1335
+ "id": "r48",
1336
+ "app": "*",
1337
+ "platform": "*",
1338
+ "profile": "*",
1339
+ "type": "*",
1340
+ "target": "*",
1341
+ "track": "*",
1342
+ "require": {
1343
+ "members": [
1344
+ "01930000-0000-7000-8000-00000000a001",
1345
+ "01930000-0000-7000-8000-00000000a002"
1346
+ ],
1347
+ "count": 1
1348
+ }
1349
+ },
1350
+ {
1351
+ "id": "r49",
1352
+ "app": "*",
1353
+ "platform": "*",
1354
+ "profile": "*",
1355
+ "type": "*",
1356
+ "target": "*",
1357
+ "track": "*",
1358
+ "require": {
1359
+ "members": [
1360
+ "01930000-0000-7000-8000-00000000a001",
1361
+ "01930000-0000-7000-8000-00000000a002"
1362
+ ],
1363
+ "count": 1
1364
+ }
1365
+ },
1366
+ {
1367
+ "id": "r50",
1368
+ "app": "*",
1369
+ "platform": "*",
1370
+ "profile": "*",
1371
+ "type": "*",
1372
+ "target": "*",
1373
+ "track": "*",
1374
+ "require": {
1375
+ "members": [
1376
+ "01930000-0000-7000-8000-00000000a001",
1377
+ "01930000-0000-7000-8000-00000000a002"
1378
+ ],
1379
+ "count": 1
1380
+ }
1381
+ },
1382
+ {
1383
+ "id": "r51",
1384
+ "app": "*",
1385
+ "platform": "*",
1386
+ "profile": "*",
1387
+ "type": "*",
1388
+ "target": "*",
1389
+ "track": "*",
1390
+ "require": {
1391
+ "members": [
1392
+ "01930000-0000-7000-8000-00000000a001",
1393
+ "01930000-0000-7000-8000-00000000a002"
1394
+ ],
1395
+ "count": 1
1396
+ }
1397
+ },
1398
+ {
1399
+ "id": "r52",
1400
+ "app": "*",
1401
+ "platform": "*",
1402
+ "profile": "*",
1403
+ "type": "*",
1404
+ "target": "*",
1405
+ "track": "*",
1406
+ "require": {
1407
+ "members": [
1408
+ "01930000-0000-7000-8000-00000000a001",
1409
+ "01930000-0000-7000-8000-00000000a002"
1410
+ ],
1411
+ "count": 1
1412
+ }
1413
+ },
1414
+ {
1415
+ "id": "r53",
1416
+ "app": "*",
1417
+ "platform": "*",
1418
+ "profile": "*",
1419
+ "type": "*",
1420
+ "target": "*",
1421
+ "track": "*",
1422
+ "require": {
1423
+ "members": [
1424
+ "01930000-0000-7000-8000-00000000a001",
1425
+ "01930000-0000-7000-8000-00000000a002"
1426
+ ],
1427
+ "count": 1
1428
+ }
1429
+ },
1430
+ {
1431
+ "id": "r54",
1432
+ "app": "*",
1433
+ "platform": "*",
1434
+ "profile": "*",
1435
+ "type": "*",
1436
+ "target": "*",
1437
+ "track": "*",
1438
+ "require": {
1439
+ "members": [
1440
+ "01930000-0000-7000-8000-00000000a001",
1441
+ "01930000-0000-7000-8000-00000000a002"
1442
+ ],
1443
+ "count": 1
1444
+ }
1445
+ },
1446
+ {
1447
+ "id": "r55",
1448
+ "app": "*",
1449
+ "platform": "*",
1450
+ "profile": "*",
1451
+ "type": "*",
1452
+ "target": "*",
1453
+ "track": "*",
1454
+ "require": {
1455
+ "members": [
1456
+ "01930000-0000-7000-8000-00000000a001",
1457
+ "01930000-0000-7000-8000-00000000a002"
1458
+ ],
1459
+ "count": 1
1460
+ }
1461
+ },
1462
+ {
1463
+ "id": "r56",
1464
+ "app": "*",
1465
+ "platform": "*",
1466
+ "profile": "*",
1467
+ "type": "*",
1468
+ "target": "*",
1469
+ "track": "*",
1470
+ "require": {
1471
+ "members": [
1472
+ "01930000-0000-7000-8000-00000000a001",
1473
+ "01930000-0000-7000-8000-00000000a002"
1474
+ ],
1475
+ "count": 1
1476
+ }
1477
+ },
1478
+ {
1479
+ "id": "r57",
1480
+ "app": "*",
1481
+ "platform": "*",
1482
+ "profile": "*",
1483
+ "type": "*",
1484
+ "target": "*",
1485
+ "track": "*",
1486
+ "require": {
1487
+ "members": [
1488
+ "01930000-0000-7000-8000-00000000a001",
1489
+ "01930000-0000-7000-8000-00000000a002"
1490
+ ],
1491
+ "count": 1
1492
+ }
1493
+ },
1494
+ {
1495
+ "id": "r58",
1496
+ "app": "*",
1497
+ "platform": "*",
1498
+ "profile": "*",
1499
+ "type": "*",
1500
+ "target": "*",
1501
+ "track": "*",
1502
+ "require": {
1503
+ "members": [
1504
+ "01930000-0000-7000-8000-00000000a001",
1505
+ "01930000-0000-7000-8000-00000000a002"
1506
+ ],
1507
+ "count": 1
1508
+ }
1509
+ },
1510
+ {
1511
+ "id": "r59",
1512
+ "app": "*",
1513
+ "platform": "*",
1514
+ "profile": "*",
1515
+ "type": "*",
1516
+ "target": "*",
1517
+ "track": "*",
1518
+ "require": {
1519
+ "members": [
1520
+ "01930000-0000-7000-8000-00000000a001",
1521
+ "01930000-0000-7000-8000-00000000a002"
1522
+ ],
1523
+ "count": 1
1524
+ }
1525
+ },
1526
+ {
1527
+ "id": "r60",
1528
+ "app": "*",
1529
+ "platform": "*",
1530
+ "profile": "*",
1531
+ "type": "*",
1532
+ "target": "*",
1533
+ "track": "*",
1534
+ "require": {
1535
+ "members": [
1536
+ "01930000-0000-7000-8000-00000000a001",
1537
+ "01930000-0000-7000-8000-00000000a002"
1538
+ ],
1539
+ "count": 1
1540
+ }
1541
+ },
1542
+ {
1543
+ "id": "r61",
1544
+ "app": "*",
1545
+ "platform": "*",
1546
+ "profile": "*",
1547
+ "type": "*",
1548
+ "target": "*",
1549
+ "track": "*",
1550
+ "require": {
1551
+ "members": [
1552
+ "01930000-0000-7000-8000-00000000a001",
1553
+ "01930000-0000-7000-8000-00000000a002"
1554
+ ],
1555
+ "count": 1
1556
+ }
1557
+ },
1558
+ {
1559
+ "id": "r62",
1560
+ "app": "*",
1561
+ "platform": "*",
1562
+ "profile": "*",
1563
+ "type": "*",
1564
+ "target": "*",
1565
+ "track": "*",
1566
+ "require": {
1567
+ "members": [
1568
+ "01930000-0000-7000-8000-00000000a001",
1569
+ "01930000-0000-7000-8000-00000000a002"
1570
+ ],
1571
+ "count": 1
1572
+ }
1573
+ },
1574
+ {
1575
+ "id": "r63",
1576
+ "app": "*",
1577
+ "platform": "*",
1578
+ "profile": "*",
1579
+ "type": "*",
1580
+ "target": "*",
1581
+ "track": "*",
1582
+ "require": {
1583
+ "members": [
1584
+ "01930000-0000-7000-8000-00000000a001",
1585
+ "01930000-0000-7000-8000-00000000a002"
1586
+ ],
1587
+ "count": 1
1588
+ }
1589
+ },
1590
+ {
1591
+ "id": "r64",
1592
+ "app": "*",
1593
+ "platform": "*",
1594
+ "profile": "*",
1595
+ "type": "*",
1596
+ "target": "*",
1597
+ "track": "*",
1598
+ "require": {
1599
+ "members": [
1600
+ "01930000-0000-7000-8000-00000000a001",
1601
+ "01930000-0000-7000-8000-00000000a002"
1602
+ ],
1603
+ "count": 1
1604
+ }
1605
+ }
1606
+ ],
1607
+ "signature": {
1608
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1609
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1610
+ }
1611
+ }
1612
+ },
1613
+ {
1614
+ "name": "rule-extra-field",
1615
+ "code": "policy.rule",
1616
+ "description": "A rule with a comment: it takes exactly the eight fields.",
1617
+ "document": {
1618
+ "format": "ias-policy-1",
1619
+ "version": 1,
1620
+ "not_after": "2027-04-28T00:00:00Z",
1621
+ "rules": [
1622
+ {
1623
+ "id": "heredado",
1624
+ "app": "*",
1625
+ "platform": "*",
1626
+ "profile": "*",
1627
+ "type": "*",
1628
+ "target": "*",
1629
+ "track": "*",
1630
+ "require": {
1631
+ "members": [
1632
+ "01930000-0000-7000-8000-00000000a001",
1633
+ "01930000-0000-7000-8000-00000000a002"
1634
+ ],
1635
+ "count": 1
1636
+ },
1637
+ "note": "producción"
1638
+ }
1639
+ ],
1640
+ "signature": {
1641
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1642
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1643
+ }
1644
+ }
1645
+ },
1646
+ {
1647
+ "name": "rule-without-require",
1648
+ "code": "policy.rule",
1649
+ "description": "A rule without require.",
1650
+ "document": {
1651
+ "format": "ias-policy-1",
1652
+ "version": 1,
1653
+ "not_after": "2027-04-28T00:00:00Z",
1654
+ "rules": [
1655
+ {
1656
+ "id": "heredado",
1657
+ "app": "*",
1658
+ "platform": "*",
1659
+ "profile": "*",
1660
+ "type": "*",
1661
+ "target": "*",
1662
+ "track": "*"
1663
+ }
1664
+ ],
1665
+ "signature": {
1666
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1667
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1668
+ }
1669
+ }
1670
+ },
1671
+ {
1672
+ "name": "id-uppercase",
1673
+ "code": "policy.rule.id",
1674
+ "description": "An id in capitals.",
1675
+ "document": {
1676
+ "format": "ias-policy-1",
1677
+ "version": 1,
1678
+ "not_after": "2027-04-28T00:00:00Z",
1679
+ "rules": [
1680
+ {
1681
+ "id": "Heredado",
1682
+ "app": "*",
1683
+ "platform": "*",
1684
+ "profile": "*",
1685
+ "type": "*",
1686
+ "target": "*",
1687
+ "track": "*",
1688
+ "require": {
1689
+ "members": [
1690
+ "01930000-0000-7000-8000-00000000a001",
1691
+ "01930000-0000-7000-8000-00000000a002"
1692
+ ],
1693
+ "count": 1
1694
+ }
1695
+ }
1696
+ ],
1697
+ "signature": {
1698
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1699
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1700
+ }
1701
+ }
1702
+ },
1703
+ {
1704
+ "name": "id-empty",
1705
+ "code": "policy.rule.id",
1706
+ "description": "An empty id.",
1707
+ "document": {
1708
+ "format": "ias-policy-1",
1709
+ "version": 1,
1710
+ "not_after": "2027-04-28T00:00:00Z",
1711
+ "rules": [
1712
+ {
1713
+ "id": "",
1714
+ "app": "*",
1715
+ "platform": "*",
1716
+ "profile": "*",
1717
+ "type": "*",
1718
+ "target": "*",
1719
+ "track": "*",
1720
+ "require": {
1721
+ "members": [
1722
+ "01930000-0000-7000-8000-00000000a001",
1723
+ "01930000-0000-7000-8000-00000000a002"
1724
+ ],
1725
+ "count": 1
1726
+ }
1727
+ }
1728
+ ],
1729
+ "signature": {
1730
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1731
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1732
+ }
1733
+ }
1734
+ },
1735
+ {
1736
+ "name": "id-too-long",
1737
+ "code": "policy.rule.id",
1738
+ "description": "An id of 33 characters.",
1739
+ "document": {
1740
+ "format": "ias-policy-1",
1741
+ "version": 1,
1742
+ "not_after": "2027-04-28T00:00:00Z",
1743
+ "rules": [
1744
+ {
1745
+ "id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
1746
+ "app": "*",
1747
+ "platform": "*",
1748
+ "profile": "*",
1749
+ "type": "*",
1750
+ "target": "*",
1751
+ "track": "*",
1752
+ "require": {
1753
+ "members": [
1754
+ "01930000-0000-7000-8000-00000000a001",
1755
+ "01930000-0000-7000-8000-00000000a002"
1756
+ ],
1757
+ "count": 1
1758
+ }
1759
+ }
1760
+ ],
1761
+ "signature": {
1762
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1763
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1764
+ }
1765
+ }
1766
+ },
1767
+ {
1768
+ "name": "id-duplicate",
1769
+ "code": "policy.rule.duplicate",
1770
+ "description": "Two rules with the same id.",
1771
+ "document": {
1772
+ "format": "ias-policy-1",
1773
+ "version": 1,
1774
+ "not_after": "2027-04-28T00:00:00Z",
1775
+ "rules": [
1776
+ {
1777
+ "id": "heredado",
1778
+ "app": "*",
1779
+ "platform": "*",
1780
+ "profile": "*",
1781
+ "type": "*",
1782
+ "target": "*",
1783
+ "track": "*",
1784
+ "require": {
1785
+ "members": [
1786
+ "01930000-0000-7000-8000-00000000a001",
1787
+ "01930000-0000-7000-8000-00000000a002"
1788
+ ],
1789
+ "count": 1
1790
+ }
1791
+ },
1792
+ {
1793
+ "id": "heredado",
1794
+ "app": "*",
1795
+ "platform": "*",
1796
+ "profile": "*",
1797
+ "type": "*",
1798
+ "target": "*",
1799
+ "track": "*",
1800
+ "require": {
1801
+ "members": [
1802
+ "01930000-0000-7000-8000-00000000a001",
1803
+ "01930000-0000-7000-8000-00000000a002"
1804
+ ],
1805
+ "count": 1
1806
+ }
1807
+ }
1808
+ ],
1809
+ "signature": {
1810
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1811
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1812
+ }
1813
+ }
1814
+ },
1815
+ {
1816
+ "name": "app-uppercase",
1817
+ "code": "policy.rule.app",
1818
+ "description": "An application code in capitals.",
1819
+ "document": {
1820
+ "format": "ias-policy-1",
1821
+ "version": 1,
1822
+ "not_after": "2027-04-28T00:00:00Z",
1823
+ "rules": [
1824
+ {
1825
+ "id": "heredado",
1826
+ "app": "Acme",
1827
+ "platform": "*",
1828
+ "profile": "*",
1829
+ "type": "*",
1830
+ "target": "*",
1831
+ "track": "*",
1832
+ "require": {
1833
+ "members": [
1834
+ "01930000-0000-7000-8000-00000000a001",
1835
+ "01930000-0000-7000-8000-00000000a002"
1836
+ ],
1837
+ "count": 1
1838
+ }
1839
+ }
1840
+ ],
1841
+ "signature": {
1842
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1843
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1844
+ }
1845
+ }
1846
+ },
1847
+ {
1848
+ "name": "platform-windows",
1849
+ "code": "policy.rule.platform",
1850
+ "description": "A platform the format does not have.",
1851
+ "document": {
1852
+ "format": "ias-policy-1",
1853
+ "version": 1,
1854
+ "not_after": "2027-04-28T00:00:00Z",
1855
+ "rules": [
1856
+ {
1857
+ "id": "heredado",
1858
+ "app": "*",
1859
+ "platform": "windows",
1860
+ "profile": "*",
1861
+ "type": "*",
1862
+ "target": "*",
1863
+ "track": "*",
1864
+ "require": {
1865
+ "members": [
1866
+ "01930000-0000-7000-8000-00000000a001",
1867
+ "01930000-0000-7000-8000-00000000a002"
1868
+ ],
1869
+ "count": 1
1870
+ }
1871
+ }
1872
+ ],
1873
+ "signature": {
1874
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1875
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1876
+ }
1877
+ }
1878
+ },
1879
+ {
1880
+ "name": "platform-uppercase",
1881
+ "code": "policy.rule.platform",
1882
+ "description": "iOS in capitals.",
1883
+ "document": {
1884
+ "format": "ias-policy-1",
1885
+ "version": 1,
1886
+ "not_after": "2027-04-28T00:00:00Z",
1887
+ "rules": [
1888
+ {
1889
+ "id": "heredado",
1890
+ "app": "*",
1891
+ "platform": "iOS",
1892
+ "profile": "*",
1893
+ "type": "*",
1894
+ "target": "*",
1895
+ "track": "*",
1896
+ "require": {
1897
+ "members": [
1898
+ "01930000-0000-7000-8000-00000000a001",
1899
+ "01930000-0000-7000-8000-00000000a002"
1900
+ ],
1901
+ "count": 1
1902
+ }
1903
+ }
1904
+ ],
1905
+ "signature": {
1906
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1907
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1908
+ }
1909
+ }
1910
+ },
1911
+ {
1912
+ "name": "profile-with-slash",
1913
+ "code": "policy.rule.profile",
1914
+ "description": "A profile with a slash, which no profile may have.",
1915
+ "document": {
1916
+ "format": "ias-policy-1",
1917
+ "version": 1,
1918
+ "not_after": "2027-04-28T00:00:00Z",
1919
+ "rules": [
1920
+ {
1921
+ "id": "heredado",
1922
+ "app": "*",
1923
+ "platform": "*",
1924
+ "profile": "production/eu",
1925
+ "type": "*",
1926
+ "target": "*",
1927
+ "track": "*",
1928
+ "require": {
1929
+ "members": [
1930
+ "01930000-0000-7000-8000-00000000a001",
1931
+ "01930000-0000-7000-8000-00000000a002"
1932
+ ],
1933
+ "count": 1
1934
+ }
1935
+ }
1936
+ ],
1937
+ "signature": {
1938
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1939
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1940
+ }
1941
+ }
1942
+ },
1943
+ {
1944
+ "name": "type-resign",
1945
+ "code": "policy.rule.type",
1946
+ "description": "type resign, reserved for a later format.",
1947
+ "document": {
1948
+ "format": "ias-policy-1",
1949
+ "version": 1,
1950
+ "not_after": "2027-04-28T00:00:00Z",
1951
+ "rules": [
1952
+ {
1953
+ "id": "heredado",
1954
+ "app": "*",
1955
+ "platform": "*",
1956
+ "profile": "*",
1957
+ "type": "resign",
1958
+ "target": "*",
1959
+ "track": "*",
1960
+ "require": {
1961
+ "members": [
1962
+ "01930000-0000-7000-8000-00000000a001",
1963
+ "01930000-0000-7000-8000-00000000a002"
1964
+ ],
1965
+ "count": 1
1966
+ }
1967
+ }
1968
+ ],
1969
+ "signature": {
1970
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
1971
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
1972
+ }
1973
+ }
1974
+ },
1975
+ {
1976
+ "name": "target-unknown",
1977
+ "code": "policy.rule.target",
1978
+ "description": "A store the format does not have.",
1979
+ "document": {
1980
+ "format": "ias-policy-1",
1981
+ "version": 1,
1982
+ "not_after": "2027-04-28T00:00:00Z",
1983
+ "rules": [
1984
+ {
1985
+ "id": "heredado",
1986
+ "app": "*",
1987
+ "platform": "*",
1988
+ "profile": "*",
1989
+ "type": "*",
1990
+ "target": "huawei",
1991
+ "track": "*",
1992
+ "require": {
1993
+ "members": [
1994
+ "01930000-0000-7000-8000-00000000a001",
1995
+ "01930000-0000-7000-8000-00000000a002"
1996
+ ],
1997
+ "count": 1
1998
+ }
1999
+ }
2000
+ ],
2001
+ "signature": {
2002
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2003
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2004
+ }
2005
+ }
2006
+ },
2007
+ {
2008
+ "name": "target-with-build",
2009
+ "code": "policy.rule.target",
2010
+ "description": "A target with type build.",
2011
+ "document": {
2012
+ "format": "ias-policy-1",
2013
+ "version": 1,
2014
+ "not_after": "2027-04-28T00:00:00Z",
2015
+ "rules": [
2016
+ {
2017
+ "id": "heredado",
2018
+ "app": "*",
2019
+ "platform": "*",
2020
+ "profile": "*",
2021
+ "type": "build",
2022
+ "target": "app_store_connect",
2023
+ "track": "*",
2024
+ "require": {
2025
+ "members": [
2026
+ "01930000-0000-7000-8000-00000000a001",
2027
+ "01930000-0000-7000-8000-00000000a002"
2028
+ ],
2029
+ "count": 1
2030
+ }
2031
+ }
2032
+ ],
2033
+ "signature": {
2034
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2035
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2036
+ }
2037
+ }
2038
+ },
2039
+ {
2040
+ "name": "track-with-app-store-connect",
2041
+ "code": "policy.rule.track",
2042
+ "description": "A track with target app_store_connect.",
2043
+ "document": {
2044
+ "format": "ias-policy-1",
2045
+ "version": 1,
2046
+ "not_after": "2027-04-28T00:00:00Z",
2047
+ "rules": [
2048
+ {
2049
+ "id": "heredado",
2050
+ "app": "*",
2051
+ "platform": "*",
2052
+ "profile": "*",
2053
+ "type": "submit",
2054
+ "target": "app_store_connect",
2055
+ "track": "internal",
2056
+ "require": {
2057
+ "members": [
2058
+ "01930000-0000-7000-8000-00000000a001",
2059
+ "01930000-0000-7000-8000-00000000a002"
2060
+ ],
2061
+ "count": 1
2062
+ }
2063
+ }
2064
+ ],
2065
+ "signature": {
2066
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2067
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2068
+ }
2069
+ }
2070
+ },
2071
+ {
2072
+ "name": "track-with-build",
2073
+ "code": "policy.rule.track",
2074
+ "description": "A track with type build.",
2075
+ "document": {
2076
+ "format": "ias-policy-1",
2077
+ "version": 1,
2078
+ "not_after": "2027-04-28T00:00:00Z",
2079
+ "rules": [
2080
+ {
2081
+ "id": "heredado",
2082
+ "app": "*",
2083
+ "platform": "*",
2084
+ "profile": "*",
2085
+ "type": "build",
2086
+ "target": "*",
2087
+ "track": "internal",
2088
+ "require": {
2089
+ "members": [
2090
+ "01930000-0000-7000-8000-00000000a001",
2091
+ "01930000-0000-7000-8000-00000000a002"
2092
+ ],
2093
+ "count": 1
2094
+ }
2095
+ }
2096
+ ],
2097
+ "signature": {
2098
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2099
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2100
+ }
2101
+ }
2102
+ },
2103
+ {
2104
+ "name": "track-invalid-char",
2105
+ "code": "policy.rule.track",
2106
+ "description": "A track with a percentage, which no track may have.",
2107
+ "document": {
2108
+ "format": "ias-policy-1",
2109
+ "version": 1,
2110
+ "not_after": "2027-04-28T00:00:00Z",
2111
+ "rules": [
2112
+ {
2113
+ "id": "heredado",
2114
+ "app": "*",
2115
+ "platform": "*",
2116
+ "profile": "*",
2117
+ "type": "submit",
2118
+ "target": "google_play",
2119
+ "track": "internal:50%",
2120
+ "require": {
2121
+ "members": [
2122
+ "01930000-0000-7000-8000-00000000a001",
2123
+ "01930000-0000-7000-8000-00000000a002"
2124
+ ],
2125
+ "count": 1
2126
+ }
2127
+ }
2128
+ ],
2129
+ "signature": {
2130
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2131
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2132
+ }
2133
+ }
2134
+ },
2135
+ {
2136
+ "name": "require-extra-field",
2137
+ "code": "policy.rule.require",
2138
+ "description": "require with a role: the document names member ids, not roles.",
2139
+ "document": {
2140
+ "format": "ias-policy-1",
2141
+ "version": 1,
2142
+ "not_after": "2027-04-28T00:00:00Z",
2143
+ "rules": [
2144
+ {
2145
+ "id": "heredado",
2146
+ "app": "*",
2147
+ "platform": "*",
2148
+ "profile": "*",
2149
+ "type": "*",
2150
+ "target": "*",
2151
+ "track": "*",
2152
+ "require": {
2153
+ "members": [
2154
+ "01930000-0000-7000-8000-00000000a001",
2155
+ "01930000-0000-7000-8000-00000000a002"
2156
+ ],
2157
+ "count": 1,
2158
+ "roles": [
2159
+ "owner"
2160
+ ]
2161
+ }
2162
+ }
2163
+ ],
2164
+ "signature": {
2165
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2166
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2167
+ }
2168
+ }
2169
+ },
2170
+ {
2171
+ "name": "members-empty",
2172
+ "code": "policy.rule.members",
2173
+ "description": "A rule without members: nobody could approve it.",
2174
+ "document": {
2175
+ "format": "ias-policy-1",
2176
+ "version": 1,
2177
+ "not_after": "2027-04-28T00:00:00Z",
2178
+ "rules": [
2179
+ {
2180
+ "id": "heredado",
2181
+ "app": "*",
2182
+ "platform": "*",
2183
+ "profile": "*",
2184
+ "type": "*",
2185
+ "target": "*",
2186
+ "track": "*",
2187
+ "require": {
2188
+ "members": [],
2189
+ "count": 1
2190
+ }
2191
+ }
2192
+ ],
2193
+ "signature": {
2194
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2195
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2196
+ }
2197
+ }
2198
+ },
2199
+ {
2200
+ "name": "members-too-many",
2201
+ "code": "policy.rule.members",
2202
+ "description": "More than 64 members.",
2203
+ "document": {
2204
+ "format": "ias-policy-1",
2205
+ "version": 1,
2206
+ "not_after": "2027-04-28T00:00:00Z",
2207
+ "rules": [
2208
+ {
2209
+ "id": "heredado",
2210
+ "app": "*",
2211
+ "platform": "*",
2212
+ "profile": "*",
2213
+ "type": "*",
2214
+ "target": "*",
2215
+ "track": "*",
2216
+ "require": {
2217
+ "members": [
2218
+ "01930000-0000-7000-8000-000000000000",
2219
+ "01930000-0000-7000-8000-000000000001",
2220
+ "01930000-0000-7000-8000-000000000002",
2221
+ "01930000-0000-7000-8000-000000000003",
2222
+ "01930000-0000-7000-8000-000000000004",
2223
+ "01930000-0000-7000-8000-000000000005",
2224
+ "01930000-0000-7000-8000-000000000006",
2225
+ "01930000-0000-7000-8000-000000000007",
2226
+ "01930000-0000-7000-8000-000000000008",
2227
+ "01930000-0000-7000-8000-000000000009",
2228
+ "01930000-0000-7000-8000-000000000010",
2229
+ "01930000-0000-7000-8000-000000000011",
2230
+ "01930000-0000-7000-8000-000000000012",
2231
+ "01930000-0000-7000-8000-000000000013",
2232
+ "01930000-0000-7000-8000-000000000014",
2233
+ "01930000-0000-7000-8000-000000000015",
2234
+ "01930000-0000-7000-8000-000000000016",
2235
+ "01930000-0000-7000-8000-000000000017",
2236
+ "01930000-0000-7000-8000-000000000018",
2237
+ "01930000-0000-7000-8000-000000000019",
2238
+ "01930000-0000-7000-8000-000000000020",
2239
+ "01930000-0000-7000-8000-000000000021",
2240
+ "01930000-0000-7000-8000-000000000022",
2241
+ "01930000-0000-7000-8000-000000000023",
2242
+ "01930000-0000-7000-8000-000000000024",
2243
+ "01930000-0000-7000-8000-000000000025",
2244
+ "01930000-0000-7000-8000-000000000026",
2245
+ "01930000-0000-7000-8000-000000000027",
2246
+ "01930000-0000-7000-8000-000000000028",
2247
+ "01930000-0000-7000-8000-000000000029",
2248
+ "01930000-0000-7000-8000-000000000030",
2249
+ "01930000-0000-7000-8000-000000000031",
2250
+ "01930000-0000-7000-8000-000000000032",
2251
+ "01930000-0000-7000-8000-000000000033",
2252
+ "01930000-0000-7000-8000-000000000034",
2253
+ "01930000-0000-7000-8000-000000000035",
2254
+ "01930000-0000-7000-8000-000000000036",
2255
+ "01930000-0000-7000-8000-000000000037",
2256
+ "01930000-0000-7000-8000-000000000038",
2257
+ "01930000-0000-7000-8000-000000000039",
2258
+ "01930000-0000-7000-8000-000000000040",
2259
+ "01930000-0000-7000-8000-000000000041",
2260
+ "01930000-0000-7000-8000-000000000042",
2261
+ "01930000-0000-7000-8000-000000000043",
2262
+ "01930000-0000-7000-8000-000000000044",
2263
+ "01930000-0000-7000-8000-000000000045",
2264
+ "01930000-0000-7000-8000-000000000046",
2265
+ "01930000-0000-7000-8000-000000000047",
2266
+ "01930000-0000-7000-8000-000000000048",
2267
+ "01930000-0000-7000-8000-000000000049",
2268
+ "01930000-0000-7000-8000-000000000050",
2269
+ "01930000-0000-7000-8000-000000000051",
2270
+ "01930000-0000-7000-8000-000000000052",
2271
+ "01930000-0000-7000-8000-000000000053",
2272
+ "01930000-0000-7000-8000-000000000054",
2273
+ "01930000-0000-7000-8000-000000000055",
2274
+ "01930000-0000-7000-8000-000000000056",
2275
+ "01930000-0000-7000-8000-000000000057",
2276
+ "01930000-0000-7000-8000-000000000058",
2277
+ "01930000-0000-7000-8000-000000000059",
2278
+ "01930000-0000-7000-8000-000000000060",
2279
+ "01930000-0000-7000-8000-000000000061",
2280
+ "01930000-0000-7000-8000-000000000062",
2281
+ "01930000-0000-7000-8000-000000000063",
2282
+ "01930000-0000-7000-8000-000000000064"
2283
+ ],
2284
+ "count": 1
2285
+ }
2286
+ }
2287
+ ],
2288
+ "signature": {
2289
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2290
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2291
+ }
2292
+ }
2293
+ },
2294
+ {
2295
+ "name": "member-empty",
2296
+ "code": "policy.rule.member",
2297
+ "description": "An empty member id.",
2298
+ "document": {
2299
+ "format": "ias-policy-1",
2300
+ "version": 1,
2301
+ "not_after": "2027-04-28T00:00:00Z",
2302
+ "rules": [
2303
+ {
2304
+ "id": "heredado",
2305
+ "app": "*",
2306
+ "platform": "*",
2307
+ "profile": "*",
2308
+ "type": "*",
2309
+ "target": "*",
2310
+ "track": "*",
2311
+ "require": {
2312
+ "members": [
2313
+ "",
2314
+ "01930000-0000-7000-8000-00000000a002"
2315
+ ],
2316
+ "count": 1
2317
+ }
2318
+ }
2319
+ ],
2320
+ "signature": {
2321
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2322
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2323
+ }
2324
+ }
2325
+ },
2326
+ {
2327
+ "name": "members-duplicate",
2328
+ "code": "policy.rule.member",
2329
+ "description": "The same member twice.",
2330
+ "document": {
2331
+ "format": "ias-policy-1",
2332
+ "version": 1,
2333
+ "not_after": "2027-04-28T00:00:00Z",
2334
+ "rules": [
2335
+ {
2336
+ "id": "heredado",
2337
+ "app": "*",
2338
+ "platform": "*",
2339
+ "profile": "*",
2340
+ "type": "*",
2341
+ "target": "*",
2342
+ "track": "*",
2343
+ "require": {
2344
+ "members": [
2345
+ "01930000-0000-7000-8000-00000000a001",
2346
+ "01930000-0000-7000-8000-00000000a002",
2347
+ "01930000-0000-7000-8000-00000000a001"
2348
+ ],
2349
+ "count": 1
2350
+ }
2351
+ }
2352
+ ],
2353
+ "signature": {
2354
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2355
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2356
+ }
2357
+ }
2358
+ },
2359
+ {
2360
+ "name": "count-zero",
2361
+ "code": "policy.rule.count",
2362
+ "description": "count 0, which would approve without a passkey.",
2363
+ "document": {
2364
+ "format": "ias-policy-1",
2365
+ "version": 1,
2366
+ "not_after": "2027-04-28T00:00:00Z",
2367
+ "rules": [
2368
+ {
2369
+ "id": "heredado",
2370
+ "app": "*",
2371
+ "platform": "*",
2372
+ "profile": "*",
2373
+ "type": "*",
2374
+ "target": "*",
2375
+ "track": "*",
2376
+ "require": {
2377
+ "members": [
2378
+ "01930000-0000-7000-8000-00000000a001",
2379
+ "01930000-0000-7000-8000-00000000a002"
2380
+ ],
2381
+ "count": 0
2382
+ }
2383
+ }
2384
+ ],
2385
+ "signature": {
2386
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2387
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2388
+ }
2389
+ }
2390
+ },
2391
+ {
2392
+ "name": "count-nine",
2393
+ "code": "policy.rule.count",
2394
+ "description": "count 9, more than a policy may ask for.",
2395
+ "document": {
2396
+ "format": "ias-policy-1",
2397
+ "version": 1,
2398
+ "not_after": "2027-04-28T00:00:00Z",
2399
+ "rules": [
2400
+ {
2401
+ "id": "heredado",
2402
+ "app": "*",
2403
+ "platform": "*",
2404
+ "profile": "*",
2405
+ "type": "*",
2406
+ "target": "*",
2407
+ "track": "*",
2408
+ "require": {
2409
+ "members": [
2410
+ "01930000-0000-7000-8000-00000000a001",
2411
+ "01930000-0000-7000-8000-00000000a002"
2412
+ ],
2413
+ "count": 9
2414
+ }
2415
+ }
2416
+ ],
2417
+ "signature": {
2418
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2419
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2420
+ }
2421
+ }
2422
+ },
2423
+ {
2424
+ "name": "count-more-than-members",
2425
+ "code": "policy.rule.count",
2426
+ "description": "count 3 with 2 members: nobody could ever approve it.",
2427
+ "document": {
2428
+ "format": "ias-policy-1",
2429
+ "version": 1,
2430
+ "not_after": "2027-04-28T00:00:00Z",
2431
+ "rules": [
2432
+ {
2433
+ "id": "heredado",
2434
+ "app": "*",
2435
+ "platform": "*",
2436
+ "profile": "*",
2437
+ "type": "*",
2438
+ "target": "*",
2439
+ "track": "*",
2440
+ "require": {
2441
+ "members": [
2442
+ "01930000-0000-7000-8000-00000000a001",
2443
+ "01930000-0000-7000-8000-00000000a002"
2444
+ ],
2445
+ "count": 3
2446
+ }
2447
+ }
2448
+ ],
2449
+ "signature": {
2450
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2451
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2452
+ }
2453
+ }
2454
+ },
2455
+ {
2456
+ "name": "signature-sig-63-bytes",
2457
+ "code": "signature.sig",
2458
+ "description": "A 63-byte signature.",
2459
+ "document": {
2460
+ "format": "ias-policy-1",
2461
+ "version": 1,
2462
+ "not_after": "2027-04-28T00:00:00Z",
2463
+ "rules": [
2464
+ {
2465
+ "id": "heredado",
2466
+ "app": "*",
2467
+ "platform": "*",
2468
+ "profile": "*",
2469
+ "type": "*",
2470
+ "target": "*",
2471
+ "track": "*",
2472
+ "require": {
2473
+ "members": [
2474
+ "01930000-0000-7000-8000-00000000a001",
2475
+ "01930000-0000-7000-8000-00000000a002"
2476
+ ],
2477
+ "count": 1
2478
+ }
2479
+ }
2480
+ ],
2481
+ "signature": {
2482
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2483
+ "sig": "9BtQQFVqZ0cRCSgTMFWNGg8rKpIggD0gTTgy7CfZwWjA0LwvXIYqFPL-fGzi_HjwDSgiTR75AChviZq3MbsA"
2484
+ }
2485
+ }
2486
+ },
2487
+ {
2488
+ "name": "signature-kid-padded",
2489
+ "code": "signature.kid",
2490
+ "description": "Padding after the kid of the signature.",
2491
+ "document": {
2492
+ "format": "ias-policy-1",
2493
+ "version": 1,
2494
+ "not_after": "2027-04-28T00:00:00Z",
2495
+ "rules": [
2496
+ {
2497
+ "id": "heredado",
2498
+ "app": "*",
2499
+ "platform": "*",
2500
+ "profile": "*",
2501
+ "type": "*",
2502
+ "target": "*",
2503
+ "track": "*",
2504
+ "require": {
2505
+ "members": [
2506
+ "01930000-0000-7000-8000-00000000a001",
2507
+ "01930000-0000-7000-8000-00000000a002"
2508
+ ],
2509
+ "count": 1
2510
+ }
2511
+ }
2512
+ ],
2513
+ "signature": {
2514
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y=",
2515
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2516
+ }
2517
+ }
2518
+ },
2519
+ {
2520
+ "name": "signed-by-another-key",
2521
+ "code": "signature.unknown",
2522
+ "description": "A policy signed by another team's key with its own kid (options.signingKid is the team's).",
2523
+ "document": {
2524
+ "format": "ias-policy-1",
2525
+ "version": 1,
2526
+ "not_after": "2027-04-28T00:00:00Z",
2527
+ "rules": [
2528
+ {
2529
+ "id": "heredado",
2530
+ "app": "*",
2531
+ "platform": "*",
2532
+ "profile": "*",
2533
+ "type": "*",
2534
+ "target": "*",
2535
+ "track": "*",
2536
+ "require": {
2537
+ "members": [
2538
+ "01930000-0000-7000-8000-00000000a001",
2539
+ "01930000-0000-7000-8000-00000000a002"
2540
+ ],
2541
+ "count": 1
2542
+ }
2543
+ }
2544
+ ],
2545
+ "signature": {
2546
+ "kid": "GS0AJ9GoNBRiq6UFVPBnRxjovYsP5dJDy9Klz1AguIc",
2547
+ "sig": "zf4b6B_D42T3ZhFTlAnvDQLQWa31NCH4yKVL_Zd3GA2i-QA5Mm-rOTzk6Ul9BFLxShhZDfQyETtG-KYotroQBQ"
2548
+ }
2549
+ },
2550
+ "options": {
2551
+ "signingKid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y"
2552
+ }
2553
+ },
2554
+ {
2555
+ "name": "ambiguous-tie",
2556
+ "code": "policy.rule.ambiguous",
2557
+ "description": "Two rules that match the same job with the same specificity: no rule wins.",
2558
+ "document": {
2559
+ "format": "ias-policy-1",
2560
+ "version": 2,
2561
+ "not_after": "2027-04-28T00:00:00Z",
2562
+ "rules": [
2563
+ {
2564
+ "id": "ios-a",
2565
+ "app": "*",
2566
+ "platform": "ios",
2567
+ "profile": "*",
2568
+ "type": "build",
2569
+ "target": "*",
2570
+ "track": "*",
2571
+ "require": {
2572
+ "members": [
2573
+ "01930000-0000-7000-8000-00000000a001",
2574
+ "01930000-0000-7000-8000-00000000a002"
2575
+ ],
2576
+ "count": 1
2577
+ }
2578
+ },
2579
+ {
2580
+ "id": "ios-b",
2581
+ "app": "*",
2582
+ "platform": "ios",
2583
+ "profile": "*",
2584
+ "type": "build",
2585
+ "target": "*",
2586
+ "track": "*",
2587
+ "require": {
2588
+ "members": [
2589
+ "01930000-0000-7000-8000-00000000a001",
2590
+ "01930000-0000-7000-8000-00000000a002"
2591
+ ],
2592
+ "count": 1
2593
+ }
2594
+ }
2595
+ ],
2596
+ "signature": {
2597
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2598
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
2599
+ }
2600
+ }
2601
+ }
2602
+ ],
2603
+ "tampered": [
2604
+ {
2605
+ "name": "rule-changed",
2606
+ "description": "A profile changed without signing.",
2607
+ "error": "policy.signature",
2608
+ "document": {
2609
+ "format": "ias-policy-1",
2610
+ "version": 1,
2611
+ "not_after": "2027-04-28T00:00:00Z",
2612
+ "rules": [
2613
+ {
2614
+ "id": "heredado",
2615
+ "app": "*",
2616
+ "platform": "*",
2617
+ "profile": "production",
2618
+ "type": "*",
2619
+ "target": "*",
2620
+ "track": "*",
2621
+ "require": {
2622
+ "members": [
2623
+ "01930000-0000-7000-8000-00000000a001",
2624
+ "01930000-0000-7000-8000-00000000a002"
2625
+ ],
2626
+ "count": 1
2627
+ }
2628
+ }
2629
+ ],
2630
+ "signature": {
2631
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2632
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2633
+ }
2634
+ }
2635
+ },
2636
+ {
2637
+ "name": "member-added",
2638
+ "description": "A member added by the server, who could then approve.",
2639
+ "error": "policy.signature",
2640
+ "document": {
2641
+ "format": "ias-policy-1",
2642
+ "version": 1,
2643
+ "not_after": "2027-04-28T00:00:00Z",
2644
+ "rules": [
2645
+ {
2646
+ "id": "heredado",
2647
+ "app": "*",
2648
+ "platform": "*",
2649
+ "profile": "*",
2650
+ "type": "*",
2651
+ "target": "*",
2652
+ "track": "*",
2653
+ "require": {
2654
+ "members": [
2655
+ "01930000-0000-7000-8000-00000000a001",
2656
+ "01930000-0000-7000-8000-00000000a002",
2657
+ "01930000-0000-7000-8000-00000000a004"
2658
+ ],
2659
+ "count": 1
2660
+ }
2661
+ }
2662
+ ],
2663
+ "signature": {
2664
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2665
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2666
+ }
2667
+ }
2668
+ },
2669
+ {
2670
+ "name": "count-lowered",
2671
+ "description": "The count lowered to one, so one approval is enough.",
2672
+ "error": "policy.signature",
2673
+ "document": {
2674
+ "format": "ias-policy-1",
2675
+ "version": 2,
2676
+ "not_after": "2027-04-28T00:00:00Z",
2677
+ "rules": [
2678
+ {
2679
+ "id": "ios-production",
2680
+ "app": "*",
2681
+ "platform": "ios",
2682
+ "profile": "production",
2683
+ "type": "build",
2684
+ "target": "*",
2685
+ "track": "*",
2686
+ "require": {
2687
+ "members": [
2688
+ "01930000-0000-7000-8000-00000000a001",
2689
+ "01930000-0000-7000-8000-00000000a002"
2690
+ ],
2691
+ "count": 1
2692
+ }
2693
+ },
2694
+ {
2695
+ "id": "play-internal",
2696
+ "app": "*",
2697
+ "platform": "android",
2698
+ "profile": "production",
2699
+ "type": "submit",
2700
+ "target": "google_play",
2701
+ "track": "internal",
2702
+ "require": {
2703
+ "members": [
2704
+ "01930000-0000-7000-8000-00000000a001",
2705
+ "01930000-0000-7000-8000-00000000a003"
2706
+ ],
2707
+ "count": 1
2708
+ }
2709
+ }
2710
+ ],
2711
+ "signature": {
2712
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2713
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
2714
+ }
2715
+ }
2716
+ },
2717
+ {
2718
+ "name": "rule-removed",
2719
+ "description": "A rule removed: its jobs would be denied or fall to a * rule.",
2720
+ "error": "policy.signature",
2721
+ "document": {
2722
+ "format": "ias-policy-1",
2723
+ "version": 2,
2724
+ "not_after": "2027-04-28T00:00:00Z",
2725
+ "rules": [
2726
+ {
2727
+ "id": "ios-production",
2728
+ "app": "*",
2729
+ "platform": "ios",
2730
+ "profile": "production",
2731
+ "type": "build",
2732
+ "target": "*",
2733
+ "track": "*",
2734
+ "require": {
2735
+ "members": [
2736
+ "01930000-0000-7000-8000-00000000a001",
2737
+ "01930000-0000-7000-8000-00000000a002"
2738
+ ],
2739
+ "count": 2
2740
+ }
2741
+ }
2742
+ ],
2743
+ "signature": {
2744
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2745
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
2746
+ }
2747
+ }
2748
+ },
2749
+ {
2750
+ "name": "not-after-extended",
2751
+ "description": "not_after moved further away, to keep an expired policy alive.",
2752
+ "error": "policy.signature",
2753
+ "document": {
2754
+ "format": "ias-policy-1",
2755
+ "version": 1,
2756
+ "not_after": "2030-01-01T00:00:00Z",
2757
+ "rules": [
2758
+ {
2759
+ "id": "heredado",
2760
+ "app": "*",
2761
+ "platform": "*",
2762
+ "profile": "*",
2763
+ "type": "*",
2764
+ "target": "*",
2765
+ "track": "*",
2766
+ "require": {
2767
+ "members": [
2768
+ "01930000-0000-7000-8000-00000000a001",
2769
+ "01930000-0000-7000-8000-00000000a002"
2770
+ ],
2771
+ "count": 1
2772
+ }
2773
+ }
2774
+ ],
2775
+ "signature": {
2776
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2777
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2778
+ }
2779
+ }
2780
+ },
2781
+ {
2782
+ "name": "signature-of-another-team",
2783
+ "description": "Signed by another key under the team's kid.",
2784
+ "error": "policy.signature",
2785
+ "document": {
2786
+ "format": "ias-policy-1",
2787
+ "version": 1,
2788
+ "not_after": "2027-04-28T00:00:00Z",
2789
+ "rules": [
2790
+ {
2791
+ "id": "heredado",
2792
+ "app": "*",
2793
+ "platform": "*",
2794
+ "profile": "*",
2795
+ "type": "*",
2796
+ "target": "*",
2797
+ "track": "*",
2798
+ "require": {
2799
+ "members": [
2800
+ "01930000-0000-7000-8000-00000000a001",
2801
+ "01930000-0000-7000-8000-00000000a002"
2802
+ ],
2803
+ "count": 1
2804
+ }
2805
+ }
2806
+ ],
2807
+ "signature": {
2808
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2809
+ "sig": "zf4b6B_D42T3ZhFTlAnvDQLQWa31NCH4yKVL_Zd3GA2i-QA5Mm-rOTzk6Ul9BFLxShhZDfQyETtG-KYotroQBQ"
2810
+ }
2811
+ }
2812
+ },
2813
+ {
2814
+ "name": "signature-bit",
2815
+ "description": "One bit of the signature changed.",
2816
+ "error": "policy.signature",
2817
+ "document": {
2818
+ "format": "ias-policy-1",
2819
+ "version": 1,
2820
+ "not_after": "2027-04-28T00:00:00Z",
2821
+ "rules": [
2822
+ {
2823
+ "id": "heredado",
2824
+ "app": "*",
2825
+ "platform": "*",
2826
+ "profile": "*",
2827
+ "type": "*",
2828
+ "target": "*",
2829
+ "track": "*",
2830
+ "require": {
2831
+ "members": [
2832
+ "01930000-0000-7000-8000-00000000a001",
2833
+ "01930000-0000-7000-8000-00000000a002"
2834
+ ],
2835
+ "count": 1
2836
+ }
2837
+ }
2838
+ ],
2839
+ "signature": {
2840
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2841
+ "sig": "MfQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2842
+ }
2843
+ }
2844
+ },
2845
+ {
2846
+ "name": "rules-reordered",
2847
+ "description": "The rules in another order, which the signature covers.",
2848
+ "error": "policy.signature",
2849
+ "document": {
2850
+ "format": "ias-policy-1",
2851
+ "version": 4,
2852
+ "not_after": "2027-10-28T00:00:00Z",
2853
+ "rules": [
2854
+ {
2855
+ "id": "play-production",
2856
+ "app": "*",
2857
+ "platform": "android",
2858
+ "profile": "production",
2859
+ "type": "submit",
2860
+ "target": "google_play",
2861
+ "track": "production",
2862
+ "require": {
2863
+ "members": [
2864
+ "01930000-0000-7000-8000-00000000a002",
2865
+ "01930000-0000-7000-8000-00000000a003"
2866
+ ],
2867
+ "count": 1
2868
+ }
2869
+ },
2870
+ {
2871
+ "id": "cliente",
2872
+ "app": "acme",
2873
+ "platform": "*",
2874
+ "profile": "*",
2875
+ "type": "*",
2876
+ "target": "*",
2877
+ "track": "*",
2878
+ "require": {
2879
+ "members": [
2880
+ "01930000-0000-7000-8000-00000000a003"
2881
+ ],
2882
+ "count": 1
2883
+ }
2884
+ },
2885
+ {
2886
+ "id": "ios-production",
2887
+ "app": "*",
2888
+ "platform": "*",
2889
+ "profile": "production",
2890
+ "type": "build",
2891
+ "target": "*",
2892
+ "track": "*",
2893
+ "require": {
2894
+ "members": [
2895
+ "01930000-0000-7000-8000-00000000a001",
2896
+ "01930000-0000-7000-8000-00000000a002"
2897
+ ],
2898
+ "count": 2
2899
+ }
2900
+ },
2901
+ {
2902
+ "id": "todo",
2903
+ "app": "*",
2904
+ "platform": "*",
2905
+ "profile": "*",
2906
+ "type": "*",
2907
+ "target": "*",
2908
+ "track": "*",
2909
+ "require": {
2910
+ "members": [
2911
+ "01930000-0000-7000-8000-00000000a001"
2912
+ ],
2913
+ "count": 1
2914
+ }
2915
+ }
2916
+ ],
2917
+ "signature": {
2918
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2919
+ "sig": "YOxUNkjtcQrgL-vuilZsgo8ThUyApPppb8ovT0QzvvGyjI3Sq5134hHT2jRmJAYj0o42pPv0cHh4adcjiqTzAw"
2920
+ }
2921
+ }
2922
+ },
2923
+ {
2924
+ "name": "version-raised",
2925
+ "description": "The version raised without signing, to look newer than the one a runner has.",
2926
+ "error": "policy.signature",
2927
+ "document": {
2928
+ "format": "ias-policy-1",
2929
+ "version": 9,
2930
+ "not_after": "2027-04-28T00:00:00Z",
2931
+ "rules": [
2932
+ {
2933
+ "id": "heredado",
2934
+ "app": "*",
2935
+ "platform": "*",
2936
+ "profile": "*",
2937
+ "type": "*",
2938
+ "target": "*",
2939
+ "track": "*",
2940
+ "require": {
2941
+ "members": [
2942
+ "01930000-0000-7000-8000-00000000a001",
2943
+ "01930000-0000-7000-8000-00000000a002"
2944
+ ],
2945
+ "count": 1
2946
+ }
2947
+ }
2948
+ ],
2949
+ "signature": {
2950
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2951
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
2952
+ }
2953
+ }
2954
+ }
2955
+ ],
2956
+ "expired": [
2957
+ {
2958
+ "name": "expired",
2959
+ "description": "A policy that was valid when it was signed and expired on 2026-10-01: the runner rejects it with policy.expired, the server only if it is already past when it is uploaded.",
2960
+ "now": "2026-10-28T00:00:00Z",
2961
+ "error": "policy.expired",
2962
+ "document": {
2963
+ "format": "ias-policy-1",
2964
+ "version": 1,
2965
+ "not_after": "2026-10-01T00:00:00Z",
2966
+ "rules": [
2967
+ {
2968
+ "id": "heredado",
2969
+ "app": "*",
2970
+ "platform": "*",
2971
+ "profile": "*",
2972
+ "type": "*",
2973
+ "target": "*",
2974
+ "track": "*",
2975
+ "require": {
2976
+ "members": [
2977
+ "01930000-0000-7000-8000-00000000a001",
2978
+ "01930000-0000-7000-8000-00000000a002"
2979
+ ],
2980
+ "count": 1
2981
+ }
2982
+ }
2983
+ ],
2984
+ "signature": {
2985
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
2986
+ "sig": "YksCFWlGgrnfnmvXRcfiZpaY-inuSszJFmGO2SwNbfW0sAMSaNxJCWUihfxQcFXLC3wYrV_2iBFSh-WEhZ-uDw"
2987
+ }
2988
+ }
2989
+ }
2990
+ ],
2991
+ "matching": [
2992
+ {
2993
+ "name": "exact-beats-wildcard",
2994
+ "job": {
2995
+ "app": "jscheduler",
2996
+ "platform": "ios",
2997
+ "profile": "production",
2998
+ "type": "build"
2999
+ },
3000
+ "rule": "ios-production",
3001
+ "error": null,
3002
+ "document": {
3003
+ "format": "ias-policy-1",
3004
+ "version": 4,
3005
+ "not_after": "2027-10-28T00:00:00Z",
3006
+ "rules": [
3007
+ {
3008
+ "id": "todo",
3009
+ "app": "*",
3010
+ "platform": "*",
3011
+ "profile": "*",
3012
+ "type": "*",
3013
+ "target": "*",
3014
+ "track": "*",
3015
+ "require": {
3016
+ "members": [
3017
+ "01930000-0000-7000-8000-00000000a001"
3018
+ ],
3019
+ "count": 1
3020
+ }
3021
+ },
3022
+ {
3023
+ "id": "ios-production",
3024
+ "app": "*",
3025
+ "platform": "*",
3026
+ "profile": "production",
3027
+ "type": "build",
3028
+ "target": "*",
3029
+ "track": "*",
3030
+ "require": {
3031
+ "members": [
3032
+ "01930000-0000-7000-8000-00000000a001",
3033
+ "01930000-0000-7000-8000-00000000a002"
3034
+ ],
3035
+ "count": 2
3036
+ }
3037
+ },
3038
+ {
3039
+ "id": "cliente",
3040
+ "app": "acme",
3041
+ "platform": "*",
3042
+ "profile": "*",
3043
+ "type": "*",
3044
+ "target": "*",
3045
+ "track": "*",
3046
+ "require": {
3047
+ "members": [
3048
+ "01930000-0000-7000-8000-00000000a003"
3049
+ ],
3050
+ "count": 1
3051
+ }
3052
+ },
3053
+ {
3054
+ "id": "play-production",
3055
+ "app": "*",
3056
+ "platform": "android",
3057
+ "profile": "production",
3058
+ "type": "submit",
3059
+ "target": "google_play",
3060
+ "track": "production",
3061
+ "require": {
3062
+ "members": [
3063
+ "01930000-0000-7000-8000-00000000a002",
3064
+ "01930000-0000-7000-8000-00000000a003"
3065
+ ],
3066
+ "count": 1
3067
+ }
3068
+ }
3069
+ ],
3070
+ "signature": {
3071
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3072
+ "sig": "YOxUNkjtcQrgL-vuilZsgo8ThUyApPppb8ovT0QzvvGyjI3Sq5134hHT2jRmJAYj0o42pPv0cHh4adcjiqTzAw"
3073
+ }
3074
+ },
3075
+ "specificity": 2
3076
+ },
3077
+ {
3078
+ "name": "play-internal",
3079
+ "job": {
3080
+ "app": "jscheduler",
3081
+ "platform": "android",
3082
+ "profile": "production",
3083
+ "type": "submit",
3084
+ "target": "google_play",
3085
+ "track": "internal"
3086
+ },
3087
+ "rule": "play-internal",
3088
+ "error": null,
3089
+ "document": {
3090
+ "format": "ias-policy-1",
3091
+ "version": 2,
3092
+ "not_after": "2027-04-28T00:00:00Z",
3093
+ "rules": [
3094
+ {
3095
+ "id": "ios-production",
3096
+ "app": "*",
3097
+ "platform": "ios",
3098
+ "profile": "production",
3099
+ "type": "build",
3100
+ "target": "*",
3101
+ "track": "*",
3102
+ "require": {
3103
+ "members": [
3104
+ "01930000-0000-7000-8000-00000000a001",
3105
+ "01930000-0000-7000-8000-00000000a002"
3106
+ ],
3107
+ "count": 2
3108
+ }
3109
+ },
3110
+ {
3111
+ "id": "play-internal",
3112
+ "app": "*",
3113
+ "platform": "android",
3114
+ "profile": "production",
3115
+ "type": "submit",
3116
+ "target": "google_play",
3117
+ "track": "internal",
3118
+ "require": {
3119
+ "members": [
3120
+ "01930000-0000-7000-8000-00000000a001",
3121
+ "01930000-0000-7000-8000-00000000a003"
3122
+ ],
3123
+ "count": 1
3124
+ }
3125
+ }
3126
+ ],
3127
+ "signature": {
3128
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3129
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
3130
+ }
3131
+ },
3132
+ "specificity": 5
3133
+ },
3134
+ {
3135
+ "name": "play-production-is-not-internal",
3136
+ "job": {
3137
+ "app": "jscheduler",
3138
+ "platform": "android",
3139
+ "profile": "production",
3140
+ "type": "submit",
3141
+ "target": "google_play",
3142
+ "track": "production"
3143
+ },
3144
+ "rule": null,
3145
+ "error": "policy.unmatched",
3146
+ "document": {
3147
+ "format": "ias-policy-1",
3148
+ "version": 2,
3149
+ "not_after": "2027-04-28T00:00:00Z",
3150
+ "rules": [
3151
+ {
3152
+ "id": "ios-production",
3153
+ "app": "*",
3154
+ "platform": "ios",
3155
+ "profile": "production",
3156
+ "type": "build",
3157
+ "target": "*",
3158
+ "track": "*",
3159
+ "require": {
3160
+ "members": [
3161
+ "01930000-0000-7000-8000-00000000a001",
3162
+ "01930000-0000-7000-8000-00000000a002"
3163
+ ],
3164
+ "count": 2
3165
+ }
3166
+ },
3167
+ {
3168
+ "id": "play-internal",
3169
+ "app": "*",
3170
+ "platform": "android",
3171
+ "profile": "production",
3172
+ "type": "submit",
3173
+ "target": "google_play",
3174
+ "track": "internal",
3175
+ "require": {
3176
+ "members": [
3177
+ "01930000-0000-7000-8000-00000000a001",
3178
+ "01930000-0000-7000-8000-00000000a003"
3179
+ ],
3180
+ "count": 1
3181
+ }
3182
+ }
3183
+ ],
3184
+ "signature": {
3185
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3186
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
3187
+ }
3188
+ },
3189
+ "specificity": null
3190
+ },
3191
+ {
3192
+ "name": "ios-submit-is-not-a-build",
3193
+ "job": {
3194
+ "app": "jscheduler",
3195
+ "platform": "ios",
3196
+ "profile": "production",
3197
+ "type": "submit",
3198
+ "target": "app_store_connect"
3199
+ },
3200
+ "rule": null,
3201
+ "error": "policy.unmatched",
3202
+ "document": {
3203
+ "format": "ias-policy-1",
3204
+ "version": 2,
3205
+ "not_after": "2027-04-28T00:00:00Z",
3206
+ "rules": [
3207
+ {
3208
+ "id": "ios-production",
3209
+ "app": "*",
3210
+ "platform": "ios",
3211
+ "profile": "production",
3212
+ "type": "build",
3213
+ "target": "*",
3214
+ "track": "*",
3215
+ "require": {
3216
+ "members": [
3217
+ "01930000-0000-7000-8000-00000000a001",
3218
+ "01930000-0000-7000-8000-00000000a002"
3219
+ ],
3220
+ "count": 2
3221
+ }
3222
+ },
3223
+ {
3224
+ "id": "play-internal",
3225
+ "app": "*",
3226
+ "platform": "android",
3227
+ "profile": "production",
3228
+ "type": "submit",
3229
+ "target": "google_play",
3230
+ "track": "internal",
3231
+ "require": {
3232
+ "members": [
3233
+ "01930000-0000-7000-8000-00000000a001",
3234
+ "01930000-0000-7000-8000-00000000a003"
3235
+ ],
3236
+ "count": 1
3237
+ }
3238
+ }
3239
+ ],
3240
+ "signature": {
3241
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3242
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
3243
+ }
3244
+ },
3245
+ "specificity": null
3246
+ },
3247
+ {
3248
+ "name": "another-profile",
3249
+ "job": {
3250
+ "app": "jscheduler",
3251
+ "platform": "ios",
3252
+ "profile": "preview",
3253
+ "type": "build"
3254
+ },
3255
+ "rule": null,
3256
+ "error": "policy.unmatched",
3257
+ "document": {
3258
+ "format": "ias-policy-1",
3259
+ "version": 2,
3260
+ "not_after": "2027-04-28T00:00:00Z",
3261
+ "rules": [
3262
+ {
3263
+ "id": "ios-production",
3264
+ "app": "*",
3265
+ "platform": "ios",
3266
+ "profile": "production",
3267
+ "type": "build",
3268
+ "target": "*",
3269
+ "track": "*",
3270
+ "require": {
3271
+ "members": [
3272
+ "01930000-0000-7000-8000-00000000a001",
3273
+ "01930000-0000-7000-8000-00000000a002"
3274
+ ],
3275
+ "count": 2
3276
+ }
3277
+ },
3278
+ {
3279
+ "id": "play-internal",
3280
+ "app": "*",
3281
+ "platform": "android",
3282
+ "profile": "production",
3283
+ "type": "submit",
3284
+ "target": "google_play",
3285
+ "track": "internal",
3286
+ "require": {
3287
+ "members": [
3288
+ "01930000-0000-7000-8000-00000000a001",
3289
+ "01930000-0000-7000-8000-00000000a003"
3290
+ ],
3291
+ "count": 1
3292
+ }
3293
+ }
3294
+ ],
3295
+ "signature": {
3296
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3297
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
3298
+ }
3299
+ },
3300
+ "specificity": null
3301
+ },
3302
+ {
3303
+ "name": "wildcard-only",
3304
+ "job": {
3305
+ "app": "acme",
3306
+ "platform": "android",
3307
+ "profile": "preview",
3308
+ "type": "build"
3309
+ },
3310
+ "rule": "heredado",
3311
+ "error": null,
3312
+ "document": {
3313
+ "format": "ias-policy-1",
3314
+ "version": 1,
3315
+ "not_after": "2027-04-28T00:00:00Z",
3316
+ "rules": [
3317
+ {
3318
+ "id": "heredado",
3319
+ "app": "*",
3320
+ "platform": "*",
3321
+ "profile": "*",
3322
+ "type": "*",
3323
+ "target": "*",
3324
+ "track": "*",
3325
+ "require": {
3326
+ "members": [
3327
+ "01930000-0000-7000-8000-00000000a001",
3328
+ "01930000-0000-7000-8000-00000000a002"
3329
+ ],
3330
+ "count": 1
3331
+ }
3332
+ }
3333
+ ],
3334
+ "signature": {
3335
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3336
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
3337
+ }
3338
+ },
3339
+ "specificity": 0
3340
+ },
3341
+ {
3342
+ "name": "four-rules-client",
3343
+ "job": {
3344
+ "app": "acme",
3345
+ "platform": "ios",
3346
+ "profile": "preview",
3347
+ "type": "build"
3348
+ },
3349
+ "rule": "cliente",
3350
+ "error": null,
3351
+ "document": {
3352
+ "format": "ias-policy-1",
3353
+ "version": 4,
3354
+ "not_after": "2027-10-28T00:00:00Z",
3355
+ "rules": [
3356
+ {
3357
+ "id": "todo",
3358
+ "app": "*",
3359
+ "platform": "*",
3360
+ "profile": "*",
3361
+ "type": "*",
3362
+ "target": "*",
3363
+ "track": "*",
3364
+ "require": {
3365
+ "members": [
3366
+ "01930000-0000-7000-8000-00000000a001"
3367
+ ],
3368
+ "count": 1
3369
+ }
3370
+ },
3371
+ {
3372
+ "id": "ios-production",
3373
+ "app": "*",
3374
+ "platform": "*",
3375
+ "profile": "production",
3376
+ "type": "build",
3377
+ "target": "*",
3378
+ "track": "*",
3379
+ "require": {
3380
+ "members": [
3381
+ "01930000-0000-7000-8000-00000000a001",
3382
+ "01930000-0000-7000-8000-00000000a002"
3383
+ ],
3384
+ "count": 2
3385
+ }
3386
+ },
3387
+ {
3388
+ "id": "cliente",
3389
+ "app": "acme",
3390
+ "platform": "*",
3391
+ "profile": "*",
3392
+ "type": "*",
3393
+ "target": "*",
3394
+ "track": "*",
3395
+ "require": {
3396
+ "members": [
3397
+ "01930000-0000-7000-8000-00000000a003"
3398
+ ],
3399
+ "count": 1
3400
+ }
3401
+ },
3402
+ {
3403
+ "id": "play-production",
3404
+ "app": "*",
3405
+ "platform": "android",
3406
+ "profile": "production",
3407
+ "type": "submit",
3408
+ "target": "google_play",
3409
+ "track": "production",
3410
+ "require": {
3411
+ "members": [
3412
+ "01930000-0000-7000-8000-00000000a002",
3413
+ "01930000-0000-7000-8000-00000000a003"
3414
+ ],
3415
+ "count": 1
3416
+ }
3417
+ }
3418
+ ],
3419
+ "signature": {
3420
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3421
+ "sig": "YOxUNkjtcQrgL-vuilZsgo8ThUyApPppb8ovT0QzvvGyjI3Sq5134hHT2jRmJAYj0o42pPv0cHh4adcjiqTzAw"
3422
+ }
3423
+ },
3424
+ "specificity": 1
3425
+ },
3426
+ {
3427
+ "name": "testflight-is-an-app-store-submission",
3428
+ "job": {
3429
+ "app": "jscheduler",
3430
+ "platform": "ios",
3431
+ "profile": "production",
3432
+ "type": "testflight"
3433
+ },
3434
+ "rule": "asc-submit",
3435
+ "error": null,
3436
+ "document": {
3437
+ "format": "ias-policy-1",
3438
+ "version": 5,
3439
+ "not_after": "2027-04-28T00:00:00Z",
3440
+ "rules": [
3441
+ {
3442
+ "id": "asc-submit",
3443
+ "app": "*",
3444
+ "platform": "*",
3445
+ "profile": "*",
3446
+ "type": "submit",
3447
+ "target": "app_store_connect",
3448
+ "track": "*",
3449
+ "require": {
3450
+ "members": [
3451
+ "01930000-0000-7000-8000-00000000a001",
3452
+ "01930000-0000-7000-8000-00000000a002"
3453
+ ],
3454
+ "count": 1
3455
+ }
3456
+ },
3457
+ {
3458
+ "id": "play-production-release",
3459
+ "app": "*",
3460
+ "platform": "android",
3461
+ "profile": "*",
3462
+ "type": "submit",
3463
+ "target": "google_play",
3464
+ "track": "production",
3465
+ "require": {
3466
+ "members": [
3467
+ "01930000-0000-7000-8000-00000000a001",
3468
+ "01930000-0000-7000-8000-00000000a002"
3469
+ ],
3470
+ "count": 1
3471
+ }
3472
+ }
3473
+ ],
3474
+ "signature": {
3475
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3476
+ "sig": "YslFYaP4b-Hb17TKvKG38XG3VQPw6g-ekqwz7B-j4o6uCwgaql8psfEDY0sS014wubLCd6rZpwqKHNjox4TdCg"
3477
+ }
3478
+ },
3479
+ "specificity": 2
3480
+ },
3481
+ {
3482
+ "name": "testflight-is-not-a-build",
3483
+ "job": {
3484
+ "app": "jscheduler",
3485
+ "platform": "ios",
3486
+ "profile": "production",
3487
+ "type": "testflight"
3488
+ },
3489
+ "rule": null,
3490
+ "error": "policy.unmatched",
3491
+ "document": {
3492
+ "format": "ias-policy-1",
3493
+ "version": 2,
3494
+ "not_after": "2027-04-28T00:00:00Z",
3495
+ "rules": [
3496
+ {
3497
+ "id": "ios-production",
3498
+ "app": "*",
3499
+ "platform": "ios",
3500
+ "profile": "production",
3501
+ "type": "build",
3502
+ "target": "*",
3503
+ "track": "*",
3504
+ "require": {
3505
+ "members": [
3506
+ "01930000-0000-7000-8000-00000000a001",
3507
+ "01930000-0000-7000-8000-00000000a002"
3508
+ ],
3509
+ "count": 2
3510
+ }
3511
+ },
3512
+ {
3513
+ "id": "play-internal",
3514
+ "app": "*",
3515
+ "platform": "android",
3516
+ "profile": "production",
3517
+ "type": "submit",
3518
+ "target": "google_play",
3519
+ "track": "internal",
3520
+ "require": {
3521
+ "members": [
3522
+ "01930000-0000-7000-8000-00000000a001",
3523
+ "01930000-0000-7000-8000-00000000a003"
3524
+ ],
3525
+ "count": 1
3526
+ }
3527
+ }
3528
+ ],
3529
+ "signature": {
3530
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3531
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
3532
+ }
3533
+ },
3534
+ "specificity": null
3535
+ },
3536
+ {
3537
+ "name": "release-is-a-play-submission-with-its-track",
3538
+ "job": {
3539
+ "app": "jscheduler",
3540
+ "platform": "android",
3541
+ "profile": "production",
3542
+ "type": "release",
3543
+ "track": "production"
3544
+ },
3545
+ "rule": "play-production-release",
3546
+ "error": null,
3547
+ "document": {
3548
+ "format": "ias-policy-1",
3549
+ "version": 5,
3550
+ "not_after": "2027-04-28T00:00:00Z",
3551
+ "rules": [
3552
+ {
3553
+ "id": "asc-submit",
3554
+ "app": "*",
3555
+ "platform": "*",
3556
+ "profile": "*",
3557
+ "type": "submit",
3558
+ "target": "app_store_connect",
3559
+ "track": "*",
3560
+ "require": {
3561
+ "members": [
3562
+ "01930000-0000-7000-8000-00000000a001",
3563
+ "01930000-0000-7000-8000-00000000a002"
3564
+ ],
3565
+ "count": 1
3566
+ }
3567
+ },
3568
+ {
3569
+ "id": "play-production-release",
3570
+ "app": "*",
3571
+ "platform": "android",
3572
+ "profile": "*",
3573
+ "type": "submit",
3574
+ "target": "google_play",
3575
+ "track": "production",
3576
+ "require": {
3577
+ "members": [
3578
+ "01930000-0000-7000-8000-00000000a001",
3579
+ "01930000-0000-7000-8000-00000000a002"
3580
+ ],
3581
+ "count": 1
3582
+ }
3583
+ }
3584
+ ],
3585
+ "signature": {
3586
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3587
+ "sig": "YslFYaP4b-Hb17TKvKG38XG3VQPw6g-ekqwz7B-j4o6uCwgaql8psfEDY0sS014wubLCd6rZpwqKHNjox4TdCg"
3588
+ }
3589
+ },
3590
+ "specificity": 4
3591
+ },
3592
+ {
3593
+ "name": "release-another-track-is-denied",
3594
+ "job": {
3595
+ "app": "jscheduler",
3596
+ "platform": "android",
3597
+ "profile": "production",
3598
+ "type": "release",
3599
+ "track": "beta"
3600
+ },
3601
+ "rule": null,
3602
+ "error": "policy.unmatched",
3603
+ "document": {
3604
+ "format": "ias-policy-1",
3605
+ "version": 5,
3606
+ "not_after": "2027-04-28T00:00:00Z",
3607
+ "rules": [
3608
+ {
3609
+ "id": "asc-submit",
3610
+ "app": "*",
3611
+ "platform": "*",
3612
+ "profile": "*",
3613
+ "type": "submit",
3614
+ "target": "app_store_connect",
3615
+ "track": "*",
3616
+ "require": {
3617
+ "members": [
3618
+ "01930000-0000-7000-8000-00000000a001",
3619
+ "01930000-0000-7000-8000-00000000a002"
3620
+ ],
3621
+ "count": 1
3622
+ }
3623
+ },
3624
+ {
3625
+ "id": "play-production-release",
3626
+ "app": "*",
3627
+ "platform": "android",
3628
+ "profile": "*",
3629
+ "type": "submit",
3630
+ "target": "google_play",
3631
+ "track": "production",
3632
+ "require": {
3633
+ "members": [
3634
+ "01930000-0000-7000-8000-00000000a001",
3635
+ "01930000-0000-7000-8000-00000000a002"
3636
+ ],
3637
+ "count": 1
3638
+ }
3639
+ }
3640
+ ],
3641
+ "signature": {
3642
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3643
+ "sig": "YslFYaP4b-Hb17TKvKG38XG3VQPw6g-ekqwz7B-j4o6uCwgaql8psfEDY0sS014wubLCd6rZpwqKHNjox4TdCg"
3644
+ }
3645
+ },
3646
+ "specificity": null
3647
+ },
3648
+ {
3649
+ "name": "wildcard-covers-testflight",
3650
+ "job": {
3651
+ "app": "jscheduler",
3652
+ "platform": "ios",
3653
+ "profile": "production",
3654
+ "type": "testflight"
3655
+ },
3656
+ "rule": "heredado",
3657
+ "error": null,
3658
+ "document": {
3659
+ "format": "ias-policy-1",
3660
+ "version": 1,
3661
+ "not_after": "2027-04-28T00:00:00Z",
3662
+ "rules": [
3663
+ {
3664
+ "id": "heredado",
3665
+ "app": "*",
3666
+ "platform": "*",
3667
+ "profile": "*",
3668
+ "type": "*",
3669
+ "target": "*",
3670
+ "track": "*",
3671
+ "require": {
3672
+ "members": [
3673
+ "01930000-0000-7000-8000-00000000a001",
3674
+ "01930000-0000-7000-8000-00000000a002"
3675
+ ],
3676
+ "count": 1
3677
+ }
3678
+ }
3679
+ ],
3680
+ "signature": {
3681
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3682
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
3683
+ }
3684
+ },
3685
+ "specificity": 0
3686
+ },
3687
+ {
3688
+ "name": "wildcard-covers-release",
3689
+ "job": {
3690
+ "app": "jscheduler",
3691
+ "platform": "android",
3692
+ "profile": "production",
3693
+ "type": "release",
3694
+ "track": "production"
3695
+ },
3696
+ "rule": "heredado",
3697
+ "error": null,
3698
+ "document": {
3699
+ "format": "ias-policy-1",
3700
+ "version": 1,
3701
+ "not_after": "2027-04-28T00:00:00Z",
3702
+ "rules": [
3703
+ {
3704
+ "id": "heredado",
3705
+ "app": "*",
3706
+ "platform": "*",
3707
+ "profile": "*",
3708
+ "type": "*",
3709
+ "target": "*",
3710
+ "track": "*",
3711
+ "require": {
3712
+ "members": [
3713
+ "01930000-0000-7000-8000-00000000a001",
3714
+ "01930000-0000-7000-8000-00000000a002"
3715
+ ],
3716
+ "count": 1
3717
+ }
3718
+ }
3719
+ ],
3720
+ "signature": {
3721
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3722
+ "sig": "MPQbUEBVamdHEQkoEzBVjRoPKyqSIIA9IE04Muwn2cFowNC8L1yGKhTy_nxs4vx48A0oIk0e-QAob4matzG7AA"
3723
+ }
3724
+ },
3725
+ "specificity": 0
3726
+ },
3727
+ {
3728
+ "name": "wear-production-is-a-track",
3729
+ "job": {
3730
+ "app": "jscheduler",
3731
+ "platform": "android",
3732
+ "profile": "production",
3733
+ "type": "submit",
3734
+ "target": "google_play",
3735
+ "track": "wear:production"
3736
+ },
3737
+ "rule": "play-wear-production",
3738
+ "error": null,
3739
+ "document": {
3740
+ "format": "ias-policy-1",
3741
+ "version": 6,
3742
+ "not_after": "2027-04-28T00:00:00Z",
3743
+ "rules": [
3744
+ {
3745
+ "id": "play-wear-production",
3746
+ "app": "*",
3747
+ "platform": "android",
3748
+ "profile": "*",
3749
+ "type": "submit",
3750
+ "target": "google_play",
3751
+ "track": "wear:production",
3752
+ "require": {
3753
+ "members": [
3754
+ "01930000-0000-7000-8000-00000000a001",
3755
+ "01930000-0000-7000-8000-00000000a002"
3756
+ ],
3757
+ "count": 1
3758
+ }
3759
+ }
3760
+ ],
3761
+ "signature": {
3762
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3763
+ "sig": "aPhRKdvcyxLaGChpEUz9Xwq6fca0Poo901gANZjPguusN3Mhn6reaTomuOoaIngD-mKcQA3c8yW-IyPvjn47AQ"
3764
+ }
3765
+ },
3766
+ "specificity": 4
3767
+ },
3768
+ {
3769
+ "name": "production-is-not-wear-production",
3770
+ "job": {
3771
+ "app": "jscheduler",
3772
+ "platform": "android",
3773
+ "profile": "production",
3774
+ "type": "submit",
3775
+ "target": "google_play",
3776
+ "track": "production"
3777
+ },
3778
+ "rule": null,
3779
+ "error": "policy.unmatched",
3780
+ "document": {
3781
+ "format": "ias-policy-1",
3782
+ "version": 6,
3783
+ "not_after": "2027-04-28T00:00:00Z",
3784
+ "rules": [
3785
+ {
3786
+ "id": "play-wear-production",
3787
+ "app": "*",
3788
+ "platform": "android",
3789
+ "profile": "*",
3790
+ "type": "submit",
3791
+ "target": "google_play",
3792
+ "track": "wear:production",
3793
+ "require": {
3794
+ "members": [
3795
+ "01930000-0000-7000-8000-00000000a001",
3796
+ "01930000-0000-7000-8000-00000000a002"
3797
+ ],
3798
+ "count": 1
3799
+ }
3800
+ }
3801
+ ],
3802
+ "signature": {
3803
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3804
+ "sig": "aPhRKdvcyxLaGChpEUz9Xwq6fca0Poo901gANZjPguusN3Mhn6reaTomuOoaIngD-mKcQA3c8yW-IyPvjn47AQ"
3805
+ }
3806
+ },
3807
+ "specificity": null
3808
+ }
3809
+ ],
3810
+ "summaries": [
3811
+ {
3812
+ "name": "two-rules",
3813
+ "description": "The two-rule document over one app and two profiles: the only owner with a passkey cannot reach the two approvals of ios-production, and the combinations no rule covers.",
3814
+ "document": {
3815
+ "format": "ias-policy-1",
3816
+ "version": 2,
3817
+ "not_after": "2027-04-28T00:00:00Z",
3818
+ "rules": [
3819
+ {
3820
+ "id": "ios-production",
3821
+ "app": "*",
3822
+ "platform": "ios",
3823
+ "profile": "production",
3824
+ "type": "build",
3825
+ "target": "*",
3826
+ "track": "*",
3827
+ "require": {
3828
+ "members": [
3829
+ "01930000-0000-7000-8000-00000000a001",
3830
+ "01930000-0000-7000-8000-00000000a002"
3831
+ ],
3832
+ "count": 2
3833
+ }
3834
+ },
3835
+ {
3836
+ "id": "play-internal",
3837
+ "app": "*",
3838
+ "platform": "android",
3839
+ "profile": "production",
3840
+ "type": "submit",
3841
+ "target": "google_play",
3842
+ "track": "internal",
3843
+ "require": {
3844
+ "members": [
3845
+ "01930000-0000-7000-8000-00000000a001",
3846
+ "01930000-0000-7000-8000-00000000a003"
3847
+ ],
3848
+ "count": 1
3849
+ }
3850
+ }
3851
+ ],
3852
+ "signature": {
3853
+ "kid": "kj5ytQ8v8H2A7tnrk0fVw6kOrYCNTqLXnqk1JcG104Y",
3854
+ "sig": "iRnla6YFeSsSG-3QsaMJvzBHoY1t60ujJ7qgceMUHEZ6STfu39amGYIq5FLQkU9ZTQSH6BvbN3DF_JKn2aRHCw"
3855
+ }
3856
+ },
3857
+ "options": {
3858
+ "apps": [
3859
+ "jscheduler"
3860
+ ],
3861
+ "profiles": [
3862
+ "preview",
3863
+ "production"
3864
+ ],
3865
+ "members": [
3866
+ "01930000-0000-7000-8000-00000000a001"
3867
+ ],
3868
+ "now": "2026-10-28T00:00:00Z"
3869
+ },
3870
+ "summary": {
3871
+ "rules": [
3872
+ {
3873
+ "id": "ios-production",
3874
+ "app": "*",
3875
+ "platform": "ios",
3876
+ "profile": "production",
3877
+ "type": "build",
3878
+ "target": "*",
3879
+ "track": "*",
3880
+ "require": {
3881
+ "members": [
3882
+ "01930000-0000-7000-8000-00000000a001",
3883
+ "01930000-0000-7000-8000-00000000a002"
3884
+ ],
3885
+ "count": 2
3886
+ },
3887
+ "specificity": 3,
3888
+ "unsatisfiable": true
3889
+ },
3890
+ {
3891
+ "id": "play-internal",
3892
+ "app": "*",
3893
+ "platform": "android",
3894
+ "profile": "production",
3895
+ "type": "submit",
3896
+ "target": "google_play",
3897
+ "track": "internal",
3898
+ "require": {
3899
+ "members": [
3900
+ "01930000-0000-7000-8000-00000000a001",
3901
+ "01930000-0000-7000-8000-00000000a003"
3902
+ ],
3903
+ "count": 1
3904
+ },
3905
+ "specificity": 5,
3906
+ "unsatisfiable": false
3907
+ }
3908
+ ],
3909
+ "uncovered": [
3910
+ {
3911
+ "app": "jscheduler",
3912
+ "platform": "ios",
3913
+ "profile": "preview",
3914
+ "type": "build",
3915
+ "target": "*",
3916
+ "track": "*",
3917
+ "code": "policy.unmatched"
3918
+ },
3919
+ {
3920
+ "app": "jscheduler",
3921
+ "platform": "ios",
3922
+ "profile": "preview",
3923
+ "type": "submit",
3924
+ "target": "app_store_connect",
3925
+ "track": "*",
3926
+ "code": "policy.unmatched"
3927
+ },
3928
+ {
3929
+ "app": "jscheduler",
3930
+ "platform": "ios",
3931
+ "profile": "production",
3932
+ "type": "submit",
3933
+ "target": "app_store_connect",
3934
+ "track": "*",
3935
+ "code": "policy.unmatched"
3936
+ },
3937
+ {
3938
+ "app": "jscheduler",
3939
+ "platform": "android",
3940
+ "profile": "preview",
3941
+ "type": "build",
3942
+ "target": "*",
3943
+ "track": "*",
3944
+ "code": "policy.unmatched"
3945
+ },
3946
+ {
3947
+ "app": "jscheduler",
3948
+ "platform": "android",
3949
+ "profile": "preview",
3950
+ "type": "submit",
3951
+ "target": "google_play",
3952
+ "track": "internal",
3953
+ "code": "policy.unmatched"
3954
+ },
3955
+ {
3956
+ "app": "jscheduler",
3957
+ "platform": "android",
3958
+ "profile": "preview",
3959
+ "type": "submit",
3960
+ "target": "google_play",
3961
+ "track": "production",
3962
+ "code": "policy.unmatched"
3963
+ },
3964
+ {
3965
+ "app": "jscheduler",
3966
+ "platform": "android",
3967
+ "profile": "production",
3968
+ "type": "build",
3969
+ "target": "*",
3970
+ "track": "*",
3971
+ "code": "policy.unmatched"
3972
+ },
3973
+ {
3974
+ "app": "jscheduler",
3975
+ "platform": "android",
3976
+ "profile": "production",
3977
+ "type": "submit",
3978
+ "target": "google_play",
3979
+ "track": "production",
3980
+ "code": "policy.unmatched"
3981
+ }
3982
+ ],
3983
+ "unsatisfiable": [
3984
+ {
3985
+ "id": "ios-production",
3986
+ "reason": "policy.member.passkey",
3987
+ "count": 2,
3988
+ "members": [
3989
+ "01930000-0000-7000-8000-00000000a001",
3990
+ "01930000-0000-7000-8000-00000000a002"
3991
+ ]
3992
+ }
3993
+ ],
3994
+ "expiring": {
3995
+ "not_after": "2027-04-28T00:00:00Z",
3996
+ "days": 182,
3997
+ "expired": false,
3998
+ "warning": false
3999
+ }
4000
+ },
4001
+ "uncovered": [
4002
+ "jscheduler/ios/preview/build/*/*",
4003
+ "jscheduler/ios/preview/submit/app_store_connect/*",
4004
+ "jscheduler/ios/production/submit/app_store_connect/*",
4005
+ "jscheduler/android/preview/build/*/*",
4006
+ "jscheduler/android/preview/submit/google_play/internal",
4007
+ "jscheduler/android/preview/submit/google_play/production",
4008
+ "jscheduler/android/production/build/*/*",
4009
+ "jscheduler/android/production/submit/google_play/production"
4010
+ ],
4011
+ "unsatisfiable": [
4012
+ "ios-production"
4013
+ ]
4014
+ }
4015
+ ]
4016
+ }