@aztec/ethereum 0.0.1-commit.321f6a9 → 0.0.1-commit.330febf

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.
@@ -12,9 +12,19 @@ export declare enum ProposalState {
12
12
  Executable = 3,
13
13
  Rejected = 4,
14
14
  Executed = 5,
15
- Dropped = 6,
16
- Expired = 7
15
+ Droppable = 6,
16
+ Dropped = 7,
17
+ Expired = 8
17
18
  }
19
+ /**
20
+ * Outcome of {@link ReadOnlyGovernanceContract.getPayloadProposalStatus} for a queried payload.
21
+ * - `'live'`: a proposal referencing the payload is still progressing (Pending/Active/Queued/
22
+ * Executable) or is `Droppable`, so signalling for it again is redundant or premature.
23
+ * - `'executed'`: no live proposal references the payload, but one was already executed within the
24
+ * bounded lookback (or a prior sweep observed the execution and memoized it).
25
+ * - `'none'`: no live or executed proposal references the payload within the bounded lookback.
26
+ */
27
+ export type PayloadProposalStatus = 'live' | 'executed' | 'none';
18
28
  /** Vote tallies on a single proposal. Both fields are mutated by `Governance.vote`. */
19
29
  export interface Ballot {
20
30
  yea: bigint;
@@ -91,6 +101,13 @@ export declare class ReadOnlyGovernanceContract {
91
101
  * proposals) and should be treated as "no original".
92
102
  */
93
103
  private readonly originalPayloadCache;
104
+ /**
105
+ * Payloads (lowercased hex) observed as the subject of an `Executed` Governance proposal. Execution
106
+ * is immutable on-chain, so this verdict never expires within a process. It restores the
107
+ * `'executed'` classification for payloads whose executed proposal has since aged past the bounded
108
+ * lookback below. Lost on restart, at which point the bounded-lookback limitation applies again.
109
+ */
110
+ private readonly executedPayloads;
94
111
  constructor(address: Hex, client: ViemClient);
95
112
  get address(): EthAddress;
96
113
  getGovernanceProposerAddress(): Promise<EthAddress>;
@@ -116,19 +133,27 @@ export declare class ReadOnlyGovernanceContract {
116
133
  getProposalState(proposalId: bigint): Promise<ProposalState>;
117
134
  getProposalCount(): Promise<bigint>;
118
135
  /**
119
- * Checks whether the given original payload is currently the subject of a live (non-terminal)
120
- * Governance proposal. Returns true only if a proposal references this payload and is still in
121
- * Pending, Active, Queued, or Executable state. Terminal proposals (Executed, Rejected, Dropped,
122
- * Expired) are ignored, because once a proposal reaches a terminal state the same original
123
- * payload may legitimately be re-signaled and re-submitted via the GovernanceProposer (each round
124
- * is independent and there is no payload-level uniqueness check on-chain).
136
+ * Classifies the given original payload against the Governance proposal history. Distinguishes a
137
+ * payload that is still the subject of a live proposal (`'live'`) from one whose proposal was
138
+ * already executed (`'executed'`) from one that has no relevant proposal (`'none'`), so callers can
139
+ * stop re-signalling an executed payload while still re-signalling one whose proposal was merely
140
+ * rejected/dropped/expired (each GovernanceProposer round is independent and there is no
141
+ * payload-level uniqueness check on-chain).
142
+ *
143
+ * A proposal matches the payload either directly (its stored `payload` equals the target, as for
144
+ * `proposeWithLock` proposals) or via its `GSEPayload` wrapper unwrapping to the target. `'live'`
145
+ * (including `Droppable`) takes precedence over `'executed'`, so a payload re-submitted while a
146
+ * prior execution is still in the lookback window reads as `'live'`.
125
147
  *
126
148
  * Implemented as a bounded view-call sweep over `Governance.proposals` rather than an event scan,
127
149
  * because `eth_getLogs` over the full deployment history of a long-lived rollup exceeds typical
128
150
  * RPC block-range caps. The number of proposals (`proposalCount`) is small in practice, and we
129
- * walk newest -> oldest with a hard early-stop on the protocol-wide proposal lifetime cap.
151
+ * walk newest -> oldest with a hard early-stop on the protocol-wide proposal lifetime cap. This
152
+ * makes the `'executed'` verdict a *bounded lookback* rather than permanent suppression: a proposal
153
+ * executed longer ago than the lifetime cap is only reported once it has been observed and
154
+ * memoized in-process (memo is lost on restart).
130
155
  */
131
- hasActiveProposalWithPayload(payload: Hex): Promise<boolean>;
156
+ getPayloadProposalStatus(payload: Hex): Promise<PayloadProposalStatus>;
132
157
  private getOriginalPayload;
133
158
  awaitProposalActive({ proposalId, logger }: {
134
159
  proposalId: bigint;
@@ -164,4 +189,4 @@ export declare class GovernanceContract extends ReadOnlyGovernanceContract {
164
189
  logger: Logger;
165
190
  }): Promise<void>;
166
191
  }
167
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUVMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssR0FBRyxFQUNSLEtBQUssR0FBRyxFQUlULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLFVBQVUsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFpQi9GLE1BQU0sTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQzlDLG1CQUFtQixFQUNuQixtQkFBbUIsR0FBRyxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsMkJBQTJCLENBQ3hGLENBQUM7QUFHRixvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sSUFBQTtJQUNQLE1BQU0sSUFBQTtJQUNOLE1BQU0sSUFBQTtJQUNOLFVBQVUsSUFBQTtJQUNWLFFBQVEsSUFBQTtJQUNSLFFBQVEsSUFBQTtJQUNSLE9BQU8sSUFBQTtJQUNQLE9BQU8sSUFBQTtDQUNSO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sV0FBVyxNQUFNO0lBQ3JCLEdBQUcsRUFBRSxNQUFNLENBQUM7SUFDWixHQUFHLEVBQUUsTUFBTSxDQUFDO0NBQ2I7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxXQUFXLHFCQUFxQjtJQUNwQyxXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2QixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixpQkFBaUIsRUFBRSxNQUFNLENBQUM7SUFDMUIsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QjtBQUVELGlIQUFpSDtBQUNqSCxNQUFNLFdBQVcsNEJBQTRCO0lBQzNDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsVUFBVSxFQUFFLE1BQU0sQ0FBQztDQUNwQjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsdUJBQXdCLFNBQVEscUJBQXFCO0lBQ3BFLGFBQWEsRUFBRSw0QkFBNEIsQ0FBQztDQUM3QztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sV0FBVyxRQUFRO0lBQ3ZCLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztJQUM5QixXQUFXLEVBQUUsYUFBYSxDQUFDO0lBQzNCLEtBQUssRUFBRSxhQUFhLENBQUM7SUFDckIsT0FBTyxFQUFFLFVBQVUsQ0FBQztJQUNwQixRQUFRLEVBQUUsVUFBVSxDQUFDO0lBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDakIsWUFBWSxFQUFFLE1BQU0sQ0FBQztDQUN0QjtBQWtCRCxlQUFPLE1BQU0sNkJBQTZCLFFBQXlCLENBQUM7QUFjcEUsd0JBQWdCLHlCQUF5QixDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRyxNQUFNLENBVzdEO0FBRUQscUJBQWEsMEJBQTBCO2FBcUJuQixNQUFNLEVBQUUsVUFBVTtJQXBCcEMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRSxxQkFBcUIsQ0FBQyxPQUFPLGFBQWEsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUUvRjs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFvQztJQUVsRTs7Ozs7T0FLRztJQUNILE9BQU8sQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQXdDO0lBRTdFLFlBQ0UsT0FBTyxFQUFFLEdBQUcsRUFDSSxNQUFNLEVBQUUsVUFBVSxFQUduQztJQUVELElBQVcsT0FBTyxlQUVqQjtJQUVZLDRCQUE0Qix3QkFFeEM7SUFFWSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FlaEU7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNVLFdBQVcsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0E4QjlEO0lBRUQ7Ozs7T0FJRztJQUNVLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUV4RTtJQUVNLGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFekM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDVSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FxQ3hFO1lBUWEsa0JBQWtCO0lBbUJuQixtQkFBbUIsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUM7UUFBQyxNQUFNLEVBQUUsTUFBTSxDQUFBO0tBQUUsaUJBb0I5RjtJQUVZLHVCQUF1QixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUFDLE1BQU0sRUFBRSxNQUFNLENBQUE7S0FBRSxpQkF5QmxHO0NBQ0Y7QUFFRCxxQkFBYSxrQkFBbUIsU0FBUSwwQkFBMEI7YUFLckMsTUFBTSxFQUFFLHdCQUF3QjtJQUozRCxtQkFBNEIsa0JBQWtCLEVBQUUscUJBQXFCLENBQUMsT0FBTyxhQUFhLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUV0SCxZQUNFLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUNBLE1BQU0sRUFBRSx3QkFBd0IsRUFVMUQ7SUFFWSxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFHbkQ7SUFFWSxlQUFlLENBQUMsRUFDM0IsY0FBYyxFQUNkLGVBQWUsRUFDaEIsRUFBRTtRQUNELGNBQWMsRUFBRSxHQUFHLENBQUM7UUFDcEIsZUFBZSxFQUFFLEdBQUcsQ0FBQztLQUN0QixHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FPbEI7SUFFWSxRQUFRLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUd2QztJQUVELG9HQUFvRztJQUN2RixtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FJcEU7SUFFWSxJQUFJLENBQUMsRUFDaEIsVUFBVSxFQUNWLFVBQVUsRUFDVixPQUFPLEVBQ1AsT0FBWSxFQUNaLE1BQU0sRUFDUCxFQUFFO1FBQ0QsVUFBVSxFQUFFLE1BQU0sQ0FBQztRQUNuQixVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxNQUFNLENBQUM7UUFDaEIsTUFBTSxFQUFFLE1BQU0sQ0FBQztLQUNoQixpQkFnREE7SUFFWSxlQUFlLENBQUMsRUFDM0IsVUFBVSxFQUNWLE9BQVksRUFDWixNQUFNLEVBQ1AsRUFBRTtRQUNELFVBQVUsRUFBRSxNQUFNLENBQUM7UUFDbkIsT0FBTyxFQUFFLE1BQU0sQ0FBQztRQUNoQixNQUFNLEVBQUUsTUFBTSxDQUFDO0tBQ2hCLGlCQTBDQTtDQUNGIn0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUVMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssR0FBRyxFQUNSLEtBQUssR0FBRyxFQUlULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsS0FBSyx3QkFBd0IsRUFBRSxLQUFLLFVBQVUsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFpQi9GLE1BQU0sTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQzlDLG1CQUFtQixFQUNuQixtQkFBbUIsR0FBRyxlQUFlLEdBQUcsaUJBQWlCLEdBQUcsMkJBQTJCLENBQ3hGLENBQUM7QUFHRixvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sSUFBQTtJQUNQLE1BQU0sSUFBQTtJQUNOLE1BQU0sSUFBQTtJQUNOLFVBQVUsSUFBQTtJQUNWLFFBQVEsSUFBQTtJQUNSLFFBQVEsSUFBQTtJQUNSLFNBQVMsSUFBQTtJQUNULE9BQU8sSUFBQTtJQUNQLE9BQU8sSUFBQTtDQUNSO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sTUFBTSxxQkFBcUIsR0FBRyxNQUFNLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQztBQUVqRSx1RkFBdUY7QUFDdkYsTUFBTSxXQUFXLE1BQU07SUFDckIsR0FBRyxFQUFFLE1BQU0sQ0FBQztJQUNaLEdBQUcsRUFBRSxNQUFNLENBQUM7Q0FDYjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFdB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
@@ -1 +1 @@
1
- {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/contracts/governance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/contracts/governance.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ const ProposerPayloadAbi = [
22
22
  stateMutability: 'view'
23
23
  }
24
24
  ];
25
- // NOTE: Must be kept in sync with DataStructures.ProposalState in l1-contracts
25
+ // NOTE: Must be kept in sync with IGovernance.ProposalState in l1-contracts
26
26
  export var ProposalState = /*#__PURE__*/ function(ProposalState) {
27
27
  ProposalState[ProposalState["Pending"] = 0] = "Pending";
28
28
  ProposalState[ProposalState["Active"] = 1] = "Active";
@@ -30,15 +30,26 @@ export var ProposalState = /*#__PURE__*/ function(ProposalState) {
30
30
  ProposalState[ProposalState["Executable"] = 3] = "Executable";
31
31
  ProposalState[ProposalState["Rejected"] = 4] = "Rejected";
32
32
  ProposalState[ProposalState["Executed"] = 5] = "Executed";
33
- ProposalState[ProposalState["Dropped"] = 6] = "Dropped";
34
- ProposalState[ProposalState["Expired"] = 7] = "Expired";
33
+ ProposalState[ProposalState["Droppable"] = 6] = "Droppable";
34
+ ProposalState[ProposalState["Dropped"] = 7] = "Dropped";
35
+ ProposalState[ProposalState["Expired"] = 8] = "Expired";
35
36
  return ProposalState;
36
37
  }({});
37
38
  /** Set of `ProposalState` values for which a proposal is fully immutable on-chain. */ const TERMINAL_PROPOSAL_STATES = new Set([
38
39
  5,
39
40
  4,
40
- 6,
41
- 7
41
+ 7,
42
+ 8
43
+ ]);
44
+ // Set of `ProposalState` values in which a proposal is still progressing towards execution.
45
+ // `Droppable` is deliberately excluded: it is neither live (it cannot progress on its own) nor
46
+ // terminal (it can resume its lifecycle if the governanceProposer is restored), so it is handled
47
+ // separately and is never memoized as immutable.
48
+ const LIVE_PROPOSAL_STATES = new Set([
49
+ 0,
50
+ 1,
51
+ 2,
52
+ 3
42
53
  ]);
43
54
  // Hard upper bound on the wall-clock lifetime of any Governance proposal, in seconds.
44
55
  // Each proposal stores its own snapshot of `ProposalConfiguration` at creation time and progresses
@@ -54,7 +65,7 @@ export const MAX_PROPOSAL_LIFETIME_SECONDS = 4n * 90n * 24n * 3600n;
54
65
  * `ProposalState` enum. Throws if the value is out of range.
55
66
  */ function asProposalState(raw) {
56
67
  // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
57
- if (raw < 0 || raw > 7) {
68
+ if (raw < 0 || raw > 8) {
58
69
  throw new Error(`Invalid proposal state: ${raw}`);
59
70
  }
60
71
  return raw;
@@ -85,10 +96,17 @@ export class ReadOnlyGovernanceContract {
85
96
  * encodes a proposal whose payload doesn't implement `getOriginalPayload` (e.g. proposeWithLock
86
97
  * proposals) and should be treated as "no original".
87
98
  */ originalPayloadCache;
99
+ /**
100
+ * Payloads (lowercased hex) observed as the subject of an `Executed` Governance proposal. Execution
101
+ * is immutable on-chain, so this verdict never expires within a process. It restores the
102
+ * `'executed'` classification for payloads whose executed proposal has since aged past the bounded
103
+ * lookback below. Lost on restart, at which point the bounded-lookback limitation applies again.
104
+ */ executedPayloads;
88
105
  constructor(address, client){
89
106
  this.client = client;
90
107
  this.proposalCache = new Map();
91
108
  this.originalPayloadCache = new Map();
109
+ this.executedPayloads = new Set();
92
110
  this.governanceContract = getContract({
93
111
  address,
94
112
  abi: GovernanceAbi,
@@ -179,46 +197,58 @@ export class ReadOnlyGovernanceContract {
179
197
  return this.governanceContract.read.proposalCount();
180
198
  }
181
199
  /**
182
- * Checks whether the given original payload is currently the subject of a live (non-terminal)
183
- * Governance proposal. Returns true only if a proposal references this payload and is still in
184
- * Pending, Active, Queued, or Executable state. Terminal proposals (Executed, Rejected, Dropped,
185
- * Expired) are ignored, because once a proposal reaches a terminal state the same original
186
- * payload may legitimately be re-signaled and re-submitted via the GovernanceProposer (each round
187
- * is independent and there is no payload-level uniqueness check on-chain).
200
+ * Classifies the given original payload against the Governance proposal history. Distinguishes a
201
+ * payload that is still the subject of a live proposal (`'live'`) from one whose proposal was
202
+ * already executed (`'executed'`) from one that has no relevant proposal (`'none'`), so callers can
203
+ * stop re-signalling an executed payload while still re-signalling one whose proposal was merely
204
+ * rejected/dropped/expired (each GovernanceProposer round is independent and there is no
205
+ * payload-level uniqueness check on-chain).
206
+ *
207
+ * A proposal matches the payload either directly (its stored `payload` equals the target, as for
208
+ * `proposeWithLock` proposals) or via its `GSEPayload` wrapper unwrapping to the target. `'live'`
209
+ * (including `Droppable`) takes precedence over `'executed'`, so a payload re-submitted while a
210
+ * prior execution is still in the lookback window reads as `'live'`.
188
211
  *
189
212
  * Implemented as a bounded view-call sweep over `Governance.proposals` rather than an event scan,
190
213
  * because `eth_getLogs` over the full deployment history of a long-lived rollup exceeds typical
191
214
  * RPC block-range caps. The number of proposals (`proposalCount`) is small in practice, and we
192
- * walk newest -> oldest with a hard early-stop on the protocol-wide proposal lifetime cap.
193
- */ async hasActiveProposalWithPayload(payload) {
215
+ * walk newest -> oldest with a hard early-stop on the protocol-wide proposal lifetime cap. This
216
+ * makes the `'executed'` verdict a *bounded lookback* rather than permanent suppression: a proposal
217
+ * executed longer ago than the lifetime cap is only reported once it has been observed and
218
+ * memoized in-process (memo is lost on restart).
219
+ */ async getPayloadProposalStatus(payload) {
220
+ const target = payload.toLowerCase();
194
221
  const proposalCount = await this.getProposalCount();
195
222
  if (proposalCount === 0n) {
196
- return false;
223
+ return this.executedPayloads.has(target) ? 'executed' : 'none';
197
224
  }
198
225
  // Anything created before this cutoff is guaranteed terminal regardless of its frozen config.
199
226
  const block = await this.client.getBlock();
200
227
  const hardCutoff = block.timestamp - MAX_PROPOSAL_LIFETIME_SECONDS;
201
- const target = payload.toLowerCase();
202
228
  // Proposals are append-only with monotonically non-decreasing creation timestamps, so iterating
203
229
  // from newest -> oldest lets us early-stop as soon as we cross the lifetime cutoff.
204
230
  for(let id = proposalCount - 1n; id >= 0n; id--){
205
231
  const proposal = await this.getProposal(id);
206
232
  // Hard early-stop: every older proposal is also older than the cutoff and therefore terminal.
207
233
  if (proposal.creation < hardCutoff) {
208
- return false;
234
+ break;
209
235
  }
236
+ const proposalPayload = proposal.payload.toString().toLowerCase();
210
237
  const original = await this.getOriginalPayload(proposal.payload);
211
- if (original === undefined || original.toLowerCase() !== target) {
238
+ const matches = proposalPayload === target || original !== undefined && original.toLowerCase() === target;
239
+ if (!matches) {
212
240
  continue;
213
241
  }
214
- // The wrapper unwraps to our payload. Only treat this as "already proposed" if the proposal
215
- // is still live -- terminal states allow re-proposing the same payload in a later round.
216
- if (TERMINAL_PROPOSAL_STATES.has(proposal.state)) {
217
- continue;
242
+ // A live or Droppable proposal blocks re-signalling and wins over any executed one.
243
+ if (LIVE_PROPOSAL_STATES.has(proposal.state) || proposal.state === 6) {
244
+ return 'live';
245
+ }
246
+ if (proposal.state === 5) {
247
+ this.executedPayloads.add(target);
218
248
  }
219
- return true;
249
+ // Rejected/Dropped/Expired proposals allow re-proposing the same payload; keep scanning.
220
250
  }
221
- return false;
251
+ return this.executedPayloads.has(target) ? 'executed' : 'none';
222
252
  }
223
253
  /**
224
254
  * Resolves the original payload behind a `GSEPayload` wrapper. Returns `undefined` if the
@@ -4,7 +4,7 @@ import { type Hex, type TransactionReceipt, type TypedDataDefinition } from 'vie
4
4
  import type { L1TxRequest, L1TxUtils } from '../l1_tx_utils/index.js';
5
5
  import type { ViemClient } from '../types.js';
6
6
  import { type IEmpireBase } from './empire_base.js';
7
- import { ReadOnlyGovernanceContract } from './governance.js';
7
+ import { type PayloadProposalStatus, ReadOnlyGovernanceContract } from './governance.js';
8
8
  export declare class GovernanceProposerContract implements IEmpireBase {
9
9
  readonly client: ViemClient;
10
10
  private readonly proposer;
@@ -21,7 +21,6 @@ export declare class GovernanceProposerContract implements IEmpireBase {
21
21
  getRegistryAddress(): Promise<EthAddress>;
22
22
  getQuorumSize(): Promise<bigint>;
23
23
  getRoundSize(): Promise<bigint>;
24
- getInstance(): Promise<`0x${string}`>;
25
24
  computeRound(slot: SlotNumber): Promise<bigint>;
26
25
  getRoundInfo(rollupAddress: Hex, round: bigint): Promise<{
27
26
  lastSignalSlot: SlotNumber;
@@ -39,13 +38,13 @@ export declare class GovernanceProposerContract implements IEmpireBase {
39
38
  */
40
39
  getGovernance(): Promise<ReadOnlyGovernanceContract>;
41
40
  /**
42
- * Returns true iff the given original payload is currently the subject of a live (non-terminal)
43
- * Governance proposal. Delegates to `ReadOnlyGovernanceContract.hasActiveProposalWithPayload`, which
44
- * implements the actual sweep against the Governance contract -- this method exists only as a
45
- * convenience wrapper so callers that already hold a GovernanceProposer reference don't have to
41
+ * Classifies the given original payload against the Governance proposal history (`'live'` /
42
+ * `'executed'` / `'none'`). Delegates to `ReadOnlyGovernanceContract.getPayloadProposalStatus`,
43
+ * which implements the actual sweep against the Governance contract -- this method exists only as
44
+ * a convenience wrapper so callers that already hold a GovernanceProposer reference don't have to
46
45
  * resolve the Governance address themselves.
47
46
  */
48
- hasActiveProposalWithPayload(payload: Hex): Promise<boolean>;
47
+ getPayloadProposalStatus(payload: Hex): Promise<PayloadProposalStatus>;
49
48
  /**
50
49
  * Returns true if the given payload address has no deployed bytecode. Used as a cheap
51
50
  * pre-flight check before casting a governance signal — voting for a zero-code address
@@ -61,4 +60,4 @@ export declare class GovernanceProposerContract implements IEmpireBase {
61
60
  proposalId: bigint;
62
61
  }>;
63
62
  }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV9wcm9wb3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBR3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQThELE1BQU0sa0JBQWtCLENBQUM7QUFDaEgsT0FBTyxFQUFFLDBCQUEwQixFQUE2QixNQUFNLGlCQUFpQixDQUFDO0FBRXhGLHFCQUFhLDBCQUEyQixZQUFXLFdBQVc7YUFZMUMsTUFBTSxFQUFFLFVBQVU7SUFYcEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQWtFO0lBRTNGOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBZ0M7SUFFbEUsWUFDa0IsTUFBTSxFQUFFLFVBQVUsRUFDbEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBTTFCO0lBRUQsSUFBVyxPQUFPLGVBRWpCO0lBRVksZ0JBQWdCLHdCQUU1QjtJQUdZLGtCQUFrQix3QkFFOUI7SUFFTSxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV0QztJQUVNLFlBQVksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJDO0lBRU0sV0FBVywyQkFFakI7SUFFTSxZQUFZLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJEO0lBRVksWUFBWSxDQUN2QixhQUFhLEVBQUUsR0FBRyxFQUNsQixLQUFLLEVBQUUsTUFBTSxHQUNaLE9BQU8sQ0FBQztRQUFFLGNBQWMsRUFBRSxVQUFVLENBQUM7UUFBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUM7UUFBQyxhQUFhLEVBQUUsT0FBTyxDQUFDO1FBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQTtLQUFFLENBQUMsQ0FZakg7SUFFTSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXpGO0lBRU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxXQUFXLENBTXBEO0lBRVksZ0NBQWdDLENBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQ1osSUFBSSxFQUFFLFVBQVUsRUFDaEIsT0FBTyxFQUFFLE1BQU0sRUFDZixhQUFhLEVBQUUsR0FBRyxFQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUNqRCxPQUFPLENBQUMsV0FBVyxDQUFDLENBY3RCO0lBRUQ7Ozs7T0FJRztJQUVVLGFBQWEsSUFBSSxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FHaEU7SUFFRDs7Ozs7O09BTUc7SUFDVSw0QkFBNEIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHeEU7SUFFRDs7Ozs7Ozs7T0FRRztJQUNVLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FXakU7SUFFWSxpQkFBaUIsQ0FDNUIsS0FBSyxFQUFFLE1BQU0sRUFDYixTQUFTLEVBQUUsU0FBUyxHQUNuQixPQUFPLENBQUM7UUFDVCxPQUFPLEVBQUUsa0JBQWtCLENBQUM7UUFDNUIsVUFBVSxFQUFFLE1BQU0sQ0FBQztLQUNwQixDQUFDLENBWUQ7Q0FDRiJ9
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ292ZXJuYW5jZV9wcm9wb3Nlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbnRyYWN0cy9nb3Zlcm5hbmNlX3Byb3Bvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxFQUVMLEtBQUssR0FBRyxFQUNSLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssbUJBQW1CLEVBR3pCLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQUUsS0FBSyxXQUFXLEVBQThELE1BQU0sa0JBQWtCLENBQUM7QUFDaEgsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsMEJBQTBCLEVBQTZCLE1BQU0saUJBQWlCLENBQUM7QUFFcEgscUJBQWEsMEJBQTJCLFlBQVcsV0FBVzthQVkxQyxNQUFNLEVBQUUsVUFBVTtJQVhwQyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBa0U7SUFFM0Y7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFnQztJQUVsRSxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFNMUI7SUFFRCxJQUFXLE9BQU8sSUFBSSxVQUFVLENBRS9CO0lBRVksZ0JBQWdCLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUVuRDtJQUdZLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFckQ7SUFFTSxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV0QztJQUVNLFlBQVksSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJDO0lBRU0sWUFBWSxDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVyRDtJQUVZLFlBQVksQ0FDdkIsYUFBYSxFQUFFLEdBQUcsRUFDbEIsS0FBSyxFQUFFLE1BQU0sR0FDWixPQUFPLENBQUM7UUFBRSxjQUFjLEVBQUUsVUFBVSxDQUFDO1FBQUMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDO1FBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQztRQUFDLFFBQVEsRUFBRSxPQUFPLENBQUE7S0FBRSxDQUFDLENBWWpIO0lBRU0saUJBQWlCLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV6RjtJQUVNLG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsV0FBVyxDQU1wRDtJQUVZLGdDQUFnQyxDQUMzQyxPQUFPLEVBQUUsR0FBRyxFQUNaLElBQUksRUFBRSxVQUFVLEVBQ2hCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsYUFBYSxFQUFFLEdBQUcsRUFDbEIsTUFBTSxFQUFFLENBQUMsR0FBRyxFQUFFLG1CQUFtQixLQUFLLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FDakQsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQWN0QjtJQUVEOzs7O09BSUc7SUFFVSxhQUFhLElBQUksT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBR2hFO0lBRUQ7Ozs7OztPQU1HO0lBQ1Usd0JBQXdCLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FHbEY7SUFFRDs7Ozs7Ozs7T0FRRztJQUNVLGNBQWMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FXakU7SUFFWSxpQkFBaUIsQ0FDNUIsS0FBSyxFQUFFLE1BQU0sRUFDYixTQUFTLEVBQUUsU0FBUyxHQUNuQixPQUFPLENBQUM7UUFDVCxPQUFPLEVBQUUsa0JBQWtCLENBQUM7UUFDNUIsVUFBVSxFQUFFLE1BQU0sQ0FBQztLQUNwQixDQUFDLENBWUQ7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8D,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,0BAA0B,EAA6B,MAAM,iBAAiB,CAAC;AAExF,qBAAa,0BAA2B,YAAW,WAAW;aAY1C,MAAM,EAAE,UAAU;IAXpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAE3F;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAElE,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,eAEjB;IAEY,gBAAgB,wBAE5B;IAGY,kBAAkB,wBAE9B;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtC;IAEM,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAErC;IAEM,WAAW,2BAEjB;IAEM,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAErD;IAEY,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,UAAU,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAYjH;IAEM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;IAEM,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAMpD;IAEY,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CActB;IAED;;;;OAIG;IAEU,aAAa,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAGhE;IAED;;;;;;OAMG;IACU,4BAA4B,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxE;IAED;;;;;;;;OAQG;IACU,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAWjE;IAEY,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAYD;CACF"}
1
+ {"version":3,"file":"governance_proposer.d.ts","sourceRoot":"","sources":["../../src/contracts/governance_proposer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,EAEL,KAAK,GAAG,EACR,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAGzB,MAAM,MAAM,CAAC;AAEd,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,KAAK,WAAW,EAA8D,MAAM,kBAAkB,CAAC;AAChH,OAAO,EAAE,KAAK,qBAAqB,EAAE,0BAA0B,EAA6B,MAAM,iBAAiB,CAAC;AAEpH,qBAAa,0BAA2B,YAAW,WAAW;aAY1C,MAAM,EAAE,UAAU;IAXpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkE;IAE3F;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgC;IAElE,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAM1B;IAED,IAAW,OAAO,IAAI,UAAU,CAE/B;IAEY,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CAEnD;IAGY,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,CAErD;IAEM,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAEtC;IAEM,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAErC;IAEM,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAErD;IAEY,YAAY,CACvB,aAAa,EAAE,GAAG,EAClB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC;QAAE,cAAc,EAAE,UAAU,CAAC;QAAC,sBAAsB,EAAE,GAAG,CAAC;QAAC,aAAa,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAYjH;IAEM,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAEzF;IAEM,mBAAmB,CAAC,OAAO,EAAE,GAAG,GAAG,WAAW,CAMpD;IAEY,gCAAgC,CAC3C,OAAO,EAAE,GAAG,EACZ,IAAI,EAAE,UAAU,EAChB,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,GAAG,EAClB,MAAM,EAAE,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,GAAG,CAAC,GACjD,OAAO,CAAC,WAAW,CAAC,CActB;IAED;;;;OAIG;IAEU,aAAa,IAAI,OAAO,CAAC,0BAA0B,CAAC,CAGhE;IAED;;;;;;OAMG;IACU,wBAAwB,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAGlF;IAED;;;;;;;;OAQG;IACU,cAAc,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAWjE;IAEY,iBAAiB,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC;QACT,OAAO,EAAE,kBAAkB,CAAC;QAC5B,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC,CAYD;CACF"}
@@ -428,9 +428,6 @@ export class GovernanceProposerContract {
428
428
  getRoundSize() {
429
429
  return this.proposer.read.ROUND_SIZE();
430
430
  }
431
- getInstance() {
432
- return this.proposer.read.getInstance();
433
- }
434
431
  computeRound(slot) {
435
432
  return this.proposer.read.computeRound([
436
433
  BigInt(slot)
@@ -471,7 +468,7 @@ export class GovernanceProposerContract {
471
468
  };
472
469
  }
473
470
  async createSignalRequestWithSignature(payload, slot, chainId, signerAddress, signer) {
474
- const signature = await signSignalWithSig(signer, payload, slot, await this.getInstance(), this.address.toString(), chainId);
471
+ const signature = await signSignalWithSig(signer, payload, slot, (await this.getRollupAddress()).toString(), this.address.toString(), chainId);
475
472
  return {
476
473
  to: this.address.toString(),
477
474
  abi: GovernanceProposerAbi,
@@ -487,14 +484,14 @@ export class GovernanceProposerContract {
487
484
  return new ReadOnlyGovernanceContract(address, this.client);
488
485
  }
489
486
  /**
490
- * Returns true iff the given original payload is currently the subject of a live (non-terminal)
491
- * Governance proposal. Delegates to `ReadOnlyGovernanceContract.hasActiveProposalWithPayload`, which
492
- * implements the actual sweep against the Governance contract -- this method exists only as a
493
- * convenience wrapper so callers that already hold a GovernanceProposer reference don't have to
487
+ * Classifies the given original payload against the Governance proposal history (`'live'` /
488
+ * `'executed'` / `'none'`). Delegates to `ReadOnlyGovernanceContract.getPayloadProposalStatus`,
489
+ * which implements the actual sweep against the Governance contract -- this method exists only as
490
+ * a convenience wrapper so callers that already hold a GovernanceProposer reference don't have to
494
491
  * resolve the Governance address themselves.
495
- */ async hasActiveProposalWithPayload(payload) {
492
+ */ async getPayloadProposalStatus(payload) {
496
493
  const governance = await this.getGovernance();
497
- return governance.hasActiveProposalWithPayload(payload);
494
+ return governance.getPayloadProposalStatus(payload);
498
495
  }
499
496
  /**
500
497
  * Returns true if the given payload address has no deployed bytecode. Used as a cheap
@@ -28,7 +28,11 @@ export declare class GSEContract {
28
28
  getAttestersFromIndicesAtTime(instance: Hex | EthAddress, ts: bigint, indices: bigint[], options?: {
29
29
  blockNumber?: bigint;
30
30
  }): Promise<readonly `0x${string}`[]>;
31
+ /** Number of attesters registered to `instance` as of the given L1 timestamp. */
32
+ getAttesterCountAtTime(instance: Hex | EthAddress, ts: bigint, options?: {
33
+ blockNumber?: bigint;
34
+ }): Promise<number>;
31
35
  getRegistrationDigest(publicKey: ProjPointType<bigint>): Promise<ProjPointType<bigint>>;
32
36
  makeRegistrationTuple(privateKey: bigint): Promise<RegistrationTuple>;
33
37
  }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3NlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2dzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUE4QixLQUFLLEdBQUcsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUV6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0lBQzlCLGFBQWEsRUFBRTtRQUNiLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDVixDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ1gsQ0FBQztJQUNGLGFBQWEsRUFBRTtRQUNiLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDWCxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNYLEVBQUUsRUFBRSxNQUFNLENBQUM7S0FDWixDQUFDO0lBQ0YsaUJBQWlCLEVBQUU7UUFDakIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNWLENBQUMsRUFBRSxNQUFNLENBQUM7S0FDWCxDQUFDO0NBQ0gsQ0FBQztBQUVGLHFCQUFhLFdBQVc7YUFLSixNQUFNLEVBQUUsVUFBVTtJQUo3QixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFtRDtJQUV2RSxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFPMUI7SUFFWSxRQUFRLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUzQztJQUVZLGFBQWEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRWhEO0lBRUQsNkJBQTZCLENBQzNCLFFBQVEsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUMxQixFQUFFLEVBQUUsTUFBTSxFQUNWLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxDQUFDLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxxQ0FNbkM7SUFFWSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FJbkc7SUFFWSxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQXdCakY7Q0FDRiJ9
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3NlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL2dzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHM0QsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFeEUsT0FBTyxFQUE4QixLQUFLLEdBQUcsRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUV6RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFOUMsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0lBQzlCLGFBQWEsRUFBRTtRQUNiLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDVixDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ1gsQ0FBQztJQUNGLGFBQWEsRUFBRTtRQUNiLEVBQUUsRUFBRSxNQUFNLENBQUM7UUFDWCxFQUFFLEVBQUUsTUFBTSxDQUFDO1FBQ1gsRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUNYLEVBQUUsRUFBRSxNQUFNLENBQUM7S0FDWixDQUFDO0lBQ0YsaUJBQWlCLEVBQUU7UUFDakIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNWLENBQUMsRUFBRSxNQUFNLENBQUM7S0FDWCxDQUFDO0NBQ0gsQ0FBQztBQUVGLHFCQUFhLFdBQVc7YUFLSixNQUFNLEVBQUUsVUFBVTtJQUo3QixPQUFPLEVBQUUsVUFBVSxDQUFDO0lBQzNCLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFtRDtJQUV2RSxZQUNrQixNQUFNLEVBQUUsVUFBVSxFQUNsQyxPQUFPLEVBQUUsR0FBRyxHQUFHLFVBQVUsRUFPMUI7SUFFWSxRQUFRLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUUzQztJQUVZLGFBQWEsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRWhEO0lBRUQsNkJBQTZCLENBQzNCLFFBQVEsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUMxQixFQUFFLEVBQUUsTUFBTSxFQUNWLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFDakIsT0FBTyxDQUFDLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxxQ0FNbkM7SUFFRCxpRkFBaUY7SUFDcEUsc0JBQXNCLENBQ2pDLFFBQVEsRUFBRSxHQUFHLEdBQUcsVUFBVSxFQUMxQixFQUFFLEVBQUUsTUFBTSxFQUNWLE9BQU8sQ0FBQyxFQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FDakMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUtqQjtJQUVZLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUluRztJQUVZLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBd0JqRjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"gse.d.ts","sourceRoot":"","sources":["../../src/contracts/gse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH,CAAC;AAEF,qBAAa,WAAW;aAKJ,MAAM,EAAE,UAAU;IAJ7B,OAAO,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmD;IAEvE,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAO1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAE3C;IAEY,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAEhD;IAED,6BAA6B,CAC3B,QAAQ,EAAE,GAAG,GAAG,UAAU,EAC1B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,qCAMnC;IAEY,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAInG;IAEY,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBjF;CACF"}
1
+ {"version":3,"file":"gse.d.ts","sourceRoot":"","sources":["../../src/contracts/gse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAExE,OAAO,EAA8B,KAAK,GAAG,EAAe,MAAM,MAAM,CAAC;AAEzE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,aAAa,EAAE;QACb,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;IACF,aAAa,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,iBAAiB,EAAE;QACjB,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACX,CAAC;CACH,CAAC;AAEF,qBAAa,WAAW;aAKJ,MAAM,EAAE,UAAU;IAJ7B,OAAO,EAAE,UAAU,CAAC;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAmD;IAEvE,YACkB,MAAM,EAAE,UAAU,EAClC,OAAO,EAAE,GAAG,GAAG,UAAU,EAO1B;IAEY,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC,CAE3C;IAEY,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAEhD;IAED,6BAA6B,CAC3B,QAAQ,EAAE,GAAG,GAAG,UAAU,EAC1B,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,qCAMnC;IAED,iFAAiF;IACpE,sBAAsB,CACjC,QAAQ,EAAE,GAAG,GAAG,UAAU,EAC1B,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GACjC,OAAO,CAAC,MAAM,CAAC,CAKjB;IAEY,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAInG;IAEY,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBjF;CACF"}
@@ -34,6 +34,15 @@ export class GSEContract {
34
34
  indices
35
35
  ], options);
36
36
  }
37
+ /** Number of attesters registered to `instance` as of the given L1 timestamp. */ async getAttesterCountAtTime(instance, ts, options) {
38
+ if (instance instanceof EthAddress) {
39
+ instance = instance.toString();
40
+ }
41
+ return Number(await this.gse.read.getAttesterCountAtTime([
42
+ instance,
43
+ ts
44
+ ], options));
45
+ }
37
46
  async getRegistrationDigest(publicKey) {
38
47
  const affinePublicKey = publicKey.toAffine();
39
48
  const g1PointDigest = await this.gse.read.getRegistrationDigest([
@@ -248,6 +248,14 @@ export declare class RollupContract {
248
248
  getActiveAttesterCount(options?: {
249
249
  blockNumber?: bigint;
250
250
  }): Promise<number>;
251
+ /**
252
+ * Number of attesters that were staked at the given (historical) L1 timestamp. This is the count that
253
+ * validator-set sampling uses to decide whether an epoch gets a committee, and the historical counterpart
254
+ * of {@link getActiveAttesterCount} (which reads at the latest L1 block).
255
+ */
256
+ getAttesterCountAtTime(timestamp: bigint, options?: {
257
+ blockNumber?: bigint;
258
+ }): Promise<number>;
251
259
  getSlashingProposerAddress(): Promise<EthAddress>;
252
260
  getCheckpointReward(): Promise<bigint>;
253
261
  getCheckpointNumber(options?: {
@@ -5722,4 +5730,4 @@ export declare class RollupContract {
5722
5730
  getTempCheckpointLogStorageSlot(checkpointNumber: CheckpointNumber, field: TempCheckpointLogField): Promise<bigint>;
5723
5731
  private computeTempCheckpointLogStorageSlot;
5724
5732
  }
5725
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbHVwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL3JvbGx1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBS3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkxRCxPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBRVosS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxHQUFHLEVBQ1IsS0FBSyxHQUFHLEVBRVIsS0FBSyxhQUFhLEVBQ2xCLEtBQUssNEJBQTRCLEVBT2xDLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHOUMsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lDQUcxQztJQUVELHNFQUFzRTtJQUNoRSwyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0E4QnRHO0lBRUQsc0ZBQXNGO0lBQ3RGLE1BQU0sQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUUsTUFBTSxFQUFFLHNCQUFzQixFQUFFLE1BQU0sR0FBRyxNQUFNLENBRTVGO0lBRUQsZ0ZBQWdGO0lBQ2hGLE1BQU0sS0FBSyxvQkFBb0IsSUFBSSxNQUFNLENBRXhDO0lBRUQ7Ozs7T0FJRztJQUNHLCtCQUErQixDQUNuQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsS0FBSyxFQUFFLHNCQUFzQixHQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLENBTWpCO0lBRUQsT0FBTyxDQUFDLG1DQUFtQztDQWlCNUMifQ==
5733
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbHVwLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29udHJhY3RzL3JvbGx1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBS3JFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUkxRCxPQUFPLEVBQ0wsS0FBSyxPQUFPLEVBRVosS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxHQUFHLEVBQ1IsS0FBSyxHQUFHLEVBRVIsS0FBSyxhQUFhLEVBQ2xCLEtBQUssNEJBQTRCLEVBT2xDLE1BQU0sTUFBTSxDQUFDO0FBR2QsT0FBTyxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHOUMsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUdsRSxNQUFNLE1BQU0sd0JBQXdCLEdBQUc7SUFDckMsSUFBSSxFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDcEIsU0FBUyxFQUFFLGFBQWEsQ0FBQztDQUMxQixDQUFDO0FBRUYsTUFBTSxNQUFNLHlCQUF5QixHQUFHO0lBQ3RDLGdCQUFnQixFQUFFLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDaEMscUJBQXFCLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztDQUN0QyxDQUFDO0FBRUYsTUFBTSxNQUFNLHlCQUF5QixHQUFHLElBQUksQ0FDMUMsbUJBQW1CLEVBQ2pCLGVBQWUsR0FDZixjQUFjLEdBQ2QsZUFBZSxHQUNmLHVCQUF1QixHQUN2QixpQkFBaUIsR0FDakIscUJBQXFCLEdBQ3JCLDBCQUEwQixHQUMxQixZQUFZLENBQ2YsQ0FBQztBQUVGLE1BQU0sTUFBTSx5QkFBeUIsR0FBRztJQUN0QyxlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUMvQixVQUFVLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUMxQixPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUN2QixRQUFRLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztDQUN6QixDQUFDO0FBRUYsTUFBTSxNQUFNLFVBQVUsR0FBRztJQUN2QixlQUFlLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUMvQixnQkFBZ0IsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLFNBQVMsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ3pCLE1BQU0sRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDO0lBQ3ZCLFVBQVUsRUFBRSxNQUFNLENBQUM7SUFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixRQUFRLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUN4QixZQUFZLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUM1QixPQUFPLEVBQUUsV0FBVyxDQUFDO0lBQ3JCLGFBQWEsRUFBRSxNQUFNLENBQUM7SUFDdEIsZUFBZSxFQUFFLE1BQU0sQ0FBQztDQUN6QixDQUFDO0FBRUYsTUFBTSxNQUFNLFdBQVcsR0FBRztJQUN4QixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLFdBQVcsRUFBRSxNQUFNLENBQUM7Q0FDckIsQ0FBQztBQUVGOzs7R0FHRztBQUNILG9CQUFZLGNBQWM7SUFDeEIsSUFBSSxJQUFJO0lBQ1IsVUFBVSxJQUFJO0lBQ2QsTUFBTSxJQUFJO0lBQ1YsT0FBTyxJQUFJO0NBQ1o7QUFFRDs7R0FFRztBQUNILE1BQU0sTUFBTSxTQUFTLEdBQUc7SUFDdEIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixRQUFRLEVBQUUsTUFBTSxDQUFDO0lBQ2pCLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQztJQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDO0NBQ3BCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sTUFBTSxhQUFhLEdBQUc7SUFDMUIsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLFVBQVUsRUFBRSxRQUFRLENBQUM7SUFDckIsbUJBQW1CLEVBQUUsUUFBUSxDQUFDO0lBQzlCLGdCQUFnQixFQUFFLFFBQVEsQ0FBQztJQUMzQixhQUFhLEVBQUUsUUFBUSxDQUFDO0lBQ3hCLFVBQVUsRUFBRSxVQUFVLENBQUM7SUFDdkIsU0FBUyxFQUFFLFNBQVMsQ0FBQztDQUN0QixDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLE1BQU0sU0FBUyxHQUFHO0lBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztDQUNqQixDQUFDO0FBRUYsdUZBQXVGO0FBQ3ZGLG9CQUFZLHNCQUFzQjtJQUNoQyxVQUFVLElBQUk7SUFDZCxtQkFBbUIsSUFBSTtJQUN2QixPQUFPLElBQUk7SUFDWCxnQkFBZ0IsSUFBSTtJQUNwQixhQUFhLElBQUk7SUFDakIsVUFBVSxJQUFJO0lBQ2QsU0FBUyxJQUFJO0NBQ2Q7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sTUFBTSwrQkFBK0IsR0FBRztJQUM1QyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDaEIsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ2IsYUFBYSxDQUFDLEVBQUUsUUFBUSxDQUFDO0lBQ3pCLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztJQUN4QixTQUFTLENBQUMsRUFBRSxTQUFTLENBQUM7Q0FDdkIsQ0FBQztBQUVGLHFGQUFxRjtBQUNyRixNQUFNLE1BQU0sb0JBQW9CLEdBQUc7SUFDakMsYUFBYSxFQUFFLE1BQU0sQ0FBQztJQUN0QixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLGNBQWMsRUFBRSxNQUFNLENBQUM7SUFDdkIsb0JBQW9CLEVBQUUsTUFBTSxDQUFDO0NBQzlCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sTUFBTSxZQUFZLEdBQUc7SUFDekIsaUJBQWlCLEVBQUUsVUFBVSxDQUFDO0lBQzlCLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLFVBQVUsQ0FBQztJQUNwQixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7Q0FDMUIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxNQUFNLElBQUksR0FBRztJQUNqQixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLHFCQUFxQixFQUFFLFVBQVUsQ0FBQztJQUNsQyxXQUFXLEVBQUUsT0FBTyxDQUFDO0lBQ3JCLE1BQU0sRUFBRSxPQUFPLENBQUM7Q0FDakIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxNQUFNLGNBQWMsR0FBRztJQUMzQixTQUFTLEVBQUU7UUFDVCxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUNYLENBQUM7SUFDRixVQUFVLEVBQUUsVUFBVSxDQUFDO0NBQ3hCLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sTUFBTSxZQUFZLEdBQUc7SUFDekIsTUFBTSxFQUFFLGNBQWMsQ0FBQztJQUN2QixnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDekIsSUFBSSxFQUFFLElBQUksQ0FBQztJQUNYLE1BQU0sRUFBRSxjQUFjLENBQUM7Q0FDeEIsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxNQUFNLG9CQUFvQixHQUFHO0lBQ2pDLHNCQUFzQixFQUFFLGdCQUFnQixDQUFDO0lBQ3pDLGFBQWEsRUFBRSxFQUFFLENBQUM7SUFDbEIsdUJBQXVCLEVBQUUsZ0JBQWdCLENBQUM7SUFDMUMsY0FBYyxFQUFFLEVBQUUsQ0FBQztJQUNuQixxQkFBcUIsRUFBRSxFQUFFLENBQUM7Q0FDM0IsQ0FBQztBQUVGLGtEQUFrRDtBQUNsRCxNQUFNLE1BQU0sc0JBQXNCLEdBQUc7SUFDbkMsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUM7SUFDbkMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNaLG1CQUFtQixFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzlCLG9FQUFvRTtJQUNwRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUM7SUFDM0IscUVBQXFFO0lBQ3JFLGFBQWEsRUFBRSxRQUFRLENBQUM7Q0FDekIsQ0FBQztBQUVGLDhDQUE4QztBQUM5QyxNQUFNLE1BQU0scUJBQXFCLEdBQUcsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUM7QUE0QnZFLHFCQUFhLGNBQWM7YUFxQ1AsTUFBTSxFQUFFLFVBQVU7SUFwQ3BDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFzRDtJQUM3RSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBbUM7SUFFMUQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBa0I7SUFDckQsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBR3hCO0lBRUYsTUFBTSxLQUFLLG9CQUFvQixJQUFJLE1BQU0sQ0FNeEM7SUFFRCxNQUFNLEtBQUssY0FBYyxJQUFJLEdBQUcsQ0FFL0I7SUFFRCxNQUFNLENBQUMsd0JBQXdCLENBQUMsdUJBQXVCLEVBQUUsZ0NBQWdDLGtCQU14RjtJQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLGNBQWMsa0JBSTFDO0lBRUQsWUFDa0IsTUFBTSxFQUFFLFVBQVUsRUFDbEMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEVBTTFCO0lBRUssTUFBTSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFbEM7SUFFRCxJQUFXLE9BQU8sa0JBRWpCO0lBRUQsV0FBVyxJQUFJLHFCQUFxQixDQUFDLE9BQU8sU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUVqRTtJQUVZLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyx3QkFBd0IsR0FBRyxTQUFTLENBQUMsQ0FZaEY7SUFHRCxlQUFlLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVqQztJQUdELGdCQUFnQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFbEM7SUFHSyx3QkFBd0IsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRWhEO0lBR0ssZ0JBQWdCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUV4QztJQUdLLGVBQWUsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXZDO0lBR0ssc0JBQXNCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUU5QztJQUdELG9CQUFvQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFdEM7SUFHRCx5QkFBeUIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRTNDO0lBR0ssNkJBQTZCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVyRDtJQUdLLHVCQUF1QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFL0M7SUFHRCxzQkFBc0IsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXhDO0lBR0ssWUFBWSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFcEM7SUFHRCxhQUFhLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUUvQjtJQUdELHFCQUFxQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFdkM7SUFHRCwrQkFBK0IsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRWpEO0lBR0QsWUFBWSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFOUI7SUFHRCxVQUFVLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUU1QjtJQUdLLHlCQUF5QixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFN0M7SUFHSyxhQUFhLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUlqQztJQUdLLHdCQUF3QixJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FJNUM7SUFFRDs7OztPQUlHO0lBRVUsa0JBQWtCLElBQUksT0FBTyxDQUFDO1FBQ3pDLFlBQVksRUFBRSxNQUFNLENBQUM7UUFDckIsYUFBYSxFQUFFLE1BQU0sQ0FBQztRQUN0QixZQUFZLEVBQUUsTUFBTSxDQUFDO1FBQ3JCLGFBQWEsRUFBRSxNQUFNLENBQUM7UUFDdEIscUJBQXFCLEVBQUUsTUFBTSxDQUFDO1FBQzlCLG1CQUFtQixFQUFFLE1BQU0sQ0FBQztRQUM1QixlQUFlLEVBQUUsTUFBTSxDQUFDO0tBQ3pCLENBQUMsQ0EyQkQ7SUFFSyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRTdDO0lBRUQ7O09BRUc7SUFDRyxxQkFBcUIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBRWpEO1lBRWEsc0JBQXNCO0lBdUJwQzs7Ozs7OztPQU9HO0lBQ0csaUJBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBZ0I1RDtJQUVEOztPQUVHO0lBQ0csa0JBQWtCLElBQUksT0FBTyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsQ0FNL0Q7SUFFSyxRQUFRLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUVwQztJQUVLLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBR2hGO0lBRUQ7Ozs7T0FJRztJQUNHLHNCQUFzQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FHbkc7SUFFWSwwQkFBMEIsd0JBTXRDO0lBRUQsbUJBQW1CLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUVyQztJQUVLLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FHdkY7SUFFSyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUFFLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBRzdGO0lBRUssYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBRzNFO0lBRUssV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FPM0Y7SUFFSyxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FTL0Q7SUFFRCxpQkFBaUIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBRW5DO0lBRUssY0FBYyxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQWdCekU7SUFFSyxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLENBRTFEO0lBRUssb0JBQW9CLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUU5QztJQUVLLGVBQWUsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBRTVDO0lBRUssd0JBQXdCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQWdCbEU7SUFFSyxrQkFBa0IsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBUzlDO0lBRUssYUFBYSxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQVMxRDtJQUVLLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsRUFBRTtRQUFFLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQWtCbEg7SUFFRCw4REFBOEQ7SUFDOUQsb0JBQW9CLDJCQVluQjtJQUVEOzs7Ozs7T0FNRztJQUNILDZCQUE2QixDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtRQUFFLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLDBCQWVyRjtJQUVLLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7UUFBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUE7S0FBRSxDQUFDLENBTWhGO0lBRUQsbUJBQW1CLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXJEO0lBRUssbUJBQW1CLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUUzQztJQUVLLDRCQUE0QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFcEQ7SUFFSyxxQkFBcUIsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDLENBRWxEO0lBRUsscUJBQXFCLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUVsRDtJQUVLLDJCQUEyQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FFMUY7SUFFSyxrQkFBa0IsSUFBSSxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0ErQjdEO0lBRVksaUJBQWlCLHdCQUU3QjtJQUVZLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUVyRjtJQUVLLHlCQUF5QixDQUM3QixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxVQUFVLEVBQUUsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFDLEdBQy9GLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUdmO0lBRVksY0FBYyxDQUN6QixJQUFJLEVBQUUsU0FBUztRQUNiLFVBQVU7UUFDVix5QkFBeUI7UUFDekIsS0FBSyxNQUFNLEVBQUUsRUFBRTtRQUNmLGFBQWE7UUFDYixLQUFLLE1BQU0sRUFBRTtRQUNiLEtBQUssTUFBTSxFQUFFO1FBQ2I7WUFDRSxRQUFRLEVBQUUsT0FBTyxDQUFDO1lBQ2xCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztTQUMzQjtLQUNGLEVBQ0QsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsT0FBTyxHQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLENBWWY7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDVSxZQUFZLENBQ3ZCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLEtBQUssTUFBTSxFQUFFLEdBQUcsT0FBTyxFQUNoQyxTQUFTLEVBQUUsTUFBTSxFQUNqQixhQUFhLEdBQUUsYUFBa0IsR0FDaEMsT0FBTyxDQUFDO1FBQUUsSUFBSSxFQUFFLFVBQVUsQ0FBQztRQUFDLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDO1FBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0FBQyxDQXdCN0Y7SUFFRDs7Ozs7Ozs7T0FRRztJQUNVLHFCQUFxQixDQUFDLFFBQVEsRUFBRTtRQUMzQyxPQUFPLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQztLQUMzQixHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FxQnpCO0lBRUQ7Ozs7Ozs7T0FPRztJQUNVLDZCQUE2QixDQUN4QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsTUFBTSxFQUFFLCtCQUErQixHQUN0QyxPQUFPLENBQUMsYUFBYSxDQUFDLENBd0N4QjtJQUVEOzs7O09BSUc7SUFDSSxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLGFBQWEsQ0FxQnpGO0lBRUQsOEZBQThGO0lBQzlGLE9BQWMsbUJBQW1CLENBQUMsR0FBRyxTQUFTLEVBQUUsYUFBYSxFQUFFLEdBQUcsYUFBYSxDQXNCOUU7SUFFRCxnR0FBZ0c7SUFDaEcsT0FBYyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsU0FBUyxHQUFHLE1BQU0sQ0FZNUQ7SUFFRDs2RkFDeUY7SUFDekYsT0FBYyxxQkFBcUIsQ0FDakMsZUFBZSxFQUFFLFNBQVMsRUFDMUIsYUFBYSxFQUFFLE1BQU0sRUFDckIscUJBQXFCLEVBQUUsTUFBTSxFQUM3QixVQUFVLEVBQUUsTUFBTSxHQUNqQixTQUFTLENBZ0NYO0lBRUQsbUZBQW1GO0lBQzVFLG9DQUFvQyxDQUN6QyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsc0JBQXNCLEVBQUUseUJBQXlCLEVBQ2pELFNBQVMsRUFBRSxVQUFVLEVBQUUsRUFDdkIsWUFBWSxFQUFFLE1BQU0sR0FDbkIsV0FBVyxDQWViO0lBRUQsNkZBQTZGO0lBQ3RGLDhDQUE4QyxDQUNuRCxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFDbEMsc0JBQXNCLEVBQUUseUJBQXlCLEVBQ2pELFNBQVMsRUFBRSxVQUFVLEVBQUUsR0FDdEIsV0FBVyxDQVViO0lBRUQsd0lBQXdJO0lBQ2pJLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsVUFBVSxvQkFLakg7SUFFRCxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLGFBQWEsQ0FBQyxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBRXRHO0lBRUsseUJBQXlCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQVFyRztJQUVLLFNBQVMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFdEQ7SUFFSyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEVBQUU7UUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQVVsSDtJQUVLLGNBQWMsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQUUsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRzVGO0lBRUssT0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FFM0I7SUFFSyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUUvRDtJQUVELG1CQUFtQixDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FLOUQ7SUFFRCxnQ0FBZ0MsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FLekY7SUFFSyxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQWdCNUQ7SUFFSyxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQXdCdEU7SUFFSyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxVQUFVLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUtsRTtJQUVLLHNCQUFzQixDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FFbEY7SUFFSyw2QkFBNkIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBRXZEO0lBRUssZUFBZSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FFM0M7SUFFSyxlQUFlLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxDQVE3QztJQUVELFVBQVUsQ0FBQyxTQUFTLEVBQUUsU0FBUzs7O09BVTlCO0lBRUQsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU07OztPQVU1QztJQUVNLHNCQUFzQixDQUMzQixRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFBRSxVQUFVLEVBQUUsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUFDLFVBQVUsRUFBRSxLQUFLLE1BQU0sRUFBRSxDQUFBO0tBQUUsS0FBSyxPQUFPLEdBQ3BGLDRCQUE0QixDQWM5QjtJQUVNLDZCQUE2QixDQUNsQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQztRQUFDLEtBQUssRUFBRSxHQUFHLENBQUE7S0FBRSxLQUFLLE9BQU8sR0FDOUUsNEJBQTRCLENBYzlCO0lBRVksY0FBYyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDO1FBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUFDLFFBQVEsRUFBRSxVQUFVLENBQUE7S0FBRSxFQUFFLENBQUMsQ0FNakc7SUFFTSxhQUFhLENBQ2xCLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRTtRQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7UUFBQyxRQUFRLEVBQUUsVUFBVSxDQUFBO0tBQUUsS0FBSyxPQUFPLEdBQ3BFLDRCQUE0QixDQWE5QjtJQUVEOzs7OztPQUtHO0lBQ0cscUNBQXFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBRzFDO0lBRUQsc0VBQXNFO0lBQ2hFLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQThCdEc7SUFFRCxzRkFBc0Y7SUFDdEYsTUFBTSxDQUFDLGFBQWEsQ0FBQyx1QkFBdUIsRUFBRSxNQUFNLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FFNUY7SUFFRCxnRkFBZ0Y7SUFDaEYsTUFBTSxLQUFLLG9CQUFvQixJQUFJLE1BQU0sQ0FFeEM7SUFFRDs7OztPQUlHO0lBQ0csK0JBQStCLENBQ25DLGdCQUFnQixFQUFFLGdCQUFnQixFQUNsQyxLQUFLLEVBQUUsc0JBQXNCLEdBQzVCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FNakI7SUFFRCxPQUFPLENBQUMsbUNBQW1DO0NBaUI1QyJ9