@black-market/sdk 0.9.0 → 0.10.0
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.
- package/README.md +19 -15
- package/dist/abyss.d.ts +4 -0
- package/dist/abyss.d.ts.map +1 -1
- package/dist/abyss.js +1 -0
- package/dist/abyss.js.map +1 -1
- package/dist/lifecycle/abi.d.ts +1 -0
- package/dist/lifecycle/abi.d.ts.map +1 -1
- package/dist/lifecycle/abi.js +1 -0
- package/dist/lifecycle/abi.js.map +1 -1
- package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.d.ts → hmm-dynamic-pool-hook-v2-20261017.d.ts} +21 -21
- package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.d.ts.map → hmm-dynamic-pool-hook-v2-20261017.d.ts.map} +1 -1
- package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v2-20261017.js +69 -0
- package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.js.map → hmm-dynamic-pool-hook-v2-20261017.js.map} +1 -1
- package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.d.ts → hmm-fixed-pool-hook-v2-20261017.d.ts} +21 -21
- package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.d.ts.map → hmm-fixed-pool-hook-v2-20261017.d.ts.map} +1 -1
- package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v2-20261017.js +69 -0
- package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.js.map → hmm-fixed-pool-hook-v2-20261017.js.map} +1 -1
- package/dist/lifecycle/hmm-abi.d.ts +4544 -0
- package/dist/lifecycle/hmm-abi.d.ts.map +1 -0
- package/dist/lifecycle/hmm-abi.js +299 -0
- package/dist/lifecycle/hmm-abi.js.map +1 -0
- package/dist/lifecycle/hmm.d.ts +19 -3
- package/dist/lifecycle/hmm.d.ts.map +1 -1
- package/dist/lifecycle/hmm.js +11 -7
- package/dist/lifecycle/hmm.js.map +1 -1
- package/dist/lifecycle/markets.d.ts.map +1 -1
- package/dist/lifecycle/markets.js +2 -0
- package/dist/lifecycle/markets.js.map +1 -1
- package/dist/lifecycle/presets.d.ts +2 -2
- package/dist/lifecycle/presets.js +4 -4
- package/docs/launch-lifecycle.md +135 -56
- package/examples/README.md +6 -4
- package/examples/hmm-launch-config.ts +4 -1
- package/package.json +2 -2
- package/src/abyss.ts +1 -0
- package/src/lifecycle/abi.ts +1 -0
- package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v2-20261017.ts +71 -0
- package/src/lifecycle/deployments/hmm-fixed-pool-hook-v2-20261017.ts +71 -0
- package/src/lifecycle/hmm-abi.ts +302 -0
- package/src/lifecycle/hmm.ts +12 -7
- package/src/lifecycle/markets.ts +1 -0
- package/src/lifecycle/presets.ts +4 -4
- package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.js +0 -69
- package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.js +0 -69
- package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.ts +0 -71
- package/src/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.ts +0 -71
package/docs/launch-lifecycle.md
CHANGED
|
@@ -7,72 +7,151 @@ The canonical authorities are the registry/certification/adapter/config contract
|
|
|
7
7
|
in the protocol repository. Plan identity is `LaunchPlanV1`. Pool-bound V4 uses **config 6**,
|
|
8
8
|
canonical Abyss uses **config 1**, and generic current shared-V4 support uses **config 4**.
|
|
9
9
|
|
|
10
|
-
## 0.9.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
`
|
|
14
|
-
|
|
15
|
-
`
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
## 0.9.1 release: Abyss 0.01% fee tier
|
|
11
|
+
|
|
12
|
+
`ABYSS_FEE_TIERS` now includes `{ feePips: 100, tickSpacing: 1, label: "0.01%" }`.
|
|
13
|
+
Pass `fee: 100` to `deriveLaunchPoolRecipe` to derive spacing-one geometry without
|
|
14
|
+
an explicit spacing override. Use `tickSpacing: 1` when passing that recipe to
|
|
15
|
+
`deriveLaunchPositionRanges`; the permanent boundary tail reaches tick `887272`
|
|
16
|
+
for launch token0 or `-887272` for launch token1. Abyss config1 lifecycle planning
|
|
17
|
+
derives this spacing from the canonical catalog automatically.
|
|
18
|
+
|
|
19
|
+
The Robinhood chain 4663 factory has enabled fee 100 with spacing 1. Other
|
|
20
|
+
deployments must enable the tier before execution; local recipe construction is
|
|
21
|
+
not evidence of live profile admission. Existing tiers and defaults are unchanged.
|
|
22
|
+
|
|
23
|
+
## 0.10.0 release: HMM V2 only
|
|
24
|
+
|
|
25
|
+
The admitted October17 **HMM Fixed V2** and **HMM Dynamic V2** replace the SDK's
|
|
26
|
+
earlier HMM offerings. Generic keys `KnownLifecycleProfile.V4HmmFixedPool`
|
|
27
|
+
(`v4-hmm-fixed-pool`) and `V4HmmDynamicPool` (`v4-hmm-dynamic-pool`) now select V2.
|
|
28
|
+
Versioned hook keys are `KnownLifecycleHook.HmmFixedPoolV2` / `HmmDynamicPoolV2`.
|
|
29
|
+
These are not aliases for the non-HMM fixed/dynamic hooks; those APIs are unchanged.
|
|
30
|
+
|
|
31
|
+
| Preset | Admitted V2 profile ID |
|
|
32
|
+
| --- | --- |
|
|
33
|
+
| HMM Fixed V2 (`hooks/hmm-fixed-v2`) | `0x45e957bcc7068350a65f5b4de5453b674d54d0f5eb2a88fc839da13197e80e98` |
|
|
34
|
+
| HMM Dynamic V2 (`hooks/hmm-dynamic-v2`) | `0x8e500f203ace505072e209c5f077e11de6d071ac7f298cd75c0e05c6a55c36e6` |
|
|
35
|
+
|
|
36
|
+
Frozen adapters, envelopes, complete dependency graphs, creation code and admission
|
|
37
|
+
fixtures preserve the V2 release and pinned registry readback at block 91,874,655.
|
|
38
|
+
Each graph has its own collector/deployer, locker and hook deployer. Presets are
|
|
39
|
+
construction data, not a current admission certificate: live
|
|
40
|
+
`readLifecycleProfiles` and execution proof remain authoritative.
|
|
41
|
+
|
|
42
|
+
Both require `lpFeePips: 0` and `developerFeeBps: 0`. Fixed charges `hookFeePips`
|
|
43
|
+
as its static fee; Dynamic uses config6 minimum/maximum/sensitivity policy.
|
|
44
|
+
Config6 requires a typed `hmmLaunchConfig`:
|
|
25
45
|
|
|
26
46
|
```ts
|
|
27
47
|
const hmmLaunchConfig = defaultHmmLaunchConfig({
|
|
28
48
|
tokenBudget: marketTokenBudget, quoteAsset: "USDG", quoteDecimals: 6,
|
|
49
|
+
// Illustrative caller choices, not SDK risk defaults:
|
|
50
|
+
maxBidQuote: 100n * 10n ** 6n, // maximum 100 USDG of new/refreshed bid principal
|
|
51
|
+
referenceDeviation: 0, // do not ask below or bid above the rounded reference
|
|
29
52
|
});
|
|
30
|
-
//
|
|
31
|
-
hmmLaunchConfig.
|
|
32
|
-
hmmLaunchConfig.strategy.premiumDecaySeconds = 259200; // 72h; default off (0).
|
|
53
|
+
hmmLaunchConfig.strategyShareBps = 2500; // optional 25%; existing default is 50%
|
|
54
|
+
hmmLaunchConfig.strategy.premiumDecaySeconds = 259200; // optional 72h; default off
|
|
33
55
|
const config = encodePoolBoundV4LifecycleMarketConfig({
|
|
34
56
|
...reviewedV6Fields, lpFeePips: 0, developerFeeBps: 0, hmmLaunchConfig,
|
|
35
57
|
});
|
|
36
58
|
```
|
|
37
59
|
|
|
38
|
-
`HmmStrategyConfig` / `HmmLaunchConfig` mirror Solidity
|
|
39
|
-
`
|
|
40
|
-
`abi.encode(
|
|
41
|
-
only for HMM profile IDs
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
60
|
+
`HmmStrategyConfig` / `HmmLaunchConfig` are V2-only and mirror Solidity
|
|
61
|
+
`HMMStrategyConfigV2` / `HMMLaunchConfigV2`. `encodeHmmLaunchTail` produces exactly
|
|
62
|
+
`abi.encode(HMMLaunchConfigV2)`: **16 static words / 512 bytes**. The V6 codec
|
|
63
|
+
appends the tail only for current HMM profile IDs. Missing tails, old 448-byte
|
|
64
|
+
tails, extra words and noncanonical prefixes are rejected before RPC planning.
|
|
65
|
+
Mining and recovery preserve the typed tail. The full launch-plan hash binds
|
|
66
|
+
every tail byte, including both new guards.
|
|
67
|
+
|
|
68
|
+
The hook constructor is still **one 20-word / 640-byte
|
|
69
|
+
`PoolBoundHookParametersV2` tuple**. Do not append the HMM tail to creation code.
|
|
70
|
+
The collector factory hashes only the canonical config6 prefix with zero hook
|
|
71
|
+
salt for the hook's market-economics commitment; the auxiliary strategy settings
|
|
72
|
+
are handed to the manager through the collector. Changing those settings changes
|
|
73
|
+
the full plan commitment, but not the hook constructor's prefix-only commitment.
|
|
74
|
+
|
|
75
|
+
`validateHmmLaunchConfig` enforces the factory's exact launch guards and Solidity
|
|
76
|
+
field widths. Share is 0..10,000 bps. All 15 strategy fields are listed in wire order:
|
|
77
|
+
|
|
78
|
+
| Field | Unit and accepted launch values |
|
|
79
|
+
| --- | --- |
|
|
80
|
+
| `bidWidth` | Tick spacings; positive int24 |
|
|
81
|
+
| `askWidth` | Tick spacings; positive int24 |
|
|
82
|
+
| `gap` | Tick spacings; nonnegative int24 |
|
|
83
|
+
| `staleAfterSeconds` | Positive uint32 seconds |
|
|
84
|
+
| `staleDisplacement` | Tick spacings; positive int24 |
|
|
85
|
+
| `minQuoteDeploy` | Raw quote units; any uint256, including zero |
|
|
86
|
+
| `minQuoteHarvest` | Raw quote units; positive uint256 |
|
|
87
|
+
| `minTokenHarvest` | Raw launch-token units; positive, covered by both token caps |
|
|
88
|
+
| `resalePremiumBps` | 0..5,000 bps |
|
|
89
|
+
| `maxAsks` | 1..8 |
|
|
90
|
+
| `maxAskTokenExposure` | Raw launch-token units; at least ask count and minimum token harvest, at most uint128 max |
|
|
91
|
+
| `maxAcquiredInventory` | Raw launch-token units; at least minimum token harvest, at most uint128 max |
|
|
92
|
+
| `premiumDecaySeconds` | Any uint32 seconds; zero disables decay |
|
|
93
|
+
| `maxBidQuote` | Raw quote-principal ceiling for new/refreshed bids; positive and at most uint128 max |
|
|
94
|
+
| `referenceDeviation` | Tick spacings; nonnegative int24 |
|
|
95
|
+
|
|
96
|
+
For reference pool tick `R`, deviation `D` and spacing `S`, ask lower is at least
|
|
97
|
+
`R - D*S` and bid upper is at most `R + D*S`, with side-appropriate grid rounding.
|
|
98
|
+
The reference comes from the hook's truncated oracle, not an independent spot
|
|
99
|
+
price supplied by the caller.
|
|
100
|
+
|
|
101
|
+
The default helper **requires explicit `maxBidQuote` and `referenceDeviation`**;
|
|
102
|
+
neither has a guessed risk default. All other defaults are preserved: 50% share,
|
|
103
|
+
widths 5/5, gap 1, stale 86,400 seconds/displacement 5, premium 500 bps, 4 asks,
|
|
104
|
+
decay off. Token thresholds are raw market-budget ratios: harvest budget/100,000,
|
|
105
|
+
ask exposure budget/10, inventory budget. Too-small budgets producing zero harvest
|
|
106
|
+
and budgets above uint128 are rejected. WETH quote deploy/harvest thresholds remain
|
|
107
|
+
0.0005/0.005 ETH; USDG is 1/10 six-decimal units. Catalog symbols/addresses work;
|
|
108
|
+
explicit decimals must match. Other quotes require explicit `minQuoteDeploy` and
|
|
109
|
+
`minQuoteHarvest`; no unsupported asset's USD price or units are inferred.
|
|
110
|
+
|
|
111
|
+
### V2 fee funding and owner controls
|
|
112
|
+
|
|
113
|
+
V2 reserves the strategy share **on each swap in both pool currencies, after the
|
|
114
|
+
protocol treasury share**, rather than waiting for harvest. The remaining fees
|
|
115
|
+
follow the normal fee-hub distribution. HMM itself does not burn fees and never
|
|
116
|
+
touches the permanently locked launch positions.
|
|
117
|
+
|
|
118
|
+
The browser-safe lifecycle and root exports include complete
|
|
119
|
+
`hmmLiquidityManagerV2Abi`, `hmmFeeCollectorV2Abi`, `hmmFeeCollectorFactoryV2Abi`,
|
|
120
|
+
`hmmFixedHookV2Abi` and `hmmDynamicHookV2Abi`. Use ordinary viem contract calls;
|
|
121
|
+
the SDK adds no speculative transaction wrappers:
|
|
122
|
+
|
|
123
|
+
- Read `strategyOwner()` and `liquidityManager()` on the collector. Authority
|
|
124
|
+
follows the **current** fee owner from the canonical hub/fee-owner registry.
|
|
125
|
+
- Call collector `setStrategyShareBps(uint16)` for 0..10,000 bps. It changes future
|
|
126
|
+
swap reservations, not fees already reserved.
|
|
127
|
+
- Read manager `strategyConfig()` for the complete 15-field tuple, then call
|
|
128
|
+
`setStrategyConfig(HMMStrategyConfigV2)` to update every setting immediately.
|
|
129
|
+
This queues a book refresh for the next maintenance pass. Lowering intake caps
|
|
130
|
+
does not forcibly liquidate existing inventory; existing lots keep their stored
|
|
131
|
+
floor and age. New premium settings apply to newly acquired lots.
|
|
132
|
+
- Read `placementsPaused()` and call `setPlacementsPaused(bool)` on the manager.
|
|
133
|
+
Pausing queues auxiliary-liquidity withdrawal on maintenance and stops new
|
|
134
|
+
placements, not trading or fee collection. It does not withdraw locked launch LP.
|
|
135
|
+
|
|
136
|
+
These writes require the current fee-owner wallet and explicit transaction
|
|
137
|
+
authorization. Read-only planning never invokes them.
|
|
138
|
+
|
|
139
|
+
### Breaking migration from the earlier HMM SDK
|
|
140
|
+
|
|
141
|
+
Rebuild unstarted HMM plans with the new preset IDs/adapters/graphs, supply both
|
|
142
|
+
new guards, re-encode the 512-byte tail, and re-mine/re-prove the resulting plan.
|
|
143
|
+
Do not pad old 448-byte payloads, reuse an old graph/salt, or relabel old bytes.
|
|
144
|
+
The former `HmmFixedPoolV1` / `HmmDynamicPoolV1` enum members and old HMM metadata
|
|
145
|
+
have no compatibility aliases. Existing onchain HMM V1 profiles/markets were not
|
|
146
|
+
deregistered or upgraded by this SDK release; submitted legacy plans must not be
|
|
147
|
+
mutated into V2 plans. Use tooling matching their original contract release.
|
|
148
|
+
|
|
149
|
+
Independent Solidity ABI fixtures are regenerated with
|
|
150
|
+
`node scripts/generate-hmm-fixtures.mjs` (Foundry `cast abi-encode` / `calldata`).
|
|
151
|
+
To regenerate canonical V2 metadata/ABIs from preserved evidence without RPC or
|
|
152
|
+
onchain writes, use `node --experimental-transform-types
|
|
153
|
+
scripts/generate-hmm-presets.mjs release.json live.json`; both JSON files must be
|
|
154
|
+
the exact V2 release and matching successful admission/pinned-readback records.
|
|
76
155
|
|
|
77
156
|
## 0.8.1 release
|
|
78
157
|
|
package/examples/README.md
CHANGED
|
@@ -7,9 +7,11 @@ The default chain-4663 launch cases retain
|
|
|
7
7
|
the October8 mined fixed pool-bound V4 config6/V2 and canonical Abyss config1 deployment.
|
|
8
8
|
The SDK additionally knows the October11 zero-author-royalty Dynamic Fee Hook;
|
|
9
9
|
its registration does not change the fixed cases' selection or fee schedule.
|
|
10
|
-
HMM Fixed/Dynamic are additional
|
|
11
|
-
tail and
|
|
12
|
-
|
|
10
|
+
HMM Fixed/Dynamic V2 are additional admitted October17 presets; their required
|
|
11
|
+
512-byte typed launch tail and explicit bid/reference guards are demonstrated by
|
|
12
|
+
`hmm-launch-config.ts`. The generic HMM profile keys now select V2 only.
|
|
13
|
+
Existing fixed cases are intentionally unchanged. See the lifecycle guide for
|
|
14
|
+
the breaking migration, per-swap funding and fee-owner configuration/pause ABIs.
|
|
13
15
|
Historical October5 config5 evidence is not relabeled as these graphs. Discovery
|
|
14
16
|
is read-only; fixed launch examples default to an unsigned dry run. Only
|
|
15
17
|
`--broadcast` (or deliberate `--resume` continuation) authorizes real writes.
|
|
@@ -22,7 +24,7 @@ examples; their relative support imports use explicit `.ts` extensions for Node
|
|
|
22
24
|
| Script | Behavior |
|
|
23
25
|
| --- | --- |
|
|
24
26
|
| `quickstart.ts` | Reads the current mainnet orchestrator, checks its registry binding, and discovers admitted profiles. No wallet or writes. |
|
|
25
|
-
| `hmm-launch-config.ts` | Pure HMM fixed/dynamic config construction with
|
|
27
|
+
| `hmm-launch-config.ts` | Pure HMM V2 fixed/dynamic config construction with caller-chosen bid/reference guards and an automatically appended 512-byte launch tail; no RPC, signatures or writes. |
|
|
26
28
|
| `launch.ts` | Reviews/reconstructs an explicit saved plan and selected atomic/staged mode; optional offchain config6/V2 salt mining. Prints simulation, progress, and an admitted unsigned next transaction when evidence permits. |
|
|
27
29
|
| `generate-lifecycle-commitment-fixture.ts` | Frozen independent historical config4/Abyss ABI bytes/hash/identity vector. Its pre-cutover allocations are not an executable 0.7.1 plan. |
|
|
28
30
|
| `launch-lifecycle-smoke.ts` | Actual SDK launch/recovery/custody/fee operations, only on an explicitly authorized owned disposable loopback graph. |
|
|
@@ -10,7 +10,10 @@ const tokenBudget = 1000000n * 10n ** 18n;
|
|
|
10
10
|
for (const key of [KnownLifecycleProfile.V4HmmFixedPool, KnownLifecycleProfile.V4HmmDynamicPool]) {
|
|
11
11
|
const preset = getKnownLifecycleProfile({ ...identity, key })!;
|
|
12
12
|
const envelope = preset.profile.envelope!;
|
|
13
|
-
|
|
13
|
+
// Illustrative caller-chosen guards: at most 100 six-decimal USDG
|
|
14
|
+
// of bid principal, and no ask below/bid above the rounded oracle reference.
|
|
15
|
+
const hmmLaunchConfig = defaultHmmLaunchConfig({ tokenBudget, quoteAsset: "USDG", quoteDecimals: 6,
|
|
16
|
+
maxBidQuote: 100n * 10n ** 6n, referenceDeviation: 0 });
|
|
14
17
|
// Optional explicit choices: share 2500/5000/10000 bps; decay off/259200 (72h).
|
|
15
18
|
const config = encodePoolBoundV4LifecycleMarketConfig({
|
|
16
19
|
version: 6, lpFeePips: 0, tickSpacing: 60, sqrtPriceX96: 1n << 96n,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@black-market/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.0",
|
|
4
4
|
"description": "TypeScript SDK for Abyss token launches, swaps, and lending.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"lint": "tsc -p tsconfig.json --noEmit",
|
|
44
44
|
"prepublishOnly": "pnpm build",
|
|
45
45
|
"test": "pnpm test:unit",
|
|
46
|
-
"test:unit": "pnpm build && node --test test/*.test.mjs",
|
|
46
|
+
"test:unit": "pnpm build && node --import ./test/register-typescript.mjs --test test/*.test.mjs",
|
|
47
47
|
"test:api": "pnpm build && node --test test/integration/launch-api.read.test.mjs",
|
|
48
48
|
"test:api:write": "pnpm build && node --test test/integration/launch-api.sessions.test.mjs",
|
|
49
49
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
package/src/abyss.ts
CHANGED
|
@@ -18,6 +18,7 @@ export type AbyssPoolKey = {
|
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
export const ABYSS_FEE_TIERS = [
|
|
21
|
+
{ feePips: 100, tickSpacing: 1, label: "0.01%" },
|
|
21
22
|
{ feePips: 500, tickSpacing: 10, label: "0.05%" },
|
|
22
23
|
{ feePips: 3_000, tickSpacing: 60, label: "0.30%" },
|
|
23
24
|
{ feePips: 10_000, tickSpacing: 200, label: "1%" },
|
package/src/lifecycle/abi.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
profileRegistrationV1Components, profileTopologyV1Components, launchEnvelopeV2Components, sourceTermsV3Components,
|
|
6
6
|
} from "./schema.js";
|
|
7
7
|
import { poolBoundHookParametersV1Components, poolBoundHookParametersV2Components, v4LifecycleMarketComponents } from "./markets.js";
|
|
8
|
+
export { hmmLiquidityManagerV2Abi, hmmFeeCollectorV2Abi, hmmFeeCollectorFactoryV2Abi, hmmFixedHookV2Abi, hmmDynamicHookV2Abi } from "./hmm-abi.js";
|
|
8
9
|
|
|
9
10
|
const planInput = { name: "plan", type: "tuple", components: launchPlanV1Components } as const;
|
|
10
11
|
export const launchLifecycleAbi = [
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { Hex } from "viem";
|
|
2
|
+
import type { LaunchEnvelopeV2, AdapterRegistrationV1, ProfileRegistrationV1 } from "../schema.js";
|
|
3
|
+
|
|
4
|
+
// Preserved hooks/hmm-dynamic-v2; admission 0xb9008b2db27f8469aaec0b3daf115acfcdd4e6045052378944479532b1463905.
|
|
5
|
+
// Generated by scripts/generate-hmm-presets.mjs; pinned readback block 91874655.
|
|
6
|
+
export const hmmDynamicEnvelope = Object.freeze({
|
|
7
|
+
artifactDigest: "0xa34e62ffbe33e4665a8f35521ab6168830d1b49e69d64a7078eb2bc910c22fc2",
|
|
8
|
+
reviewManifestDigest: "0x43581c257b85c1de39f22cc4133a0df8609ebab69a1437bd79a0edd2098da31c",
|
|
9
|
+
configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d",
|
|
10
|
+
termsDigest: "0x1f938732548db1e9e447926e14cfec16a0f0eebb542ee295529a1c19535a59ab",
|
|
11
|
+
topology: 2,
|
|
12
|
+
configVersion: 6,
|
|
13
|
+
economicVersion: 3,
|
|
14
|
+
capabilities: 123n,
|
|
15
|
+
flags: 0n,
|
|
16
|
+
callbackFlags: 6908,
|
|
17
|
+
callbackMask: 16383,
|
|
18
|
+
protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1",
|
|
19
|
+
protocolFeeDenominator: 6,
|
|
20
|
+
beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783",
|
|
21
|
+
maximumDeveloperFeeBps: 0,
|
|
22
|
+
bounds: Object.freeze({
|
|
23
|
+
minimumTickSpacing: 1,
|
|
24
|
+
maximumTickSpacing: 32767,
|
|
25
|
+
maximumPositions: 32,
|
|
26
|
+
maximumOracleCardinality: 4096,
|
|
27
|
+
feeModeFlags: 3,
|
|
28
|
+
}),
|
|
29
|
+
graph: Object.freeze({
|
|
30
|
+
manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
|
|
31
|
+
hookRoot: "0x0000000000000000000000000000000000000000",
|
|
32
|
+
oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7",
|
|
33
|
+
locker: "0x571880B289f73E265DA25e3D07289Be5cbB55475",
|
|
34
|
+
collectorFactory: "0xB0B3bE89D096e427FBE48041ab57E6AA69826eF7",
|
|
35
|
+
collectorDeployer: "0x8Ca57C7f4A3982d9574d93fa5cBE0b2f6A69C94A",
|
|
36
|
+
hookDeployer: "0xeB9b8C3646Da8fEDea4f0D866D4C74f8eB1B8b71",
|
|
37
|
+
coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b",
|
|
38
|
+
managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",
|
|
39
|
+
hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
40
|
+
oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98",
|
|
41
|
+
lockerCodeHash: "0x970b70cbcc27f7690072a5cb025687d2060e0fc85bb003208eedd9b21b5a0b0e",
|
|
42
|
+
collectorFactoryCodeHash: "0x5c87d0a517f3520bdfe84ba01ca7621dd24236b0973a6f11893bdb591ff74d5c",
|
|
43
|
+
collectorDeployerCodeHash: "0x56f0c8a282d05ef4e4d42c727370aaf02153d26a3efe10d5402fca8d667d9331",
|
|
44
|
+
hookDeployerCodeHash: "0x80f16e4090509d198117ea5bacb1124c4fb847c7a0535ce6c52cc19ad67e634b",
|
|
45
|
+
hookCreationCodeHash: "0xa34e62ffbe33e4665a8f35521ab6168830d1b49e69d64a7078eb2bc910c22fc2",
|
|
46
|
+
codeChunk0: "0xcd36ed8A655a804324FdE228e62F7521dB990c02",
|
|
47
|
+
codeChunk0Hash: "0xd73162845522c086184d0ae6cb572f704a1c3f60483311b09683123fb7e4d39a",
|
|
48
|
+
codeChunk1: "0x8996e0875E5DaB61Ef3B5438d05e69542aB5fba5",
|
|
49
|
+
codeChunk1Hash: "0x3594a628127a8446965a867a682d8a7232372ca0ff57adfba39872093a41fd88",
|
|
50
|
+
sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000",
|
|
51
|
+
}),
|
|
52
|
+
}) satisfies LaunchEnvelopeV2;
|
|
53
|
+
export const hmmDynamicAdapter = Object.freeze({
|
|
54
|
+
implementation: "0x886ea067b204257F422F14aF15fF58925370D8d3",
|
|
55
|
+
codeHash: "0x4ed9f1ff8516f4acc04b4c6f1601bdd03413ed2c1a9defce9f16631edb40c983",
|
|
56
|
+
capabilities: 123n,
|
|
57
|
+
configVersion: 6,
|
|
58
|
+
enabled: true,
|
|
59
|
+
}) satisfies AdapterRegistrationV1;
|
|
60
|
+
export const hmmDynamicRegistration = Object.freeze({
|
|
61
|
+
adapterId: "0x41651f0ab87e1ac3ce95346e06cab2e9fd11fe5aed569083d5d1253d14b9d6ff",
|
|
62
|
+
configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045",
|
|
63
|
+
dependencyDigest: "0x949ec6492b3f1bd0cff85a9991fe9b48492e57d79dd04c729ad2fe2168b1bdc1",
|
|
64
|
+
venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
|
|
65
|
+
factory: "0x0000000000000000000000000000000000000000",
|
|
66
|
+
hook: "0x0000000000000000000000000000000000000000",
|
|
67
|
+
capabilities: 123n,
|
|
68
|
+
enabled: true,
|
|
69
|
+
}) satisfies ProfileRegistrationV1;
|
|
70
|
+
// 28392 bytes; keccak256 0xa34e62ffbe33e4665a8f35521ab6168830d1b49e69d64a7078eb2bc910c22fc2; append the 640-byte PoolBoundHookParametersV2 constructor, not the launch tail.
|
|
71
|
+
export const hmmDynamicCreationCode: Hex = "0x61028060405234610b5257610280616ee88038038091610021826102806110f8565b6102803912610b525760405161028081016001600160401b03811182821017610b695760405261005261028061111b565b8082526100606102a061111b565b602083018190526100726102c061111b565b60408401819052916100856102e061111b565b606085018190529061009861030061111b565b60808601819052916100ab61032061111b565b60a08701819052926100be61034061111b565b60c088018190526100d061036061112f565b908160e08a01526101006102800151928360020b8403610b52576101008a018490526103a051946001600160a01b0386168603610b52576101208b018690526101a09861016098610140988d6101276103c061112f565b9a8b9101528d61013a8c6102800161112f565b9b018b90528d61018061014e61040061113f565b9101528d61015f8d61028001611150565b9c018c90528d6101c0610173610440611150565b9101528d6101e061018561046061111b565b910152610480518015158103610b52576102008f01526104a0516102208f01526104c0516102408f01528d6102606101be6104e061113f565b9101526001600160a01b0316803b159c9095908d156110e5575b8d156110d2575b508c156110bf575b8c156110ac575b8c15611099575b8c15611087575b8c15611071575b508b1561105e575b508a15611048575b8a15611035575b8a15611022575b50891561100f575b508815610ffc575b8815610fe9575b50508615610fda575b508515610fcb575b8515610fba575b508415610fa2575b8415610f77575b508315610f65575b8315610f52575b50508115610f44575b508015610f0b575b8015610ee3575b8015610ecc575b8015610eb0575b8015610e91575b8015610e84575b8015610e71575b8015610e5c575b610ad457602081810151608083015160405163797a759360e11b81526001600160a01b0392831693929091169181600481865afa908115610b5e575f91610e22575b5060608401516001600160a01b0391821691161480159290610da9575b8215610d2d575b8215610cad575b508115610c31575b8115610bae575b50610ad457611afc613fff301603610b9f5760018060a01b0381511660805260018060a01b0360208201511660a05260018060a01b0360408201511660c05260018060a01b0360608201511660e05260018060a01b036080820151166101005260018060a01b0360a08201511661012052604051602081019060018060a01b03835116825260018060a01b03602084015116604082015260018060a01b03604084015116606082015260018060a01b03606084015116608082015260018060a01b0360808401511660a082015260018060a01b0360a08401511660c082015260018060a01b0360c08401511660e082015262ffffff60e08401511661010082015261010083015160020b61012082015260018060a01b036101208401511661014082015262ffffff6101408401511661016082015262ffffff6101608401511661018082015263ffffffff610180840151166101a082015260ff6101a0840151166101c082015260ff6101c0840151166101e082015260018060a01b036101e084015116610200820152610200830151151561022082015261022083015161024082015261024083015161026082015263ffffffff6102608401511661028082015261028081526104ff6102a0826110f8565b5190206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052918301519083015160181b66ffffffff0000001662ffffff91909116176101e05260c082015160a08301518216911681811091908215610b985780925b15610b9157505b8161020052806102205262ffffff60e08401511661010084015160020b916040519360a0850185811060018060401b03821117610b695760409081526001600160a01b039182168652918116602086019081529185019283526060850193845230608080870191825260a08088206101405296515f80549185166001600160a01b03199283161790559351600180549651975160b81b62ffffff60b81b1662ffffff60a01b9890991b979097169084166001600160d01b03199096169590951794909417959095179093559251600280549184169190941617835583015160c08401516101a085015160ff811694928416939190911691841015610b7d5762ffffff6101408601511660ff6101c0870151169060018060a01b036101e088015116936102008801511515956102208901519760405190610120820182811060018060401b03821117610b695760409081525f83526020830184905282810185905260608301919091526080820185905260a080830187905260c08084018a905260e084018b90526101009093018b9052600380546001600160a01b0319908116909155600480549091166001600160a01b03958616178155600580546001600160c81b0319169686169690961798821b60ff60a01b9081169990991760a89790971b62ffffff60a81b169690961796831b60ff60c01b1696909617909355600680546001600160a81b03191697831697909717971515851b90951696909617909455600795909555858201519086015190841690841611610240526102208501519051825163deee413560e01b815294850191909152909183916024918391165afa8015610b5e575f915f91610b0d575b5062ffffff82168015908115610b00575b508015610af2575b8015610ae3575b610ad4576016805464ffffffffff60c81b191660c89390931b62ffffff60c81b169290921760e09190911b61ffff60e01b1617905560c001516001600160a01b031661026052604051615d89908161115f823960805181818161035801528181610612015281816108e401528181610a9901528181610b5a01528181610c7901528181610f6c01528181611060015281816118b001528181611a6901528181611c9b015281816120220152818161215601528181612b830152818161381e015281816138a801528181614daf01528181614e5601526156ff015260a051818181611f4101528181612a7d015281816137d901528181613a7d0152614b83015260c051818181610de90152613edf015260e05181818161074801528181612e1c015281816131c30152614bca0152610100518181816117d80152818161208e0152818161240101528181612b6101528181614135015281816141c90152818161420101528181614517015281816146730152818161479b01526148790152610120518181816102bf01528181610b230152818161148e0152818161271201528181612dd50152614ad80152610140518181816103360152818161052001528181610f11015281816110b60152818161188f01528181611ecb01528181612001015281816121c401528181612a1401528181612b3f01528181613ac9015281816140e8015281816144ef0152818161464b01528181614773015281816148510152614d8d015261016051816120dc01526101805181610cdd01526101a051818181611ba00152611f0901526101c05181818161179e015261342d01526101e0518181816103930152818161173d01528181611c1501526121fe015261020051818181612bb10152614278015261022051818181612c93015281816136ff01526142a00152610240518181816109c801528181611de501526155f401526102605181610a620152f35b63c52a9bd360e01b5f5260045ffd5b5061100061ffff82161161080e565b50600261ffff821610610807565b620d89e89150115f6107ff565b9150506040813d604011610b56575b81610b29604093836110f8565b81010312610b52576020610b3c8261112f565b9101519061ffff82168203610b5257905f6107ee565b5f80fd5b3d9150610b1c565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b905061057d565b8192610576565b632a96f9e160e21b5f5260045ffd5b60405163dc4c90d360e01b81529150602090829060049082905afa908115610b5e575f91610bef575b5081516001600160a01b03918216911614155f61032c565b90506020813d602011610c29575b81610c0a602093836110f8565b81010312610b5257516001600160a01b0381168103610b52575f610bd7565b3d9150610bfd565b604051630b775e8f60e11b8152909150602081600481855afa908115610b5e575f91610c73575b5060208301516001600160a01b039182169116141590610325565b90506020813d602011610ca5575b81610c8e602093836110f8565b81010312610b5257610c9f9061111b565b5f610c58565b3d9150610c81565b604051636bdcb6a760e11b8152919250602090829060049082905afa908115610b5e575f91610cf3575b5060808301516001600160a01b0391821691161415905f61031d565b90506020813d602011610d25575b81610d0e602093836110f8565b81010312610b5257610d1f9061111b565b5f610cd7565b3d9150610d01565b604051630c7f7fb960e41b8152909250602081600481865afa908115610b5e575f91610d6f575b5060408401516001600160a01b039182169116141591610316565b90506020813d602011610da1575b81610d8a602093836110f8565b81010312610b5257610d9b9061111b565b5f610d54565b3d9150610d7d565b60405163dc4c90d360e01b8152909250602081600481865afa908115610b5e575f91610de8575b5083516001600160a01b03918216911614159161030f565b90506020813d602011610e1a575b81610e03602093836110f8565b81010312610b5257610e149061111b565b5f610dd0565b3d9150610df6565b90506020813d602011610e54575b81610e3d602093836110f8565b81010312610b5257610e4e9061111b565b5f6102f2565b3d9150610e30565b50602063ffffffff61026083015116116102b0565b5063ffffffff61026082015116156102a9565b50610240810151156102a2565b506101e081015160808201516001600160a01b0390811691161461029b565b506101e081015181516001600160a01b03908116911614610294565b506101e08101516001600160a01b0316301461028d565b5060ff6101c0820151161515801561028657506101e08101516001600160a01b031615610286565b5060ff6101c0820151168015159081610f25575b5061027f565b6004811091508115610f39575b505f610f1f565b600a9150115f610f32565b6001915060ff16115f610277565b62ffffff90811691161191505f8061026e565b620f424062ffffff8216119350610267565b73fffd8963efd1fc6a506488495d951d5263988d266001600160a01b0391909116101593505f61025f565b6401000276a36001600160a01b038216109450610258565b617fff91955060020b13935f610250565b945060018560020b1294610249565b62ffffff16151595505f610241565b6001600160a01b03161496505f80610238565b6001600160a01b03811630149850610231565b6001600160a01b0316301498505f610229565b6001600160a01b0316301499505f610221565b6001600160a01b03811684149a5061021a565b6001600160a01b03808216908316149a50610213565b6001600160a01b031630149a505f61020b565b6001600160a01b038083169116149b505f610203565b6001600160a01b038216159c506101fc565b6001600160a01b0381163b159c506101f5565b6001600160a01b0385163b159c506101ee565b6001600160a01b0384163b159c506101e7565b6001600160a01b03163b159c505f6101df565b6001600160a01b0384163b159d506101d8565b601f909101601f19168101906001600160401b03821190821017610b6957604052565b51906001600160a01b0382168203610b5257565b519062ffffff82168203610b5257565b519063ffffffff82168203610b5257565b519060ff82168203610b525756fe60806040526004361015610011575f80fd5b5f5f3560e01c80630268e29314613a4d5780630581555f14613a335780630885f7321461390a57806321d0ee7014613892578063259982e5146138085780632b20e397146137c4578063338274381461379a578063354a85631461377b578063359b4f301461375d5780633e451d6a1461373657806342ea83e014612a3757806347f8496c146129fd57806350fb3a3a146129335780635341d8d7146129145780635524d548146128e6578063575e24b4146120ff5780635955d09a146120c457806360f89f2e14611fbc578063654f631c14611f855780636fe7e6eb14611c5a578063747a68cd14611c395780637dbeb94e14611bf9578063847211a614611bcf5780638bc801c114611b8a57806391dd734614611a36578063921b0bed146118075780639759164a146117c25780639e5fe06214611781578063a3f4bac714611764578063a869111414611720578063aae49d7014611702578063ac4e4054146116e5578063ac5555aa146116b3578063b47b2fb114611004578063b6a8b0fa14610f53578063c5c51dca14610e6f578063c5fbb29814610e36578063c67046af14610e18578063c7f7fb9014610dd3578063ca266dfe14610d00578063ce1b8e4f14610cc5578063d2be662514610ca8578063dc4c90d314610c63578063dd71cea814610be7578063e16ccbb014610969578063e1b4af69146108cc578063e2e65ec1146108ab578063e3daf45614610801578063f11457c714610777578063f2f4eb2614610732578063f399150c14610485578063f9bc70e7146102ee578063fc0c546a146102a95763fd5b6d5b1461026c575f80fd5b346102a65760403660031901126102a6576020600261029c61028c613b47565b6102976004356140e6565b61426a565b0154604051908152f35b80fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760603660031901126102a6573068929eee149b4bd2126854146104785760ff60125460081c161561046a57610327614a3e565b61032f613d45565b5062ffffff7f0000000000000000000000000000000000000000000000000000000000000000917f000000000000000000000000000000000000000000000000000000000000000090610382848361499f565b50949091941661045b57506103b8847f000000000000000000000000000000000000000000000000000000000000000093614c8d565b90600435801515918282036102a657602061044e888863ffffffff8962ffffff8a8a6005549160ff8360a01c1696604051986103f38a613cbc565b89526001600160a01b03168a8901526001600160801b031660408801526024356060880152608087015260a81c1660a085015262ffffff811660c085015260181c1660e083015261044381613b29565b610100820152614d1a565b62ffffff60405191168152f35b63c52a9bd360e01b8252600482fd5b62820f3560e61b8152600490fd5b63ab143c0690526004601cfd5b50346102a65760a03660031901126102a6573068929eee149b4bd212685414610478573068929eee149b4bd212685560ff601554166107235780816104c8614092565b6003546001600160a01b03163303610715576008541580159061070a575b610559575b60408093505182815281602082015233907f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b6857f000000000000000000000000000000000000000000000000000000000000000092a33868929eee149b4bd212685582519182526020820152f35b505060405190602082016004356001600160a01b038116908190036106f55781526024356001600160a01b038116908190036106f557604084015260443562ffffff81168091036106f55760608401526064358060020b8091036106f55760808401526084356001600160a01b038116908190036106f55792829161060d9460a083015260a082526105ec60c083613d22565b81519020601455604051809481926348c8949160e01b835260048301613c3b565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19182156106fd57819261067c575b5060145461066d57506106688160208060409451830101910161407c565b6104eb565b63f7a632f560e01b8152600490fd5b908092503d8082843e61068f8184613d22565b8201916020818403126106f9578051906001600160401b0382116106f5570182601f820112156106f95780516106c481613fbd565b936106d26040519586613d22565b818552602082840101116106f5578060208093018386015e83010152905f61064a565b8280fd5b5080fd5b50604051903d90823e3d90fd5b50600c5415156104e6565b6282b42960e81b8352600483fd5b63558a1e0360e11b8152600490fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760203660031901126102a6576107946004356140e6565b61010060165461ffff604051918181168352818160101c166020840152818160201c1660408401528060301c60020b606084015260018060401b038160481c16608084015260018060401b038160881c1660a08401528060c81c60020b60c084015260e01c1660e0820152f35b50346102a657806003193601126102a6576003546040516371ed7a2b60e11b815290602090829060049082906001600160a01b03165afa9081156108a057829161085a575b6040516001600160a01b0383168152602090f35b90506020813d602011610898575b8161087560209383613d22565b810103126106f957516001600160a01b03811681036106f957602091505f610846565b3d9150610868565b6040513d84823e3d90fd5b50346102a65760403660031901126102a6576020600161029c61028c613b47565b50346102a6576108db36613c65565b509294935050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303905061095b5760ff60155416610723573068929eee149b4bd212685414610478576109418261093c816140d6565b614765565b610949615550565b60405163e1b4af6960e01b8152602090f35b6282b42960e81b8152600490fd5b50346102a657806003193601126102a6573068929eee149b4bd212685414610478573068929eee149b4bd212685560ff601554166107235762010016546001600160a01b0381163303610bd95760165461ffff8160101c1615610bca577f000000000000000000000000000000000000000000000000000000000000000015610bbf576109fb9060301c60020b6153bc565b62010017549162010018549084620100175584620100185583610b0c575b81610a45575b50606093503868929eee149b4bd2126855604051928352602083015260020b6040820152f35b6040516304ade6db60e11b81529060209082908190610a949086907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906004850161405a565b0381887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610b01576060955015610a1f57610af39060203d602011610afa575b610aeb8183613d22565b810190614042565b505f610a1f565b503d610ae1565b6040513d87823e3d90fd5b6040516304ade6db60e11b815260208180610b55887f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876004850161405a565b0381897f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610bb457610b95575b50610a19565b610bad9060203d602011610afa57610aeb8183613d22565b505f610b8f565b6040513d88823e3d90fd5b60301c60020b6109fb565b6329d9e10560e01b8352600483fd5b6282b42960e81b8252600482fd5b50346102a65760403660031901126102a65760243590610c086004356140e6565b61ffff821015610c4f57608082601701546040519063ffffffff811682528060201c60060b602083015260018060a01b038160581c16604083015260f81c15156060820152f35b634e487b7160e01b81526032600452602490fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a657806003193601126102a65760206040516110008152f35b50346102a657806003193601126102a65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b50346102a65760203660031901126102a6578060a0916080604051610d2481613d07565b8281528260208201528260408201528260608201520152610d466004356140e6565b60405190610d5382613d07565b600180841b039054169081815260015462ffffff60208301600180871b038316815260408401908284881c168252606085019360b81c60020b84526080600180891b03600254169501948552604051958652600180881b039051166020860152511660408401525160020b6060830152600180841b039051166080820152f35b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a657806003193601126102a6575060405160018152602090f35b50346102a65760203660031901126102a657610e536004356140e6565b60165460405160889190911c6001600160401b03168152602090f35b50346102a657806003193601126102a65760125460ff168015610f4b5760ff60015b16610eb4610e9e82613ff3565b91610eac6040519384613d22565b808352613ff3565b602082019290601f1901368437610f08575b90604051928392602084019060208552518091526040840192915b818110610eef575050500390f35b8251845285945060209384019390920191600101610ee1565b805115610f37577f00000000000000000000000000000000000000000000000000000000000000008252610ec6565b634e487b7160e01b83526032600452602483fd5b60ff82610e91565b50346102a657610f6236613c65565b50909350909190507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610ff6573068929eee149b4bd212685414610fe95760ff60155416610fda57610fc89350610fc3816140d6565b614843565b604051635b54587d60e11b8152602090f35b63558a1e0360e11b8452600484fd5b63ab143c0684526004601cfd5b6282b42960e81b8452600484fd5b50346102a6576101603660031901126102a65761101f613b5d565b60a03660231901126106f95760603660c31901126106f9576101243591610144356001600160401b0381116106f95761105c903690600401613b9d565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169133839003610bd9573068929eee149b4bd2126854146116a65760ff60155416611697576110b46140c6565b7f00000000000000000000000000000000000000000000000000000000000000006011549163ffffffff8316908115908115611680575b5061166e575f190163ffffffff811161165a5762ffffff16918360105563ffffffff191660115561111a61463d565b611122614350565b936001600160a01b038086169490611138613e17565b16850361164c576044356001600160a01b03811681036106f957945b8415158097819861163c575b506115d0575b508095806115c1575b6111ae575b60408661118d898060801b15159060801c151516615510565b815163b47b2fb160e01b81526001600160801b03909116600f0b6020820152f35b9394506001600160a01b038086169492939192916111ea916111ce613e17565b1686036115b5576111e58860801d5b600f0b61441a565b614448565b9485156111745760ff60055460c01c163068929eee149b4bd2126854146115a8573068929eee149b4bd21268556112208661426a565b91611231835460028501549061493a565b8361123b82614925565b8a11611597575b5050508061155c575081925b611258848861493a565b600354604051632637166b60e11b815290602090829060049082906001600160a01b03165afa908115610b01578591611506575b506112b46127106112a76112dc9461ffff6003951690614965565b048061148c575b8a61493a565b936112c0858254614978565b8155600181016112d1888254614978565b905501928354614978565b8255604051627eeac760e11b815291602083806112fd8a3060048401614985565b0381855afa928315611434578493611458575b50813b1561145457604051630ab714fb60e11b81528481806113378c8c306004850161405a565b038183875af18015610b015790859161143f575b505060206040518093627eeac760e11b8252818061136d8c3060048401614985565b03915afa9182156114345784926113fc575b50878383109384156113ef575b505082156113e4575b50506113d5575091604094915f516020615d295f395f51905f528661118d958151908882526020820152a33868929eee149b4bd2126855925f8080611174565b63104eed1d60e31b8152600490fd5b541190505f80611395565b830314159250875f61138c565b9091506020813d60201161142c575b8161141860209383613d22565b810103126114285751905f61137f565b5f80fd5b3d915061140b565b6040513d86823e3d90fd5b8161144991613d22565b61145457835f61134b565b8380fd5b9092506020813d602011611484575b8161147460209383613d22565b810103126114285751915f611310565b3d9150611467565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168a036114ee576114ca816201001754614978565b62010017555b89895f516020615d695f395f51905f526020604051858152a36112ae565b6114fc816201001854614978565b62010018556114d0565b90506020813d602011611554575b8161152160209383613d22565b81010312611550576112b46127106112a76112dc9461ffff611544600396613eb1565b9550509450505061128c565b8480fd5b3d9150611514565b6115669087614947565b607d810290808204607d149015171561158357606490049261124e565b634e487b7160e01b83526011600452602483fd5b6115a092614e45565b5f8083611242565b63ab143c0683526004601cfd5b6111e588600f0b6111dd565b506115cb85614395565b61116f565b60e435906115e1866111e58461441a565b806115ee575b5050611166565b611612916001600160a01b03611602613e17565b1603611632578960801d92613fd8565b90600f0b03611623575f80806115e7565b63161b48a960e21b8152600490fd5b89600f0b92613fd8565b6116469150614395565b5f611160565b611654613e17565b94611154565b634e487b7160e01b84526011600452602484fd5b6001620787ab60e51b03198452600484fd5b905061168f601054918461535d565b14155f6110eb565b63558a1e0360e11b8252600482fd5b63ab143c0682526004601cfd5b50346102a65760203660031901126102a6576116d06004356140e6565b602060ff60125460081c166040519015158152f35b50346102a657806003193601126102a6576020604051611afc8152f35b50346102a657806003193601126102a6576020604051620f42408152f35b50346102a657806003193601126102a657602060405163ffffffff7f000000000000000000000000000000000000000000000000000000000000000060181c168152f35b50346102a657806003193601126102a6576020604051613fff8152f35b50346102a657806003193601126102a657602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760403660031901126102a6576024356001600160401b0381116106f957366023820112156106f9576004810135906001600160401b0382116106f5573660248360051b830101116106f5576118636004356140e6565b6016549261ffff8460101c16908115611a27574263ffffffff169461ffff81169060301c60020b6118d47f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614c8d565b926118de87613ff3565b976118ec604051998a613d22565b8789526118f888613ff3565b60208a019790601f190136893761190e89613ff3565b9761191c604051998a613d22565b8989526119288a613ff3565b60208a019190601f1901368337845b8b81101561199e5760248160051b8501013563ffffffff8116810361199a57908b61198e8f8390818f8f8f918f9161197f938f9360019c61197795615207565b92909661400a565b90878060a01b0316905261400a565b9060060b905201611937565b8680fd5b8a8d84888560405194859460408601906040875251809152606086019290845b818110611a0b575050506020908583038287015251918281520192915b8181106119e9575050500390f35b82516001600160a01b03168452859450602093840193909201916001016119db565b825160060b8552889750602094850194909201916001016119be565b6329d9e10560e01b8152600490fd5b50346102a65760203660031901126102a6576004356001600160401b0381116106f957611a67903690600401613b9d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610715576014548015908115611b46575b50611b375782601455810160a0828203126106f557611ac291613d98565b90611acf60a083206140e6565b60ff60125460081c161561046a57611b3382611b0a611af660018060a01b03835116614c01565b6020909201516001600160a01b0316614c01565b604051916020830152604082015260408152611b27606082613d22565b60405191829182613c3b565b0390f35b63f7a632f560e01b8352600483fd5b9050611b5182613fbd565b611b5e6040519182613d22565b82815260208101903684860111611b865783858337856020858301015251902014155f611aa4565b8580fd5b50346102a657806003193601126102a6576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b50346102a65760203660031901126102a657611bec6004356140e6565b6020601354604051908152f35b50346102a657806003193601126102a657602060405162ffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b50346102a65760203660031901126102a6576020600361029c610297613b5d565b50346102a6576101003660031901126102a657611c75613b5d565b9060a03660231901126102a657611c8a613b73565b9160e435928360020b84036106f5577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163303610715573068929eee149b4bd2126854146115a857604051611ce681613d07565b6024356001600160a01b03811681036115505781526044356001600160a01b038116810361155057602082015260643562ffffff811681036115505760408201526084358060020b810361155057606082015260a4356001600160a01b0381168103611550578160a0916080611d5e940152206140e6565b6012549160ff831615928315611f77575b508215611f3f575b508115611f07575b5061046a57602091604051611d9381613cec565b4263ffffffff908116825284820184815260408301859052600160608401529151915166ffffffffffffff16851b911617605883901b600160581b600160f81b031617600160f81b17601755601654907f000000000000000000000000000000000000000000000000000000000000000015611f0157611e12906153bc565b905b60309190911b62ffffff60301b1662010000600160c81b0319909116174360481b600160481b600160881b03168181174260881b600160881b600160c81b0316908117640100010000908117601681905593179290919060029060e01c61ffff16808211611ef9575b5061ffff861b90861b169261ffff861b191617171760165561010061ff00196012541617601255604051907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab27f00000000000000000000000000000000000000000000000000000000000000009180a2636fe7e6eb60e01b8152f35b90505f611e7d565b90611e14565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141590505f611d7f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141591505f611d77565b60081c60ff1692505f611d6f565b50346102a65760203660031901126102a657604061ffff611fa7600435613ec0565b62ffffff849392935193168352166020820152f35b50346102a657366003190160e081126106f95760a0136102a65760a4356001600160a01b038116908190036106f957611ff3613b73565b90611ffc614092565b6120467f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061499f565b50506003546001600160a01b031690921480159391925061208c575b50811561207a575b5061046a57612077614a3e565b80f35b6001600160a01b03161590505f61206a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169116141591505f612062565b50346102a657806003193601126102a65760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b5034611428576101403660031901126114285761211a613b5d565b60a03660231901126114285760603660c319011261142857610124356001600160401b03811161142857612152903690600401613b9d565b50507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0381169290338490036128d8573068929eee149b4bd2126854146128285760ff601554166128c95762ffffff906121b16140c6565b6121b9614242565b6121c1613d45565b507f0000000000000000000000000000000000000000000000000000000000000000906121ee828261499f565b5094909194166128ba57612223837f000000000000000000000000000000000000000000000000000000000000000093614c8d565b9060e4359160c4359384151594858103611428575063ffffffff6005549162ffffff60ff8460a01c16936040519a61225a8c613cbc565b8a8c526001600160a01b031660208c01526001600160801b0390951660408b0190815260608b0188905260808b0189905260a89590951c1660a08a015262ffffff811660c08a015260181c1660e08801526122b481613b29565b610100870152516011546001600160801b03909116979063ffffffff166128ab576122ea906122e4875197614d1a565b9661535d565b60105562ffffff8516966001880163ffffffff81116128035763ffffffff1663ffffffff19601154161760115560018060401b0360165460481c16430361289b575b5050612336614350565b935f9615158061288c575b612876575b506040516364b3357d60e11b8152916024356001600160a01b038116908190036114285760048401526044356001600160a01b0381169081900361142857602484015260643562ffffff81168091036114285760448401526084358060020b80910361142857606484015260a4356001600160a01b0381169081900361142857608484015260a483015260c4820152610104356001600160a01b038116908190036114285760e48201526101048101859052602081610124817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156126d1575f90612842575b6124619150612445613ea2565b1561283b57805b612454613ea2565b1561283557505f906144e1565b83612488575b60608484604051916315d7892d60e21b835260801b60208301526040820152f35b60ff60055460c01c16913068929eee149b4bd212685414612828573068929eee149b4bd21268556001600160a01b038116926124c38461426a565b916124d4835460028501549061493a565b836124de82614925565b8911612817575b505050806127dc57505f955b60046124fd888861493a565b600354604051632637166b60e11b81529260209184919082906001600160a01b03165afa9182156126d1575f9261278a575b5061255761271061254a60039361ffff612574961690614965565b0480612710575b8961493a565b93612563858254614978565b8155600181016112d18b8254614978565b8255604051627eeac760e11b81529160208380612595883060048401614985565b0381855afa9283156126d1575f936126dc575b50813b1561142857604051630ab714fb60e11b81525f81806125cf8b8a306004850161405a565b038183875af180156126d1576126bc575b5060206040518093627eeac760e11b825281806126018a3060048401614985565b03915afa918215610bb4578692612688575b508683831093841561267b575b50508215612670575b5050612661575f516020615d295f395f51905f5260406060968151908782526020820152a33868929eee149b4bd21268555f80612467565b63104eed1d60e31b8352600483fd5b541190505f80612629565b830314159250865f612620565b9091506020813d6020116126b4575b816126a460209383613d22565b810103126114285751905f612613565b3d9150612697565b6126c99196505f90613d22565b5f945f6125e0565b6040513d5f823e3d90fd5b9092506020813d602011612708575b816126f860209383613d22565b810103126114285751915f6125a8565b3d91506126eb565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031688036127725761274e816201001754614978565b62010017555b87875f516020615d695f395f51905f526020604051858152a3612551565b612780816201001854614978565b6201001855612754565b91506020823d6020116127d4575b816127a560209383613d22565b810103126114285761255761271061254a60039361ffff6127c861257497613eb1565b9650509350505061252f565b3d9150612798565b6127e69086614947565b607d810290808204607d14901517156128035760649004956124f1565b634e487b7160e01b5f52601160045260245ffd5b61282092614e45565b5f80836124e5565b63ab143c065f526004601cfd5b906144e1565b5f9061244c565b506020813d60201161286e575b8161285c60209383613d22565b81010312611428576124619051612438565b3d915061284f565b8196506111e56128859261441a565b945f612346565b5061289685614395565b612341565b6128a49161558f565b5f8061232c565b6307f8785560e51b5f5260045ffd5b63c52a9bd360e01b5f5260045ffd5b63558a1e0360e11b5f5260045ffd5b6282b42960e81b5f5260045ffd5b34611428576020366003190112611428576129026004356140e6565b602060ff601254166040519015158152f35b34611428575f3660031901126114285760206201001854604051908152f35b346114285760403660031901126114285760043560243561ffff811690818103611428573068929eee149b4bd2126854146128285790612972836140e6565b6016549061ffff8260e01c168091116129f3575b5061ffff6129999160201c1691826142e6565b6016805461ffff60201b1916602083901b61ffff60201b1617905561ffff168082036129c157005b7f04f592d3848fffa22f73de92a2fd8da837e6d597f468af77c6fc619b478362ae9160409182519182526020820152a2005b915061ffff612986565b34611428575f3660031901126114285760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b346114285736600319016101c081126114285760a013611428576101203660a3190112611428573068929eee149b4bd212685414612828573068929eee149b4bd21268557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316338190036128d857604051612ab981613d07565b6004356001600160a01b03811681036114285781526024356001600160a01b038116810361142857602082015260443562ffffff811681036114285760408201526064358060020b81036114285760608201526084356001600160a01b0381168103611428578160a0916080612b31940152206140e6565b6012549060ff8216613727577f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000917f0000000000000000000000000000000000000000000000000000000000000000612bac858261499f565b5050507f000000000000000000000000000000000000000000000000000000000000000090813b159081156136fd575b81156136ea575b5080156136c2575b8015613698575b8015613667575b8015613643575b8015613623575b80156135f8575b80156135d5575b80156135c6575b80156135b6575b801561359a575b8015613581575b8015613565575b6128ba57612c44613e01565b916001600160a01b031690612c588361504d565b51928360a01c611428576040516371a9730560e01b81525f92602082600481865afa1561355c5760203d106114285781516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693921691903d601f19810182116001600160401b0383111761142857602082843e8251906001600160401b03821190839003601f190160051c8211176114285760021461353d575b5050612d0783615075565b518060a01c611428576001600160a01b03168514801594906134f9575b84156134b8575b8415613488575b8415613455575b84156133ff575b84156133d9575b8415613398575b8415613365575b841561332b575b84156132f7575b84156132b2575b84156132a9575b50831561329f575b831561328c575b8315613276575b8315613260575b831561324d575b831561323a575b508215613227575b50811561320f575b81156131f6575b506128ba57612dc18261509d565b51918260a01c611428576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116931683148015906131ae575b8015613174575b6128ba5760405163086fce0d60e11b81527f000000000000000000000000000000000000000000000000000000000000000093909261016084600481885afa1561316b576101603d1061142857604084015190602085019460058311865160201c176114285760608101976101408201895b81811061315a575050815198891594851561314e575b508415613142575b508315613133575b508215613124575b821561310a575b82156130fb575b50506128d8576101c063ffffffff60249451169460405194858092636373dff160e11b82528960048301525afa156130f2576101c03d106114285760a08301519460058611600160808601511117604085015160a01c176114285760c08401906101208501825b8181106130e157506101a08601905b8181106130d0575050845114958615966130c4575b5085156130b8575b5050831561309e575b50821561308e575b50506128d857612f6d6101a435613ec0565b6016549162ffffff8360c81c60020b911660020b1491821592613077575b50506128ba5760046020612f9d613e01565b6040516306704e8760e31b815292839182905afa601f3d1116156114285751908160a01c61142857604051637f5a7c7b60e01b8152602081600481865afa601f3d11161561142857518060a01c6114285730036128ba5762010016919091556001906001600160a01b0361300f613e01565b16828060a01b0319600354161760035560ff19161760125560018060a01b03613036613e01565b6001600160a01b03909216929116907ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec5f80a43868929eee149b4bd2126855005b61ffff919250819060e01c16911614158480612f8b565b6101400151111590508480612f5b565b60e08201516001600160a01b039091161415925086612f53565b51141593508780612f4a565b60011415955089612f42565b805160201c61142857602001612f2d565b805160a01c61142857602001612f1e565b823d5f823e3d90fd5b60e00151141590508980612eb7565b60c08101516005546001600160a01b031614159250612eb0565b60a08101518414159250612ea9565b6080820151141592508b612ea1565b5181141593508c612e99565b6001141594508d612e91565b805160a01c61142857602001612e7b565b833d5f823e3d90fd5b5060405163b3f05b9760e01b8152602081600481855afa156131a65760203d1061142857516001811115612e09575f80fd5b3d5f823e3d90fd5b506131b8816150c5565b518060a01c611428577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415612e02565b6006546001600160a01b03918216911614905087612db3565b6006546001600160a01b038581169116149150612dac565b6001600160a01b03851614915088612da4565b6001600160a01b03861614925089612d9c565b6001600160a01b03861685149350612d95565b6001600160a01b03868116908a16149350612d8e565b6001600160a01b03868116908416149350612d87565b6001600160a01b03861630149350612d80565b853b159350612d79565b1593508a612d71565b9350604051630961712f60e01b81528a60048201526020816024818d5afa156131a65760203d1061142857518060a01c611428576001600160a01b0316151593612d6a565b9350604051635c0af38360e01b81528a60048201526020816024818d5afa156131a65760203d106114285751151593612d63565b9350604051630323715f60e11b81528a60048201526020816024818d5afa156131a65760203d106114285751600181116114285793612d5c565b935060405162e568cf60e71b81528a60048201526020816024818d5afa156131a65760203d106114285751151593612d55565b604051630b775e8f60e11b81529094506020816004818d5afa156131a65760203d1061142857518060a01c611428576001600160a01b031687141593612d4e565b93506133e489615075565b518060a01c611428576001600160a01b031685141593612d47565b604051634f2ff03160e11b8152909450602081600481875afa156131a65760203d10611428575163ffffffff7f000000000000000000000000000000000000000000000000000000000000000016141593612d40565b60405163182148ef60e01b815290945060a081600481875afa156131a65760a03d106114285760a08b9120141593612d39565b604051631f06e1a760e11b8152909450602081600481875afa156131a65760203d1061142857518a141593612d32565b604051636620eee760e11b8152909450602081600481875afa156131a65760203d1061142857518060a01c611428576001600160a01b031630141593612d2b565b604051636bdcb6a760e11b8152909450602081600481875afa156131a65760203d1061142857518060a01c611428576001600160a01b038a81169116141593612d24565b604091929550602001823e838260208301511491511416928a80612cfc565b503d5f823e3d90fd5b5061356e613e01565b6001600160a01b03838116911614612c38565b50306001600160a01b03613593613e01565b1614612c31565b506135a3613e01565b6001600160a01b03868116911614612c2a565b506135bf613e01565b3b15612c23565b506007546101a4351415612c1c565b506101843580151590818103611428575060ff60065460a01c1615151415612c15565b50610164356001600160a01b0381169081810361142857506006546001600160a01b03161415612c0e565b506101443560ff81168091036114285760ff60055460c01c161415612c07565b506101243562ffffff81168091036114285762ffffff60055460a81c161415612c00565b506101043560028110156114285760ff60055460a01c169061368882613b29565b61369181613b29565b1415612bf9565b5060e4356001600160a01b0381169081810361142857506005546001600160a01b03161415612bf2565b5060c4356001600160a01b0381169081810361142857506001600160a01b0386161415612beb565b6001600160a01b03161515905087612be3565b7f00000000000000000000000000000000000000000000000000000000000000003b159150612bdc565b630ea075bf60e21b5f5260045ffd5b34611428576020366003190112611428576020613754610297613b5d565b54604051908152f35b3461142857604036600319011261142857602061375461028c613b47565b34611428575f3660031901126114285760206201001754604051908152f35b34611428575f3660031901126114285762010016546040516001600160a01b039091168152602090f35b34611428575f366003190112611428576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346114285761381636613bca565b5091929091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036128d8573068929eee149b4bd21268541461282857816138739161386e613880956140d6565b61410e565b61387b614242565b614d7a565b60405163259982e560e01b8152602090f35b34611428576138a036613bca565b5091929091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036128d8573068929eee149b4bd212685414612828578161387b9161386e6138f8956140d6565b60405163021d0ee760e41b8152602090f35b3461142857602036600319011261142857613923613d45565b5061392f6004356140e6565b61012060405161393e81613cbc565b6003546001600160a01b03908116825260045481166020830190815260055491821660408401908152909160608401919060ff9060a081901c821661398281613b29565b845262ffffff60a882901c81166080880190815260c092831c841660a0808a019182526006546001600160a01b03808216968c01968752911c8616151560e08b019081526007546101008c01908152604080519c5184168d529a51831660208d01529751909116988a019890985295519496959294613a0081613b29565b606089015251166080870152511660a0850152516001600160a01b031660c084015251151560e083015251610100820152f35b34611428575f3660031901126114285760206040515f8152f35b346114285760a0366003190112611428573068929eee149b4bd212685414612828573068929eee149b4bd21268557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036128d857613ab3614092565b601354613b1a5742601355613ac66154aa565b427f00000000000000000000000000000000000000000000000000000000000000007ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd5f80a33868929eee149b4bd2126855005b6304c7cf6760e51b5f5260045ffd5b60021115613b3357565b634e487b7160e01b5f52602160045260245ffd5b602435906001600160a01b038216820361142857565b600435906001600160a01b038216820361142857565b60c435906001600160a01b038216820361142857565b35906001600160a01b038216820361142857565b9181601f84011215611428578235916001600160401b038311611428576020838186019501011161142857565b90610160600319830112611428576004356001600160a01b0381168103611428579160a060231982011261142857602491608060c3198301126114285760c49161014435906001600160401b03821161142857613c2991600401613b9d565b9091565b35908160020b820361142857565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b610120600319820112611428576004356001600160a01b0381168103611428579160a06023198301126114285760249160c4359160e4359161010435906001600160401b03821161142857613c2991600401613b9d565b61012081019081106001600160401b03821117613cd857604052565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b03821117613cd857604052565b60a081019081106001600160401b03821117613cd857604052565b601f909101601f19168101906001600160401b03821190821017613cd857604052565b60405190613d5282613cbc565b5f610100838281528260208201528260408201528260608201528260808201528260a08201528260c08201528260e08201520152565b359062ffffff8216820361142857565b91908260a091031261142857604051613db081613d07565b6080613dfc818395613dc181613b89565b8552613dcf60208201613b89565b6020860152613de060408201613d88565b6040860152613df160608201613c2d565b606086015201613b89565b910152565b60a4356001600160a01b03811681036114285790565b6024356001600160a01b03811681036114285790565b6080906001600160a01b03613e4182613b89565b1683526001600160a01b03613e5860208301613b89565b16602084015262ffffff613e6e60408301613d88565b166040840152613e8060608201613c2d565b60020b60608401526001600160a01b0390613e9c908301613b89565b16910152565b60c43580151581036114285790565b519061ffff8216820361142857565b6040805163deee413560e01b81526004810192909252909190826024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156126d1575f925f92613f6e575b508162ffffff8416908115918215613f61575b508115613f52575b8115613f42575b506128ba57565b611000915061ffff16115f613f3b565b600261ffff8216109150613f34565b620d89e81091505f613f2c565b925090506040823d604011613fb5575b81613f8b60409383613d22565b810103126114285781519162ffffff83168303611428576020613fae9101613eb1565b905f613f19565b3d9150613f7e565b6001600160401b038111613cd857601f01601f191660200190565b9190915f838201938412911290801582169115161761280357565b6001600160401b038111613cd85760051b60200190565b805182101561401e5760209160051b010190565b634e487b7160e01b5f52603260045260245ffd5b61ffff82101561401e5701905f90565b90816020910312611428575180151581036114285790565b6001600160a01b03918216815291166020820152604081019190915260600190565b9190826040910312611428576020825192015190565b6140a860a06140a2366004613d98565b206140e6565b60ff60125460081c16156140b857565b62820f3560e61b5f5260045ffd5b6140a860a06140a2366024613d98565b60a06140a26140a8923690613d98565b7f0000000000000000000000000000000000000000000000000000000000000000036140b857565b9060ff60155416809181926141f4575b506128c95760135461416e57506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691160361415f57565b637cd5a0ad60e01b5f5260045ffd5b60ff60065460a01c1691826141bc575b8261419b575b505061418c57565b630af9fb3360e21b5f5260045ffd5b90915081156141ad575b505f80614184565b9050620100165414155f6141a5565b6001600160a01b038082167f00000000000000000000000000000000000000000000000000000000000000009091161415925061417e565b6001600160a01b038481167f00000000000000000000000000000000000000000000000000000000000000009091161480159250614234575b505f61411e565b60409150013515155f61422d565b60155460ff8160081c16614267576101009061425c614a3e565b61ff00191617601555565b50565b6001600160a01b03908116907f00000000000000000000000000000000000000000000000000000000000000001681146142e0577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146142db5762820f3560e61b5f5260045ffd5b600c90565b50600890565b61ffff81169081156143415761ffff83169182111561433b576017905b8261ffff8216106143145750505090565b61ffff81101561401e5760018161ffff9284018263ffffffff198254161790550116614303565b91505090565b6329d9e10560e01b5f5260045ffd5b60c4358015159081810361142857505f60e435120361437f576024356001600160a01b03811681036114285790565b6044356001600160a01b03811681036114285790565b600554600160ff8260a01c166143aa81613b29565b036143ca576001600160a01b03165b6001600160a01b0391821691161490565b5060c435801515810361142857156143f3576024356001600160a01b03811681146143b9575f80fd5b6044356001600160a01b03811681146143b9575f80fd5b600160ff1b8114612803575f0390565b600160ff1b8114614439575f811215614436576144369061440a565b90565b637e2df70960e11b5f5260045ffd5b9062ffffff169081810291620f42408215828486041417021561447f575050620f42409004905b60016001607f1b03821161443957565b620f4240905f198184098481108501900392099080620f424011156144d457828211900360fa1b910360061c177fde8f6cefed634549b62c77574f722e1ac57e23f24d8fd5cb790fb65668c26139029061446f565b63ae47f7025f526004601cfd5b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031693909291602081602481885afa9081156126d1575f9161460b575b5015614605576015805460ff191660011790556040516381f8a9d160e01b815291614589600484016024613e2d565b60a483015260c482015260408160e4815f875af180156126d1575f516020615d495f395f51905f52916040915f915f916145d6575b5060ff196015541660155582519182526020820152a3565b90506145f89150823d84116145fe575b6145f08183613d22565b81019061407c565b5f6145be565b503d6145e6565b50505050565b90506020813d602011614635575b8161462660209383613d22565b8101031261142857515f61455a565b3d9150614619565b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031691602081602481865afa9081156126d1575f91614733575b501561472f576015805460ff191660011790556040516381f8a9d160e01b81526146e1600482016024613e2d565b5f60a48201525f60c482015260408160e4815f875af180156126d1575f516020615d495f395f51905f52916040915f915f916145d6575060ff196015541660155582519182526020820152a3565b5050565b90506020813d60201161475d575b8161474e60209383613d22565b8101031261142857515f6146b3565b3d9150614741565b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316929091602081602481875afa9081156126d1575f91614811575b501561480c576015805460ff191660011790556040516381f8a9d160e01b8152906146e1906004830190613e2d565b505050565b90506020813d60201161483b575b8161482c60209383613d22565b8101031261142857515f6147dd565b3d915061481f565b60405162e568cf60e71b81527f0000000000000000000000000000000000000000000000000000000000000000600482018190527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169490939091602081602481895afa9081156126d1575f916148f3575b50156148ec576015805460ff191660011790556040516381f8a9d160e01b815292614589906004850190613e2d565b5050505050565b90506020813d60201161491d575b8161490e60209383613d22565b8101031261142857515f6148bd565b3d9150614901565b60016001607f1b039081039190821161280357565b9190820391821161280357565b8115614951570490565b634e487b7160e01b5f52601260045260245ffd5b8181029291811591840414171561280357565b9190820180921161280357565b6001600160a01b0391821681529116602082015260400190565b91906149ac602091615027565b604051631e2eaeaf60e01b8152600481019190915292839060249082906001600160a01b03165afa9182156126d1575f92614a0a575b506001600160a01b0382169160a081901c60020b9162ffffff60b883901c81169260d01c1690565b9091506020813d602011614a36575b81614a2660209383613d22565b810103126114285751905f6149e2565b3d9150614a19565b60ff60155460081c16614bff576003546001600160a01b0316614a608161504d565b51908160a01c611428576040519063537df88f60e11b8252600482015260c081602481855afa156131a65760c03d106114285760608101805160a01c825160a01c176114285760a0820190815192608081019384511760101c6114285760c08101604052614acd8561509d565b518060a01c611428577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161480159590614bb4575b508415614b7f575b8415614b72575b8415614b65575b508315614b5b575b508215614b50575b8215614b43575b50506128ba57565b5190511090505f80614b3b565b805115159250614b34565b511592505f614b2c565b604001511593505f614b24565b6020810151159450614b1d565b80517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614159450614b16565b614bbf9195506150c5565b518060a01c611428577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161415935f614b0e565b565b6001600160a01b03811690614c158261426a565b908154908115614c855792614c5b835f9384614c739897614c496002614bff99019185614c4384548761493a565b91614e45565b8160018501805498899655555561493a565b6006549095869390916001600160a01b0316836150ed565b6003546001600160a01b0316906150ed565b505050505f90565b90614c9790615027565b6003810180911161280357604051631e2eaeaf60e01b8152600481019190915290602090829060249082906001600160a01b03165afa9081156126d1575f91614ce8575b506001600160801b031690565b90506020813d602011614d12575b81614d0360209383613d22565b8101031261142857515f614cdb565b3d9150614cf6565b90600160ff1b6060830151146144395762ffffff60a08301511691614d4862ffffff60c083015116916153cf565b9262ffffff84169081116144395710614d5d57565b6302cce67760e31b5f5260045ffd5b358060020b81036114285790565b6040810135158015614e2b575b614267577f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000614dd8838261499f565b5050929050614de681614d6c565b60020b8360020b908112918215614e11575b505061480c57614bff92614e0b91614c8d565b9061558f565b614e1f919250602001614d6c565b60020b13155f80614df8565b506016544360489190911c6001600160401b031614614d87565b5f8315614605576001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690831685614e8583836156c7565b10615018576003850190614e9a87835461493a565b8255604051627eeac760e11b81529260208480614ebb853060048401614985565b0381845afa9384156126d1575f94614fe4575b50803b1561142857604051637a94c56560e11b81525f8180614ef58c87306004850161405a565b038183865af180156126d157614fc5575b50614f2a92916020916040518080968194627eeac760e11b83523060048401614985565b03915afa918215611434578492614f91575b5086838311938415614f83575b50508215614f78575b50506113d55750614f7491614f6b8460029330906156ec565b01918254614978565b9055565b541190505f80614f52565b83900314159250865f614f49565b9091506020813d602011614fbd575b81614fad60209383613d22565b810103126114285751905f614f3c565b3d9150614fa0565b602091955091614fd95f614f2a9594613d22565b5f9591509192614f06565b9093506020813d602011615010575b8161500060209383613d22565b810103126114285751925f614ece565b3d9150614ff3565b6365169c1d60e01b5f5260045ffd5b604051602081019182526006604082015260408152615047606082613d22565b51902090565b90602060049260405193848092630d96a1bf60e21b82525afa1561355c5760203d1061142857565b9060206004926040519384809263dc4c90d360e01b82525afa1561355c5760203d1061142857565b9060206004926040519384809263514526c360e11b82525afa1561355c5760203d1061142857565b9060206004926040519384809263056a0fbf60e31b82525afa1561355c5760203d1061142857565b9190811561480c576150ff30846156c7565b9261510a82826156c7565b91806014528360345263a9059cbb60601b5f5260205f6044601082865af18060015f511416156151a6575b5061514e905f60345261514830846156c7565b926156c7565b90848111948515615199575b5050831561518f575b8315615182575b50505061517357565b631dc418c360e31b5f5260045ffd5b03141590505f808061516a565b8181109350615163565b0383141593505f8061515a565b3d833b151710156151b7575f615135565b6390b8ec185f526004601cfd5b906040516151d181613cec565b915463ffffffff81168352602081811c60060b90840152605881901c6001600160a01b0316604084015260f81c15156060830152565b95949290939163ffffffff8516156152fe5763ffffffff61522e9588031680976017615906565b63ffffffff82949251168083146152e25763ffffffff8251168084146152bf579063ffffffff818193031693031693602081015160060b9283602084015160060b0360060b928160060b928315614951576040908101519101516001600160a01b03929183169183916152aa9190831684900383168a02614947565b1601169460060b91050260060b0160060b9190565b5050602081015160409091015160069190910b93506001600160a01b0316919050565b505050602082015160060b91604060018060a01b039101511690565b925090925061ffff81101561401e57615319906017016151c4565b9363ffffffff85511663ffffffff82160361534a57505050602082015160060b91604060018060a01b039101511690565b6153549394615827565b905f80806152e2565b60408051602081019283526001600160a01b0390931690830152906060810160c4358015159081900361142857815260e435602082015260406001600160a01b036153a9610104613b89565b1691015260a0815261504760c082613d22565b60020b627fffff198114612803575f0390565b62ffffff60c08201511663ffffffff60e062ffffff60a085015116930151169181811480156154a2575b61549c57614436925f915f9360165461ffff8160101c16906001821161543d575b5050835f811261542b575b50615b04565b61543691945061440a565b925f615425565b61ffff811691826017015492815f1991010106601701549163ffffffff83820316908161546c575b505061541a565b90919263ffffffff94985080975060201c9060201c0360060b059060301c60020b0393420316935f808080615465565b50905090565b5082156153f9565b62010016546001600160a01b0381161561426757622ea7d35a106128ba575f602481808094632520a12d60e11b825281600452622dc6c0f1156154e957565b7f6e819d90474482ea53f17905af71585dac910232de1a68f42349cd60badb287460205fa1565b62010016546001600160a01b0381161561472f57622ea7d35a106128ba5760245f808094938194632f02d37f60e21b8352600452622dc6c0f1156154e957565b62010016546001600160a01b0381161561426757622ea7d35a106128ba575f6024818080946309f17b8160e31b825281600452622dc6c0f1156154e957565b906155c29060165461ffff8160201c169161ffff8260101c16918060301c60020b9061ffff63ffffffff42169116615ba4565b909161ffff63ffff00006016549360101b16931690818463ffffffff19851617178060301c60020b9060c81c60020b917f00000000000000000000000000000000000000000000000000000000000000005f146156c257615622906153bc565b60020b81810391905f821280158285131691841216176128035761565192828181131561569b57509150613fd8565b62ffffff60301b60309190911b16600160481b600160881b031990931665ffff00000001600160881b03199092169190911717174360481b600160481b600160881b031617601655565b6156a48261440a565b136156b0575b50613fd8565b6156bb91925061440a565b905f6156aa565b615622565b602460106020939284936014526370a0823160601b5f525afa601f3d11166020510290565b915f928115614605576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911661572c82826156c7565b9361573781836156c7565b92803b1561142857604051630b0d9c0960e01b8152600481018490526001600160a01b0383166024820152604481018690525f8160648183865af180156126d1576157e5575b509061514861578c92846156c7565b908481119485156157d8575b505083156157ce575b83156157c1575b5050506157b25750565b631dc418c360e31b8152600490fd5b03141590505f80806157a8565b81811093506157a1565b0383141593505f80615798565b61578c929197505f6157f691613d22565b6151485f9791925061577d565b6040519061581082613cec565b5f6060838281528260208201528260408201520152565b91929092615833615803565b508251602084015160409094015163ffffffff9091168503936001600160a01b039091169260069190910b906001600160801b038116156158d6575b6001600160801b03169182156149515763ffffffff6040519661589188613cec565b16865263ffffffff851660060b9060020b0260060b0160060b602085015260018060a01b039263ffffffff60801b9060801b1604011660408201526001606082015290565b50600161586f565b61ffff60019116019061ffff821161280357565b9061ffff169081156149515761ffff160690565b9692949094939193615916615803565b5061591f615803565b9161593361592d858b614032565b506151c4565b916159468763ffffffff8551168a615c9e565b615ad0575050505061596c61592d61596687615961856158de565b6158f2565b88614032565b83606082015115615ab5575b63ffffffff61598992511686615c9e565b15615aa65761ffff6159b18661596183946159a2615803565b506159ab615803565b506158de565b169416936159bf8582614978565b5f19810191908211612803575b6159d68282614978565b60011c916159f061592d6159ea8986615d1e565b8a614032565b606081015115615a8f57600184019081851161280357615a1c61592d615a168b85615d1e565b8c614032565b615a2e8863ffffffff8451168b615c9e565b918280615a77575b615a68575050615a5b5750505f198201918211612803576159d691905b9091506159cc565b9091506159d69250615a53565b9a509850949650505050505050565b50615a8a63ffffffff8351168a8c615c9e565b615a36565b50905060018201809211612803576159d691615a53565b636ffbbccd60e11b5f5260045ffd5b615989915063ffffffff615ac8896151c4565b925050615978565b94975094925063ffffffff919750809550511663ffffffff8216145f14615af8575050509190565b83614436949650615827565b93929162ffffff85169362ffffff8316851015615b9b575f8413801590615b8d575b8015615b7f575b615b775763ffffffff908116959116929190615b53908490830362ffffff168702614947565b8211615b6f575092615b6a9162ffffff9402614947565b011690565b935050505090565b505050505090565b5063ffffffff821615615b2d565b5063ffffffff811615615b26565b50509250505090565b94959392919061ffff86101561401e57615bc0866017016151c4565b9663ffffffff88511663ffffffff831614615c935761ffff85168061ffff8316119081615c72575b50615c0995615c03929115615c6b57505b61596181986158de565b96615827565b61ffff84101561401e57805160208083015160408401516060909401516001600160f81b031990151560f81b16600160581b600160f81b0360589590951b9490941663ffffffff909316911b66ffffffffffffff60201b161717176017840155565b9050615bf9565b5f190191905061ffff8211612803579061ffff888116911614615c09615be8565b505050509250909190565b63ffffffff8091169116818111801580615d0e575b615cff5715615ce55763ffffffff90925b1690811115615cd257101590565b600160201b810190811061280357101590565b600160201b81019081106128035763ffffffff9092615cc4565b509163ffffffff915016101590565b508263ffffffff85161115615cb3565b811561495157069056fe2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af6a30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e1168603ec6f79d8fa5f8da5aab9cd5dd8455146cb4adfd8e21e1fc4beb829389";
|