@helium/idls 0.2.5 → 0.2.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/lib/cjs/helium_entity_manager.js +487 -239
  2. package/lib/cjs/helium_entity_manager.js.map +1 -1
  3. package/lib/cjs/helium_sub_daos.js +84 -26
  4. package/lib/cjs/helium_sub_daos.js.map +1 -1
  5. package/lib/cjs/lazy_distributor.js +1 -1
  6. package/lib/cjs/mobile_entity_manager.js +30 -3
  7. package/lib/cjs/mobile_entity_manager.js.map +1 -1
  8. package/lib/cjs/rewards_oracle.js +76 -0
  9. package/lib/cjs/rewards_oracle.js.map +1 -1
  10. package/lib/cjs/voter_stake_registry.js +301 -160
  11. package/lib/cjs/voter_stake_registry.js.map +1 -1
  12. package/lib/esm/helium_entity_manager.js +487 -239
  13. package/lib/esm/helium_entity_manager.js.map +1 -1
  14. package/lib/esm/helium_sub_daos.js +84 -26
  15. package/lib/esm/helium_sub_daos.js.map +1 -1
  16. package/lib/esm/lazy_distributor.js +1 -1
  17. package/lib/esm/mobile_entity_manager.js +30 -3
  18. package/lib/esm/mobile_entity_manager.js.map +1 -1
  19. package/lib/esm/rewards_oracle.js +76 -0
  20. package/lib/esm/rewards_oracle.js.map +1 -1
  21. package/lib/esm/voter_stake_registry.js +301 -160
  22. package/lib/esm/voter_stake_registry.js.map +1 -1
  23. package/lib/types/helium_entity_manager.d.ts +486 -238
  24. package/lib/types/helium_entity_manager.d.ts.map +1 -1
  25. package/lib/types/helium_sub_daos.d.ts +84 -26
  26. package/lib/types/helium_sub_daos.d.ts.map +1 -1
  27. package/lib/types/lazy_distributor.d.ts +1 -1
  28. package/lib/types/mobile_entity_manager.d.ts +30 -3
  29. package/lib/types/mobile_entity_manager.d.ts.map +1 -1
  30. package/lib/types/rewards_oracle.d.ts +76 -0
  31. package/lib/types/rewards_oracle.d.ts.map +1 -1
  32. package/lib/types/voter_stake_registry.d.ts +301 -160
  33. package/lib/types/voter_stake_registry.d.ts.map +1 -1
  34. package/package.json +2 -2
@@ -1235,61 +1235,299 @@ export type VoterStakeRegistry = {
1235
1235
  }
1236
1236
  ];
1237
1237
  "args": [];
1238
+ },
1239
+ {
1240
+ "name": "voteV0";
1241
+ "accounts": [
1242
+ {
1243
+ "name": "payer";
1244
+ "isMut": true;
1245
+ "isSigner": true;
1246
+ },
1247
+ {
1248
+ "name": "marker";
1249
+ "isMut": true;
1250
+ "isSigner": false;
1251
+ "pda": {
1252
+ "seeds": [
1253
+ {
1254
+ "kind": "const";
1255
+ "type": "string";
1256
+ "value": "marker";
1257
+ },
1258
+ {
1259
+ "kind": "account";
1260
+ "type": "publicKey";
1261
+ "account": "Mint";
1262
+ "path": "mint";
1263
+ },
1264
+ {
1265
+ "kind": "account";
1266
+ "type": "publicKey";
1267
+ "account": "ProposalV0";
1268
+ "path": "proposal";
1269
+ }
1270
+ ];
1271
+ };
1272
+ },
1273
+ {
1274
+ "name": "registrar";
1275
+ "isMut": false;
1276
+ "isSigner": false;
1277
+ },
1278
+ {
1279
+ "name": "voter";
1280
+ "isMut": false;
1281
+ "isSigner": true;
1282
+ },
1283
+ {
1284
+ "name": "position";
1285
+ "isMut": true;
1286
+ "isSigner": false;
1287
+ "relations": [
1288
+ "mint",
1289
+ "registrar"
1290
+ ];
1291
+ },
1292
+ {
1293
+ "name": "mint";
1294
+ "isMut": false;
1295
+ "isSigner": false;
1296
+ },
1297
+ {
1298
+ "name": "tokenAccount";
1299
+ "isMut": false;
1300
+ "isSigner": false;
1301
+ },
1302
+ {
1303
+ "name": "proposal";
1304
+ "isMut": true;
1305
+ "isSigner": false;
1306
+ "relations": [
1307
+ "proposal_config"
1308
+ ];
1309
+ },
1310
+ {
1311
+ "name": "proposalConfig";
1312
+ "isMut": false;
1313
+ "isSigner": false;
1314
+ "relations": [
1315
+ "on_vote_hook",
1316
+ "state_controller"
1317
+ ];
1318
+ },
1319
+ {
1320
+ "name": "stateController";
1321
+ "isMut": true;
1322
+ "isSigner": false;
1323
+ },
1324
+ {
1325
+ "name": "onVoteHook";
1326
+ "isMut": false;
1327
+ "isSigner": false;
1328
+ },
1329
+ {
1330
+ "name": "proposalProgram";
1331
+ "isMut": false;
1332
+ "isSigner": false;
1333
+ },
1334
+ {
1335
+ "name": "systemProgram";
1336
+ "isMut": false;
1337
+ "isSigner": false;
1338
+ }
1339
+ ];
1340
+ "args": [
1341
+ {
1342
+ "name": "args";
1343
+ "type": {
1344
+ "defined": "VoteArgsV0";
1345
+ };
1346
+ }
1347
+ ];
1348
+ },
1349
+ {
1350
+ "name": "relinquishVoteV1";
1351
+ "accounts": [
1352
+ {
1353
+ "name": "refund";
1354
+ "isMut": true;
1355
+ "isSigner": false;
1356
+ "docs": [
1357
+ "Account to receive sol refund if marker is closed"
1358
+ ];
1359
+ },
1360
+ {
1361
+ "name": "marker";
1362
+ "isMut": true;
1363
+ "isSigner": false;
1364
+ "pda": {
1365
+ "seeds": [
1366
+ {
1367
+ "kind": "const";
1368
+ "type": "string";
1369
+ "value": "marker";
1370
+ },
1371
+ {
1372
+ "kind": "account";
1373
+ "type": "publicKey";
1374
+ "account": "Mint";
1375
+ "path": "mint";
1376
+ },
1377
+ {
1378
+ "kind": "account";
1379
+ "type": "publicKey";
1380
+ "account": "ProposalV0";
1381
+ "path": "proposal";
1382
+ }
1383
+ ];
1384
+ };
1385
+ "relations": [
1386
+ "registrar",
1387
+ "mint"
1388
+ ];
1389
+ },
1390
+ {
1391
+ "name": "registrar";
1392
+ "isMut": false;
1393
+ "isSigner": false;
1394
+ },
1395
+ {
1396
+ "name": "voter";
1397
+ "isMut": false;
1398
+ "isSigner": true;
1399
+ },
1400
+ {
1401
+ "name": "position";
1402
+ "isMut": true;
1403
+ "isSigner": false;
1404
+ "relations": [
1405
+ "mint",
1406
+ "registrar"
1407
+ ];
1408
+ },
1409
+ {
1410
+ "name": "mint";
1411
+ "isMut": false;
1412
+ "isSigner": false;
1413
+ },
1414
+ {
1415
+ "name": "tokenAccount";
1416
+ "isMut": false;
1417
+ "isSigner": false;
1418
+ },
1419
+ {
1420
+ "name": "proposal";
1421
+ "isMut": true;
1422
+ "isSigner": false;
1423
+ "relations": [
1424
+ "proposal_config"
1425
+ ];
1426
+ },
1427
+ {
1428
+ "name": "proposalConfig";
1429
+ "isMut": false;
1430
+ "isSigner": false;
1431
+ "relations": [
1432
+ "on_vote_hook",
1433
+ "state_controller"
1434
+ ];
1435
+ },
1436
+ {
1437
+ "name": "stateController";
1438
+ "isMut": true;
1439
+ "isSigner": false;
1440
+ },
1441
+ {
1442
+ "name": "onVoteHook";
1443
+ "isMut": false;
1444
+ "isSigner": false;
1445
+ },
1446
+ {
1447
+ "name": "proposalProgram";
1448
+ "isMut": false;
1449
+ "isSigner": false;
1450
+ },
1451
+ {
1452
+ "name": "systemProgram";
1453
+ "isMut": false;
1454
+ "isSigner": false;
1455
+ }
1456
+ ];
1457
+ "args": [
1458
+ {
1459
+ "name": "args";
1460
+ "type": {
1461
+ "defined": "RelinquishVoteArgsV1";
1462
+ };
1463
+ }
1464
+ ];
1238
1465
  }
1239
1466
  ];
1240
1467
  "accounts": [
1468
+ {
1469
+ "name": "voteMarkerV0";
1470
+ "type": {
1471
+ "kind": "struct";
1472
+ "fields": [
1473
+ {
1474
+ "name": "voter";
1475
+ "type": "publicKey";
1476
+ },
1477
+ {
1478
+ "name": "registrar";
1479
+ "type": "publicKey";
1480
+ },
1481
+ {
1482
+ "name": "proposal";
1483
+ "type": "publicKey";
1484
+ },
1485
+ {
1486
+ "name": "mint";
1487
+ "type": "publicKey";
1488
+ },
1489
+ {
1490
+ "name": "choices";
1491
+ "type": {
1492
+ "vec": "u16";
1493
+ };
1494
+ },
1495
+ {
1496
+ "name": "weight";
1497
+ "type": "u128";
1498
+ },
1499
+ {
1500
+ "name": "bumpSeed";
1501
+ "type": "u8";
1502
+ }
1503
+ ];
1504
+ };
1505
+ },
1241
1506
  {
1242
1507
  "name": "maxVoterWeightRecord";
1243
- "docs": [
1244
- "MaxVoterWeightRecord account as defined in spl-governance-addin-api",
1245
- "It's redefined here without account_discriminator for Anchor to treat it as native account",
1246
- "",
1247
- "The account is used as an api interface to provide max voting power to the governance program from external addin contracts"
1248
- ];
1249
1508
  "type": {
1250
1509
  "kind": "struct";
1251
1510
  "fields": [
1252
1511
  {
1253
1512
  "name": "realm";
1254
- "docs": [
1255
- "The Realm the MaxVoterWeightRecord belongs to"
1256
- ];
1257
1513
  "type": "publicKey";
1258
1514
  },
1259
1515
  {
1260
1516
  "name": "governingTokenMint";
1261
- "docs": [
1262
- "Governing Token Mint the MaxVoterWeightRecord is associated with",
1263
- "Note: The addin can take deposits of any tokens and is not restricted to the community or council tokens only"
1264
- ];
1265
1517
  "type": "publicKey";
1266
1518
  },
1267
1519
  {
1268
1520
  "name": "maxVoterWeight";
1269
- "docs": [
1270
- "Max voter weight",
1271
- "The max voter weight provided by the addin for the given realm and governing_token_mint"
1272
- ];
1273
1521
  "type": "u64";
1274
1522
  },
1275
1523
  {
1276
1524
  "name": "maxVoterWeightExpiry";
1277
- "docs": [
1278
- "The slot when the max voting weight expires",
1279
- "It should be set to None if the weight never expires",
1280
- "If the max vote weight decays with time, for example for time locked based weights, then the expiry must be set",
1281
- "As a pattern Revise instruction to update the max weight should be invoked before governance instruction within the same transaction",
1282
- "and the expiry set to the current slot to provide up to date weight"
1283
- ];
1284
1525
  "type": {
1285
1526
  "option": "u64";
1286
1527
  };
1287
1528
  },
1288
1529
  {
1289
1530
  "name": "reserved";
1290
- "docs": [
1291
- "Reserved space for future versions"
1292
- ];
1293
1531
  "type": {
1294
1532
  "array": [
1295
1533
  "u8",
@@ -1302,34 +1540,19 @@ export type VoterStakeRegistry = {
1302
1540
  },
1303
1541
  {
1304
1542
  "name": "nftVoteRecord";
1305
- "docs": [
1306
- "Vote record indicating the given NFT voted on the Proposal",
1307
- "The PDA of the record is [\"nft-vote-record\",proposal,nft_mint]",
1308
- "It guarantees uniques and ensures the same NFT can't vote twice"
1309
- ];
1310
1543
  "type": {
1311
1544
  "kind": "struct";
1312
1545
  "fields": [
1313
1546
  {
1314
1547
  "name": "proposal";
1315
- "docs": [
1316
- "Proposal which was voted on"
1317
- ];
1318
1548
  "type": "publicKey";
1319
1549
  },
1320
1550
  {
1321
1551
  "name": "nftMint";
1322
- "docs": [
1323
- "The mint of the NFT which was used for the vote"
1324
- ];
1325
1552
  "type": "publicKey";
1326
1553
  },
1327
1554
  {
1328
1555
  "name": "governingTokenOwner";
1329
- "docs": [
1330
- "The voter who casted this vote",
1331
- "It's a Realm member pubkey corresponding to TokenOwnerRecord.governing_token_owner"
1332
- ];
1333
1556
  "type": "publicKey";
1334
1557
  }
1335
1558
  ];
@@ -1356,13 +1579,6 @@ export type VoterStakeRegistry = {
1356
1579
  },
1357
1580
  {
1358
1581
  "name": "amountDepositedNative";
1359
- "docs": [
1360
- "Amount in deposited, in native currency. Withdraws of vested tokens",
1361
- "directly reduce this amount.",
1362
- "",
1363
- "This directly tracks the total amount added by the user. They may",
1364
- "never withdraw more than this amount."
1365
- ];
1366
1582
  "type": "u64";
1367
1583
  },
1368
1584
  {
@@ -1380,15 +1596,16 @@ export type VoterStakeRegistry = {
1380
1596
  {
1381
1597
  "name": "bumpSeed";
1382
1598
  "type": "u8";
1599
+ },
1600
+ {
1601
+ "name": "voteController";
1602
+ "type": "publicKey";
1383
1603
  }
1384
1604
  ];
1385
1605
  };
1386
1606
  },
1387
1607
  {
1388
1608
  "name": "registrar";
1389
- "docs": [
1390
- "Instance of a voting rights distributor."
1391
- ];
1392
1609
  "type": {
1393
1610
  "kind": "struct";
1394
1611
  "fields": [
@@ -1410,25 +1627,16 @@ export type VoterStakeRegistry = {
1410
1627
  },
1411
1628
  {
1412
1629
  "name": "timeOffset";
1413
- "docs": [
1414
- "Debug only: time offset, to allow tests to move forward in time."
1415
- ];
1416
1630
  "type": "i64";
1417
1631
  },
1418
1632
  {
1419
1633
  "name": "positionUpdateAuthority";
1420
- "docs": [
1421
- "Allows a program to wrap updates to the position (transfer or reset lockup)"
1422
- ];
1423
1634
  "type": {
1424
1635
  "option": "publicKey";
1425
1636
  };
1426
1637
  },
1427
1638
  {
1428
1639
  "name": "collection";
1429
- "docs": [
1430
- "Storage for voting mints and their configuration."
1431
- ];
1432
1640
  "type": "publicKey";
1433
1641
  },
1434
1642
  {
@@ -1470,66 +1678,33 @@ export type VoterStakeRegistry = {
1470
1678
  },
1471
1679
  {
1472
1680
  "name": "voterWeightRecord";
1473
- "docs": [
1474
- "VoterWeightRecord account as defined in spl-governance-addin-api",
1475
- "It's redefined here without account_discriminator for Anchor to treat it as native account",
1476
- "",
1477
- "The account is used as an api interface to provide voting power to the governance program from external addin contracts"
1478
- ];
1479
1681
  "type": {
1480
1682
  "kind": "struct";
1481
1683
  "fields": [
1482
1684
  {
1483
1685
  "name": "realm";
1484
- "docs": [
1485
- "The Realm the VoterWeightRecord belongs to"
1486
- ];
1487
1686
  "type": "publicKey";
1488
1687
  },
1489
1688
  {
1490
1689
  "name": "governingTokenMint";
1491
- "docs": [
1492
- "Governing Token Mint the VoterWeightRecord is associated with",
1493
- "Note: The addin can take deposits of any tokens and is not restricted to the community or council tokens only"
1494
- ];
1495
1690
  "type": "publicKey";
1496
1691
  },
1497
1692
  {
1498
1693
  "name": "governingTokenOwner";
1499
- "docs": [
1500
- "The owner of the governing token and voter",
1501
- "This is the actual owner (voter) and corresponds to TokenOwnerRecord.governing_token_owner"
1502
- ];
1503
1694
  "type": "publicKey";
1504
1695
  },
1505
1696
  {
1506
1697
  "name": "voterWeight";
1507
- "docs": [
1508
- "Voter's weight",
1509
- "The weight of the voter provided by the addin for the given realm, governing_token_mint and governing_token_owner (voter)"
1510
- ];
1511
1698
  "type": "u64";
1512
1699
  },
1513
1700
  {
1514
1701
  "name": "voterWeightExpiry";
1515
- "docs": [
1516
- "The slot when the voting weight expires",
1517
- "It should be set to None if the weight never expires",
1518
- "If the voter weight decays with time, for example for time locked based weights, then the expiry must be set",
1519
- "As a common pattern Revise instruction to update the weight should be invoked before governance instruction within the same transaction",
1520
- "and the expiry set to the current slot to provide up to date weight"
1521
- ];
1522
1702
  "type": {
1523
1703
  "option": "u64";
1524
1704
  };
1525
1705
  },
1526
1706
  {
1527
1707
  "name": "weightAction";
1528
- "docs": [
1529
- "The governance action the voter's weight pertains to",
1530
- "It allows to provided voter's weight specific to the particular action the weight is evaluated for",
1531
- "When the action is provided then the governance program asserts the executing action is the same as specified by the addin"
1532
- ];
1533
1708
  "type": {
1534
1709
  "option": {
1535
1710
  "defined": "VoterWeightAction";
@@ -1538,21 +1713,12 @@ export type VoterStakeRegistry = {
1538
1713
  },
1539
1714
  {
1540
1715
  "name": "weightActionTarget";
1541
- "docs": [
1542
- "The target the voter's weight action pertains to",
1543
- "It allows to provided voter's weight specific to the target the weight is evaluated for",
1544
- "For example when addin supplies weight to vote on a particular proposal then it must specify the proposal as the action target",
1545
- "When the target is provided then the governance program asserts the target is the same as specified by the addin"
1546
- ];
1547
1716
  "type": {
1548
1717
  "option": "publicKey";
1549
1718
  };
1550
1719
  },
1551
1720
  {
1552
1721
  "name": "reserved";
1553
- "docs": [
1554
- "Reserved space for future versions"
1555
- ];
1556
1722
  "type": {
1557
1723
  "array": [
1558
1724
  "u8",
@@ -1661,6 +1827,18 @@ export type VoterStakeRegistry = {
1661
1827
  ];
1662
1828
  };
1663
1829
  },
1830
+ {
1831
+ "name": "RelinquishVoteArgsV1";
1832
+ "type": {
1833
+ "kind": "struct";
1834
+ "fields": [
1835
+ {
1836
+ "name": "choice";
1837
+ "type": "u16";
1838
+ }
1839
+ ];
1840
+ };
1841
+ },
1664
1842
  {
1665
1843
  "name": "ResetLockupArgsV0";
1666
1844
  "type": {
@@ -1709,6 +1887,18 @@ export type VoterStakeRegistry = {
1709
1887
  ];
1710
1888
  };
1711
1889
  },
1890
+ {
1891
+ "name": "VoteArgsV0";
1892
+ "type": {
1893
+ "kind": "struct";
1894
+ "fields": [
1895
+ {
1896
+ "name": "choice";
1897
+ "type": "u16";
1898
+ }
1899
+ ];
1900
+ };
1901
+ },
1712
1902
  {
1713
1903
  "name": "WithdrawArgsV0";
1714
1904
  "type": {
@@ -1728,29 +1918,14 @@ export type VoterStakeRegistry = {
1728
1918
  "fields": [
1729
1919
  {
1730
1920
  "name": "startTs";
1731
- "docs": [
1732
- "Start of the lockup.",
1733
- "",
1734
- "Note, that if start_ts is in the future, the funds are nevertheless",
1735
- "locked up!",
1736
- "",
1737
- "Similarly vote power computations don't care about start_ts and always",
1738
- "assume the full interval from now to end_ts."
1739
- ];
1740
1921
  "type": "i64";
1741
1922
  },
1742
1923
  {
1743
1924
  "name": "endTs";
1744
- "docs": [
1745
- "End of the lockup."
1746
- ];
1747
1925
  "type": "i64";
1748
1926
  },
1749
1927
  {
1750
1928
  "name": "kind";
1751
- "docs": [
1752
- "Type of lockup."
1753
- ];
1754
1929
  "type": {
1755
1930
  "defined": "LockupKind";
1756
1931
  };
@@ -1760,73 +1935,35 @@ export type VoterStakeRegistry = {
1760
1935
  },
1761
1936
  {
1762
1937
  "name": "VotingMintConfigV0";
1763
- "docs": [
1764
- "Exchange rate for an asset that can be used to mint voting rights.",
1765
- "",
1766
- "See documentation of configure_voting_mint for details on how",
1767
- "native token amounts convert to vote weight."
1768
- ];
1769
1938
  "type": {
1770
1939
  "kind": "struct";
1771
1940
  "fields": [
1772
1941
  {
1773
1942
  "name": "mint";
1774
- "docs": [
1775
- "Mint for this entry."
1776
- ];
1777
1943
  "type": "publicKey";
1778
1944
  },
1779
1945
  {
1780
1946
  "name": "baselineVoteWeightScaledFactor";
1781
- "docs": [
1782
- "Vote weight factor for all funds in the account, no matter if locked or not.",
1783
- "",
1784
- "In 1/SCALED_FACTOR_BASE units."
1785
- ];
1786
1947
  "type": "u64";
1787
1948
  },
1788
1949
  {
1789
1950
  "name": "maxExtraLockupVoteWeightScaledFactor";
1790
- "docs": [
1791
- "Maximum extra vote weight factor for lockups.",
1792
- "",
1793
- "This is the extra votes gained for lockups lasting lockup_saturation_secs or",
1794
- "longer. Shorter lockups receive only a fraction of the maximum extra vote weight,",
1795
- "based on lockup_time divided by lockup_saturation_secs.",
1796
- "",
1797
- "In 1/SCALED_FACTOR_BASE units."
1798
- ];
1799
1951
  "type": "u64";
1800
1952
  },
1801
1953
  {
1802
1954
  "name": "genesisVotePowerMultiplier";
1803
- "docs": [
1804
- "Genesis vote power multipliers for lockups.",
1805
- "",
1806
- "This is a multiplier applied to voting power for lockups created before",
1807
- "genesis_extra_lockup_expiration"
1808
- ];
1809
1955
  "type": "u8";
1810
1956
  },
1811
1957
  {
1812
1958
  "name": "genesisVotePowerMultiplierExpirationTs";
1813
- "docs": [
1814
- "Timestamp of when to stop applying the genesis_extra_lockup_vote_weight_scaled_factor"
1815
- ];
1816
1959
  "type": "i64";
1817
1960
  },
1818
1961
  {
1819
1962
  "name": "lockupSaturationSecs";
1820
- "docs": [
1821
- "Number of seconds of lockup needed to reach the maximum lockup bonus."
1822
- ];
1823
1963
  "type": "u64";
1824
1964
  },
1825
1965
  {
1826
1966
  "name": "digitShift";
1827
- "docs": [
1828
- "Number of digits to shift native amounts, applying a 10^digit_shift factor."
1829
- ];
1830
1967
  "type": "i8";
1831
1968
  }
1832
1969
  ];
@@ -1851,10 +1988,6 @@ export type VoterStakeRegistry = {
1851
1988
  },
1852
1989
  {
1853
1990
  "name": "VoterWeightAction";
1854
- "docs": [
1855
- "VoterWeightAction enum as defined in spl-governance-addin-api",
1856
- "It's redefined here for Anchor to export it to IDL"
1857
- ];
1858
1991
  "type": {
1859
1992
  "kind": "enum";
1860
1993
  "variants": [
@@ -2167,6 +2300,14 @@ export type VoterStakeRegistry = {
2167
2300
  "code": 6057;
2168
2301
  "name": "SamePosition";
2169
2302
  "msg": "Cannot transfer to the same position";
2303
+ },
2304
+ {
2305
+ "code": 6058;
2306
+ "name": "MaxChoicesExceeded";
2307
+ },
2308
+ {
2309
+ "code": 6059;
2310
+ "name": "NoVoteForThisChoice";
2170
2311
  }
2171
2312
  ];
2172
2313
  };