@taquito/taquito 20.0.2-beta.2 → 21.0.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/lib/constants.js +4 -1
- package/dist/lib/read-provider/rpc-read-adapter.js +13 -2
- package/dist/lib/subscribe/filters.js +0 -2
- package/dist/lib/subscribe/polling-subcribe-provider.js +1 -3
- package/dist/lib/tz/rpc-tz-provider.js +9 -0
- package/dist/lib/version.js +2 -2
- package/dist/taquito.es6.js +29 -10
- package/dist/taquito.es6.js.map +1 -1
- package/dist/taquito.min.js +1 -1
- package/dist/taquito.umd.js +29 -10
- package/dist/taquito.umd.js.map +1 -1
- package/dist/types/constants.d.ts +4 -1
- package/dist/types/operations/index.d.ts +1 -1
- package/dist/types/read-provider/interface.d.ts +9 -2
- package/dist/types/read-provider/rpc-read-adapter.d.ts +9 -2
- package/dist/types/signer/interface.d.ts +1 -1
- package/dist/types/tz/interface.d.ts +5 -0
- package/dist/types/tz/rpc-tz-provider.d.ts +1 -0
- package/package.json +11 -11
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ The `@taquito/taquito` package contains higher-level functionality that builds u
|
|
|
7
7
|
## CDN Bundle
|
|
8
8
|
|
|
9
9
|
```html
|
|
10
|
-
<script src="https://unpkg.com/@taquito/taquito@
|
|
10
|
+
<script src="https://unpkg.com/@taquito/taquito@21.0.0-beta.0/dist/taquito.min.js"
|
|
11
11
|
crossorigin="anonymous" integrity="sha384-IxvP0ECHi5oqLyz94wF85pU9+ktcsL1HHtA42MITxZsGbsUMEu/g+0Vkjj5vqiMR"></script>
|
|
12
12
|
```
|
|
13
13
|
|
package/dist/lib/constants.js
CHANGED
|
@@ -73,6 +73,7 @@ var Protocols;
|
|
|
73
73
|
Protocols["ProxfordY"] = "ProxfordYmVfjWnRcgjWH36fW6PArwqykTFzotUxRs6gmTcZDuH";
|
|
74
74
|
Protocols["PtParisBx"] = "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ";
|
|
75
75
|
Protocols["PsParisCZ"] = "PsParisCZo7KAh1Z1smVd9ZMZ1HHn5gkzbM94V3PLCpknFWhUAi";
|
|
76
|
+
Protocols["PsQuebecB"] = "PsQuebecBo3zZmhQT7KdEQ2RRDtncE6gQFRPgwkKEyC1ea995G1";
|
|
76
77
|
Protocols["ProtoALpha"] = "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK";
|
|
77
78
|
})(Protocols || (exports.Protocols = Protocols = {}));
|
|
78
79
|
exports.protocols = {
|
|
@@ -92,7 +93,8 @@ exports.protocols = {
|
|
|
92
93
|
'017': [Protocols.PtNairobi],
|
|
93
94
|
'019': [Protocols.ProxfordY],
|
|
94
95
|
'020': [Protocols.PtParisBx, Protocols.PsParisCZ],
|
|
95
|
-
'021': [Protocols.
|
|
96
|
+
'021': [Protocols.PsQuebecB],
|
|
97
|
+
'022': [Protocols.ProtoALpha],
|
|
96
98
|
};
|
|
97
99
|
var ChainIds;
|
|
98
100
|
(function (ChainIds) {
|
|
@@ -114,6 +116,7 @@ var ChainIds;
|
|
|
114
116
|
ChainIds["OXFORDNET2"] = "NetXxWsskGahzQB";
|
|
115
117
|
ChainIds["PARISBNET"] = "NetXo8SqH1c38SS";
|
|
116
118
|
ChainIds["PARISCNET"] = "NetXXWAHLEvre9b";
|
|
119
|
+
ChainIds["QUEBECBNET"] = "NetXamR3dD5nwmS";
|
|
117
120
|
})(ChainIds || (exports.ChainIds = ChainIds = {}));
|
|
118
121
|
// A fixed fee reveal operation gasLimit accepted by both simulate and injection endpoint is between 1.2-5 times of actual gas consumption (3.5 fails occasionally with gas exhausted; 4 fails occasionally with fee too low)
|
|
119
122
|
const getRevealGasLimit = (address) => Math.round((getRevealGasLimitInternal(address) * 37) / 10);
|
|
@@ -18,8 +18,8 @@ class RpcReadAdapter {
|
|
|
18
18
|
this.rpc = rpc;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* @description
|
|
22
|
-
* @param address address from which we want to retrieve the balance
|
|
21
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'spendable' RPC.
|
|
22
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
23
23
|
* @param block from which we want to retrieve the balance
|
|
24
24
|
* @returns the balance in mutez
|
|
25
25
|
*/
|
|
@@ -28,6 +28,17 @@ class RpcReadAdapter {
|
|
|
28
28
|
return this.rpc.getBalance(address, { block: String(block) });
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'balance' RPC.
|
|
33
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
34
|
+
* @param block from which we want to retrieve the balance
|
|
35
|
+
* @returns the balance in mutez
|
|
36
|
+
*/
|
|
37
|
+
getSpendable(address, block) {
|
|
38
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
39
|
+
return this.rpc.getSpendable(address, { block: String(block) });
|
|
40
|
+
});
|
|
41
|
+
}
|
|
31
42
|
/**
|
|
32
43
|
* @description Access the delegate of a contract, if any.
|
|
33
44
|
* @param address contract address from which we want to retrieve the delegate (baker)
|
|
@@ -7,8 +7,6 @@ const sourceFilter = (x, filter) => {
|
|
|
7
7
|
switch (x.kind) {
|
|
8
8
|
case 'attestation':
|
|
9
9
|
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
10
|
-
case 'endorsement':
|
|
11
|
-
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
12
10
|
case 'activate_account':
|
|
13
11
|
return 'metadata' in x && x.pkh === filter.source;
|
|
14
12
|
default:
|
|
@@ -84,9 +84,7 @@ class PollingSubscribeProvider {
|
|
|
84
84
|
const constants = yield this.context.readProvider.getProtocolConstants('head');
|
|
85
85
|
const blockTime = constants.minimal_block_delay
|
|
86
86
|
? constants.minimal_block_delay.multipliedBy(1000)
|
|
87
|
-
:
|
|
88
|
-
? constants.time_between_blocks[0].multipliedBy(1000)
|
|
89
|
-
: new bignumber_js_1.default(defaultIntervalTestnetsMainnet);
|
|
87
|
+
: new bignumber_js_1.default(defaultIntervalTestnetsMainnet);
|
|
90
88
|
const confirmationPollingInterval = blockTime.dividedBy(3);
|
|
91
89
|
this.config.pollingIntervalMilliseconds =
|
|
92
90
|
confirmationPollingInterval.toNumber() === 0
|
|
@@ -29,6 +29,15 @@ class RpcTzProvider extends provider_1.Provider {
|
|
|
29
29
|
return this.context.readProvider.getBalance(address, 'head');
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
|
+
getSpendable(address) {
|
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
34
|
+
const addressValidation = (0, utils_1.validateAddress)(address);
|
|
35
|
+
if (addressValidation !== utils_1.ValidationResult.VALID) {
|
|
36
|
+
throw new core_1.InvalidAddressError(address, (0, utils_1.invalidDetail)(addressValidation));
|
|
37
|
+
}
|
|
38
|
+
return this.context.readProvider.getSpendable(address, 'head');
|
|
39
|
+
});
|
|
40
|
+
}
|
|
32
41
|
getDelegate(address) {
|
|
33
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
34
43
|
const addressValidation = (0, utils_1.validateAddress)(address);
|
package/dist/lib/version.js
CHANGED
|
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.VERSION = void 0;
|
|
4
4
|
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
|
|
5
5
|
exports.VERSION = {
|
|
6
|
-
"commitHash": "
|
|
7
|
-
"version": "
|
|
6
|
+
"commitHash": "bbfe9f5a28ecf81757bf3895aaba6d2aeaa656cb",
|
|
7
|
+
"version": "21.0.0-beta.0"
|
|
8
8
|
};
|
package/dist/taquito.es6.js
CHANGED
|
@@ -236,6 +236,7 @@ var Protocols;
|
|
|
236
236
|
Protocols["ProxfordY"] = "ProxfordYmVfjWnRcgjWH36fW6PArwqykTFzotUxRs6gmTcZDuH";
|
|
237
237
|
Protocols["PtParisBx"] = "PtParisBxoLz5gzMmn3d9WBQNoPSZakgnkMC2VNuQ3KXfUtUQeZ";
|
|
238
238
|
Protocols["PsParisCZ"] = "PsParisCZo7KAh1Z1smVd9ZMZ1HHn5gkzbM94V3PLCpknFWhUAi";
|
|
239
|
+
Protocols["PsQuebecB"] = "PsQuebecBo3zZmhQT7KdEQ2RRDtncE6gQFRPgwkKEyC1ea995G1";
|
|
239
240
|
Protocols["ProtoALpha"] = "ProtoALphaALphaALphaALphaALphaALphaALphaALphaDdp3zK";
|
|
240
241
|
})(Protocols || (Protocols = {}));
|
|
241
242
|
const protocols = {
|
|
@@ -255,7 +256,8 @@ const protocols = {
|
|
|
255
256
|
'017': [Protocols.PtNairobi],
|
|
256
257
|
'019': [Protocols.ProxfordY],
|
|
257
258
|
'020': [Protocols.PtParisBx, Protocols.PsParisCZ],
|
|
258
|
-
'021': [Protocols.
|
|
259
|
+
'021': [Protocols.PsQuebecB],
|
|
260
|
+
'022': [Protocols.ProtoALpha],
|
|
259
261
|
};
|
|
260
262
|
var ChainIds;
|
|
261
263
|
(function (ChainIds) {
|
|
@@ -277,6 +279,7 @@ var ChainIds;
|
|
|
277
279
|
ChainIds["OXFORDNET2"] = "NetXxWsskGahzQB";
|
|
278
280
|
ChainIds["PARISBNET"] = "NetXo8SqH1c38SS";
|
|
279
281
|
ChainIds["PARISCNET"] = "NetXXWAHLEvre9b";
|
|
282
|
+
ChainIds["QUEBECBNET"] = "NetXamR3dD5nwmS";
|
|
280
283
|
})(ChainIds || (ChainIds = {}));
|
|
281
284
|
// A fixed fee reveal operation gasLimit accepted by both simulate and injection endpoint is between 1.2-5 times of actual gas consumption (3.5 fails occasionally with gas exhausted; 4 fails occasionally with fee too low)
|
|
282
285
|
const getRevealGasLimit = (address) => Math.round((getRevealGasLimitInternal(address) * 37) / 10);
|
|
@@ -4014,6 +4017,15 @@ class RpcTzProvider extends Provider {
|
|
|
4014
4017
|
return this.context.readProvider.getBalance(address, 'head');
|
|
4015
4018
|
});
|
|
4016
4019
|
}
|
|
4020
|
+
getSpendable(address) {
|
|
4021
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
4022
|
+
const addressValidation = validateAddress(address);
|
|
4023
|
+
if (addressValidation !== ValidationResult.VALID) {
|
|
4024
|
+
throw new InvalidAddressError(address, invalidDetail(addressValidation));
|
|
4025
|
+
}
|
|
4026
|
+
return this.context.readProvider.getSpendable(address, 'head');
|
|
4027
|
+
});
|
|
4028
|
+
}
|
|
4017
4029
|
getDelegate(address) {
|
|
4018
4030
|
return __awaiter(this, void 0, void 0, function* () {
|
|
4019
4031
|
const addressValidation = validateAddress(address);
|
|
@@ -6217,8 +6229,8 @@ class RpcReadAdapter {
|
|
|
6217
6229
|
this.rpc = rpc;
|
|
6218
6230
|
}
|
|
6219
6231
|
/**
|
|
6220
|
-
* @description
|
|
6221
|
-
* @param address address from which we want to retrieve the balance
|
|
6232
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'spendable' RPC.
|
|
6233
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
6222
6234
|
* @param block from which we want to retrieve the balance
|
|
6223
6235
|
* @returns the balance in mutez
|
|
6224
6236
|
*/
|
|
@@ -6227,6 +6239,17 @@ class RpcReadAdapter {
|
|
|
6227
6239
|
return this.rpc.getBalance(address, { block: String(block) });
|
|
6228
6240
|
});
|
|
6229
6241
|
}
|
|
6242
|
+
/**
|
|
6243
|
+
* @description The spendable balance of a contract (in mutez), also known as liquid balance. Corresponds to tez owned by the contract that are neither staked, nor in unstaked requests, nor in frozen bonds. Identical to the 'balance' RPC.
|
|
6244
|
+
* @param address address from which we want to retrieve the spendable balance
|
|
6245
|
+
* @param block from which we want to retrieve the balance
|
|
6246
|
+
* @returns the balance in mutez
|
|
6247
|
+
*/
|
|
6248
|
+
getSpendable(address, block) {
|
|
6249
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
6250
|
+
return this.rpc.getSpendable(address, { block: String(block) });
|
|
6251
|
+
});
|
|
6252
|
+
}
|
|
6230
6253
|
/**
|
|
6231
6254
|
* @description Access the delegate of a contract, if any.
|
|
6232
6255
|
* @param address contract address from which we want to retrieve the delegate (baker)
|
|
@@ -6444,8 +6467,6 @@ const sourceFilter = (x, filter) => {
|
|
|
6444
6467
|
switch (x.kind) {
|
|
6445
6468
|
case 'attestation':
|
|
6446
6469
|
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
6447
|
-
case 'endorsement':
|
|
6448
|
-
return 'metadata' in x && x.metadata.delegate === filter.source;
|
|
6449
6470
|
case 'activate_account':
|
|
6450
6471
|
return 'metadata' in x && x.pkh === filter.source;
|
|
6451
6472
|
default:
|
|
@@ -6670,9 +6691,7 @@ class PollingSubscribeProvider {
|
|
|
6670
6691
|
const constants = yield this.context.readProvider.getProtocolConstants('head');
|
|
6671
6692
|
const blockTime = constants.minimal_block_delay
|
|
6672
6693
|
? constants.minimal_block_delay.multipliedBy(1000)
|
|
6673
|
-
:
|
|
6674
|
-
? constants.time_between_blocks[0].multipliedBy(1000)
|
|
6675
|
-
: new BigNumber(defaultIntervalTestnetsMainnet);
|
|
6694
|
+
: new BigNumber(defaultIntervalTestnetsMainnet);
|
|
6676
6695
|
const confirmationPollingInterval = blockTime.dividedBy(3);
|
|
6677
6696
|
this.config.pollingIntervalMilliseconds =
|
|
6678
6697
|
confirmationPollingInterval.toNumber() === 0
|
|
@@ -6876,8 +6895,8 @@ class Context {
|
|
|
6876
6895
|
|
|
6877
6896
|
// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
|
|
6878
6897
|
const VERSION = {
|
|
6879
|
-
"commitHash": "
|
|
6880
|
-
"version": "
|
|
6898
|
+
"commitHash": "bbfe9f5a28ecf81757bf3895aaba6d2aeaa656cb",
|
|
6899
|
+
"version": "21.0.0-beta.0"
|
|
6881
6900
|
};
|
|
6882
6901
|
|
|
6883
6902
|
/**
|
package/dist/taquito.es6.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taquito.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"taquito.es6.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|