@typeberry/jam 0.2.0-291a493 → 0.2.0-2ecdea0
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/bootstrap-generator.mjs +14 -11
- package/bootstrap-generator.mjs.map +1 -1
- package/bootstrap-importer.mjs +643 -633
- package/bootstrap-importer.mjs.map +1 -1
- package/bootstrap-network.mjs +6 -1
- package/bootstrap-network.mjs.map +1 -1
- package/index.js +51 -36
- package/index.js.map +1 -1
- package/package.json +2 -3
package/bootstrap-importer.mjs
CHANGED
|
@@ -7092,6 +7092,96 @@ function sequenceViewFixLen(type, { fixedLength }) {
|
|
|
7092
7092
|
|
|
7093
7093
|
|
|
7094
7094
|
|
|
7095
|
+
;// CONCATENATED MODULE: ./packages/jam/transition/hasher.ts
|
|
7096
|
+
|
|
7097
|
+
|
|
7098
|
+
|
|
7099
|
+
|
|
7100
|
+
/** Helper function to create most used hashes in the block */
|
|
7101
|
+
class TransitionHasher {
|
|
7102
|
+
context;
|
|
7103
|
+
keccakHasher;
|
|
7104
|
+
blake2b;
|
|
7105
|
+
constructor(context, keccakHasher, blake2b) {
|
|
7106
|
+
this.context = context;
|
|
7107
|
+
this.keccakHasher = keccakHasher;
|
|
7108
|
+
this.blake2b = blake2b;
|
|
7109
|
+
}
|
|
7110
|
+
/** Concatenates two hashes and hash this concatenation */
|
|
7111
|
+
hashConcat(a, b) {
|
|
7112
|
+
return hashBlobs(this.keccakHasher, [a, b]);
|
|
7113
|
+
}
|
|
7114
|
+
hashConcatPrepend(id, a, b) {
|
|
7115
|
+
return hashBlobs(this.keccakHasher, [id, a, b]);
|
|
7116
|
+
}
|
|
7117
|
+
/** Creates hash from the block header view */
|
|
7118
|
+
header(header) {
|
|
7119
|
+
return new WithHash(this.blake2b.hashBytes(header.encoded()).asOpaque(), header);
|
|
7120
|
+
}
|
|
7121
|
+
/**
|
|
7122
|
+
* Merkle commitment of the extrinsic data
|
|
7123
|
+
*
|
|
7124
|
+
* https://graypaper.fluffylabs.dev/#/cc517d7/0ca1000ca200?v=0.6.5
|
|
7125
|
+
*/
|
|
7126
|
+
extrinsic(extrinsicView) {
|
|
7127
|
+
// https://graypaper.fluffylabs.dev/#/cc517d7/0cfb000cfb00?v=0.6.5
|
|
7128
|
+
const guaranteesCount = numbers_tryAsU32(extrinsicView.guarantees.view().length);
|
|
7129
|
+
const countEncoded = encoder_Encoder.encodeObject(descriptors_codec.varU32, guaranteesCount);
|
|
7130
|
+
const guaranteesBlobs = extrinsicView.guarantees
|
|
7131
|
+
.view()
|
|
7132
|
+
.map((g) => g.view())
|
|
7133
|
+
.reduce((aggregated, guarantee) => {
|
|
7134
|
+
const reportHash = this.blake2b.hashBytes(guarantee.report.encoded()).asOpaque();
|
|
7135
|
+
aggregated.push(reportHash.raw);
|
|
7136
|
+
aggregated.push(guarantee.slot.encoded().raw);
|
|
7137
|
+
aggregated.push(guarantee.credentials.encoded().raw);
|
|
7138
|
+
return aggregated;
|
|
7139
|
+
}, [countEncoded.raw]);
|
|
7140
|
+
const et = this.blake2b.hashBytes(extrinsicView.tickets.encoded()).asOpaque();
|
|
7141
|
+
const ep = this.blake2b.hashBytes(extrinsicView.preimages.encoded()).asOpaque();
|
|
7142
|
+
const eg = this.blake2b.hashBlobs(guaranteesBlobs).asOpaque();
|
|
7143
|
+
const ea = this.blake2b.hashBytes(extrinsicView.assurances.encoded()).asOpaque();
|
|
7144
|
+
const ed = this.blake2b.hashBytes(extrinsicView.disputes.encoded()).asOpaque();
|
|
7145
|
+
const encoded = bytes_BytesBlob.blobFromParts([et.raw, ep.raw, eg.raw, ea.raw, ed.raw]);
|
|
7146
|
+
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), extrinsicView, encoded);
|
|
7147
|
+
}
|
|
7148
|
+
}
|
|
7149
|
+
|
|
7150
|
+
;// CONCATENATED MODULE: ./packages/jam/state/accumulation-output.ts
|
|
7151
|
+
|
|
7152
|
+
|
|
7153
|
+
|
|
7154
|
+
/**
|
|
7155
|
+
* Single service-indexed commitment to accumulation output
|
|
7156
|
+
*
|
|
7157
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/0f3c020f3e02?v=0.7.1
|
|
7158
|
+
*/
|
|
7159
|
+
class AccumulationOutput {
|
|
7160
|
+
serviceId;
|
|
7161
|
+
output;
|
|
7162
|
+
static Codec = descriptors_codec.Class(AccumulationOutput, {
|
|
7163
|
+
serviceId: descriptors_codec.u32.asOpaque(),
|
|
7164
|
+
output: descriptors_codec.bytes(hash_HASH_SIZE),
|
|
7165
|
+
});
|
|
7166
|
+
static create(a) {
|
|
7167
|
+
return new AccumulationOutput(a.serviceId, a.output);
|
|
7168
|
+
}
|
|
7169
|
+
constructor(serviceId, output) {
|
|
7170
|
+
this.serviceId = serviceId;
|
|
7171
|
+
this.output = output;
|
|
7172
|
+
}
|
|
7173
|
+
}
|
|
7174
|
+
function accumulationOutputComparator(a, b) {
|
|
7175
|
+
const result = a.serviceId - b.serviceId;
|
|
7176
|
+
if (result < 0) {
|
|
7177
|
+
return Ordering.Less;
|
|
7178
|
+
}
|
|
7179
|
+
if (result > 0) {
|
|
7180
|
+
return Ordering.Greater;
|
|
7181
|
+
}
|
|
7182
|
+
return a.output.compare(b.output);
|
|
7183
|
+
}
|
|
7184
|
+
|
|
7095
7185
|
;// CONCATENATED MODULE: ./packages/core/collections/array-view.ts
|
|
7096
7186
|
|
|
7097
7187
|
/**
|
|
@@ -7747,82 +7837,6 @@ class TruncatedHashDictionary {
|
|
|
7747
7837
|
|
|
7748
7838
|
|
|
7749
7839
|
|
|
7750
|
-
;// CONCATENATED MODULE: ./packages/jam/block/refine-context.ts
|
|
7751
|
-
|
|
7752
|
-
|
|
7753
|
-
|
|
7754
|
-
/**
|
|
7755
|
-
* Mapping between work package hash and root hash of it's exports.
|
|
7756
|
-
*
|
|
7757
|
-
* Used to construct a dictionary.
|
|
7758
|
-
*/
|
|
7759
|
-
class WorkPackageInfo extends WithDebug {
|
|
7760
|
-
workPackageHash;
|
|
7761
|
-
segmentTreeRoot;
|
|
7762
|
-
static Codec = descriptors_codec.Class(WorkPackageInfo, {
|
|
7763
|
-
workPackageHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
7764
|
-
segmentTreeRoot: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
7765
|
-
});
|
|
7766
|
-
constructor(
|
|
7767
|
-
/** Hash of the described work package. */
|
|
7768
|
-
workPackageHash,
|
|
7769
|
-
/** Exports root hash. */
|
|
7770
|
-
segmentTreeRoot) {
|
|
7771
|
-
super();
|
|
7772
|
-
this.workPackageHash = workPackageHash;
|
|
7773
|
-
this.segmentTreeRoot = segmentTreeRoot;
|
|
7774
|
-
}
|
|
7775
|
-
static create({ workPackageHash, segmentTreeRoot }) {
|
|
7776
|
-
return new WorkPackageInfo(workPackageHash, segmentTreeRoot);
|
|
7777
|
-
}
|
|
7778
|
-
}
|
|
7779
|
-
/**
|
|
7780
|
-
* `X`: Refinement Context - state of the chain at the point
|
|
7781
|
-
* that the report's corresponding work-package was evaluated.
|
|
7782
|
-
*
|
|
7783
|
-
* https://graypaper.fluffylabs.dev/#/579bd12/13b80013bb00
|
|
7784
|
-
*/
|
|
7785
|
-
class RefineContext extends WithDebug {
|
|
7786
|
-
anchor;
|
|
7787
|
-
stateRoot;
|
|
7788
|
-
beefyRoot;
|
|
7789
|
-
lookupAnchor;
|
|
7790
|
-
lookupAnchorSlot;
|
|
7791
|
-
prerequisites;
|
|
7792
|
-
static Codec = descriptors_codec.Class(RefineContext, {
|
|
7793
|
-
anchor: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
7794
|
-
stateRoot: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
7795
|
-
beefyRoot: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
7796
|
-
lookupAnchor: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
7797
|
-
lookupAnchorSlot: descriptors_codec.u32.asOpaque(),
|
|
7798
|
-
prerequisites: descriptors_codec.sequenceVarLen(descriptors_codec.bytes(hash_HASH_SIZE).asOpaque()),
|
|
7799
|
-
});
|
|
7800
|
-
static create({ anchor, stateRoot, beefyRoot, lookupAnchor, lookupAnchorSlot, prerequisites, }) {
|
|
7801
|
-
return new RefineContext(anchor, stateRoot, beefyRoot, lookupAnchor, lookupAnchorSlot, prerequisites);
|
|
7802
|
-
}
|
|
7803
|
-
constructor(
|
|
7804
|
-
/** `a`: Header hash at which the work-package was evaluated. */
|
|
7805
|
-
anchor,
|
|
7806
|
-
/** `s`: **Posterior** state root of the anchor. */
|
|
7807
|
-
stateRoot,
|
|
7808
|
-
/** `b`: **Posterior** BEEFY root. */
|
|
7809
|
-
beefyRoot,
|
|
7810
|
-
/** `l`: Preimage lookup anchor. */
|
|
7811
|
-
lookupAnchor,
|
|
7812
|
-
/** `t`: Lookup anchor time slot. */
|
|
7813
|
-
lookupAnchorSlot,
|
|
7814
|
-
/** `p`: List of hashes of the prerequisite work-packages. */
|
|
7815
|
-
prerequisites = []) {
|
|
7816
|
-
super();
|
|
7817
|
-
this.anchor = anchor;
|
|
7818
|
-
this.stateRoot = stateRoot;
|
|
7819
|
-
this.beefyRoot = beefyRoot;
|
|
7820
|
-
this.lookupAnchor = lookupAnchor;
|
|
7821
|
-
this.lookupAnchorSlot = lookupAnchorSlot;
|
|
7822
|
-
this.prerequisites = prerequisites;
|
|
7823
|
-
}
|
|
7824
|
-
}
|
|
7825
|
-
|
|
7826
7840
|
;// CONCATENATED MODULE: ./packages/jam/config/chain-spec.ts
|
|
7827
7841
|
|
|
7828
7842
|
|
|
@@ -7862,6 +7876,8 @@ const EC_SEGMENT_SIZE = 4104;
|
|
|
7862
7876
|
* Additional data that has to be passed to the codec to correctly parse incoming bytes.
|
|
7863
7877
|
*/
|
|
7864
7878
|
class ChainSpec extends WithDebug {
|
|
7879
|
+
/** Human-readable name of the chain spec. */
|
|
7880
|
+
name;
|
|
7865
7881
|
/** Number of validators. */
|
|
7866
7882
|
validatorsCount;
|
|
7867
7883
|
/** 1/3 of number of validators */
|
|
@@ -7904,6 +7920,7 @@ class ChainSpec extends WithDebug {
|
|
|
7904
7920
|
maxLookupAnchorAge;
|
|
7905
7921
|
constructor(data) {
|
|
7906
7922
|
super();
|
|
7923
|
+
this.name = data.name;
|
|
7907
7924
|
this.validatorsCount = data.validatorsCount;
|
|
7908
7925
|
this.thirdOfValidators = numbers_tryAsU16(Math.floor(data.validatorsCount / 3));
|
|
7909
7926
|
this.validatorsSuperMajority = numbers_tryAsU16(Math.floor(data.validatorsCount / 3) * 2 + 1);
|
|
@@ -7924,6 +7941,7 @@ class ChainSpec extends WithDebug {
|
|
|
7924
7941
|
}
|
|
7925
7942
|
/** Set of values for "tiny" chain as defined in JAM test vectors. */
|
|
7926
7943
|
const tinyChainSpec = new ChainSpec({
|
|
7944
|
+
name: "tiny",
|
|
7927
7945
|
validatorsCount: numbers_tryAsU16(6),
|
|
7928
7946
|
coresCount: numbers_tryAsU16(2),
|
|
7929
7947
|
epochLength: numbers_tryAsU32(12),
|
|
@@ -7945,6 +7963,7 @@ const tinyChainSpec = new ChainSpec({
|
|
|
7945
7963
|
* Please note that only validatorsCount and epochLength are "full", the rest is copied from "tiny".
|
|
7946
7964
|
*/
|
|
7947
7965
|
const fullChainSpec = new ChainSpec({
|
|
7966
|
+
name: "full",
|
|
7948
7967
|
validatorsCount: numbers_tryAsU16(1023),
|
|
7949
7968
|
coresCount: numbers_tryAsU16(341),
|
|
7950
7969
|
epochLength: numbers_tryAsU32(600),
|
|
@@ -8073,471 +8092,388 @@ const codecHashDictionary = (value, extractKey, { typicalLength = TYPICAL_DICTIO
|
|
|
8073
8092
|
});
|
|
8074
8093
|
};
|
|
8075
8094
|
|
|
8076
|
-
;// CONCATENATED MODULE: ./packages/jam/block/
|
|
8077
|
-
|
|
8078
|
-
|
|
8079
|
-
/** `W_E`: The basic size of erasure-coded pieces in octets. See equation H.6. */
|
|
8080
|
-
const W_E = 684;
|
|
8081
|
-
/** `W_S`: The size of an exported segment in erasure-coded pieces in octets. */
|
|
8082
|
-
const W_S = 6;
|
|
8083
|
-
/** `W_M`: The maximum number of entries in a work-package manifest. */
|
|
8084
|
-
const MAX_NUMBER_OF_SEGMENTS = 2048; // 2**11
|
|
8085
|
-
/** `W_E * W_S`: Exported segment size in bytes. */
|
|
8086
|
-
const SEGMENT_BYTES = W_E * W_S;
|
|
8087
|
-
/** Attempt to convert a number into `SegmentIndex`. */
|
|
8088
|
-
const tryAsSegmentIndex = (v) => asOpaqueType(tryAsU16(v));
|
|
8089
|
-
|
|
8090
|
-
;// CONCATENATED MODULE: ./packages/jam/block/work-item.ts
|
|
8091
|
-
|
|
8092
|
-
|
|
8095
|
+
;// CONCATENATED MODULE: ./packages/jam/block/assurances.ts
|
|
8093
8096
|
|
|
8094
8097
|
|
|
8095
8098
|
|
|
8096
8099
|
|
|
8097
8100
|
|
|
8098
8101
|
/**
|
|
8099
|
-
*
|
|
8100
|
-
*
|
|
8102
|
+
*
|
|
8103
|
+
* A work-report is said to become available iff there are a clear
|
|
8104
|
+
* 2/3 supermajority of validators who have marked its core as set within
|
|
8105
|
+
* the block's assurance extrinsic.
|
|
8106
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/145800145c00
|
|
8101
8107
|
*/
|
|
8102
|
-
class
|
|
8103
|
-
|
|
8104
|
-
|
|
8105
|
-
|
|
8106
|
-
|
|
8107
|
-
|
|
8108
|
+
class AvailabilityAssurance extends WithDebug {
|
|
8109
|
+
anchor;
|
|
8110
|
+
bitfield;
|
|
8111
|
+
validatorIndex;
|
|
8112
|
+
signature;
|
|
8113
|
+
static Codec = descriptors_codec.Class(AvailabilityAssurance, {
|
|
8114
|
+
anchor: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8115
|
+
bitfield: codecWithContext((context) => {
|
|
8116
|
+
return descriptors_codec.bitVecFixLen(context.coresCount);
|
|
8117
|
+
}),
|
|
8118
|
+
validatorIndex: descriptors_codec.u16.asOpaque(),
|
|
8119
|
+
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8108
8120
|
});
|
|
8109
|
-
static create({
|
|
8110
|
-
return new
|
|
8121
|
+
static create({ anchor, bitfield, validatorIndex, signature }) {
|
|
8122
|
+
return new AvailabilityAssurance(anchor, bitfield, validatorIndex, signature);
|
|
8111
8123
|
}
|
|
8112
8124
|
constructor(
|
|
8113
8125
|
/**
|
|
8114
|
-
*
|
|
8115
|
-
* https://graypaper.fluffylabs.dev/#/579bd12/
|
|
8126
|
+
* The assurances must all be anchored on the parent.
|
|
8127
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/145800145c00
|
|
8116
8128
|
*/
|
|
8117
|
-
|
|
8118
|
-
/**
|
|
8119
|
-
|
|
8129
|
+
anchor,
|
|
8130
|
+
/**
|
|
8131
|
+
* A series of binary values, one per core.
|
|
8132
|
+
*
|
|
8133
|
+
* Value of `1` implies that the validator assures they are contributing
|
|
8134
|
+
* to that's core validity.
|
|
8135
|
+
*/
|
|
8136
|
+
bitfield,
|
|
8137
|
+
/** Validator index that signed this assurance. */
|
|
8138
|
+
validatorIndex,
|
|
8139
|
+
/** Signature over the anchor and the bitfield. */
|
|
8140
|
+
signature) {
|
|
8120
8141
|
super();
|
|
8121
|
-
this.
|
|
8122
|
-
this.
|
|
8142
|
+
this.anchor = anchor;
|
|
8143
|
+
this.bitfield = bitfield;
|
|
8144
|
+
this.validatorIndex = validatorIndex;
|
|
8145
|
+
this.signature = signature;
|
|
8123
8146
|
}
|
|
8124
8147
|
}
|
|
8125
|
-
|
|
8126
|
-
|
|
8127
|
-
|
|
8128
|
-
|
|
8129
|
-
|
|
8130
|
-
|
|
8131
|
-
|
|
8132
|
-
|
|
8133
|
-
|
|
8134
|
-
|
|
8135
|
-
|
|
8136
|
-
|
|
8137
|
-
|
|
8138
|
-
|
|
8139
|
-
|
|
8140
|
-
|
|
8141
|
-
|
|
8142
|
-
|
|
8143
|
-
|
|
8144
|
-
|
|
8148
|
+
const AssurancesExtrinsicBounds = "[0 .. ValidatorsCount)";
|
|
8149
|
+
const assurancesExtrinsicCodec = codecWithContext((context) => {
|
|
8150
|
+
return codecKnownSizeArray(AvailabilityAssurance.Codec, {
|
|
8151
|
+
minLength: 0,
|
|
8152
|
+
maxLength: context.validatorsCount,
|
|
8153
|
+
typicalLength: context.validatorsCount / 2,
|
|
8154
|
+
}, AssurancesExtrinsicBounds);
|
|
8155
|
+
});
|
|
8156
|
+
|
|
8157
|
+
;// CONCATENATED MODULE: ./packages/jam/block/common.ts
|
|
8158
|
+
|
|
8159
|
+
|
|
8160
|
+
|
|
8161
|
+
|
|
8162
|
+
/** Attempt to convert a number into `TimeSlot`. */
|
|
8163
|
+
const common_tryAsTimeSlot = (v) => opaque_asOpaqueType(numbers_tryAsU32(v));
|
|
8164
|
+
/** Attempt to convert a number into `ValidatorIndex`. */
|
|
8165
|
+
const tryAsValidatorIndex = (v) => opaque_asOpaqueType(numbers_tryAsU16(v));
|
|
8166
|
+
/** Attempt to convert a number into `ServiceId`. */
|
|
8167
|
+
const tryAsServiceId = (v) => opaque_asOpaqueType(numbers_tryAsU32(v));
|
|
8168
|
+
const tryAsServiceGas = (v) => opaque_asOpaqueType(numbers_tryAsU64(v));
|
|
8169
|
+
/** Attempt to convert a number into `CoreIndex`. */
|
|
8170
|
+
const tryAsCoreIndex = (v) => opaque_asOpaqueType(numbers_tryAsU16(v));
|
|
8171
|
+
/** Attempt to convert a number into `Epoch`. */
|
|
8172
|
+
const tryAsEpoch = (v) => asOpaqueType(tryAsU32(v));
|
|
8173
|
+
function tryAsPerValidator(array, spec) {
|
|
8174
|
+
debug_check `
|
|
8175
|
+
${array.length === spec.validatorsCount}
|
|
8176
|
+
Invalid per-validator array length. Expected ${spec.validatorsCount}, got: ${array.length}
|
|
8177
|
+
`;
|
|
8178
|
+
return sized_array_asKnownSize(array);
|
|
8179
|
+
}
|
|
8180
|
+
const codecPerValidator = (val) => codecWithContext((context) => {
|
|
8181
|
+
return codecKnownSizeArray(val, {
|
|
8182
|
+
fixedLength: context.validatorsCount,
|
|
8183
|
+
});
|
|
8184
|
+
});
|
|
8185
|
+
function tryAsPerEpochBlock(array, spec) {
|
|
8186
|
+
debug_check `
|
|
8187
|
+
${array.length === spec.epochLength}
|
|
8188
|
+
Invalid per-epoch-block array length. Expected ${spec.epochLength}, got: ${array.length}
|
|
8189
|
+
`;
|
|
8190
|
+
return sized_array_asKnownSize(array);
|
|
8145
8191
|
}
|
|
8192
|
+
const codecPerEpochBlock = (val) => codecWithContext((context) => {
|
|
8193
|
+
return codecKnownSizeArray(val, { fixedLength: context.epochLength });
|
|
8194
|
+
});
|
|
8195
|
+
|
|
8196
|
+
;// CONCATENATED MODULE: ./packages/jam/block/disputes.ts
|
|
8197
|
+
|
|
8198
|
+
|
|
8199
|
+
|
|
8200
|
+
|
|
8201
|
+
|
|
8202
|
+
|
|
8146
8203
|
/**
|
|
8147
|
-
*
|
|
8148
|
-
* we need to know their lenghts. Hence this is created dynamically.
|
|
8204
|
+
* Proof of signing a contradictory [`Judgement`] of a work report.
|
|
8149
8205
|
*/
|
|
8150
|
-
|
|
8151
|
-
|
|
8152
|
-
|
|
8153
|
-
|
|
8154
|
-
|
|
8155
|
-
|
|
8206
|
+
class Fault extends WithDebug {
|
|
8207
|
+
workReportHash;
|
|
8208
|
+
wasConsideredValid;
|
|
8209
|
+
key;
|
|
8210
|
+
signature;
|
|
8211
|
+
static Codec = descriptors_codec.Class(Fault, {
|
|
8212
|
+
workReportHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8213
|
+
wasConsideredValid: descriptors_codec.bool,
|
|
8214
|
+
key: descriptors_codec.bytes(ED25519_KEY_BYTES).asOpaque(),
|
|
8215
|
+
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8216
|
+
});
|
|
8217
|
+
static create({ workReportHash, wasConsideredValid, key, signature }) {
|
|
8218
|
+
return new Fault(workReportHash, wasConsideredValid, key, signature);
|
|
8156
8219
|
}
|
|
8157
|
-
|
|
8158
|
-
|
|
8159
|
-
|
|
8220
|
+
constructor(
|
|
8221
|
+
/** Hash of the work-report that had conflicting votes. */
|
|
8222
|
+
workReportHash,
|
|
8223
|
+
/** Did the validator consider this work-report valid in their [`Judgement`]? */
|
|
8224
|
+
wasConsideredValid,
|
|
8225
|
+
/** Validator key that provided the signature. */
|
|
8226
|
+
key,
|
|
8227
|
+
/** Original signature that was part of the [`Judgement`]. */
|
|
8228
|
+
signature) {
|
|
8229
|
+
super();
|
|
8230
|
+
this.workReportHash = workReportHash;
|
|
8231
|
+
this.wasConsideredValid = wasConsideredValid;
|
|
8232
|
+
this.key = key;
|
|
8233
|
+
this.signature = signature;
|
|
8160
8234
|
}
|
|
8161
|
-
return codec.custom({
|
|
8162
|
-
name: "WorkItemExtrinsics",
|
|
8163
|
-
sizeHint: { bytes: sum.value, isExact: true },
|
|
8164
|
-
}, (e, val) => {
|
|
8165
|
-
for (const bytes of val) {
|
|
8166
|
-
e.bytes(bytes);
|
|
8167
|
-
}
|
|
8168
|
-
}, (d) => {
|
|
8169
|
-
const extrinsics = [];
|
|
8170
|
-
for (const len of extrinsicLengths) {
|
|
8171
|
-
const bytes = d.bytes(len);
|
|
8172
|
-
extrinsics.push(bytes);
|
|
8173
|
-
}
|
|
8174
|
-
return asKnownSize(extrinsics);
|
|
8175
|
-
}, (s) => s.decoder.skip(sum.value));
|
|
8176
8235
|
}
|
|
8177
8236
|
/**
|
|
8178
|
-
*
|
|
8179
|
-
*
|
|
8180
|
-
* https://graypaper.fluffylabs.dev/#/579bd12/198b00199600
|
|
8237
|
+
* Proof of guaranteeing a work-report found to be invalid.
|
|
8181
8238
|
*/
|
|
8182
|
-
class
|
|
8183
|
-
|
|
8184
|
-
|
|
8185
|
-
|
|
8186
|
-
|
|
8187
|
-
|
|
8188
|
-
|
|
8189
|
-
|
|
8190
|
-
|
|
8191
|
-
static
|
|
8192
|
-
|
|
8193
|
-
service: descriptors_codec.u32.asOpaque(),
|
|
8194
|
-
codeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8195
|
-
refineGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8196
|
-
accumulateGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8197
|
-
exportCount: descriptors_codec.u16,
|
|
8198
|
-
payload: descriptors_codec.blob,
|
|
8199
|
-
importSegments: codecKnownSizeArray(ImportSpec.Codec, {
|
|
8200
|
-
minLength: 0,
|
|
8201
|
-
maxLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8202
|
-
typicalLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8203
|
-
}),
|
|
8204
|
-
extrinsic: descriptors_codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec),
|
|
8205
|
-
})
|
|
8206
|
-
: descriptors_codec.Class(WorkItem, {
|
|
8207
|
-
service: descriptors_codec.u32.asOpaque(),
|
|
8208
|
-
codeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8209
|
-
payload: descriptors_codec.blob,
|
|
8210
|
-
refineGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8211
|
-
accumulateGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8212
|
-
importSegments: codecKnownSizeArray(ImportSpec.Codec, {
|
|
8213
|
-
minLength: 0,
|
|
8214
|
-
maxLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8215
|
-
typicalLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8216
|
-
}),
|
|
8217
|
-
extrinsic: descriptors_codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec),
|
|
8218
|
-
exportCount: descriptors_codec.u16,
|
|
8219
|
-
});
|
|
8220
|
-
static create({ service, codeHash, payload, refineGasLimit, accumulateGasLimit, importSegments, extrinsic, exportCount, }) {
|
|
8221
|
-
return new WorkItem(service, codeHash, payload, refineGasLimit, accumulateGasLimit, importSegments, extrinsic, exportCount);
|
|
8239
|
+
class Culprit extends WithDebug {
|
|
8240
|
+
workReportHash;
|
|
8241
|
+
key;
|
|
8242
|
+
signature;
|
|
8243
|
+
static Codec = descriptors_codec.Class(Culprit, {
|
|
8244
|
+
workReportHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8245
|
+
key: descriptors_codec.bytes(ED25519_KEY_BYTES).asOpaque(),
|
|
8246
|
+
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8247
|
+
});
|
|
8248
|
+
static create({ workReportHash, key, signature }) {
|
|
8249
|
+
return new Culprit(workReportHash, key, signature);
|
|
8222
8250
|
}
|
|
8223
8251
|
constructor(
|
|
8224
|
-
/**
|
|
8225
|
-
|
|
8226
|
-
/**
|
|
8227
|
-
|
|
8228
|
-
|
|
8229
|
-
|
|
8230
|
-
* anchor block.
|
|
8231
|
-
*/
|
|
8232
|
-
codeHash,
|
|
8233
|
-
/** `y`: payload blob */
|
|
8234
|
-
payload,
|
|
8235
|
-
/** `g`: refine execution gas limit */
|
|
8236
|
-
refineGasLimit,
|
|
8237
|
-
/** `a`: accumulate execution gas limit */
|
|
8238
|
-
accumulateGasLimit,
|
|
8239
|
-
/** `i`: sequence of imported data segments, which identify a prior exported segment. */
|
|
8240
|
-
importSegments,
|
|
8241
|
-
/** `x`: sequence of blob hashes and lengths to be introduced in this block */
|
|
8242
|
-
extrinsic,
|
|
8243
|
-
/** `e`: number of data segments exported by this work item. */
|
|
8244
|
-
exportCount) {
|
|
8252
|
+
/** Hash of the invalid work-report. */
|
|
8253
|
+
workReportHash,
|
|
8254
|
+
/** Validator key that provided the signature. */
|
|
8255
|
+
key,
|
|
8256
|
+
/** Original signature that was part of the [`Judgement`]. */
|
|
8257
|
+
signature) {
|
|
8245
8258
|
super();
|
|
8246
|
-
this.
|
|
8247
|
-
this.
|
|
8248
|
-
this.
|
|
8249
|
-
this.refineGasLimit = refineGasLimit;
|
|
8250
|
-
this.accumulateGasLimit = accumulateGasLimit;
|
|
8251
|
-
this.importSegments = importSegments;
|
|
8252
|
-
this.extrinsic = extrinsic;
|
|
8253
|
-
this.exportCount = exportCount;
|
|
8259
|
+
this.workReportHash = workReportHash;
|
|
8260
|
+
this.key = key;
|
|
8261
|
+
this.signature = signature;
|
|
8254
8262
|
}
|
|
8255
8263
|
}
|
|
8256
|
-
|
|
8257
|
-
|
|
8258
|
-
|
|
8259
|
-
|
|
8260
|
-
|
|
8261
|
-
|
|
8262
|
-
|
|
8263
|
-
|
|
8264
|
-
|
|
8265
|
-
|
|
8266
|
-
|
|
8267
|
-
|
|
8268
|
-
|
|
8269
|
-
|
|
8270
|
-
|
|
8271
|
-
|
|
8264
|
+
/**
|
|
8265
|
+
* A vote for validity or invalidity of a [`WorkReport`] signed by a particular validator.
|
|
8266
|
+
*/
|
|
8267
|
+
class Judgement extends WithDebug {
|
|
8268
|
+
isWorkReportValid;
|
|
8269
|
+
index;
|
|
8270
|
+
signature;
|
|
8271
|
+
static Codec = descriptors_codec.Class(Judgement, {
|
|
8272
|
+
isWorkReportValid: descriptors_codec.bool,
|
|
8273
|
+
index: descriptors_codec.u16.asOpaque(),
|
|
8274
|
+
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8275
|
+
});
|
|
8276
|
+
static create({ isWorkReportValid, index, signature }) {
|
|
8277
|
+
return new Judgement(isWorkReportValid, index, signature);
|
|
8278
|
+
}
|
|
8279
|
+
constructor(
|
|
8280
|
+
/** Whether the work report is considered valid or not. */
|
|
8281
|
+
isWorkReportValid,
|
|
8282
|
+
/** Index of the validator that signed this vote. */
|
|
8283
|
+
index,
|
|
8284
|
+
/** The signature. */
|
|
8285
|
+
signature) {
|
|
8286
|
+
super();
|
|
8287
|
+
this.isWorkReportValid = isWorkReportValid;
|
|
8288
|
+
this.index = index;
|
|
8289
|
+
this.signature = signature;
|
|
8290
|
+
}
|
|
8272
8291
|
}
|
|
8273
|
-
/** Minimal number of work items in the work package or results in work report. */
|
|
8274
|
-
const MIN_NUMBER_OF_WORK_ITEMS = 1;
|
|
8275
|
-
/** `I`: Maximal number of work items in the work package or results in work report. */
|
|
8276
|
-
const work_package_MAX_NUMBER_OF_WORK_ITEMS = 16;
|
|
8277
8292
|
/**
|
|
8278
|
-
*
|
|
8279
|
-
*
|
|
8280
|
-
*
|
|
8293
|
+
* Votes by super majority of the validator set
|
|
8294
|
+
* (either using keys from current epoch or previous)
|
|
8295
|
+
* over validity or invalidity of a particular [`WorkReport`].
|
|
8281
8296
|
*
|
|
8282
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
8297
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/121c01122f01?v=0.7.1
|
|
8283
8298
|
*/
|
|
8284
|
-
class
|
|
8285
|
-
|
|
8286
|
-
|
|
8287
|
-
|
|
8288
|
-
|
|
8289
|
-
|
|
8290
|
-
|
|
8291
|
-
|
|
8292
|
-
|
|
8293
|
-
|
|
8294
|
-
|
|
8295
|
-
|
|
8296
|
-
|
|
8297
|
-
parametrization: descriptors_codec.blob,
|
|
8298
|
-
items: descriptors_codec.sequenceVarLen(WorkItem.Codec).convert((x) => x, (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length))),
|
|
8299
|
-
})
|
|
8300
|
-
: descriptors_codec.Class(WorkPackage, {
|
|
8301
|
-
authorization: descriptors_codec.blob,
|
|
8302
|
-
authCodeHost: descriptors_codec.u32.asOpaque(),
|
|
8303
|
-
authCodeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8304
|
-
parametrization: descriptors_codec.blob,
|
|
8305
|
-
context: RefineContext.Codec,
|
|
8306
|
-
items: descriptors_codec.sequenceVarLen(WorkItem.Codec).convert((x) => x, (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length))),
|
|
8307
|
-
});
|
|
8308
|
-
static create({ authorization, authCodeHost, authCodeHash, parametrization, context, items, }) {
|
|
8309
|
-
return new WorkPackage(authorization, authCodeHost, authCodeHash, parametrization, context, items);
|
|
8299
|
+
class Verdict extends WithDebug {
|
|
8300
|
+
workReportHash;
|
|
8301
|
+
votesEpoch;
|
|
8302
|
+
votes;
|
|
8303
|
+
static Codec = descriptors_codec.Class(Verdict, {
|
|
8304
|
+
workReportHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8305
|
+
votesEpoch: descriptors_codec.u32.asOpaque(),
|
|
8306
|
+
votes: codecWithContext((context) => {
|
|
8307
|
+
return readonlyArray(descriptors_codec.sequenceFixLen(Judgement.Codec, context.validatorsSuperMajority)).convert(seeThrough, sized_array_asKnownSize);
|
|
8308
|
+
}),
|
|
8309
|
+
});
|
|
8310
|
+
static create({ workReportHash, votesEpoch, votes }) {
|
|
8311
|
+
return new Verdict(workReportHash, votesEpoch, votes);
|
|
8310
8312
|
}
|
|
8311
8313
|
constructor(
|
|
8312
|
-
/**
|
|
8313
|
-
|
|
8314
|
-
/** `h`: index of the service that hosts the authorization code */
|
|
8315
|
-
authCodeHost,
|
|
8316
|
-
/** `u`: authorization code hash */
|
|
8317
|
-
authCodeHash,
|
|
8318
|
-
/** `p`: authorization parametrization blob */
|
|
8319
|
-
parametrization,
|
|
8320
|
-
/** `x`: context in which the refine function should run */
|
|
8321
|
-
context,
|
|
8314
|
+
/** Hash of the work report the verdict is for. */
|
|
8315
|
+
workReportHash,
|
|
8322
8316
|
/**
|
|
8323
|
-
*
|
|
8317
|
+
* The epoch from which the validators signed the votes.
|
|
8324
8318
|
*
|
|
8325
|
-
*
|
|
8326
|
-
* https://graypaper.fluffylabs.dev/#/579bd12/416600416800
|
|
8319
|
+
* Must either be the previous epoch or one before that.
|
|
8327
8320
|
*/
|
|
8328
|
-
|
|
8329
|
-
super();
|
|
8330
|
-
this.authorization = authorization;
|
|
8331
|
-
this.authCodeHost = authCodeHost;
|
|
8332
|
-
this.authCodeHash = authCodeHash;
|
|
8333
|
-
this.parametrization = parametrization;
|
|
8334
|
-
this.context = context;
|
|
8335
|
-
this.items = items;
|
|
8336
|
-
}
|
|
8337
|
-
}
|
|
8338
|
-
|
|
8339
|
-
;// CONCATENATED MODULE: ./packages/jam/transition/hasher.ts
|
|
8340
|
-
|
|
8341
|
-
|
|
8342
|
-
|
|
8343
|
-
|
|
8344
|
-
|
|
8345
|
-
/** Helper function to create most used hashes in the block */
|
|
8346
|
-
class TransitionHasher {
|
|
8347
|
-
context;
|
|
8348
|
-
keccakHasher;
|
|
8349
|
-
blake2b;
|
|
8350
|
-
constructor(context, keccakHasher, blake2b) {
|
|
8351
|
-
this.context = context;
|
|
8352
|
-
this.keccakHasher = keccakHasher;
|
|
8353
|
-
this.blake2b = blake2b;
|
|
8354
|
-
}
|
|
8355
|
-
/** Concatenates two hashes and hash this concatenation */
|
|
8356
|
-
hashConcat(a, b) {
|
|
8357
|
-
return hashBlobs(this.keccakHasher, [a, b]);
|
|
8358
|
-
}
|
|
8359
|
-
hashConcatPrepend(id, a, b) {
|
|
8360
|
-
return hashBlobs(this.keccakHasher, [id, a, b]);
|
|
8361
|
-
}
|
|
8362
|
-
/** Creates hash from the block header view */
|
|
8363
|
-
header(header) {
|
|
8364
|
-
return new WithHash(this.blake2b.hashBytes(header.encoded()).asOpaque(), header);
|
|
8365
|
-
}
|
|
8321
|
+
votesEpoch,
|
|
8366
8322
|
/**
|
|
8367
|
-
*
|
|
8323
|
+
* Votes coming from super majority of validators.
|
|
8368
8324
|
*
|
|
8369
|
-
*
|
|
8325
|
+
* NOTE: must be ordered by validator index.
|
|
8326
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/12b10212b202?v=0.7.1
|
|
8370
8327
|
*/
|
|
8371
|
-
|
|
8372
|
-
|
|
8373
|
-
|
|
8374
|
-
|
|
8375
|
-
|
|
8376
|
-
.view()
|
|
8377
|
-
.map((g) => g.view())
|
|
8378
|
-
.reduce((aggregated, guarantee) => {
|
|
8379
|
-
const reportHash = this.blake2b.hashBytes(guarantee.report.encoded()).asOpaque();
|
|
8380
|
-
aggregated.push(reportHash.raw);
|
|
8381
|
-
aggregated.push(guarantee.slot.encoded().raw);
|
|
8382
|
-
aggregated.push(guarantee.credentials.encoded().raw);
|
|
8383
|
-
return aggregated;
|
|
8384
|
-
}, [countEncoded.raw]);
|
|
8385
|
-
const et = this.blake2b.hashBytes(extrinsicView.tickets.encoded()).asOpaque();
|
|
8386
|
-
const ep = this.blake2b.hashBytes(extrinsicView.preimages.encoded()).asOpaque();
|
|
8387
|
-
const eg = this.blake2b.hashBlobs(guaranteesBlobs).asOpaque();
|
|
8388
|
-
const ea = this.blake2b.hashBytes(extrinsicView.assurances.encoded()).asOpaque();
|
|
8389
|
-
const ed = this.blake2b.hashBytes(extrinsicView.disputes.encoded()).asOpaque();
|
|
8390
|
-
const encoded = bytes_BytesBlob.blobFromParts([et.raw, ep.raw, eg.raw, ea.raw, ed.raw]);
|
|
8391
|
-
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), extrinsicView, encoded);
|
|
8392
|
-
}
|
|
8393
|
-
/** Creates hash for given WorkPackage */
|
|
8394
|
-
workPackage(workPackage) {
|
|
8395
|
-
return this.encode(WorkPackage.Codec, workPackage);
|
|
8396
|
-
}
|
|
8397
|
-
encode(codec, data) {
|
|
8398
|
-
// TODO [ToDr] Use already allocated encoding destination and hash bytes from some arena.
|
|
8399
|
-
const encoded = encoder_Encoder.encodeObject(codec, data, this.context);
|
|
8400
|
-
return new WithHashAndBytes(this.blake2b.hashBytes(encoded).asOpaque(), data, encoded);
|
|
8328
|
+
votes) {
|
|
8329
|
+
super();
|
|
8330
|
+
this.workReportHash = workReportHash;
|
|
8331
|
+
this.votesEpoch = votesEpoch;
|
|
8332
|
+
this.votes = votes;
|
|
8401
8333
|
}
|
|
8402
8334
|
}
|
|
8403
|
-
|
|
8404
|
-
;// CONCATENATED MODULE: ./packages/jam/state/accumulation-output.ts
|
|
8405
|
-
|
|
8406
|
-
|
|
8407
|
-
|
|
8408
8335
|
/**
|
|
8409
|
-
*
|
|
8336
|
+
* A collection of judgements (votes over the validity of a [`WorkReport`]) formes a "verdict".
|
|
8337
|
+
* Together with offences (`culprits` & `faults`) - judgements and guarantees which dissent with an established
|
|
8338
|
+
* "verdict", these form the "disputes" system.
|
|
8410
8339
|
*
|
|
8411
|
-
*
|
|
8340
|
+
* `E_D = (v, c, f)`
|
|
8341
|
+
*
|
|
8342
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/125d00125d00?v=0.7.1
|
|
8412
8343
|
*/
|
|
8413
|
-
class
|
|
8414
|
-
|
|
8415
|
-
|
|
8416
|
-
|
|
8417
|
-
|
|
8418
|
-
|
|
8344
|
+
class DisputesExtrinsic extends WithDebug {
|
|
8345
|
+
verdicts;
|
|
8346
|
+
culprits;
|
|
8347
|
+
faults;
|
|
8348
|
+
static Codec = descriptors_codec.Class(DisputesExtrinsic, {
|
|
8349
|
+
verdicts: descriptors_codec.sequenceVarLen(Verdict.Codec),
|
|
8350
|
+
culprits: descriptors_codec.sequenceVarLen(Culprit.Codec),
|
|
8351
|
+
faults: descriptors_codec.sequenceVarLen(Fault.Codec),
|
|
8419
8352
|
});
|
|
8420
|
-
static create(
|
|
8421
|
-
return new
|
|
8422
|
-
}
|
|
8423
|
-
constructor(serviceId, output) {
|
|
8424
|
-
this.serviceId = serviceId;
|
|
8425
|
-
this.output = output;
|
|
8426
|
-
}
|
|
8427
|
-
}
|
|
8428
|
-
function accumulationOutputComparator(a, b) {
|
|
8429
|
-
const result = a.serviceId - b.serviceId;
|
|
8430
|
-
if (result < 0) {
|
|
8431
|
-
return Ordering.Less;
|
|
8353
|
+
static create({ verdicts, culprits, faults }) {
|
|
8354
|
+
return new DisputesExtrinsic(verdicts, culprits, faults);
|
|
8432
8355
|
}
|
|
8433
|
-
|
|
8434
|
-
|
|
8356
|
+
constructor(
|
|
8357
|
+
/**
|
|
8358
|
+
* `v`: a collection of verdicts over validity of some [`WorkReport`]s.
|
|
8359
|
+
*
|
|
8360
|
+
* NOTE: must be ordered by report hash.
|
|
8361
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/123f02123f02?v=0.7.1
|
|
8362
|
+
*/
|
|
8363
|
+
verdicts,
|
|
8364
|
+
/**
|
|
8365
|
+
* `c`: proofs of validator misbehavior: gauranteeing an invalid [`WorkReport`].
|
|
8366
|
+
*
|
|
8367
|
+
* NOTE: must be ordered by the validator's Ed25519Key.
|
|
8368
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/124102124102?v=0.7.1
|
|
8369
|
+
*/
|
|
8370
|
+
culprits,
|
|
8371
|
+
/**
|
|
8372
|
+
* `f`: proofs of validator misbehavior: signing a contradictory judgement of a [`WorkReport`] validity.
|
|
8373
|
+
*
|
|
8374
|
+
* NOTE: must be ordered by the validator's Ed25519Key.
|
|
8375
|
+
* https://graypaper.fluffylabs.dev/#/1c979cb/124102124102?v=0.7.1
|
|
8376
|
+
*/
|
|
8377
|
+
faults) {
|
|
8378
|
+
super();
|
|
8379
|
+
this.verdicts = verdicts;
|
|
8380
|
+
this.culprits = culprits;
|
|
8381
|
+
this.faults = faults;
|
|
8435
8382
|
}
|
|
8436
|
-
return a.output.compare(b.output);
|
|
8437
8383
|
}
|
|
8438
8384
|
|
|
8439
|
-
;// CONCATENATED MODULE: ./packages/jam/block/
|
|
8440
|
-
|
|
8441
|
-
|
|
8385
|
+
;// CONCATENATED MODULE: ./packages/jam/block/refine-context.ts
|
|
8442
8386
|
|
|
8443
8387
|
|
|
8444
8388
|
|
|
8445
8389
|
/**
|
|
8390
|
+
* Mapping between work package hash and root hash of it's exports.
|
|
8446
8391
|
*
|
|
8447
|
-
*
|
|
8448
|
-
* 2/3 supermajority of validators who have marked its core as set within
|
|
8449
|
-
* the block's assurance extrinsic.
|
|
8450
|
-
* https://graypaper.fluffylabs.dev/#/579bd12/145800145c00
|
|
8392
|
+
* Used to construct a dictionary.
|
|
8451
8393
|
*/
|
|
8452
|
-
class
|
|
8394
|
+
class WorkPackageInfo extends WithDebug {
|
|
8395
|
+
workPackageHash;
|
|
8396
|
+
segmentTreeRoot;
|
|
8397
|
+
static Codec = descriptors_codec.Class(WorkPackageInfo, {
|
|
8398
|
+
workPackageHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8399
|
+
segmentTreeRoot: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8400
|
+
});
|
|
8401
|
+
constructor(
|
|
8402
|
+
/** Hash of the described work package. */
|
|
8403
|
+
workPackageHash,
|
|
8404
|
+
/** Exports root hash. */
|
|
8405
|
+
segmentTreeRoot) {
|
|
8406
|
+
super();
|
|
8407
|
+
this.workPackageHash = workPackageHash;
|
|
8408
|
+
this.segmentTreeRoot = segmentTreeRoot;
|
|
8409
|
+
}
|
|
8410
|
+
static create({ workPackageHash, segmentTreeRoot }) {
|
|
8411
|
+
return new WorkPackageInfo(workPackageHash, segmentTreeRoot);
|
|
8412
|
+
}
|
|
8413
|
+
}
|
|
8414
|
+
/**
|
|
8415
|
+
* `X`: Refinement Context - state of the chain at the point
|
|
8416
|
+
* that the report's corresponding work-package was evaluated.
|
|
8417
|
+
*
|
|
8418
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/13b80013bb00
|
|
8419
|
+
*/
|
|
8420
|
+
class RefineContext extends WithDebug {
|
|
8453
8421
|
anchor;
|
|
8454
|
-
|
|
8455
|
-
|
|
8456
|
-
|
|
8457
|
-
|
|
8422
|
+
stateRoot;
|
|
8423
|
+
beefyRoot;
|
|
8424
|
+
lookupAnchor;
|
|
8425
|
+
lookupAnchorSlot;
|
|
8426
|
+
prerequisites;
|
|
8427
|
+
static Codec = descriptors_codec.Class(RefineContext, {
|
|
8458
8428
|
anchor: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8459
|
-
|
|
8460
|
-
|
|
8461
|
-
|
|
8462
|
-
|
|
8463
|
-
|
|
8429
|
+
stateRoot: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8430
|
+
beefyRoot: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8431
|
+
lookupAnchor: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8432
|
+
lookupAnchorSlot: descriptors_codec.u32.asOpaque(),
|
|
8433
|
+
prerequisites: descriptors_codec.sequenceVarLen(descriptors_codec.bytes(hash_HASH_SIZE).asOpaque()),
|
|
8464
8434
|
});
|
|
8465
|
-
static create({ anchor,
|
|
8466
|
-
return new
|
|
8435
|
+
static create({ anchor, stateRoot, beefyRoot, lookupAnchor, lookupAnchorSlot, prerequisites, }) {
|
|
8436
|
+
return new RefineContext(anchor, stateRoot, beefyRoot, lookupAnchor, lookupAnchorSlot, prerequisites);
|
|
8467
8437
|
}
|
|
8468
8438
|
constructor(
|
|
8469
|
-
/**
|
|
8470
|
-
* The assurances must all be anchored on the parent.
|
|
8471
|
-
* https://graypaper.fluffylabs.dev/#/579bd12/145800145c00
|
|
8472
|
-
*/
|
|
8439
|
+
/** `a`: Header hash at which the work-package was evaluated. */
|
|
8473
8440
|
anchor,
|
|
8474
|
-
/**
|
|
8475
|
-
|
|
8476
|
-
|
|
8477
|
-
|
|
8478
|
-
|
|
8479
|
-
|
|
8480
|
-
|
|
8481
|
-
|
|
8482
|
-
|
|
8483
|
-
|
|
8484
|
-
signature) {
|
|
8441
|
+
/** `s`: **Posterior** state root of the anchor. */
|
|
8442
|
+
stateRoot,
|
|
8443
|
+
/** `b`: **Posterior** BEEFY root. */
|
|
8444
|
+
beefyRoot,
|
|
8445
|
+
/** `l`: Preimage lookup anchor. */
|
|
8446
|
+
lookupAnchor,
|
|
8447
|
+
/** `t`: Lookup anchor time slot. */
|
|
8448
|
+
lookupAnchorSlot,
|
|
8449
|
+
/** `p`: List of hashes of the prerequisite work-packages. */
|
|
8450
|
+
prerequisites = []) {
|
|
8485
8451
|
super();
|
|
8486
8452
|
this.anchor = anchor;
|
|
8487
|
-
this.
|
|
8488
|
-
this.
|
|
8489
|
-
this.
|
|
8453
|
+
this.stateRoot = stateRoot;
|
|
8454
|
+
this.beefyRoot = beefyRoot;
|
|
8455
|
+
this.lookupAnchor = lookupAnchor;
|
|
8456
|
+
this.lookupAnchorSlot = lookupAnchorSlot;
|
|
8457
|
+
this.prerequisites = prerequisites;
|
|
8490
8458
|
}
|
|
8491
8459
|
}
|
|
8492
|
-
const AssurancesExtrinsicBounds = "[0 .. ValidatorsCount)";
|
|
8493
|
-
const assurancesExtrinsicCodec = codecWithContext((context) => {
|
|
8494
|
-
return codecKnownSizeArray(AvailabilityAssurance.Codec, {
|
|
8495
|
-
minLength: 0,
|
|
8496
|
-
maxLength: context.validatorsCount,
|
|
8497
|
-
typicalLength: context.validatorsCount / 2,
|
|
8498
|
-
}, AssurancesExtrinsicBounds);
|
|
8499
|
-
});
|
|
8500
|
-
|
|
8501
|
-
;// CONCATENATED MODULE: ./packages/jam/block/common.ts
|
|
8502
8460
|
|
|
8461
|
+
;// CONCATENATED MODULE: ./packages/jam/block/work-item-segment.ts
|
|
8503
8462
|
|
|
8504
8463
|
|
|
8464
|
+
/** `W_E`: The basic size of erasure-coded pieces in octets. See equation H.6. */
|
|
8465
|
+
const W_E = 684;
|
|
8466
|
+
/** `W_S`: The size of an exported segment in erasure-coded pieces in octets. */
|
|
8467
|
+
const W_S = 6;
|
|
8468
|
+
/** `W_M`: The maximum number of entries in a work-package manifest. */
|
|
8469
|
+
const MAX_NUMBER_OF_SEGMENTS = 2048; // 2**11
|
|
8470
|
+
/** `W_E * W_S`: Exported segment size in bytes. */
|
|
8471
|
+
const SEGMENT_BYTES = W_E * W_S;
|
|
8472
|
+
/** Attempt to convert a number into `SegmentIndex`. */
|
|
8473
|
+
const tryAsSegmentIndex = (v) => asOpaqueType(tryAsU16(v));
|
|
8505
8474
|
|
|
8506
|
-
|
|
8507
|
-
const common_tryAsTimeSlot = (v) => opaque_asOpaqueType(numbers_tryAsU32(v));
|
|
8508
|
-
/** Attempt to convert a number into `ValidatorIndex`. */
|
|
8509
|
-
const tryAsValidatorIndex = (v) => opaque_asOpaqueType(numbers_tryAsU16(v));
|
|
8510
|
-
/** Attempt to convert a number into `ServiceId`. */
|
|
8511
|
-
const tryAsServiceId = (v) => opaque_asOpaqueType(numbers_tryAsU32(v));
|
|
8512
|
-
const tryAsServiceGas = (v) => opaque_asOpaqueType(numbers_tryAsU64(v));
|
|
8513
|
-
/** Attempt to convert a number into `CoreIndex`. */
|
|
8514
|
-
const tryAsCoreIndex = (v) => opaque_asOpaqueType(numbers_tryAsU16(v));
|
|
8515
|
-
/** Attempt to convert a number into `Epoch`. */
|
|
8516
|
-
const tryAsEpoch = (v) => asOpaqueType(tryAsU32(v));
|
|
8517
|
-
function tryAsPerValidator(array, spec) {
|
|
8518
|
-
debug_check `
|
|
8519
|
-
${array.length === spec.validatorsCount}
|
|
8520
|
-
Invalid per-validator array length. Expected ${spec.validatorsCount}, got: ${array.length}
|
|
8521
|
-
`;
|
|
8522
|
-
return sized_array_asKnownSize(array);
|
|
8523
|
-
}
|
|
8524
|
-
const codecPerValidator = (val) => codecWithContext((context) => {
|
|
8525
|
-
return codecKnownSizeArray(val, {
|
|
8526
|
-
fixedLength: context.validatorsCount,
|
|
8527
|
-
});
|
|
8528
|
-
});
|
|
8529
|
-
function tryAsPerEpochBlock(array, spec) {
|
|
8530
|
-
debug_check `
|
|
8531
|
-
${array.length === spec.epochLength}
|
|
8532
|
-
Invalid per-epoch-block array length. Expected ${spec.epochLength}, got: ${array.length}
|
|
8533
|
-
`;
|
|
8534
|
-
return sized_array_asKnownSize(array);
|
|
8535
|
-
}
|
|
8536
|
-
const codecPerEpochBlock = (val) => codecWithContext((context) => {
|
|
8537
|
-
return codecKnownSizeArray(val, { fixedLength: context.epochLength });
|
|
8538
|
-
});
|
|
8475
|
+
;// CONCATENATED MODULE: ./packages/jam/block/work-item.ts
|
|
8539
8476
|
|
|
8540
|
-
;// CONCATENATED MODULE: ./packages/jam/block/disputes.ts
|
|
8541
8477
|
|
|
8542
8478
|
|
|
8543
8479
|
|
|
@@ -8545,184 +8481,243 @@ const codecPerEpochBlock = (val) => codecWithContext((context) => {
|
|
|
8545
8481
|
|
|
8546
8482
|
|
|
8547
8483
|
/**
|
|
8548
|
-
*
|
|
8484
|
+
* Definition of data segment that was exported by some work package earlier
|
|
8485
|
+
* and now is being imported by another work-item.
|
|
8549
8486
|
*/
|
|
8550
|
-
class
|
|
8551
|
-
|
|
8552
|
-
|
|
8553
|
-
|
|
8554
|
-
|
|
8555
|
-
|
|
8556
|
-
workReportHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8557
|
-
wasConsideredValid: descriptors_codec.bool,
|
|
8558
|
-
key: descriptors_codec.bytes(ED25519_KEY_BYTES).asOpaque(),
|
|
8559
|
-
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8487
|
+
class ImportSpec extends WithDebug {
|
|
8488
|
+
treeRoot;
|
|
8489
|
+
index;
|
|
8490
|
+
static Codec = descriptors_codec.Class(ImportSpec, {
|
|
8491
|
+
treeRoot: descriptors_codec.bytes(hash_HASH_SIZE),
|
|
8492
|
+
index: descriptors_codec.u16.asOpaque(),
|
|
8560
8493
|
});
|
|
8561
|
-
static create({
|
|
8562
|
-
return new
|
|
8494
|
+
static create({ treeRoot, index }) {
|
|
8495
|
+
return new ImportSpec(treeRoot, index);
|
|
8563
8496
|
}
|
|
8564
8497
|
constructor(
|
|
8565
|
-
/**
|
|
8566
|
-
|
|
8567
|
-
|
|
8568
|
-
|
|
8569
|
-
|
|
8570
|
-
|
|
8571
|
-
|
|
8572
|
-
signature) {
|
|
8498
|
+
/**
|
|
8499
|
+
* ??: TODO [ToDr] GP seems to mention a identity of a work-package:
|
|
8500
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/199300199300
|
|
8501
|
+
*/
|
|
8502
|
+
treeRoot,
|
|
8503
|
+
/** Index of the prior exported segment. */
|
|
8504
|
+
index) {
|
|
8573
8505
|
super();
|
|
8574
|
-
this.
|
|
8575
|
-
this.
|
|
8576
|
-
this.key = key;
|
|
8577
|
-
this.signature = signature;
|
|
8506
|
+
this.treeRoot = treeRoot;
|
|
8507
|
+
this.index = index;
|
|
8578
8508
|
}
|
|
8579
8509
|
}
|
|
8580
|
-
/**
|
|
8581
|
-
|
|
8582
|
-
|
|
8583
|
-
|
|
8584
|
-
|
|
8585
|
-
|
|
8586
|
-
|
|
8587
|
-
static Codec = descriptors_codec.Class(Culprit, {
|
|
8588
|
-
workReportHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8589
|
-
key: descriptors_codec.bytes(ED25519_KEY_BYTES).asOpaque(),
|
|
8590
|
-
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8510
|
+
/** Introduced blob hashes and their lengths. */
|
|
8511
|
+
class WorkItemExtrinsicSpec extends WithDebug {
|
|
8512
|
+
hash;
|
|
8513
|
+
len;
|
|
8514
|
+
static Codec = descriptors_codec.Class(WorkItemExtrinsicSpec, {
|
|
8515
|
+
hash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8516
|
+
len: descriptors_codec.u32,
|
|
8591
8517
|
});
|
|
8592
|
-
static create({
|
|
8593
|
-
return new
|
|
8518
|
+
static create({ hash, len }) {
|
|
8519
|
+
return new WorkItemExtrinsicSpec(hash, len);
|
|
8594
8520
|
}
|
|
8595
8521
|
constructor(
|
|
8596
|
-
/**
|
|
8597
|
-
|
|
8598
|
-
/**
|
|
8599
|
-
|
|
8600
|
-
/** Original signature that was part of the [`Judgement`]. */
|
|
8601
|
-
signature) {
|
|
8522
|
+
/** The pre-image to this hash should be passed to the guarantor alongisde the work-package. */
|
|
8523
|
+
hash,
|
|
8524
|
+
/** Length of the preimage identified by the hash above. */
|
|
8525
|
+
len) {
|
|
8602
8526
|
super();
|
|
8603
|
-
this.
|
|
8604
|
-
this.
|
|
8605
|
-
this.signature = signature;
|
|
8527
|
+
this.hash = hash;
|
|
8528
|
+
this.len = len;
|
|
8606
8529
|
}
|
|
8607
8530
|
}
|
|
8608
8531
|
/**
|
|
8609
|
-
*
|
|
8532
|
+
* To encode/decode extrinsics that are specified via [`WorkItemExtrinsicSpec`]
|
|
8533
|
+
* we need to know their lenghts. Hence this is created dynamically.
|
|
8610
8534
|
*/
|
|
8611
|
-
|
|
8612
|
-
|
|
8613
|
-
|
|
8614
|
-
|
|
8615
|
-
|
|
8616
|
-
|
|
8617
|
-
index: descriptors_codec.u16.asOpaque(),
|
|
8618
|
-
signature: descriptors_codec.bytes(ED25519_SIGNATURE_BYTES).asOpaque(),
|
|
8619
|
-
});
|
|
8620
|
-
static create({ isWorkReportValid, index, signature }) {
|
|
8621
|
-
return new Judgement(isWorkReportValid, index, signature);
|
|
8535
|
+
function workItemExtrinsicsCodec(workItems) {
|
|
8536
|
+
const extrinsicLengths = [];
|
|
8537
|
+
for (const item of workItems) {
|
|
8538
|
+
for (const extrinsic of item.extrinsic) {
|
|
8539
|
+
extrinsicLengths.push(extrinsic.len);
|
|
8540
|
+
}
|
|
8622
8541
|
}
|
|
8623
|
-
|
|
8624
|
-
|
|
8625
|
-
|
|
8626
|
-
/** Index of the validator that signed this vote. */
|
|
8627
|
-
index,
|
|
8628
|
-
/** The signature. */
|
|
8629
|
-
signature) {
|
|
8630
|
-
super();
|
|
8631
|
-
this.isWorkReportValid = isWorkReportValid;
|
|
8632
|
-
this.index = index;
|
|
8633
|
-
this.signature = signature;
|
|
8542
|
+
const sum = sumU32(...extrinsicLengths);
|
|
8543
|
+
if (sum.overflow) {
|
|
8544
|
+
throw new Error("Unable to create a decoder, because the length of extrinsics overflows!");
|
|
8634
8545
|
}
|
|
8546
|
+
return codec.custom({
|
|
8547
|
+
name: "WorkItemExtrinsics",
|
|
8548
|
+
sizeHint: { bytes: sum.value, isExact: true },
|
|
8549
|
+
}, (e, val) => {
|
|
8550
|
+
for (const bytes of val) {
|
|
8551
|
+
e.bytes(bytes);
|
|
8552
|
+
}
|
|
8553
|
+
}, (d) => {
|
|
8554
|
+
const extrinsics = [];
|
|
8555
|
+
for (const len of extrinsicLengths) {
|
|
8556
|
+
const bytes = d.bytes(len);
|
|
8557
|
+
extrinsics.push(bytes);
|
|
8558
|
+
}
|
|
8559
|
+
return asKnownSize(extrinsics);
|
|
8560
|
+
}, (s) => s.decoder.skip(sum.value));
|
|
8635
8561
|
}
|
|
8636
8562
|
/**
|
|
8637
|
-
*
|
|
8638
|
-
* (either using keys from current epoch or previous)
|
|
8639
|
-
* over validity or invalidity of a particular [`WorkReport`].
|
|
8563
|
+
* Work Item which is a part of some work package.
|
|
8640
8564
|
*
|
|
8641
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
8565
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/198b00199600
|
|
8642
8566
|
*/
|
|
8643
|
-
class
|
|
8644
|
-
|
|
8645
|
-
|
|
8646
|
-
|
|
8647
|
-
|
|
8648
|
-
|
|
8649
|
-
|
|
8650
|
-
|
|
8651
|
-
|
|
8652
|
-
|
|
8653
|
-
|
|
8654
|
-
|
|
8655
|
-
|
|
8567
|
+
class WorkItem extends WithDebug {
|
|
8568
|
+
service;
|
|
8569
|
+
codeHash;
|
|
8570
|
+
payload;
|
|
8571
|
+
refineGasLimit;
|
|
8572
|
+
accumulateGasLimit;
|
|
8573
|
+
importSegments;
|
|
8574
|
+
extrinsic;
|
|
8575
|
+
exportCount;
|
|
8576
|
+
static Codec = compatibility_Compatibility.isGreaterOrEqual(compatibility_GpVersion.V0_7_0)
|
|
8577
|
+
? descriptors_codec.Class(WorkItem, {
|
|
8578
|
+
service: descriptors_codec.u32.asOpaque(),
|
|
8579
|
+
codeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8580
|
+
refineGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8581
|
+
accumulateGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8582
|
+
exportCount: descriptors_codec.u16,
|
|
8583
|
+
payload: descriptors_codec.blob,
|
|
8584
|
+
importSegments: codecKnownSizeArray(ImportSpec.Codec, {
|
|
8585
|
+
minLength: 0,
|
|
8586
|
+
maxLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8587
|
+
typicalLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8588
|
+
}),
|
|
8589
|
+
extrinsic: descriptors_codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec),
|
|
8590
|
+
})
|
|
8591
|
+
: descriptors_codec.Class(WorkItem, {
|
|
8592
|
+
service: descriptors_codec.u32.asOpaque(),
|
|
8593
|
+
codeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8594
|
+
payload: descriptors_codec.blob,
|
|
8595
|
+
refineGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8596
|
+
accumulateGasLimit: descriptors_codec.u64.asOpaque(),
|
|
8597
|
+
importSegments: codecKnownSizeArray(ImportSpec.Codec, {
|
|
8598
|
+
minLength: 0,
|
|
8599
|
+
maxLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8600
|
+
typicalLength: MAX_NUMBER_OF_SEGMENTS,
|
|
8601
|
+
}),
|
|
8602
|
+
extrinsic: descriptors_codec.sequenceVarLen(WorkItemExtrinsicSpec.Codec),
|
|
8603
|
+
exportCount: descriptors_codec.u16,
|
|
8604
|
+
});
|
|
8605
|
+
static create({ service, codeHash, payload, refineGasLimit, accumulateGasLimit, importSegments, extrinsic, exportCount, }) {
|
|
8606
|
+
return new WorkItem(service, codeHash, payload, refineGasLimit, accumulateGasLimit, importSegments, extrinsic, exportCount);
|
|
8656
8607
|
}
|
|
8657
8608
|
constructor(
|
|
8658
|
-
/**
|
|
8659
|
-
|
|
8660
|
-
/**
|
|
8661
|
-
* The epoch from which the validators signed the votes.
|
|
8662
|
-
*
|
|
8663
|
-
* Must either be the previous epoch or one before that.
|
|
8664
|
-
*/
|
|
8665
|
-
votesEpoch,
|
|
8609
|
+
/** `s`: related service */
|
|
8610
|
+
service,
|
|
8666
8611
|
/**
|
|
8667
|
-
*
|
|
8612
|
+
* `c`: code hash of the service at the time of reporting.
|
|
8668
8613
|
*
|
|
8669
|
-
*
|
|
8670
|
-
*
|
|
8614
|
+
* preimage of that hash must be available from the perspective of the lookup
|
|
8615
|
+
* anchor block.
|
|
8671
8616
|
*/
|
|
8672
|
-
|
|
8617
|
+
codeHash,
|
|
8618
|
+
/** `y`: payload blob */
|
|
8619
|
+
payload,
|
|
8620
|
+
/** `g`: refine execution gas limit */
|
|
8621
|
+
refineGasLimit,
|
|
8622
|
+
/** `a`: accumulate execution gas limit */
|
|
8623
|
+
accumulateGasLimit,
|
|
8624
|
+
/** `i`: sequence of imported data segments, which identify a prior exported segment. */
|
|
8625
|
+
importSegments,
|
|
8626
|
+
/** `x`: sequence of blob hashes and lengths to be introduced in this block */
|
|
8627
|
+
extrinsic,
|
|
8628
|
+
/** `e`: number of data segments exported by this work item. */
|
|
8629
|
+
exportCount) {
|
|
8673
8630
|
super();
|
|
8674
|
-
this.
|
|
8675
|
-
this.
|
|
8676
|
-
this.
|
|
8631
|
+
this.service = service;
|
|
8632
|
+
this.codeHash = codeHash;
|
|
8633
|
+
this.payload = payload;
|
|
8634
|
+
this.refineGasLimit = refineGasLimit;
|
|
8635
|
+
this.accumulateGasLimit = accumulateGasLimit;
|
|
8636
|
+
this.importSegments = importSegments;
|
|
8637
|
+
this.extrinsic = extrinsic;
|
|
8638
|
+
this.exportCount = exportCount;
|
|
8677
8639
|
}
|
|
8678
8640
|
}
|
|
8641
|
+
|
|
8642
|
+
;// CONCATENATED MODULE: ./packages/jam/block/work-package.ts
|
|
8643
|
+
|
|
8644
|
+
|
|
8645
|
+
|
|
8646
|
+
|
|
8647
|
+
|
|
8648
|
+
|
|
8649
|
+
|
|
8650
|
+
/** Verify the value is within the `WorkItemsCount` bounds. */
|
|
8651
|
+
function tryAsWorkItemsCount(len) {
|
|
8652
|
+
debug_check `
|
|
8653
|
+
${len >= MIN_NUMBER_OF_WORK_ITEMS && len <= work_package_MAX_NUMBER_OF_WORK_ITEMS}
|
|
8654
|
+
WorkItemsCount: Expected '${MIN_NUMBER_OF_WORK_ITEMS} <= count <= ${work_package_MAX_NUMBER_OF_WORK_ITEMS}' got ${len}
|
|
8655
|
+
`;
|
|
8656
|
+
return numbers_tryAsU8(len);
|
|
8657
|
+
}
|
|
8658
|
+
/** Minimal number of work items in the work package or results in work report. */
|
|
8659
|
+
const MIN_NUMBER_OF_WORK_ITEMS = 1;
|
|
8660
|
+
/** `I`: Maximal number of work items in the work package or results in work report. */
|
|
8661
|
+
const work_package_MAX_NUMBER_OF_WORK_ITEMS = 16;
|
|
8679
8662
|
/**
|
|
8680
|
-
* A
|
|
8681
|
-
* Together with offences (`culprits` & `faults`) - judgements and guarantees which dissent with an established
|
|
8682
|
-
* "verdict", these form the "disputes" system.
|
|
8663
|
+
* A piece of work done within a core.
|
|
8683
8664
|
*
|
|
8684
|
-
* `
|
|
8665
|
+
* `P = (j ∈ Y, h ∈ NS, u ∈ H, p ∈ Y, x ∈ X, w ∈ ⟦I⟧1∶I)
|
|
8685
8666
|
*
|
|
8686
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
8667
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/197000197200
|
|
8687
8668
|
*/
|
|
8688
|
-
class
|
|
8689
|
-
|
|
8690
|
-
|
|
8691
|
-
|
|
8692
|
-
|
|
8693
|
-
|
|
8694
|
-
|
|
8695
|
-
|
|
8696
|
-
|
|
8697
|
-
|
|
8698
|
-
|
|
8669
|
+
class WorkPackage extends WithDebug {
|
|
8670
|
+
authorization;
|
|
8671
|
+
authCodeHost;
|
|
8672
|
+
authCodeHash;
|
|
8673
|
+
parametrization;
|
|
8674
|
+
context;
|
|
8675
|
+
items;
|
|
8676
|
+
static Codec = compatibility_Compatibility.isGreaterOrEqual(compatibility_GpVersion.V0_7_0)
|
|
8677
|
+
? descriptors_codec.Class(WorkPackage, {
|
|
8678
|
+
authCodeHost: descriptors_codec.u32.asOpaque(),
|
|
8679
|
+
authCodeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8680
|
+
context: RefineContext.Codec,
|
|
8681
|
+
authorization: descriptors_codec.blob,
|
|
8682
|
+
parametrization: descriptors_codec.blob,
|
|
8683
|
+
items: descriptors_codec.sequenceVarLen(WorkItem.Codec).convert((x) => x, (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length))),
|
|
8684
|
+
})
|
|
8685
|
+
: descriptors_codec.Class(WorkPackage, {
|
|
8686
|
+
authorization: descriptors_codec.blob,
|
|
8687
|
+
authCodeHost: descriptors_codec.u32.asOpaque(),
|
|
8688
|
+
authCodeHash: descriptors_codec.bytes(hash_HASH_SIZE).asOpaque(),
|
|
8689
|
+
parametrization: descriptors_codec.blob,
|
|
8690
|
+
context: RefineContext.Codec,
|
|
8691
|
+
items: descriptors_codec.sequenceVarLen(WorkItem.Codec).convert((x) => x, (items) => FixedSizeArray.new(items, tryAsWorkItemsCount(items.length))),
|
|
8692
|
+
});
|
|
8693
|
+
static create({ authorization, authCodeHost, authCodeHash, parametrization, context, items, }) {
|
|
8694
|
+
return new WorkPackage(authorization, authCodeHost, authCodeHash, parametrization, context, items);
|
|
8699
8695
|
}
|
|
8700
8696
|
constructor(
|
|
8697
|
+
/** `j`: simple blob acting as an authorization token */
|
|
8698
|
+
authorization,
|
|
8699
|
+
/** `h`: index of the service that hosts the authorization code */
|
|
8700
|
+
authCodeHost,
|
|
8701
|
+
/** `u`: authorization code hash */
|
|
8702
|
+
authCodeHash,
|
|
8703
|
+
/** `p`: authorization parametrization blob */
|
|
8704
|
+
parametrization,
|
|
8705
|
+
/** `x`: context in which the refine function should run */
|
|
8706
|
+
context,
|
|
8701
8707
|
/**
|
|
8702
|
-
* `
|
|
8703
|
-
*
|
|
8704
|
-
* NOTE: must be ordered by report hash.
|
|
8705
|
-
* https://graypaper.fluffylabs.dev/#/1c979cb/123f02123f02?v=0.7.1
|
|
8706
|
-
*/
|
|
8707
|
-
verdicts,
|
|
8708
|
-
/**
|
|
8709
|
-
* `c`: proofs of validator misbehavior: gauranteeing an invalid [`WorkReport`].
|
|
8710
|
-
*
|
|
8711
|
-
* NOTE: must be ordered by the validator's Ed25519Key.
|
|
8712
|
-
* https://graypaper.fluffylabs.dev/#/1c979cb/124102124102?v=0.7.1
|
|
8713
|
-
*/
|
|
8714
|
-
culprits,
|
|
8715
|
-
/**
|
|
8716
|
-
* `f`: proofs of validator misbehavior: signing a contradictory judgement of a [`WorkReport`] validity.
|
|
8708
|
+
* `w`: sequence of work items.
|
|
8717
8709
|
*
|
|
8718
|
-
*
|
|
8719
|
-
* https://graypaper.fluffylabs.dev/#/
|
|
8710
|
+
* Constrained by `I=16`:
|
|
8711
|
+
* https://graypaper.fluffylabs.dev/#/579bd12/416600416800
|
|
8720
8712
|
*/
|
|
8721
|
-
|
|
8713
|
+
items) {
|
|
8722
8714
|
super();
|
|
8723
|
-
this.
|
|
8724
|
-
this.
|
|
8725
|
-
this.
|
|
8715
|
+
this.authorization = authorization;
|
|
8716
|
+
this.authCodeHost = authCodeHost;
|
|
8717
|
+
this.authCodeHash = authCodeHash;
|
|
8718
|
+
this.parametrization = parametrization;
|
|
8719
|
+
this.context = context;
|
|
8720
|
+
this.items = items;
|
|
8726
8721
|
}
|
|
8727
8722
|
}
|
|
8728
8723
|
|
|
@@ -10844,6 +10839,15 @@ class InMemoryService extends WithDebug {
|
|
|
10844
10839
|
}),
|
|
10845
10840
|
};
|
|
10846
10841
|
}
|
|
10842
|
+
/** Return identical `InMemoryService` which does not share any references. */
|
|
10843
|
+
clone() {
|
|
10844
|
+
return new InMemoryService(this.serviceId, {
|
|
10845
|
+
info: ServiceAccountInfo.create(this.data.info),
|
|
10846
|
+
preimages: hash_dictionary_HashDictionary.fromEntries(Array.from(this.data.preimages.entries())),
|
|
10847
|
+
lookupHistory: hash_dictionary_HashDictionary.fromEntries(Array.from(this.data.lookupHistory.entries()).map(([k, v]) => [k, v.slice()])),
|
|
10848
|
+
storage: new Map(this.data.storage.entries()),
|
|
10849
|
+
});
|
|
10850
|
+
}
|
|
10847
10851
|
/**
|
|
10848
10852
|
* Create a new in-memory service from another state service
|
|
10849
10853
|
* by copying all given entries.
|
|
@@ -11262,7 +11266,6 @@ var PreimagesErrorCode;
|
|
|
11262
11266
|
PreimagesErrorCode["PreimagesNotSortedUnique"] = "preimages_not_sorted_unique";
|
|
11263
11267
|
PreimagesErrorCode["AccountNotFound"] = "account_not_found";
|
|
11264
11268
|
})(PreimagesErrorCode || (PreimagesErrorCode = {}));
|
|
11265
|
-
// TODO [SeKo] consider whether this module is the right place to remove expired preimages
|
|
11266
11269
|
class Preimages {
|
|
11267
11270
|
state;
|
|
11268
11271
|
blake2b;
|
|
@@ -11856,7 +11859,7 @@ var ResultValues;
|
|
|
11856
11859
|
* reach the epoch change block.
|
|
11857
11860
|
*/
|
|
11858
11861
|
const ringCommitmentCache = [];
|
|
11859
|
-
//
|
|
11862
|
+
// NOTE [ToDr] We export the entire object to allow mocking in tests.
|
|
11860
11863
|
// Ideally we would just export functions and figure out how to mock
|
|
11861
11864
|
// properly in ESM.
|
|
11862
11865
|
/* harmony default export */ const bandersnatch_vrf = ({
|
|
@@ -13713,7 +13716,6 @@ function* serializeRemovedServices(servicesRemoved) {
|
|
|
13713
13716
|
return;
|
|
13714
13717
|
}
|
|
13715
13718
|
for (const serviceId of servicesRemoved) {
|
|
13716
|
-
// TODO [ToDr] what about all data associated with a service?
|
|
13717
13719
|
const codec = serialize.serviceData(serviceId);
|
|
13718
13720
|
yield [StateEntryUpdateAction.Remove, codec.key, EMPTY_BLOB];
|
|
13719
13721
|
}
|
|
@@ -14498,13 +14500,6 @@ var ForgetPreimageError;
|
|
|
14498
14500
|
})(ForgetPreimageError || (ForgetPreimageError = {}));
|
|
14499
14501
|
/**
|
|
14500
14502
|
* Errors that may occur when the transfer is invoked.
|
|
14501
|
-
*
|
|
14502
|
-
* TODO [ToDr] Since I don't fully understand yet which of these
|
|
14503
|
-
* could be checked directly in the host call (i.e. if we will
|
|
14504
|
-
* have access to the service account state there) for now I keep
|
|
14505
|
-
* them safely in the `AccumulationPartialState` implementation.
|
|
14506
|
-
* However, if possible, these should be moved directly to the
|
|
14507
|
-
* host call implementation.
|
|
14508
14503
|
*/
|
|
14509
14504
|
var TransferError;
|
|
14510
14505
|
(function (TransferError) {
|
|
@@ -14835,7 +14830,7 @@ class AccumulateExternalities {
|
|
|
14835
14830
|
const status = slots === null ? null : slotsToPreimageStatus(slots.slots);
|
|
14836
14831
|
// The previous code needs to be forgotten and expired.
|
|
14837
14832
|
if (status?.status !== PreimageStatusKind.Unavailable) {
|
|
14838
|
-
return [false,
|
|
14833
|
+
return [false, `wrong status: ${status !== null ? PreimageStatusKind[status.status] : null}`];
|
|
14839
14834
|
}
|
|
14840
14835
|
const t = this.currentTimeslot;
|
|
14841
14836
|
const isExpired = status.data[1] < t - this.chainSpec.preimageExpungePeriod;
|
|
@@ -20436,11 +20431,7 @@ class Interpreter {
|
|
|
20436
20431
|
|
|
20437
20432
|
|
|
20438
20433
|
|
|
20439
|
-
;// CONCATENATED MODULE:
|
|
20440
|
-
const external_node_fs_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:fs");
|
|
20441
|
-
;// CONCATENATED MODULE: external "node:url"
|
|
20442
|
-
const external_node_url_namespaceObject = __WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:url");
|
|
20443
|
-
;// CONCATENATED MODULE: ./packages/core/pvm-interpreter-ananas/node_modules/@fluffylabs/anan-as/build/debug-raw.js
|
|
20434
|
+
;// CONCATENATED MODULE: ./node_modules/@fluffylabs/anan-as/build/debug-raw.js
|
|
20444
20435
|
async function instantiate(module, imports = {}) {
|
|
20445
20436
|
const adaptedImports = {
|
|
20446
20437
|
env: Object.setPrototypeOf({
|
|
@@ -20818,16 +20809,35 @@ async function instantiate(module, imports = {}) {
|
|
|
20818
20809
|
return adaptedExports;
|
|
20819
20810
|
}
|
|
20820
20811
|
|
|
20821
|
-
;// CONCATENATED MODULE: ./
|
|
20812
|
+
;// CONCATENATED MODULE: ./node_modules/@fluffylabs/anan-as/build/release-stub-inline.js
|
|
20813
|
+
// Auto-generated inline WASM module
|
|
20814
|
+
// Target: release-stub
|
|
20815
|
+
// Source: build/release-stub.wasm
|
|
20816
|
+
|
|
20822
20817
|
|
|
20823
20818
|
|
|
20819
|
+
const wasmBase64 = "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IAckACAGIAM2AgAFIAMgB0EBdCIGIAMgBksbEA0iAyACIAf8CgAAIAMhAgsFIAgEQCACIANqJAAgBiADNgIACwsgAkEEayABNgIQIAJBEGoiAiAEakEAIAEgBGv8CwAgAiAFRwRAIAAgAjYCACAAIAI2AgQLIAAgATYCCAsLTQEBfyABIAAoAgxPBEAgAUEASARAQfDEAEGwxQBBggFBFhAAAAsgACABQQFqIgNBAkEBEBEgACADNgIMCyAAKAIEIAFBAnRqIAI2AgAL4xcBAX9BjKUBJABBwA5BAEEAEA4kAUHwD0EIQQAQDiQCQecBQQJBCUEAEBAiAEEAQZAQQQBBARAOEBIgAEEBQbAQQQBBARAOEBIgAEECIwEQEiAAQQMjARASIABBBCMBEBIgAEEFIwEQEiAAQQYjARASIABBByMBEBIgAEEIIwEQEiAAQQkjARASIABBCkHgEEEBQQAQDhASIABBCyMBEBIgAEEMIwEQEiAAQQ0jARASIABBDiMBEBIgAEEPIwEQEiAAQRAjARASIABBESMBEBIgAEESIwEQEiAAQRMjARASIABBFEGAEUEFQQAQDhASIABBFSMBEBIgAEEWIwEQEiAAQRcjARASIABBGCMBEBIgAEEZIwEQEiAAQRojARASIABBGyMBEBIgAEEcIwEQEiAAQR0jARASIABBHkGwEUECQQAQDhASIABBH0HgEUECQQAQDhASIABBIEGQEkECQQAQDhASIABBIUHAEkECQQAQDhASIABBIiMBEBIgAEEjIwEQEiAAQSQjARASIABBJSMBEBIgAEEmIwEQEiAAQScjARASIABBKEHwEkEDQQEQDhASIABBKSMBEBIgAEEqIwEQEiAAQSsjARASIABBLCMBEBIgAEEtIwEQEiAAQS4jARASIABBLyMBEBIgAEEwIwEQEiAAQTEjARASIABBMkGQE0EEQQEQDhASIABBM0HAE0EEQQAQDhASIABBNEHwE0EEQQAQDhASIABBNUGgFEEEQQAQDhASIABBNkHQFEEEQQAQDhASIABBN0GAFUEEQQAQDhASIABBOEGwFUEEQQAQDhASIABBOUHgFUEEQQAQDhASIABBOkGQFkEEQQAQDhASIABBO0HAFkEEQQAQDhASIABBPEHwFkEEQQAQDhASIABBPUGgF0EEQQAQDhASIABBPkHQF0EE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QQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnZ603AwAgAEEANgIAIABBADYCCCAAC0cBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAHo3AwAgAEEANgIAIABBADYCCCAAC0kBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdorTcDACAAQQA2AgAgAEEANgIIIAALSQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp8CsNwMAIABBADYCACAAQQA2AgggAAtJAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnwaw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKdB//8Dca03AwAgAEEANgIAIABBADYCCCAAC4cBAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAiBEIIiEL/gfyH8J/A/wCDIARC/4H8h/CfwP8Ag0IIhoQiBEIQiEL//4OA8P8/gyAEQv//g4Dw/z+DQhCGhEIgijcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRSBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVARAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFgEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRaBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEVgRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgRXBEAgASgCCCEBIABBATYCACAAIAE2AgQgAA8LIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIEWQRAIAEoAgghASAAQQE2AgAgACABNgIEIAAPCyAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCBFUEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFEEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAFIEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFQEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFMEQCABKAIIIQEgAEEBNgIAIAAgATYCBCAADwsgAEEANgIAIABBADYCCCAAC2IBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikD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QQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiENwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAgzcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIU3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCENwMAIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQn+FgzcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEJ/hYQ3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCFQn+FNwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCHzENwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATUCCH7ENwMAIABBADYCACAAQQA2AgggAAtUAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNQIIQoCAgIAQhCACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9xDcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0Agh8NwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgATQCCH43AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAfTcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnaqw3AwAgAEEANgIAIABBADYCCCAAC2oBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAEKAgICAEHwgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp619xDcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAH7ENwMAIABBADYCACAAQQA2AgggAAuGAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgMEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyADbqw3AwAFIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMACyAAQQA2AgAgAEEANgIIIAALuAEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAxCEEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDAMQiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAeFEgBUJ/UXEEQCACQQwgATUCCCIFpyAFQg1aG0EDdGogBDcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBX83AwALCyAAQQA2AgAgAEEANgIIIAALjQECAX4BfyACQQwgATUCBCIEpyAEQg1aG0EDdGopAwCnIQMgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyIFBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAMgBXCsNwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6w3AwALIABBADYCACAAQQA2AgggAAu8AQIBfgF/IAJBDCABNQIEIgSnIARCDVobQQN0aikDAKchAyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIgUEQCADQYCAgIB4RiAFQX9GcQRAIAJBDCABNQIIIgSnIARCDVobQQN0akIANwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogA6wgBayBNwMACwUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAOsNwMACyAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIEIgSnIARCDVobQQN0aikDAHw3AwAgAEEANgIAIABBADYCCCAAC2ABAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwB9NwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAfjcDACAAQQA2AgAgAEEANgIIIAALmQEBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAUARAIAJBDCABNQIIIgSnIARCDVobQQN0akJ/NwMABSACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIA3AwALIABBADYCACAAQQA2AgggAAu7AQEDfiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAhBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBVAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCfzcDAAUgBEKAgICAgICAgIB/USAFQn9RcQRAIAJBDCABNQIIIgWnIAVCDVobQQN0aiAENwMABSACQQwgATUCCCIGpyAGQg1aG0EDdGogBCAFfzcDAAsLIABBADYCACAAQQA2AgggAAuwAQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBQBEAgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDADcDAAUgAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwCCNwMACyAAQQA2AgAgAEEANgIIIAALuwEBA34gAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgVQBEAgAkEMIAE1AggiBacgBUINWhtBA3RqIAQ3AwAFIARCgICAgICAgICAf1EgBUJ/UXEEQCACQQwgATUCCCIEpyAEQg1aG0EDdGpCADcDAAUgAkEMIAE1AggiBqcgBkINWhtBA3RqIAQgBYE3AwALCyAAQQA2AgAgAEEANgIIIAAL2wIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQQgAkEMIAE1AgQiBacgBUINWhtBA3RqKQMAIgVCAFMEfyAFQn+FQgF8IQVBAQVBAAshASAEQgBTBH8gBEJ/hUIBfCEEIAFFBSABCwRAIARCIIgiCCAFQv////8PgyIJfiEGIAVCIIgiByAEQv////8PgyIKfiELIAQgBX5QrSAHIAh+IAZCIIh8IAtCIIh8IAZC/////w+DIAkgCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARCIIgiBiAFQv////8PgyIHfiEIIAVCIIgiBSAEQv////8PgyIEfiEJIAUgBn4gCEIgiHwgCUIgiHwgCEL/////D4MgBCAHfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC7oBAQZ+IAJBDCABNQIEIgSnIARCDVobQQN0aikDACIFQiCIIQQgBUL/////D4MiBSACQQwgATUCACIGpyAGQg1aG0EDdGopAwAiBkIgiCIHfiEIIAJBDCABNQIIIgmnIAlCDVobQQN0aiAEIAd+IAhCIIh8IAZC/////w+DIgYgBH4iBEIgiHwgCEL/////D4MgBSAGfkIgiHwgBEL/////D4N8QiCIfDcDACAAQQA2AgAgAEEANgIIIAALtwIBCH4gAkEMIAE1AggiBKcgBEINWhtBA3RqAn4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIQYgAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgRCAFMEQCAEQn+FQgF8IgdC/////w+DIgggBkIgiCIJfiEEIAdCIIgiBSAGQv////8PgyIKfiELIAYgB35QrSAFIAl+IARCIIh8IAtCIIh8IARC/////w+DIAggCn5CIIh8IAtC/////w+DfEIgiHxCf4V8DAELIARC/////w+DIgUgBkIgiCIHfiEIIARCIIgiBCAGQv////8PgyIGfiEJIAQgB34gCEIgiHwgCUIgiHwgCEL/////D4MgBSAGfkIgiHwgCUL/////D4N8QiCIfAs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVUbNwMAIABBADYCACAAQQA2AgggAAtpAQJ+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAiBCACQQwgATUCACIFpyAFQg1aG0EDdGopAwAiBSAEIAVWGzcDACAAQQA2AgAgAEEANgIIIAALaQECfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIgQgAkEMIAE1AgAiBacgBUINWhtBA3RqKQMAIgUgBCAFUxs3AwAgAEEANgIAIABBADYCCCAAC2kBAn4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACIEIAJBDCABNQIAIgWnIAVCDVobQQN0aikDACIFIAQgBVQbNwMAIABBADYCACAAQQA2AgggAAsSACAAQQM2AgAgAEEANgIMIAALEgAgAEEANgIAIABBADYCCCAACyAAIAEoAgAhASAAQQM2AgAgAEEDNgIMIAAgATYCECAAC6IBAQJ/IAAoAgAiASgCDCICQQBKBEAgAkEATARAQYDdAEGwxQBBjwJBEhAAAAsgASgCBCACQQFrIgBBAnRqKAIAIAEgADYCDA8LIAAoAghBDHQiASAAKAIERgRAQbDdABABCyABQYCAgIACSQR/QYAgEBQFQQALIQEgACAAKAIIQQFqNgIIIAAoAgghAEEIQQwQDyICIAA2AgAgAiABNgIEIAILMAEBfyAAQfz///8DSwRAQeDFAEGQxgBBNEErEAAACyAAQQEQDyIBQQAgAPwLACABC5YEAQl/IAAoAgAgASIDQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgFBD3YgAXNB95Svr3hsIgFBDXYgAXNBvdzKlXxsIgFBEHYgAXMiCCAAKAIEcUECdGooAgAhAQJAA0AgAQRAIAEoAggiBEEBcQR/QQAFIAEoAgAgA0YLDQIgBEF+cSEBDAELC0EAIQELIAEEQCABIAI2AgQFIAAoAgwiASAAKAIQRgRAIAAoAhQgAUEDbEEEbUgEfyAAKAIEBSAAKAIEQQF0QQFyCyIGQQFqIgFBAnQQdCEHIAFBA3RBA20iCUEMbBB0IQQgACgCCCIFIAAoAhBBDGxqIQogBCEBA0AgBSAKRwRAIAUoAghBAXFFBEAgASAFKAIAIgs2AgAgASAFKAIENgIEIAEgByALQb3cypV8bEG1z9myAWpBEXdBr9bTvgJsIgsgC0EPdnNB95Svr3hsIgsgC0ENdnNBvdzKlXxsIgsgC0EQdnMgBnFBAnRqIgsoAgA2AgggCyABNgIAIAFBDGohAQsgBUEMaiEFDAELCyAAIAc2AgAgACAGNgIEIAAgBDYCCCAAIAk2AgwgACAAKAIUNgIQCyAAKAIIIAAgACgCECIEQQFqNgIQIARBDGxqIgEgAzYCACABIAI2AgQgACAAKAIUQQFqNgIUIAEgACgCACAIIAAoAgRxQQJ0aiIAKAIANgIIIAAgATYCAAsLsAICBn8CfgJ+IwghBCADKAIUIQUgAkEMIAE1AgAiCqcgCkINWhtBA3RqKQMApyIGRQRAIARBADoAACAFrQwBCyADNQIUIAatfCIKQoCAgIAQWgRAIARBAToAACAFrQwBCyADIAo+AhQgBa0gAygCACIEIApCAX1CDIenIghGDQAaIARBAWohBANAIAQgCEwEQCADKAIMEHMhBiADKAIQQQhBCxAPIglBAjYCACAJIAY2AgQgBCAJEHUgBEEBaiEEDAELCyADIAg2AgAgBa0LIQojCC0AAARAIwgiAS0AAARAIABBAzYCACAAQQJBASABLQABGzYCDCAAIAEoAgQ2AhALIAAPCyACQQwgATUCBCILpyALQg1aG0EDdGogCjcDACAAQQA2AgAgAEEANgIIIAALRgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMANwMAIABBADYCACAAQQA2AgggAAtPAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCDcDAAsgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQgBSBEAgAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0Agg3AwALIABBADYCACAAQQA2AgggAAtjAQF+IAJBDCABNQIAIgSnIARCDVobQQN0aikDAFAEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALZQEBfiACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCAFIEQCACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMANwMACyAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAIAE0AgiKNwMAIABBADYCACAAQQA2AgggAAtMAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIo3AwAgAEEANgIAIABBADYCCCAAC04BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKcgASgCCHisNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAKd4rDcDACAAQQA2AgAgAEEANgIIIAALYAEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIk3AwAgAEEANgIAIABBADYCCCAAC2MBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDAKcgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAp3esNwMAIABBADYCACAAQQA2AgggAAtgAQF+IAJBDCABNQIIIgSnIARCDVobQQN0aiACQQwgATUCBCIEpyAEQg1aG0EDdGopAwAgAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAijcDACAAQQA2AgAgAEEANgIIIAALYwEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMApyACQQwgATUCACIEpyAEQg1aG0EDdGopAwCneKw3AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVK03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIU603AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVq03AwAgAEEANgIAIABBADYCCCAAC00BAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABNAIIVa03AwAgAEEANgIAIABBADYCCCAAC2EBAX4gAkEMIAE1AggiBKcgBEINWhtBA3RqIAJBDCABNQIEIgSnIARCDVobQQN0aikDACACQQwgATUCACIEpyAEQg1aG0EDdGopAwBUrTcDACAAQQA2AgAgAEEANgIIIAALYQEBfiACQQwgATUCCCIEpyAEQg1aG0EDdGogAkEMIAE1AgQiBKcgBEINWhtBA3RqKQMAIAJBDCABNQIAIgSnIARCDVobQQN0aikDAFOtNwMAIABBADYCACAAQQA2AgggAAtOAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiACQQwgATUCACIEpyAEQg1aG0EDdGopAwCnIAEoAgh0rDcDACAAQQA2AgAgAEEANgIIIAALTgEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMApyABKAIIdqw3AwAgAEEANgIAIABBADYCCCAAC1EBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDAMQgASgCCEEfca2HNwMAIABBADYCACAAQQA2AgggAAtRAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABKAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAEIfg6d0rDcDACAAQQA2AgAgAEEANgIIIAALUQEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogASgCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwBCH4Ondqw3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAQh+Dh8Q3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYY3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYg3AwAgAEEANgIAIABBADYCCCAAC1ABAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAJBDCABNQIAIgSnIARCDVobQQN0aikDACABKAIIQT9xrYc3AwAgAEEANgIAIABBADYCCCAAC0wBAX4gAkEMIAE1AgQiBKcgBEINWhtBA3RqIAE0AgggAkEMIAE1AgAiBKcgBEINWhtBA3RqKQMAhjcDACAAQQA2AgAgAEEANgIIIAALTAEBfiACQQwgATUCBCIEpyAEQg1aG0EDdGogATQCCCACQQwgATUCACIEpyAEQg1aG0EDdGopAwCINwMAIABBADYCACAAQQA2AgggAAtNAQF+IAJBDCABNQIEIgSnIARCDVobQQN0aiABNAIIIAJBDCABNQIAIgSnIARCDVobQQN0aikDAIfENwMAIABBADYCACAAQQA2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IAAgARDBASAAKAIAIAAoAgQiAiABIAJqELkBIAAgACgCBCABajYCBAtdAQN/QQhBKBAPIgEgADYCACABQQA2AgQgASABEMIBEMMBIQIgASgCACABKAIEQQEkBxC6ASEAIAEgASgCBCAAKAIIajYCBEEIQScQDyIBIAA2AgAgASACNgIEIAELSAECfyAAQQMQwQEgACgCBCIBIAAoAgAoAgQiAmotAAAgAUEBaiACai0AAEEIdHIgAUECaiACai0AAEEQdHIgACABQQNqNgIEC1cBAn8gAEEEEMEBIAAoAgQiASAAKAIAKAIEIgJqLQAAIAFBAWogAmotAABBCHRyIAFBAmogAmotAABBEHRyIAFBA2ogAmotAABBGHRyIAAgAUEEajYCBAsoAQJ/IABBARDBASAAKAIEIgEgACgCACgCBGotAAAgACABQQFqNgIECzQBAX8gAEH///8/SwRAQeDFAEHAhgFBM0E8EAAACyAAQQN0IgBBDhAPIgFBACAA/AsAIAELxAYCDH8DfkEIQSgQDyICIAA2AgAgAkEANgIEIAIQwgEhACACEMcBIQYgAhDCASEHIAIgACAGbBDDASEIIAIgBxDDASIAKAIIELUBIQMDQCABIAAoAghIBEAgAyABIAEgACgCBGotAAAQtgEgAUEBaiEBDAELCyACIAdBB2pBA3YQwwEhCkEEQRsQDyIJQQA2AgACQCAHQf////8ASw0AIAdBAnQiAEEcEA8iAUEAIAD8CwAgCSABNgIAIAooAghBAWshAQNAIAFBAE4EQCABIAooAgRqLQAAIQIgAUEDdCELQQchAANAIABBAE4EQCACQYABcSEMIAJBAXQhAiAAIAtqIgUgB0gEQCAJKAIAIAVBAnRqQRlBACAEQQFqIAwbIgQgBEEZTxs2AgALIABBAWshAAwBCwsgAUEBayEBDAELC0EEQR0QDyICQQA2AgAgBkH/AXEiAAR/IAgoAgggAG0FQQALEMgBIQRBACEAA0AgACAIKAIISARAQgAhDSAGQQFrQf8BcSEBA0AgAUEATgRAQn8gDUIIhiIOIAgoAgQgACABamoxAAB8Ig8gDSAPViANIA5WchshDSABQQFrIQEMAQsLIAQgACAGQf8BcSIBbUEDdGogDTcDACAAIAFqIQAMAQsLIAIgBDYCAEEAIQFBBEEeEA8iAEEANgIA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WhtBA3RqKQMANwMIIAAgBUEMIAI1AggiBqcgBkINWhtBA3RqKQMANwMQDAYLQYCHASABELIBEK8BQfCfAUHQAkEHEAAACyAAIAI0AgA3AwAMBAsgACACNAIENwMIDAMLIAAgBUEMIAI1AgAiBqcgBkINWhtBA3RqKQMANwMAIAAgAjQCBDcDCAwBCyAAIAVBDCACNQIAIganIAZCDVobQQN0aikDADcDACAAIAVBDCACNQIEIganIAZCDVobQQN0aikDADcDCAsgACACNAIINwMQCyAAC7UDAQl/QQBBAkExQYCjARAQIQQgACgCECICKAIIIQYgAigCECECQRBBJBAPIgVBADYCACAFQQA2AgQgBUEANgIIIAVBADYCDCACQf////8ASwRAQeDFAEGwxQBBxgBBPBAAAAtBCCACIAJBCE0bQQJ0IgdBARAPIghBACAH/AsAIAUgCDYCACAFIAg2AgQgBSAHNgIIIAUgAjYCDANAIAIgA0oEQCAGIANBDGxqIgcoAghBAXFFBEAgBSABIAcoAgAQEiABQQFqIQELIANBAWohAwwBCwsgBSABQQJBABARIAUgATYCDEEAIQFBACEDA0AgAyAFKAIMSARAIAAoAhAgBSgCBCADQQJ0aigCACIHEDYiCCgCBCgCBARAQQAhAgNAIAIgCCgCBBA4KAIISARAIAIgCCgCBBA4KAIEai0AACIGBEAgAQRAIAEoAgQgBhC7AQUQ1wEiASAHQQx0IAJqNgIAQQFBAEEGQQAQECIJQQAgBhC2ASABIAk2AgQLBSABBEAgBCABENIBQQAhAQsLIAJBAWohAgwBCwsLIANBAWohAwwBCwsgAQRAIAQgARDSAQsgBAvZCAINfwF+QQEhAhCuASEJA0ACQCACRQRAIAEEQEGUnAEgACgCBCICIAJBFGsoAhBBA3YQ7QE2AgBBkJwBQYycASgCAEECdkHw9AAQtAEQAQsgAQRAQbScASAAKAIEQdCcARDvASICKAIEIAIoAgxBgIYBELQBNgIAQbCcAUGsnAEoAgBBAnZB8PQAELQBEAELIAEEQEHwnAEgACgCFBCyARCvARABCyABBEBBsJ0BIAAoAhhBChCzARCvARABCwwBCyABBEBB4J0BIAAoAhBBChCzARCvARABCyABBEACQCAAKAIMIgJBCGsoAgBBLEYEQCACKQMA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LABBmBcLGQIAAAASAAAAUwBUAE8AUgBFAF8AVQAzADIAQbwXCwEsAEHIFwsZAgAAABIAAABTAFQATwBSAEUAXwBVADYANABB7BcLATwAQfgXCycCAAAAIAAAAFMAVABPAFIARQBfAEkATQBNAF8ASQBOAEQAXwBVADgAQawYCwE8AEG4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAxADYAQewYCwE8AEH4GAspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQAzADIAQawZCwE8AEG4GQspAgAAACIAAABTAFQATwBSAEUAXwBJAE0ATQBfAEkATgBEAF8AVQA2ADQAQewZCwEsAEH4GQshAgAAABoAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAEGcGgsBLABBqBoLIQIAAAAaAAAAQgBSAEEATgBDAEgAXwBFAFEAXwBJAE0ATQBBzBoLASwAQdgaCyECAAAAGgAAAEIAUgBBAE4AQwBIAF8ATgBFAF8ASQBNAE0AQfwaCwE8AEGIGwslAgAAAB4AAABCAFIAQQBOAEMASABfAEwAVABfAFUAXwBJAE0ATQBBvBsLATwAQcgbCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABFAF8AVQBfAEkATQBNAEH8GwsBPABBiBwLJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBHAEUAXwBVAF8ASQBNAE0AQbwcCwE8AEHIHAslAgAAAB4AAABCAFIAQQBOAEMASABfAEcAVABfAFUAXwBJAE0ATQBB/BwLATwAQYgdCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ATABUAF8AUwBfAEkATQBNAEG8HQsBPABByB0LJQIAAAAeAAAAQgBSAEEATgBDAEgAXwBMAEUAXwBTAF8ASQBNAE0AQfwdCwE8AEGIHgslAgAAAB4AAABCAFIAQQBOAEMASABfAEcARQBfAFMAXwBJAE0ATQBBvB4LATwAQcgeCyUCAAAAHgAAAEIAUgBBAE4AQwBIAF8ARwBUAF8AUwBfAEkATQBNAEH8HgsBLABBiB8LFwIAAAAQAAAATQBPAFYARQBfAFIARQBHAEGsHwsBPABBuB8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8ANgA0AEHsHwsBPABB+B8LKQIAAAAiAAAAQwBPAFUATgBUAF8AUwBFAFQAXwBCAEkAVABTAF8AMwAyAEGsIAsBPABBuCALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8ANgA0AEHsIAsBPABB+CALLwIAAAAoAAAATABFAEEARABJAE4ARwBfAFoARQBSAE8AXwBCAEkAVABTAF8AMwAyAEGsIQsBPABBuCELMQIAAAAqAAAAVABSAEEASQBMAEkATgBHAF8AWgBFAFIATwBfAEIASQBUAFMAXwA2ADQAQewhCwE8AEH4IQsxAgAAACoAAABUAFIAQQBJAEwASQBOAEcAXwBaAEUAUgBPAF8AQgBJAFQAUwBfADMAMgBBrCILASwAQbgiCyECAAAAGgAAAFMASQBHAE4AXwBFAFgAVABFAE4ARABfADgAQdwiCwEsAEHoIgsjAgAAABwAAABTAEkARwBOAF8ARQBYAFQARQBOAEQAXwAxADYAQYwjCwEsAEGYIwsjAgAAABwAAABaAEUAUgBPAF8ARQBYAFQARQBOAEQAXwAxADYAQbwjCwEsAEHIIwshAgAAABoAAABSAEUAVgBFAFIAUwBFAF8AQgBZAFQARQBTAEHsIwsBLABB+CMLHwIAAAAYAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADgAQZwkCwEsAEGoJAshAgAAABoAAABTAFQATwBSAEUAXwBJAE4ARABfAFUAMQA2AEHMJAsBLABB2CQLIQIAAAAaAAAAUwBUAE8AUgBFAF8ASQBOAEQAXwBVADMAMgBB/CQLASwAQYglCyECAAAAGgAAAFMAVABPAFIARQBfAEkATgBEAF8AVQA2ADQAQawlCwEsAEG4JQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBVADgAQdwlCwEsAEHoJQsdAgAAABYAAABMAE8AQQBEAF8ASQBOAEQAXwBJADgAQYwmCwEsAEGYJgsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBVADEANgBBvCYLASwAQcgmCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAEkAMQA2AEHsJgsBLABB+CYLHwIAAAAYAAAATABPAEEARABfAEkATgBEAF8AVQAzADIAQZwnCwEsAEGoJwsfAgAAABgAAABMAE8AQQBEAF8ASQBOAEQAXwBJADMAMgBBzCcLASwAQdgnCx8CAAAAGAAAAEwATwBBAEQAXwBJAE4ARABfAFUANgA0AEH8JwsBLABBiCgLGwIAAAAUAAAAQQBEAEQAXwBJAE0ATQBfADMAMgBBrCgLASwAQbgoCxUCAAAADgAAAEEATgBEAF8ASQBNAE0AQdwoCwEsAEHoKAsVAgAAAA4AAABYAE8AUgBfAEkATQBNAEGMKQsBHABBmCkLEwIAAAAMAAAATwBSAF8ASQBNAE0AQawpCwEsAEG4KQsbAgAAABQAAABNAFUATABfAEkATQBNAF8AMwAyAEHcKQsBLABB6CkLHwIAAAAYAAAAUwBFAFQAXwBMAFQAXwBVAF8ASQBNAE0AQYwqCwEsAEGYKgsfAgAAABgAAABTAEUAVABfAEwAVABfAFMAXwBJAE0ATQBBvCoLASwAQcgqCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwAzADIAQewqCwEsAEH4KgshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8AMwAyAEGcKwsBLABBqCsLIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADMAMgBBzCsLASwAQdgrCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADMAMgBB/CsLASwAQYgsCx8CAAAAGAAAAFMARQBUAF8ARwBUAF8AVQBfAEkATQBNAEGsLAsBLABBuCwLHwIAAAAYAAAAUwBFAFQAXwBHAFQAXwBTAF8ASQBNAE0AQdwsCwE8AEHoLAspAgAAACIAAABTAEgATABPAF8ATABfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwtCwE8AEGoLQspAgAAACIAAABTAEgATABPAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQdwtCwE8AEHoLQspAgAAACIAAABTAEgAQQBSAF8AUgBfAEkATQBNAF8AQQBMAFQAXwAzADIAQZwuCwEsAEGoLgsdAgAAABYAAABDAE0ATwBWAF8ASQBaAF8ASQBNAE0AQcwuCwEsAEHYLgsdAgAAABYAAABDAE0ATwBWAF8ATgBaAF8ASQBNAE0AQfwuCwEsAEGILwsbAgAAABQAAABBAEQARABfAEkATQBNAF8ANgA0AEGsLwsBLABBuC8LGwIAAAAUAAAATQBVAEwAXwBJAE0ATQBfADYANABB3C8LASwAQegvCyECAAAAGgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwA2ADQAQYwwCwEsAEGYMAshAgAAABoAAABTAEgATABPAF8AUgBfAEkATQBNAF8ANgA0AEG8MAsBLABByDALIQIAAAAaAAAAUwBIAEEAUgBfAFIAXwBJAE0ATQBfADYANABB7DALASwAQfgwCyMCAAAAHAAAAE4ARQBHAF8AQQBEAEQAXwBJAE0ATQBfADYANABBnDELATwAQagxCykCAAAAIgAAAFMASABMAE8AXwBMAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DELATwAQegxCykCAAAAIgAAAFMASABMAE8AXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABBnDILATwAQagyCykCAAAAIgAAAFMASABBAFIAXwBSAF8ASQBNAE0AXwBBAEwAVABfADYANABB3DILASwAQegyCx8CAAAAGAAAAFIATwBUAF8AUgBfADYANABfAEkATQBNAEGMMwsBPABBmDMLJwIAAAAgAAAAUgBPAFQAXwBSAF8ANgA0AF8ASQBNAE0AXwBBAEwAVABBzDMLASwAQdgzCx8CAAAAGAAAAFIATwBUAF8AUgBfADMAMgBfAEkATQBNAEH8MwsBPABBiDQLJwIAAAAgAAAAUgBPAFQAXwBSAF8AMwAyAF8ASQBNAE0AXwBBAEwAVABBvDQLASwAQcg0CxkCAAAAEgAAAEIAUgBBAE4AQwBIAF8ARQBRAEHsNAsBLABB+DQLGQIAAAASAAAAQgBSAEEATgBDAEgAXwBOAEUAQZw1CwEsAEGoNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFUAQcw1CwEsAEHYNQsdAgAAABYAAABCAFIAQQBOAEMASABfAEwAVABfAFMAQfw1CwEsAEGINgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFUAQaw2CwEsAEG4NgsdAgAAABYAAABCAFIAQQBOAEMASABfAEcARQBfAFMAQdw2CwE8AEHoNgspAgAAACIAAABMAE8AQQBEAF8ASQBNAE0AXwBKAFUATQBQAF8ASQBOAEQAQZw3CwEcAEGoNwsTAgAAAAwAAABBAEQARABfADMAMgBBvDcLARwAQcg3CxMCAAAADAAAAFMAVQBCAF8AMwAyAEHcNwsBHABB6DcLEwIAAAAMAAAATQBVAEwAXwAzADIAQfw3CwEsAEGIOAsXAgAAABAAAABEAEkAVgBfAFUAXwAzADIAQaw4CwEsAEG4OAsXAgAAABAAAABEAEkAVgBfAFMAXwAzADIAQdw4CwEsAEHoOAsXAgAAABAAAABSAEUATQBfAFUAXwAzADIAQYw5CwEsAEGYOQsXAgAAABAAAABSAEUATQBfAFMAXwAzADIAQbw5CwEsAEHIOQsZAgAAABIAAABTAEgATABPAF8ATABfADMAMgBB7DkLASwAQfg5CxkCAAAAEgAAAFMASABMAE8AXwBSAF8AMwAyAEGcOgsBLABBqDoLGQIAAAASAAAAUwBIAEEAUgBfAFIAXwAzADIAQcw6CwEcAEHYOgsTAgAAAAwAAABBAEQARABfADYANABB7DoLARwAQfg6CxMCAAAADAAAAFMAVQBCAF8ANgA0AEGMOwsBHABBmDsLEwIAAAAMAAAATQBVAEwAXwA2ADQAQaw7CwEsAEG4OwsXAgAAABAAAABEAEkAVgBfAFUAXwA2ADQAQdw7CwEsAEHoOwsXAgAAABAAAABEAEkAVgBfAFMAXwA2ADQAQYw8CwEsAEGYPAsXAgAAABAAAABSAEUATQBfAFUAXwA2ADQAQbw8CwEsAEHIPAsXAgAAABAAAABSAEUATQBfAFMAXwA2ADQAQew8CwEsAEH4PAsZAgAAABIAAABTAEgATABPAF8ATABfADYANABBnD0LASwAQag9CxkCAAAAEgAAAFMASABMAE8AXwBSAF8ANgA0AEHMPQsBLABB2D0LGQIAAAASAAAAUwBIAEEAUgBfAFIAXwA2ADQAQfw9CwEcAEGIPgsNAgAAAAYAAABBAE4ARABBnD4LARwAQag+Cw0CAAAABgAAAFgATwBSAEG8PgsBHABByD4LCwIAAAAEAAAATwBSAEHcPgsBLABB6D4LIQIAAAAaAAAATQBVAEwAXwBVAFAAUABFAFIAXwBTAF8AUwBBjD8LASwAQZg/CyECAAAAGgAAAE0AVQBMAF8AVQBQAFAARQBSAF8AVQBfAFUAQbw/CwEsAEHIPwshAgAAABoAAABNAFUATABfAFUAUABQAEUAUgBfAFMAXwBVAEHsPwsBLABB+D8LFwIAAAAQAAAAUwBFAFQAXwBMAFQAXwBVAEGcwAALASwAQajAAAsXAgAAABAAAABTAEUAVABfAEwAVABfAFMAQczAAAsBLABB2MAACxUCAAAADgAAAEMATQBPAFYAXwBJAFoAQfzAAAsBLABBiMEACxUCAAAADgAAAEMATQBPAFYAXwBOAFoAQazBAAsBLABBuMEACxcCAAAAEAAAAFIATwBUAF8ATABfADYANABB3MEACwEsAEHowQALFwIAAAAQAAAAUgBPAFQAXwBMAF8AMwAyAEGMwgALASwAQZjCAAsXAgAAABAAAABSAE8AVABfAFIAXwA2ADQAQbzCAAsBLABByMIACxcCAAAAEAAAAFIATwBUAF8AUgBfADMAMgBB7MIACwEsAEH4wgALFQIAAAAOAAAAQQBOAEQAXwBJAE4AVgBBnMMACwEcAEGowwALEwIAAAAMAAAATwBSAF8ASQBOAFYAQbzDAAsBHABByMMACw8CAAAACAAAAFgATgBPAFIAQdzDAAsBHABB6MMACw0CAAAABgAAAE0AQQBYAEH8wwALARwAQYjEAAsRAgAAAAoAAABNAEEAWABfAFUAQZzEAAsBHABBqMQACw0CAAAABgAAAE0ASQBOAEG8xAALARwAQcjEAAsRAgAAAAoAAABNAEkATgBfAFUAQdzEAAsBPABB6MQACysCAAAAJAAAAEkAbgBkAGUAeAAgAG8AdQB0ACAAbwBmACAAcgBhAG4AZwBlAEGcxQALASwAQajFAAshAgAAABoAAAB+AGwAaQBiAC8AYQByAHIAYQB5AC4AdABzAEHMxQALASwAQdjFAAsjAgAAABwAAABJAG4AdgBhAGwAaQBkACAAbABlAG4AZwB0AGgAQfzFAAsBPABBiMYACy0CAAAAJgAAAH4AbABpAGIALwBhAHIAcgBhAHkAYgB1AGYAZgBlAHIALgB0AHMAQbzGAAsBHABByMYACwkVAAAACAAAAA4AQdzGAAsBHABB6MYACwkVAAAACAAAAA8AQfzGAAsBHABBiMcACwkVAAAACAAAABAAQZzHAAsBHABBqMcACwkVAAAACAAAABEAQbzHAAsBHABByMcACwkVAAAACAAAABIAQdzHAAsBHABB6McACwkVAAAACAAAABMAQfzHAAsBHABBiMgACwkVAAAACAAAABQAQZzIAAsBHABBqMgACwkVAAAACAAAABUAQbzIAAsBHABByMgACwkVAAAACAAAABYAQdzIAAsBHABB6MgACwkVAAAACAAAABcAQfzIAAsBHABBiMkACwkVAAAACAAAABgAQZzJAAsBHABBqMkACwkVAAAACAAAABkAQbzJAAsBHABByMkACwkVAAAACAAAABoAQdzJAAsBHABB6MkACwkVAAAACAAAABsAQfzJAAsBHABBiMoACwkVAAAACAAAABwAQZzKAAsBHABBqMoACwkVAAAACAAAAB0AQbzKAAsBHABByMoACwkVAAAACAAAAB4AQdzKAAsBHABB6MoACwkVAAAACAAAAB8AQfzKAAsBHABBiMsACwkVAAAACAAAACAAQZzLAAsBHABBqMsACwkVAAAACAAAACEAQbzLAAsBHABByMsACwkVAAAACAAAACIAQdzLAAsBHABB6MsACwkVAAAACAAAACMAQfzLAAsBHABBiMwACwkVAAAACAAAACQAQZzMAAsBHABBqMwACwkVAAAACAAAACUAQbzMAAsBHABByMwACwkVAAAACAAAACYAQdzMAAsBHABB6MwACwkVAAAACAAAACcAQfzMAAsBHABBiM0ACwkVAAAACAAAACgAQZzNAAsBHABBqM0ACwkVAAAACAAAACkAQbzNAAsBHABByM0ACwkVAAAACAAAACoAQdzNAAsBHABB6M0ACwkVAAAACAAAACsAQfzNAAsBHABBiM4ACwkVAAAACAAAACwAQZzOAAsBHABBqM4ACwkVAAAACAAAAC0AQbzOAAsBPABByM4ACysCAAAAJAAAAEsAZQB5ACAAZABvAGUAcwAgAG4AbwB0ACAAZQB4AGkAcwB0AEH8zgALASwAQYjPAAsdAgAAABYAAAB+AGwAaQBiAC8AbQBhAHAALgB0AHMAQazPAAsBHABBuM8ACwkVAAAACAAAAC4AQczPAAsBHABB2M8ACwkVAAAACAAAAC8AQezPAAsBHABB+M8ACwkVAAAACAAAADAAQYzQAAsBHABBmNAACwkVAAAACAAAADEAQazQAAsBHABBuNAACwkVAAAACAAAADIAQczQAAsBHABB2NAACwkVAAAACAAAADMAQezQAAsBHABB+NAACwkVAAAACAAAADQAQYzRAAsBHABBmNEACwkVAAAACAAAADUAQazRAAsBHABBuNEACwkVAAAACAAAADYAQczRAAsBHABB2NEACwkVAAAACAAAADcAQezRAAsBHABB+NEACwkVAAAACAAAADgAQYzSAAsBHABBmNIACwkVAAAACAAAADkAQazSAAsBHABBuNIACwkVAAAACAAAADoAQczSAAsBHABB2NIACwkVAAAACAAAADsAQezSAAsBHABB+NIACwkVAAAACAAAADwAQYzTAAsBHABBmNMACwkVAAAACAAAAD0AQazTAAsBHABBuNMACwkVAAAACAAAAD4AQczTAAsBHABB2NMACwkVAAAACAAAAD8AQezTAAsBHABB+NMACwkVAAAACAAAAEAAQYzUAAsBHABBmNQACwkVAAAACAAAAEEAQazUAAsBHABBuNQACwkVAAAACAAAAEIAQczUAAsBHABB2NQACwkVAAAACAAAAEMAQezUAAsBHABB+NQACwkVAAAACAAAAEQAQYzVAAsBHABBmNUACwkVAAAACAAAAEUAQazVAAsBHABBuNUACwkVAAAACAAAAEYAQczVAAsBHABB2NUACwkVAAAACAAAAEcAQezVAAsBHABB+NUACwkVAAAACAAAAEgAQYzWAAsBHABBmNYACwkVAAAACAAAAEkAQazWAAsBHABBuNYACwkVAAAACAAAAEoAQczWAAsBHABB2NYACwkVAAAACAAAAEsAQezWAAsBHABB+NYACwkVAAAACAAAAEwAQYzXAAsBHABBmNcACwkVAAAACAAAAE0AQazXAAsBHABBuNcACwkVAAAACAAAAE4AQczXAAsBHABB2NcACwkVAAAACAAAAE8AQezXAAsBHABB+NcACwkVAAAACAAAAFAAQYzYAAsBHABBmNgACwkVAAAACAAAAFEAQazYAAsBHABBuNgACwkVAAAACAAAAFIAQczYAAsBHABB2NgACwkVAAAACAAAAFMAQezYAAsBHABB+NgACwkVAAAACAAAAFQAQYzZAAsBHABBmNkACwkVAAAACAAAAFUAQazZAAsBHABBuNkACwkVAAAACAAAAFYAQczZAAsBHABB2NkACwkVAAAACAAAAFcAQezZAAsBHABB+NkACwkVAAAACAAAAFgAQYzaAAsBHABBmNoACwkVAAAACAAAAFkAQazaAAsBHABBuNoACwkVAAAACAAAAFoAQczaAAsBHABB2NoACwkVAAAACAAAAFsAQezaAAsBHABB+NoACwkVAAAACAAAAFwAQYzbAAsBHABBmNsACwkVAAAACAAAAF0AQazbAAsBHABBuNsACwkVAAAACAAAAF4AQczbAAsBHABB2NsACwkVAAAACAAAAF8AQezbAAsBHABB+NsACwkVAAAACAAAAGAAQYzcAAsBHABBmNwACwkVAAAACAAAAGEAQazcAAsBHABBuNwACwkVAAAACAAAAGIAQczcAAsBHABB2NwACwkVAAAACAAAAGMAQezcAAsBLABB+NwACyMCAAAAHAAAAEEAcgByAGEAeQAgAGkAcwAgAGUAbQBwAHQAeQBBnN0ACwFcAEGo3QALUwIAAABMAAAAVwBhAHIAbgBpAG4AZwA6ACAAUgB1AG4AIABvAHUAdAAgAG8AZgAgAHAAYQBnAGUAcwAhACAAQQBsAGwAbwBjAGEAdABpAG4AZwAuAEH83QALARwAQYjeAAsJFQAAAAgAAABkAEGc3gALARwAQajeAAsJFQAAAAgAAABlAEG83gALARwAQcjeAAsJFQAAAAgAAABmAEHc3gALARwAQejeAAsJFQAAAAgAAABnAEH83gALARwAQYjfAAsJFQAAAAgAAABoAEGc3wALARwAQajfAAsJFQAAAAgAAABpAEG83wALARwAQcjfAAsJFQAAAAgAAABqAEHc3wALARwAQejfAAsJFQAAAAgAAABrAEH83wALARwAQYjgAAsJFQAAAAgAAABsAEGc4AALARwAQajgAAsJFQAAAAgAAABtAEG84AALARwAQcjgAAsJFQAAAAgAAABuAEHc4AALARwAQejgAAsJFQAAAAgAAABvAEH84AALARwAQYjhAAsJFQAAAAgAAABwAEGc4QALARwAQajhAAsJFQAAAAgAAABxAEG84QALARwAQcjhAAsJFQAAAAgAAAByAEHc4QALARwAQejhAAsJFQAAAAgAAABzAEH84QALARwAQYjiAAsJFQAAAAgAAAB0AEGc4gALARwAQajiAAsJFQAAAAgAAAB1AEG84gALARwAQcjiAAsJFQAAAAgAAAB2AEHc4gALARwAQejiAAsJFQAAAAgAAAB3AEH84gALARwAQYjjAAsJFQAAAAgAAAB4AEGc4wALARwAQajjAAsJFQAAAAgAAAB5AEG84wALARwAQcjjAAsJFQAAAAgAAAB6AEHc4wALARwAQejjAAsJFQAAAAgAAAB7AEH84wALARwAQYjkAAsJFQAAAAgAAAB8AEGc5AALARwAQajkAAsJFQAAAAgAAAB9AEG85AALARwAQcjkAAsJFQAAAAgAAAB+AEHc5AALARwAQejkAAsJFQAAAAgAAAB/AEH85AALARwAQYjlAAsJFQAAAAgAAACAAEGc5QALARwAQajlAAsJFQAAAAgAAACBAEG85QALARwAQcjlAAsJFQAAAAgAAACCAEHc5QALARwAQejlAAsJFQAAAAgAAACDAEH85QALARwAQYjmAAsJFQAAAAgAAACEAEGc5gALARwAQajmAAsJFQAAAAgAAACFAEG85gALARwAQcjmAAsJFQAAAAgAAACGAEHc5gALARwAQejmAAsJFQAAAAgAAACHAEH85gALARwAQYjnAAsJFQAAAAgAAACIAEGc5wALARwAQajnAAsJFQAAAAgAAACJAEG85wALARwAQcjnAAsJFQAAAAgAAACKAEHc5wALARwAQejnAAsJFQAAAAgAAACLAEH85wALARwAQYjoAAsJFQAAAAgAAACMAEGc6AALARwAQajoAAsJFQAAAAgAAACNAEG86AALARwAQcjoAAsJFQAAAAgAAACOAEHc6AALARwAQejoAAsJFQAAAAgAAACPAEH86AALARwAQYjpAAsJFQAAAAgAAACQAEGc6QALARwAQajpAAsJFQAAAAgAAACRAEG86QALARwAQcjpAAsJFQAAAAgAAACSAEHc6QALARwAQejpAAsJFQAAAAgAAACTAEH86QALARwAQYjqAAsJFQAAAAgAAACUAEGc6gALARwAQajqAAsJFQAAAAgAAACVAEG86gALARwAQcjqAAsJFQAAAAgAAACWAEHc6gALARwAQejqAAsJFQAAAAgAAACXAEH86gALARwAQYjrAAsJFQAAAAgAAACYAEGc6wALARwAQajrAAsJFQAAAAgAAACZAEG86wALAqwDAEHI6wALogcBAAAAnAMAACAuAABALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAABgLgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAECcAAAAuAAAALgAAAC4AAAAuAAAALgAAAC4AAAAuAAAALgAAAC4A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MAA5ADEAOQAyADkAMwA5ADQAOQA1ADkANgA5ADcAOQA4ADkAOQBBzPsACwIcBABB2PsAC4cIAgAAAAAEAAAwADAAMAAxADAAMgAwADMAMAA0ADAANQAwADYAMAA3ADAAOAAwADkAMABhADAAYgAwAGMAMABkADAAZQAwAGYAMQAwADEAMQAxADIAMQAzADEANAAxADUAMQA2ADEANwAxADgAMQA5ADEAYQAxAGIAMQBjADEAZAAxAGUAMQBmADIAMAAyADEAMgAyADIAMwAyADQAMgA1ADIANgAyADcAMgA4ADIAOQAyAGEAMgBiADIAYwAyAGQAMgBlADIAZgAzADAAMwAxADMAMgAzADMAMwA0ADMANQAzADYAMwA3ADMAOAAzADkAMwBhADMAYgAzAGMAMwBkADMAZQAzAGYANAAwADQAMQA0ADIANAAzADQANAA0ADUANAA2ADQANwA0ADgANAA5ADQAYQA0AGIANABjADQAZAA0AGUANABmADUAMAA1ADEANQAyADUAMwA1ADQANQA1ADUANgA1ADcANQA4ADUAOQA1AGEANQBiADUAYwA1AGQANQBlADUAZgA2ADAANgAxADYAMgA2ADMANgA0ADYANQA2ADYANgA3ADYAOAA2ADkANgBhADYAYgA2AGMANgBkADYAZQA2AGYANwAwADcAMQA3ADIANwAzADcANAA3ADUANwA2ADcANwA3ADgANwA5ADcAYQA3AGIANwBjADcAZAA3AGUANwBmADgAMAA4ADEAOAAyADgAMwA4ADQAOAA1ADgANgA4ADcAOAA4ADgAOQA4AGEAOABiADgAYwA4AGQAOABlADgAZgA5ADAAOQAxADkAMgA5ADMAOQA0ADkANQA5ADYAOQA3ADkAOAA5ADkAOQBhADkAYgA5AGMAOQBkADkAZQA5AGYAYQAwAGEAMQBhADIAYQAzAGEANABhADUAYQA2AGEANwBhADgAYQA5AGEAYQBhAGIAYQBjAGEAZABhAGUAYQBmAGIAMABiADEAYgAyAGIAMwBiADQAYgA1AGIANgBiADcAYgA4AGIAOQBiAGEAYgBiAGIAYwBiAGQAYgBlAGIAZgBjADAAYwAxAGMAMgBjADMAYwA0AGMANQBjADYAYwA3AGMAOABjADkAYwBhAGMAYgBjAGMAYwBkAGMAZQBjAGYAZAAwAGQA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";
|
|
20820
|
+
let compiledModulePromise = null;
|
|
20821
|
+
|
|
20822
|
+
// Helper function to decode and instantiate the module
|
|
20823
|
+
async function release_stub_inline_instantiate(imports) {
|
|
20824
|
+
if (compiledModulePromise === null) {
|
|
20825
|
+
compiledModulePromise = WebAssembly.compile(getWasmBytes());
|
|
20826
|
+
}
|
|
20827
|
+
const module = await compiledModulePromise;
|
|
20828
|
+
return instantiate(module, imports);
|
|
20829
|
+
}
|
|
20830
|
+
|
|
20831
|
+
// Helper function to just get the bytes
|
|
20832
|
+
function getWasmBytes() {
|
|
20833
|
+
return Uint8Array.from(atob(wasmBase64), c => c.charCodeAt(0));
|
|
20834
|
+
}
|
|
20835
|
+
|
|
20836
|
+
;// CONCATENATED MODULE: ./packages/core/pvm-interpreter-ananas/index.ts
|
|
20824
20837
|
|
|
20825
20838
|
|
|
20826
20839
|
|
|
20827
20840
|
|
|
20828
|
-
// TODO [ToDr] Temporary solution. We need to inline WASM files for the final build.
|
|
20829
|
-
const wasmPath = (0,external_node_url_namespaceObject.fileURLToPath)(new URL(import.meta.resolve("@fluffylabs/anan-as/release-mini.wasm"), import.meta.url));
|
|
20830
|
-
const wasmBuffer = (0,external_node_fs_namespaceObject.readFileSync)(wasmPath);
|
|
20831
20841
|
// Max u32 value
|
|
20832
20842
|
const INF_STEPS = 2 ** 32 - 1;
|
|
20833
20843
|
class AnanasRegisters {
|
|
@@ -20913,8 +20923,7 @@ class AnanasInterpreter {
|
|
|
20913
20923
|
this.gas = new AnanasGasCounter(instance);
|
|
20914
20924
|
}
|
|
20915
20925
|
static async new() {
|
|
20916
|
-
const
|
|
20917
|
-
const instance = await instantiate(wasmModule, {
|
|
20926
|
+
const instance = await release_stub_inline_instantiate({
|
|
20918
20927
|
env: {
|
|
20919
20928
|
abort: () => {
|
|
20920
20929
|
throw new Error("Abort called from WASM");
|
|
@@ -22619,7 +22628,7 @@ class Accumulate {
|
|
|
22619
22628
|
* https://graypaper.fluffylabs.dev/#/7e6ff6a/18d70118d701?v=0.6.7
|
|
22620
22629
|
*/
|
|
22621
22630
|
async accumulateSingleService(serviceId, transfers, operands, gasCost, slot, entropy, inputStateUpdate) {
|
|
22622
|
-
accumulate_logger.log `Accumulating service ${serviceId}, transfers: ${transfers.length} operands: ${operands.length} at slot: ${slot}
|
|
22631
|
+
accumulate_logger.log `Accumulating service ${serviceId}, transfers: ${transfers.length} operands: ${operands.length} at slot: ${slot}`;
|
|
22623
22632
|
const updatedState = new PartiallyUpdatedState(this.state, inputStateUpdate);
|
|
22624
22633
|
// update service balance from incoming transfers
|
|
22625
22634
|
if (compatibility_Compatibility.isGreaterOrEqual(compatibility_GpVersion.V0_7_1)) {
|
|
@@ -24322,6 +24331,7 @@ class Statistics {
|
|
|
24322
24331
|
|
|
24323
24332
|
|
|
24324
24333
|
|
|
24334
|
+
|
|
24325
24335
|
class DbHeaderChain {
|
|
24326
24336
|
blocks;
|
|
24327
24337
|
constructor(blocks) {
|
|
@@ -24515,7 +24525,7 @@ class OnChain {
|
|
|
24515
24525
|
}
|
|
24516
24526
|
const { preimages, ...preimagesRest } = preimagesResult.ok;
|
|
24517
24527
|
assertEmpty(preimagesRest);
|
|
24518
|
-
const timerAccumulate = measure(
|
|
24528
|
+
const timerAccumulate = measure(`import:accumulate (${PvmBackend[this.accumulate.pvm]})`);
|
|
24519
24529
|
// accumulate
|
|
24520
24530
|
const accumulateResult = await this.accumulate.transition({
|
|
24521
24531
|
slot: timeSlot,
|