@rialo/ts-cdk 0.3.0-alpha.1 → 0.4.0-alpha.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/dist/index.d.mts +143 -11
- package/dist/index.d.ts +143 -11
- package/dist/index.js +380 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +364 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/@scure/base/index.ts","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/utf8/index.js","../src/constants.ts","../src/crypto/errors.ts","../node_modules/@noble/ed25519/index.js","../node_modules/@noble/hashes/src/utils.ts","../node_modules/@noble/hashes/src/_md.ts","../node_modules/@noble/hashes/src/_u64.ts","../node_modules/@noble/hashes/src/sha2.ts","../src/crypto/public-key.ts","../src/crypto/utils.ts","../src/crypto/signature.ts","../src/crypto/keypair.ts","../node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/utils.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/pbkdf2.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_md.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_u64.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/sha2.ts","../node_modules/@scure/bip39/index.js","../node_modules/@scure/bip39/wordlists/english.js","../src/crypto/mnemonic.ts","../src/error.ts","../src/rex/errors.ts","../src/rex/constants.ts","../src/rex/rex-value.ts","../src/rex/hpke.ts","../src/rpc/errors.ts","../src/rpc/clients/base-client.ts","../src/generated/rpc-client.ts","../src/rpc/clients/query-client.ts","../src/utils.ts","../src/rpc/clients/transaction-client.ts","../src/rpc/clients/client.ts","../src/rpc/http-transport.ts","../src/rpc/index.ts","../src/serialization/bincode/reader.ts","../src/serialization/bincode/writer.ts","../src/serialization/bincode/schema.ts","../node_modules/@dao-xyz/borsh/src/binary.ts","../node_modules/@dao-xyz/borsh/src/bigint.ts","../node_modules/@dao-xyz/borsh/src/error.ts","../node_modules/@dao-xyz/borsh/src/types.ts","../node_modules/@dao-xyz/borsh/src/index.ts","../src/serialization/borsh.ts","../src/transaction/account-meta-table.ts","../src/transaction/errors.ts","../src/transaction/instructions/borsh-instruction.ts","../src/transaction/instructions/system.ts","../src/transaction/message.ts","../src/transaction/transaction.ts","../src/transaction/transaction-builder.ts","../src/serialization/compact-u16.ts","../src/signer/keypair-signer.ts"],"names":["isBytes","abytes","anumber","padding","bytes","str","alphabet","sha256","exports","sign","utf8","CryptoErrorCode","hex","C","G","P","h","cr","concatBytes","ahash","aexists","aoutput","clean","createView","rotr","createHasher","randomBytes","oidNist","_HMAC","hmac","Chi","Maj","HashMD","SHA256_IV","SHA512_IV","U32_MASK64","_32n","fromBig","split","shrSH","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","add","add3L","add3H","add4L","add4H","add5L","add5H","SHA256_K","SHA256_W","SHA2_32B","_SHA256","K512","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","SHA2_64B","_SHA512","sha512","wordlist","normalize","RialoErrorType","HpkeErrorCode","RexValueVariant","RpcErrorCode","base58","base64","chain","readValue","writeValue","field","serialize","deserialize","i","obj","TransactionErrorCode","SystemInstruction","deserializeCompactU16"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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","file":"index.mjs","sourcesContent":["/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toBase64 === 'function' &&\n typeof (Uint8Array as any).fromBase64 === 'function')();\n\nconst decodeBase64Builtin = (s: string, isUrl: boolean) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s)) throw new Error('invalid base64');\n return (Uint8Array as any).fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32: Bech32 = genBech32('bech32');\n\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toHex === 'function' &&\n typeof (Uint8Array as any).fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin: BytesCoder = {\n encode(data) { abytes(data); return (data as any).toHex(); },\n decode(s) { astr('hex', s); return (Uint8Array as any).fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex: BytesCoder = hasHexBuiltin\n ? hexBuiltin\n : chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(\n `hex.decode: expected string, got ${typeof s} with length ${s.length}`\n );\n return s.toLowerCase();\n })\n );\n\nexport type SomeCoders = {\n utf8: BytesCoder;\n hex: BytesCoder;\n base16: BytesCoder;\n base32: BytesCoder;\n base64: BytesCoder;\n base64url: BytesCoder;\n base58: BytesCoder;\n base58xmr: BytesCoder;\n};\n// prettier-ignore\nconst CODERS: SomeCoders = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof SomeCoders;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\n/** @deprecated */\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n\n/** @deprecated */\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\n/** @deprecated */\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ChainDefinition } from \"./rpc/clients/config\";\n\n/** Default number of accounts to derive in HD wallets */\nexport const DEFAULT_NUM_ACCOUNTS: number = 1;\n\n/** Rialo mainnet RPC URL */\nexport const URL_MAINNET: string = \"https://mainnet.rialo.io:4101\";\n\n/** Rialo testnet RPC URL */\nexport const URL_TESTNET: string = \"https://testnet.rialo.io:4101\";\n\n/** Rialo devnet RPC URL */\nexport const URL_DEVNET: string = \"https://devnet.rialo.io:4101\";\n\n/** Rialo localnet RPC URL */\nexport const URL_LOCALNET: string = \"http://localhost:4104\";\n\nexport const RIALO_MAINNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:mainnet\",\n\tname: \"Mainnet\",\n\trpcUrl: URL_MAINNET,\n};\n\nexport const RIALO_TESTNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:testnet\",\n\tname: \"Testnet\",\n\trpcUrl: URL_TESTNET,\n};\n\nexport const RIALO_DEVNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:devnet\",\n\tname: \"Devnet\",\n\trpcUrl: URL_DEVNET,\n};\n\nexport const RIALO_LOCALNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:localnet\",\n\tname: \"Localhost\",\n\trpcUrl: URL_LOCALNET,\n};\n\n/** System program ID */\nexport const SYSTEM_PROGRAM_ID: string = \"11111111111111111111111111111111\";\n\n/** Base derivation path for Rialo wallets (BIP44 coin type 756) */\n/** Coin type 756 follows the telephone keypad convention: R=7, L=5, O=6 */\nexport const BASE_DERIVATION_PATH: string = \"m/44'/756'/\";\n\nexport const KELVIN_PER_RLO: number = 1_000_000_000;\n\nexport const PUBLIC_KEY_LENGTH: number = 32;\n\nexport const SECRET_KEY_LENGTH: number = 32;\n\nexport const SIGNATURE_LENGTH: number = 64;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for cryptographic operations.\n */\nexport enum CryptoErrorCode {\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tINVALID_PUBLIC_KEY = \"INVALID_PUBLIC_KEY\",\n\tINVALID_BLOCKHASH = \"INVALID_BLOCKHASH\",\n\tINVALID_MNEMONIC = \"INVALID_MNEMONIC\",\n\tKEY_DERIVATION_FAILED = \"KEY_DERIVATION_FAILED\",\n\tKEYPAIR_DISPOSED = \"KEYPAIR_DISPOSED\",\n\tMAX_SEED_LENGTH_EXCEEDED = \"MAX_SEED_LENGTH_EXCEEDED\",\n\tMAX_SEEDS_EXCEEDED = \"MAX_SEEDS_EXCEEDED\",\n\tINVALID_SEEDS_ON_CURVE = \"INVALID_SEEDS_ON_CURVE\",\n\tNO_VIABLE_BUMP_SEED = \"NO_VIABLE_BUMP_SEED\",\n\tINVALID_SEED = \"INVALID_SEED\",\n}\n\n/**\n * Error class for cryptographic operations.\n *\n * Provides structured error information with error codes and contextual details\n * for better debugging and error handling.\n */\nexport class CryptoError extends Error {\n\tpublic readonly code: CryptoErrorCode;\n\tpublic readonly details?: Record<string, unknown>;\n\n\tconstructor(\n\t\tcode: CryptoErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"CryptoError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n\n\tstatic invalidKeyLength(expected: number, actual: number): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid key length: expected ${expected} bytes, got ${actual} bytes`,\n\t\t\t{ expected, actual },\n\t\t);\n\t}\n\n\tstatic invalidMnemonic(reason?: string): CryptoError {\n\t\tconst message = reason\n\t\t\t? `Invalid mnemonic: ${reason}`\n\t\t\t: \"Invalid mnemonic phrase. Check that all words are valid and in the correct order.\";\n\t\treturn new CryptoError(CryptoErrorCode.INVALID_MNEMONIC, message);\n\t}\n\n\tstatic keyDerivationFailed(path: string, cause?: Error): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t`Failed to derive key at path: ${path}`,\n\t\t\t{ path, cause: cause?.message },\n\t\t);\n\t}\n\n\tstatic keypairDisposed(): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEYPAIR_DISPOSED,\n\t\t\t\"Cannot use disposed keypair. The private key has been securely erased from memory.\",\n\t\t);\n\t}\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { base58 } from \"@scure/base\";\nimport { PUBLIC_KEY_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport type { Signature } from \"./signature\";\nimport { concatBytes, isOnCurve, seedToBytes } from \"./utils\";\n\n/**\n * A seed for PDA derivation - string (UTF-8) or raw bytes.\n */\nexport type Seed = string | Uint8Array;\n\n/**\n * Bump seed (0-255) that pushes derived address off the Ed25519 curve.\n */\nexport type Bump = number;\n\n/**\n * Result of PDA derivation: [address, bump].\n */\nexport type PDA = readonly [PublicKey, Bump];\n\nconst MAX_SEED_LENGTH = 32;\nconst MAX_SEEDS = 16;\nconst PDA_MARKER = new TextEncoder().encode(\"ProgramDerivedAddress\");\nconst MAX_BUMP_SEED = 255;\n\n/**\n * Represents a 32-byte Ed25519 public key.\n *\n * @example\n * ```typescript\n * // From base58 string\n * const pubkey = PublicKey.fromString(\"5ZqB9U...\");\n *\n * // From bytes\n * const pubkey = PublicKey.fromBytes(new Uint8Array(32));\n *\n * // Comparison\n * if (pubkey1.equals(pubkey2)) {\n * console.log(\"Keys match\");\n * }\n * ```\n */\nexport class PublicKey {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== PUBLIC_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(PUBLIC_KEY_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from raw bytes.\n\t *\n\t * @param bytes - 32-byte Ed25519 public key\n\t * @throws {CryptoError} If bytes length is not 32\n\t */\n\tstatic fromBytes(bytes: Uint8Array): PublicKey {\n\t\treturn new PublicKey(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded public key\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): PublicKey {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new PublicKey(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_PUBLIC_KEY,\n\t\t\t\t`Invalid base58 public key: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a program address from seeds and a program ID.\n\t *\n\t * @remarks\n\t * This is the low-level derivation function. It will throw if the resulting\n\t * address falls on the Ed25519 curve. For most use cases, prefer\n\t * {@link findProgramAddress} which automatically finds a valid bump seed.\n\t *\n\t * Use this method when you already know the bump seed (e.g., stored on-chain\n\t * or passed from a previous computation) for better performance.\n\t *\n\t * @param seeds - Array of seeds (strings or byte arrays, max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns The derived public key\n\t * @throws {CryptoError} If seeds exceed limits or result is on curve\n\t *\n\t * @example\n\t * ```typescript\n\t * // With known bump seed (most efficient for verification)\n\t * const pda = PublicKey.createProgramAddress(\n\t * [\"metadata\", mintPubkey.toBytes(), new Uint8Array([254])],\n\t * metadataProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createProgramAddress(seeds: Seed[], programId: PublicKey): PublicKey {\n\t\tif (seeds.length > MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS} seeds, got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst seedBytes: Uint8Array[] = [];\n\t\tfor (let i = 0; i < seeds.length; i++) {\n\t\t\tconst bytes = seedToBytes(seeds[i]);\n\t\t\tif (bytes.length > MAX_SEED_LENGTH) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t\t`Seed[${i}] exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tseedBytes.push(bytes);\n\t\t}\n\n\t\tconst hash = sha256(concatBytes(...seedBytes, programId.bytes, PDA_MARKER));\n\n\t\tif (isOnCurve(hash)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEEDS_ON_CURVE,\n\t\t\t\t\"Invalid seeds - derived address is on curve\",\n\t\t\t);\n\t\t}\n\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Finds a valid program derived address by searching for a bump seed.\n\t *\n\t * @remarks\n\t * Iterates from bump 255 down to 0, returning the first combination that\n\t * produces an address off the Ed25519 curve. The bump seed should be stored\n\t * or passed to programs to allow efficient verification via {@link createProgramAddress}.\n\t *\n\t * @param seeds - Array of seeds (max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns Tuple of [PublicKey, Bump] where bump is 0-255\n\t * @throws {CryptoError} If no valid bump found (extremely rare) or seeds invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const [vaultPda, vaultBump] = PublicKey.findProgramAddress(\n\t * [\"vault\", userPubkey.toBytes()],\n\t * programId\n\t * );\n\t *\n\t * // Store bump for later use\n\t * console.log(`Vault: ${vaultPda}, Bump: ${vaultBump}`);\n\t * ```\n\t */\n\tstatic findProgramAddress(seeds: Seed[], programId: PublicKey): PDA {\n\t\tif (seeds.length >= MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS - 1} user seeds (one slot reserved for bump), got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tfor (let bump = MAX_BUMP_SEED; bump >= 0; bump--) {\n\t\t\ttry {\n\t\t\t\tconst address = PublicKey.createProgramAddress(\n\t\t\t\t\t[...seeds, Uint8Array.of(bump)],\n\t\t\t\t\tprogramId,\n\t\t\t\t);\n\t\t\t\treturn [address, bump] as const;\n\t\t\t} catch (e) {\n\t\t\t\tif (\n\t\t\t\t\te instanceof CryptoError &&\n\t\t\t\t\te.code === CryptoErrorCode.INVALID_SEEDS_ON_CURVE\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\tthrow new CryptoError(\n\t\t\tCryptoErrorCode.NO_VIABLE_BUMP_SEED,\n\t\t\t\"Could not find valid bump seed\",\n\t\t);\n\t}\n\n\t/**\n\t * Creates a derived address from a base address, seed string, and program ID.\n\t *\n\t * @remarks\n\t * Unlike PDAs, this derivation CAN produce addresses on the curve.\n\t * This is useful for creating deterministic addresses that a user can sign for,\n\t * where the base address's private key holder can sign transactions.\n\t *\n\t * @param baseAddress - The base public key (signer)\n\t * @param seed - A seed string (max 32 bytes when UTF-8 encoded)\n\t * @param programId - The program that will own the derived account\n\t * @returns The derived address\n\t *\n\t * @example\n\t * ```typescript\n\t * const derivedAddress = PublicKey.createWithSeed(\n\t * userPubkey,\n\t * \"savings-account\",\n\t * systemProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createWithSeed(\n\t\tbaseAddress: PublicKey,\n\t\tseed: string,\n\t\tprogramId: PublicKey,\n\t): PublicKey {\n\t\tconst seedBytes = new TextEncoder().encode(seed);\n\t\tif (seedBytes.length > MAX_SEED_LENGTH) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t`Seed exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t);\n\t\t}\n\n\t\tif (seed.length === 0) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEED,\n\t\t\t\t\"Seed cannot be empty\",\n\t\t\t);\n\t\t}\n\n\t\tconst hash = sha256(\n\t\t\tconcatBytes(baseAddress.bytes, seedBytes, programId.bytes),\n\t\t);\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * Checks equality with another public key using constant-time comparison.\n\t */\n\tequals(other: PublicKey): boolean {\n\t\tif (!other) return false;\n\t\tif (this.bytes.length !== other.bytes.length) return false;\n\t\tfor (let i = 0; i < this.bytes.length; i++) {\n\t\t\tif (this.bytes[i] !== other.bytes[i]) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Verifies an Ed25519 signature over a message.\n\t *\n\t * @param message - Message bytes that were signed\n\t * @param signature - Signature to verify\n\t * @returns True if signature is valid, false otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * const message = new Uint8Array([1, 2, 3]);\n\t * const signature = keypair.sign(message);\n\t * const isValid = keypair.publicKey.verify(message, signature);\n\t * ```\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(signature.toBytes(), message, this.bytes);\n\t}\n\n\t/**\n\t * Checks if the public key is on the Ed25519 curve.\n\t *\n\t * @returns True if the public key is on the curve, false otherwise\n\t */\n\tisOnCurve(): boolean {\n\t\treturn isOnCurve(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Point } from \"@noble/ed25519\";\nimport type { Seed } from \"./public-key\";\n\n/**\n * Checks if a 32-byte array represents a valid point on the Ed25519 curve.\n *\n * This is used for PDA (Program Derived Address) derivation, where valid PDAs\n * must NOT be on the curve to ensure they can only be signed by the program.\n *\n * @param bytes - 32-byte public key or hash to check\n * @returns true if the bytes represent a valid Ed25519 point, false otherwise\n *\n * @example\n * ```typescript\n * const hash = sha256(data);\n * if (!isOnCurve(hash)) {\n * // Valid PDA - not on curve\n * }\n * ```\n */\nexport function isOnCurve(bytes: Uint8Array): boolean {\n\ttry {\n\t\tPoint.fromBytes(bytes);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Converts a seed to a 32-byte array.\n *\n * @param seed - Seed to convert\n * @returns 32-byte array\n */\nexport function seedToBytes(seed: Seed): Uint8Array {\n\treturn typeof seed === \"string\" ? new TextEncoder().encode(seed) : seed;\n}\n\n/**\n * Concatenates multiple byte arrays into a single byte array.\n *\n * @param arrays - Byte arrays to concatenate\n * @returns Concatenated byte array\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\tconst totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, offset);\n\t\toffset += arr.length;\n\t}\n\treturn result;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\n\n/**\n * Represents a 64-byte Ed25519 signature.\n *\n * @example\n * ```typescript\n * // From bytes\n * const sig = Signature.fromBytes(signatureBytes);\n *\n * // From base58 string\n * const sig = Signature.fromString(\"3Bxs4h...\");\n *\n * // Serialize\n * const base58 = sig.toString();\n * ```\n */\nexport class Signature {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SIGNATURE_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from raw bytes.\n\t *\n\t * @param bytes - 64-byte Ed25519 signature\n\t * @throws {CryptoError} If bytes length is not 64\n\t */\n\tstatic fromBytes(bytes: Uint8Array): Signature {\n\t\treturn new Signature(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded signature\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): Signature {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new Signature(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Invalid base58 signature: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport { randomBytes } from \"@noble/hashes/utils\";\nimport { SECRET_KEY_LENGTH } from \"../constants\";\nimport { CryptoError } from \"./errors\";\nimport { PublicKey } from \"./public-key\";\nimport { Signature } from \"./signature\";\n\n// Configure ed25519 to use SHA-512\ned25519.hashes.sha512 = sha512;\n\n/**\n * Represents an Ed25519 keypair for signing transactions.\n *\n * Provides secure key generation, signing, and disposal capabilities.\n * Call {@link dispose} when finished to securely erase the private key from memory.\n *\n * @example\n * ```typescript\n * // Generate random keypair\n * const keypair = Keypair.generate();\n *\n * // Sign a message\n * const message = new TextEncoder().encode(\"Hello\");\n * const signature = keypair.sign(message);\n *\n * // Verify signature\n * const isValid = keypair.verify(message, signature);\n *\n * // Secure cleanup\n * keypair.dispose();\n * ```\n */\nexport class Keypair {\n\tpublic readonly publicKey: PublicKey;\n\tprivate secretKey: Uint8Array | null;\n\tprivate disposed = false;\n\n\tprivate constructor(secretKey: Uint8Array, publicKey?: Uint8Array) {\n\t\tif (secretKey.length !== SECRET_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SECRET_KEY_LENGTH, secretKey.length);\n\t\t}\n\n\t\tthis.secretKey = new Uint8Array(secretKey);\n\n\t\tif (publicKey) {\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKey);\n\t\t} else {\n\t\t\tconst publicKeyBytes = ed25519.getPublicKey(secretKey);\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKeyBytes);\n\t\t}\n\t}\n\n\t/**\n\t * Generates a random keypair using cryptographically secure randomness.\n\t */\n\tstatic generate(): Keypair {\n\t\tconst secretKey = randomBytes(SECRET_KEY_LENGTH);\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a 32-byte secret key.\n\t * The public key will be derived from the secret key.\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t */\n\tstatic fromSecretKey(secretKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a secret key and pre-computed public key.\n\t *\n\t * Use this for SLIP-0010/BIP32 derived keys where the public key\n\t * should NOT be re-derived (compatibility with hierarchical derivation).\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t * @param publicKey - 32-byte Ed25519 public key (pre-computed)\n\t */\n\tstatic fromKeyPair(secretKey: Uint8Array, publicKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey, publicKey);\n\t}\n\n\t/**\n\t * Signs a message with this keypair.\n\t *\n\t * @param message - Message bytes to sign\n\t * @returns Ed25519 signature\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsign(message: Uint8Array): Signature {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\tconst signatureBytes = ed25519.sign(message, this.secretKey);\n\t\treturn Signature.fromBytes(signatureBytes);\n\t}\n\n\t/**\n\t * Verifies a signature against a message using this keypair's public key.\n\t *\n\t * @param message - Original message that was signed\n\t * @param signature - Signature to verify\n\t * @returns true if signature is valid\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(\n\t\t\tsignature.toBytes(),\n\t\t\tmessage,\n\t\t\tthis.publicKey.toBytes(),\n\t\t);\n\t}\n\n\t/**\n\t * Exports the secret key for storage.\n\t *\n\t * **WARNING**: Keep this secret! Never expose it in logs, APIs, or client-side code.\n\t *\n\t * @returns Copy of the 32-byte secret key\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsecretKeyBytes(): Uint8Array {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\treturn new Uint8Array(this.secretKey);\n\t}\n\n\t/**\n\t * Checks if this keypair has been disposed.\n\t */\n\tisDisposed(): boolean {\n\t\treturn this.disposed;\n\t}\n\n\t/**\n\t * Securely erases the secret key from memory.\n\t *\n\t * After calling this method, the keypair can no longer be used for signing.\n\t * This is important for security when the keypair is no longer needed.\n\t */\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\n\t\tif (this.secretKey) {\n\t\t\tthis.secretKey.fill(0);\n\t\t\tthis.secretKey = null;\n\t\t}\n\t\tthis.disposed = true;\n\t}\n\n\tprivate ensureNotDisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\t}\n}\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * PBKDF (RFC 2898). Can be used to create a key from password and salt.\n * @module\n */\nimport { hmac } from './hmac.ts';\n// prettier-ignore\nimport {\n ahash, anumber,\n asyncLoop, checkOpts, clean, createView, kdfInputToBytes,\n type CHash,\n type Hash,\n type KDFInput\n} from './utils.ts';\n\n/**\n * PBKDF2 options:\n * * c: iterations, should probably be higher than 100_000\n * * dkLen: desired length of derived key in bytes\n * * asyncTick: max time in ms for which async function can block execution\n */\nexport type Pbkdf2Opt = {\n c: number;\n dkLen?: number;\n asyncTick?: number;\n};\n// Common start and end for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: KDFInput, _salt: KDFInput, _opts: Pbkdf2Opt) {\n ahash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n anumber(c, 'c');\n anumber(dkLen, 'dkLen');\n anumber(asyncTick, 'asyncTick');\n if (c < 1) throw new Error('iterations (c) must be >= 1');\n const password = kdfInputToBytes(_password, 'password');\n const salt = kdfInputToBytes(_salt, 'salt');\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n PRF: Hash<T>,\n PRFSalt: Hash<T>,\n DK: Uint8Array,\n prfW: Hash<T>,\n u: Uint8Array\n) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW) prfW.destroy();\n clean(u);\n return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n * @example\n * const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: Math.pow(2, 18) });\n */\nexport function pbkdf2(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Uint8Array {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function. Async version.\n * @example\n * await pbkdf2Async(sha256, 'password', 'salt', { dkLen: 32, c: 500_000 });\n */\nexport async function pbkdf2Async(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Promise<Uint8Array> {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, () => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';\nimport { sha256, sha512 } from '@noble/hashes/sha2.js';\nimport { abytes, anumber, randomBytes } from '@noble/hashes/utils.js';\nimport { pbkdf2 as pbkdf2web, sha512 as sha512web } from '@noble/hashes/webcrypto.js';\nimport { utils as baseUtils } from '@scure/base';\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n if (typeof str !== 'string')\n throw new TypeError('invalid mnemonic type: ' + typeof str);\n return str.normalize('NFKD');\n}\nfunction normalize(str) {\n const norm = nfkd(str);\n const words = norm.split(' ');\n if (![12, 15, 18, 21, 24].includes(words.length))\n throw new Error('Invalid mnemonic');\n return { nfkd: norm, words };\n}\nfunction aentropy(ent) {\n abytes(ent);\n if (![16, 20, 24, 28, 32].includes(ent.length))\n throw new Error('invalid entropy length');\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function generateMnemonic(wordlist, strength = 128) {\n anumber(strength);\n if (strength % 32 !== 0 || strength > 256)\n throw new TypeError('Invalid entropy');\n return entropyToMnemonic(randomBytes(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n // Checksum is ent.length/4 bits long\n const bitsLeft = 8 - entropy.length / 4;\n // Zero rightmost \"bitsLeft\" bits in byte\n // For example: bitsLeft=4 val=10111101 -> 10110000\n return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n throw new Error('Wordlist: expected array of 2048 strings');\n wordlist.forEach((i) => {\n if (typeof i !== 'string')\n throw new Error('wordlist: non-string element: ' + i);\n });\n return baseUtils.chain(baseUtils.checksum(1, calcChecksum), baseUtils.radix2(11, true), baseUtils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nexport function mnemonicToEntropy(mnemonic, wordlist) {\n const { words } = normalize(mnemonic);\n const entropy = getCoder(wordlist).decode(words);\n aentropy(entropy);\n return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function entropyToMnemonic(entropy, wordlist) {\n aentropy(entropy);\n const words = getCoder(wordlist).encode(entropy);\n return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nexport function validateMnemonic(mnemonic, wordlist) {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n }\n catch (e) {\n return false;\n }\n return true;\n}\nconst psalt = (passphrase) => nfkd('mnemonic' + passphrase);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeed(mnemonic, passphrase = '') {\n return pbkdf2Async(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedSync(mnemonic, passphrase = '') {\n return pbkdf2(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Uses native, built-in functionality, provided by globalThis.crypto.\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedWebcrypto(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedWebcrypto(mnemonic, passphrase = '') {\n return pbkdf2web(sha512web, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n","export const wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport * as bip39 from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { BASE_DERIVATION_PATH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport { Keypair } from \"./keypair\";\n\nexport type MnemonicStrength = 128 | 256;\n\ninterface HDKeyNode {\n\tprivateKey: Uint8Array;\n\tchainCode: Uint8Array;\n}\n\n/**\n * Represents a validated BIP39 mnemonic phrase with SLIP-0010 Ed25519 hierarchical key derivation.\n *\n * Implements the SLIP-0010 standard for Ed25519 key derivation, ensuring compatibility\n * with other implementations (e.g., Rust CDK). The default derivation path uses coin type\n * 756 (R=7, L=5, O=6 on telephone keypad).\n *\n * @example\n * ```typescript\n * // Generate new mnemonic (12 or 24 words)\n * const mnemonic = Mnemonic.generate(128); // 12 words\n *\n * // Restore from existing phrase\n * const restored = Mnemonic.fromPhrase(\"word1 word2 ...\");\n *\n * // Derive keypairs at specific account indices\n * const keypair0 = await mnemonic.toKeypair(0); // m/44'/756'/0'/0'\n * const keypair1 = await mnemonic.toKeypair(1); // m/44'/756'/1'/0'\n *\n * // With custom passphrase (BIP39 extension)\n * const secure = await mnemonic.toKeypair(0, {\n * passphrase: \"my-secret\"\n * });\n * ```\n *\n * @see {@link https://github.com/satoshilabs/slips/blob/master/slip-0010.md SLIP-0010 Specification}\n */\nexport class Mnemonic {\n\tprivate readonly phrase: string;\n\n\tprivate constructor(phrase: string) {\n\t\tif (!bip39.validateMnemonic(phrase, wordlist)) {\n\t\t\tthrow CryptoError.invalidMnemonic(\"Invalid BIP39 mnemonic phrase\");\n\t\t}\n\t\tthis.phrase = phrase;\n\t}\n\n\t/**\n\t * Generates a new random BIP39 mnemonic phrase.\n\t *\n\t * @param strength - Entropy strength (128 = 12 words, 256 = 24 words). Default: 128\n\t * @returns Validated Mnemonic instance\n\t */\n\tstatic generate(strength: MnemonicStrength = 128): Mnemonic {\n\t\tconst phrase = bip39.generateMnemonic(wordlist, strength);\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Creates a Mnemonic from an existing phrase.\n\t *\n\t * @param phrase - BIP39 mnemonic phrase (12 or 24 space-separated words)\n\t * @returns Validated Mnemonic instance\n\t * @throws {CryptoError} If phrase is invalid (wrong words or checksum)\n\t */\n\tstatic fromPhrase(phrase: string): Mnemonic {\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Validates a phrase without creating an instance.\n\t *\n\t * Checks both word validity and BIP39 checksum.\n\t *\n\t * @param phrase - Mnemonic phrase to validate\n\t * @returns true if phrase is valid\n\t */\n\tstatic isValid(phrase: string): boolean {\n\t\treturn bip39.validateMnemonic(phrase, wordlist);\n\t}\n\n\tprivate getMasterKeyFromSeed(seed: Uint8Array): HDKeyNode {\n\t\tconst seedKey = new TextEncoder().encode(\"ed25519 seed\");\n\t\tconst digest = hmac(sha512, seedKey, seed);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate deriveChildKey(parentKey: HDKeyNode, index: number): HDKeyNode {\n\t\tconst hardenedIndex = index | 0x80000000;\n\t\tconst data = new Uint8Array(1 + 32 + 4);\n\t\tdata[0] = 0x00;\n\t\tdata.set(parentKey.privateKey, 1);\n\n\t\tconst view = new DataView(data.buffer);\n\t\tview.setUint32(33, hardenedIndex, false);\n\n\t\tconst digest = hmac(sha512, parentKey.chainCode, data);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate derivePath(path: string, seed: Uint8Array): HDKeyNode {\n\t\tif (!path.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\tlet node = this.getMasterKeyFromSeed(seed);\n\t\tconst segments = path.slice(2).split(\"/\");\n\n\t\tfor (const segment of segments) {\n\t\t\tif (!segment) continue;\n\n\t\t\tconst index = segment.endsWith(\"'\")\n\t\t\t\t? Number.parseInt(segment.slice(0, -1), 10)\n\t\t\t\t: Number.parseInt(segment, 10);\n\n\t\t\tif (Number.isNaN(index) || index < 0) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\t`Invalid path segment: ${segment}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tnode = this.deriveChildKey(node, index);\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Derives a keypair at a specific account index.\n\t *\n\t * Uses SLIP-0010 Ed25519 derivation with the default path:\n\t * `m/44'/756'/{accountIndex}'/0'`\n\t *\n\t * Coin type 756 follows the telephone keypad convention (R=7, L=5, O=6).\n\t *\n\t * @param accountIndex - Account index to derive (default: 0)\n\t * @param options - Derivation options\n\t * @param options.passphrase - Optional BIP39 passphrase for additional security\n\t * @param options.baseDerivationPath - Base path (default: \"m/44'/756'\")\n\t * @returns Keypair for the derived account\n\t */\n\tasync toKeypair(\n\t\taccountIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair> {\n\t\tif (accountIndex < 0 || !Number.isInteger(accountIndex)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Account index must be a non-negative integer\",\n\t\t\t\t{ accountIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst { passphrase = \"\", baseDerivationPath = BASE_DERIVATION_PATH } =\n\t\t\toptions ?? {};\n\n\t\ttry {\n\t\t\tconst fullPath = this.buildFullPath(baseDerivationPath, accountIndex);\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tbaseDerivationPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a keypair using an explicit full derivation path.\n\t *\n\t * @param fullPath - Complete derivation path (e.g., \"m/44'/756'/0'/0'\")\n\t * @param passphrase - Optional BIP39 passphrase\n\t */\n\tasync toKeypairWithPath(fullPath: string, passphrase = \"\"): Promise<Keypair> {\n\t\ttry {\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tfullPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives multiple keypairs sequentially from this mnemonic.\n\t *\n\t * @param count - Number of keypairs to derive\n\t * @param startIndex - Starting account index (default: 0)\n\t * @param options - Derivation options (passphrase and path)\n\t */\n\tasync deriveKeypairs(\n\t\tcount: number,\n\t\tstartIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair[]> {\n\t\tif (count <= 0 || !Number.isInteger(count)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Count must be a positive integer\",\n\t\t\t\t{ count },\n\t\t\t);\n\t\t}\n\n\t\tconst keypairs: Keypair[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst keypair = await this.toKeypair(startIndex + i, options);\n\t\t\tkeypairs.push(keypair);\n\t\t}\n\n\t\treturn keypairs;\n\t}\n\n\t/**\n\t * Converts the mnemonic to a BIP39 seed.\n\t *\n\t * @param passphrase - Optional BIP39 passphrase for additional security\n\t * @returns 64-byte seed\n\t */\n\tasync toSeed(passphrase = \"\"): Promise<Uint8Array> {\n\t\treturn bip39.mnemonicToSeed(this.phrase, passphrase);\n\t}\n\n\t/**\n\t * Returns the mnemonic phrase as a string.\n\t */\n\ttoString(): string {\n\t\treturn this.phrase;\n\t}\n\n\t/**\n\t * Returns the individual words of the mnemonic.\n\t */\n\tgetWords(): string[] {\n\t\treturn this.phrase.split(\" \");\n\t}\n\n\t/**\n\t * Returns the word count (12 or 24).\n\t */\n\tgetWordCount(): 12 | 24 {\n\t\tconst count = this.getWords().length;\n\t\treturn count === 24 ? 24 : 12;\n\t}\n\n\t/**\n\t * Returns the entropy strength (128 or 256 bits).\n\t */\n\tgetStrength(): MnemonicStrength {\n\t\treturn this.getWordCount() === 12 ? 128 : 256;\n\t}\n\n\t/**\n\t * Checks equality with another mnemonic using constant-time comparison.\n\t */\n\tequals(other: Mnemonic): boolean {\n\t\tif (this.phrase.length !== other.phrase.length) return false;\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < this.phrase.length; i++) {\n\t\t\tresult |= this.phrase.charCodeAt(i) ^ other.phrase.charCodeAt(i);\n\t\t}\n\t\treturn result === 0;\n\t}\n\n\t/**\n\t * JSON serialization (returns the mnemonic phrase).\n\t */\n\ttoJSON(): string {\n\t\treturn this.phrase;\n\t}\n\n\tprivate buildFullPath(\n\t\tbaseDerivationPath: string,\n\t\taccountIndex: number,\n\t): string {\n\t\tconst cleanBasePath = baseDerivationPath.replace(/\\/$/, \"\");\n\n\t\tif (!cleanBasePath.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\treturn `${cleanBasePath}/${accountIndex}'/0'`;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error handling for the Rialo CDK.\n *\n * This module defines the common error types used throughout the Rialo CDK.\n * It provides a centralized error handling mechanism for all operations.\n */\n\n/**\n * Structured RPC error information parsed from JSON-RPC error responses.\n */\nexport interface RpcErrorDetails {\n\t/** HTTP status code (e.g., 200, 422, 500) */\n\tstatus?: number;\n\t/** JSON-RPC error code (e.g., -32002) */\n\tcode: number;\n\t/** Human-readable error message */\n\tmessage: string;\n}\n\n/**\n * Error types for different subsystems in the Rialo CDK.\n */\nexport enum RialoErrorType {\n\t/** Errors related to file or system I/O operations */\n\tIO = \"IO\",\n\t/** Errors occurring during RPC communication with blockchain nodes */\n\tRPC = \"RPC\",\n\t/** Errors related to public key parsing or validation */\n\tPARSE_PUBKEY = \"PARSE_PUBKEY\",\n\t/** Errors related to blockhash parsing or validation */\n\tINVALID_BLOCKHASH_FORMAT = \"INVALID_BLOCKHASH_FORMAT\",\n\t/** Errors related to wallet operations such as creation, loading, or signing */\n\tWALLET = \"WALLET\",\n\t/** Errors related to configuration loading, parsing, or validation */\n\tCONFIG = \"CONFIG\",\n\t/** Errors occurring during transaction building, signing, or submission */\n\tTRANSACTION = \"TRANSACTION\",\n\t/** Network-related errors, including HTTP client errors */\n\tNETWORK = \"NETWORK\",\n\t/** Errors related to password handling, validation, or verification */\n\tPASSWORD = \"PASSWORD\",\n\t/** Errors related to encryption or decryption operations */\n\tENCRYPTION = \"ENCRYPTION\",\n\t/** Errors occurring during JSON parsing, serialization, or deserialization */\n\tJSON = \"JSON\",\n\t/** Errors related to BIP32 key derivation */\n\tBIP32 = \"BIP32\",\n\t/** Errors related to invalid input parameters or data */\n\tINVALID_INPUT = \"INVALID_INPUT\",\n\t/** Errors related to serialization/deserialization */\n\tSERIALIZATION = \"SERIALIZATION\",\n}\n\n/**\n * Base error class for all Rialo CDK errors.\n *\n * Provides structured error handling with type categorization and optional\n * cause tracking for error chains. Use the static factory methods for\n * consistent error creation across the SDK.\n *\n * @example\n * ```typescript\n * // Create typed errors using factory methods\n * throw RialoError.invalidInput(\"Amount must be positive\");\n * throw RialoError.network(\"Connection failed\", originalError);\n * throw RialoError.rpc({ code: -32002, message: \"Invalid params\" });\n *\n * // Handle errors with type information\n * try {\n * await client.sendTransaction(tx);\n * } catch (error) {\n * if (error instanceof RialoError && error.type === RialoErrorType.NETWORK) {\n * console.log(\"Network error, retrying...\");\n * }\n * }\n * ```\n */\nexport class RialoError extends Error {\n\tpublic readonly type: RialoErrorType;\n\tpublic readonly cause?: Error;\n\tpublic readonly details?: RpcErrorDetails;\n\n\tpublic constructor(\n\t\ttype: RialoErrorType,\n\t\tmessage: string,\n\t\tcause?: Error,\n\t\tdetails?: RpcErrorDetails,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RialoError\";\n\t\tthis.type = type;\n\t\tthis.cause = cause;\n\t\tthis.details = details;\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, RialoError);\n\t\t}\n\t}\n\n\t/**\n\t * Creates an IO error.\n\t */\n\tpublic static io(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.IO, `I/O error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates an RPC error.\n\t */\n\tpublic static rpc(details: RpcErrorDetails): RialoError {\n\t\tlet message: string = details.message;\n\t\tif (details.status !== undefined) {\n\t\t\tmessage = `${details.message} [HTTP ${details.status} code ${details.code}]`;\n\t\t} else if (details.code !== 0) {\n\t\t\tmessage = `${details.message} (code ${details.code})`;\n\t\t}\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.RPC,\n\t\t\t`RPC error: ${message}`,\n\t\t\tundefined,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a public key parsing error.\n\t */\n\tpublic static parsePubkey(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PARSE_PUBKEY,\n\t\t\t`Pubkey error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a blockhash format error.\n\t */\n\tpublic static invalidBlockhash(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_BLOCKHASH_FORMAT,\n\t\t\t`Invalid blockhash format: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a wallet error.\n\t */\n\tpublic static wallet(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.WALLET, `Wallet error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a configuration error.\n\t */\n\tpublic static config(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.CONFIG, `Config error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a transaction error.\n\t */\n\tpublic static transaction(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.TRANSACTION,\n\t\t\t`Transaction error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a network error.\n\t */\n\tpublic static network(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.NETWORK,\n\t\t\t`Network error: ${message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a password error.\n\t */\n\tpublic static password(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PASSWORD,\n\t\t\t`Password error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates an encryption error.\n\t */\n\tpublic static encryption(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.ENCRYPTION,\n\t\t\t`Encryption error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a JSON error.\n\t */\n\tpublic static json(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.JSON, `JSON error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates a BIP32 error.\n\t */\n\tpublic static bip32(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.BIP32, `BIP32 error: ${message}`);\n\t}\n\n\t/**\n\t * Creates an invalid input error.\n\t */\n\tpublic static invalidInput(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t`Invalid input: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a serialization error.\n\t */\n\tpublic static serialization(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.SERIALIZATION,\n\t\t\t`Serialization error: ${message}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for HPKE encryption operations.\n */\nexport enum HpkeErrorCode {\n\t/** Key length does not match expected size */\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\t/** Ciphertext is shorter than minimum required length */\n\tCIPHERTEXT_TOO_SHORT = \"CIPHERTEXT_TOO_SHORT\",\n\t/** HPKE encryption operation failed */\n\tENCRYPTION_FAILED = \"ENCRYPTION_FAILED\",\n\t/** Failed to deserialize Borsh data */\n\tBORSH_DESERIALIZE_FAILED = \"BORSH_DESERIALIZE_FAILED\",\n\t/** RexValue has invalid variant byte */\n\tINVALID_REX_VALUE = \"INVALID_REX_VALUE\",\n}\n\n/**\n * Error class for HPKE encryption operations.\n *\n * Provides detailed error information for encryption failures,\n * including error codes and contextual details.\n */\nexport class HpkeError extends Error {\n\treadonly code: HpkeErrorCode;\n\treadonly cause?: Error;\n\n\tconstructor(code: HpkeErrorCode, message: string, cause?: Error) {\n\t\tsuper(message);\n\t\tthis.name = \"HpkeError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\n\t\t// Maintain proper stack trace in V8 environments\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, HpkeError);\n\t\t}\n\t}\n\n\t/**\n\t * Create an error for invalid key length.\n\t *\n\t * @param expected - Expected key length in bytes\n\t * @param actual - Actual key length in bytes\n\t * @param keyType - Description of the key type (e.g., \"REX public key\")\n\t */\n\tstatic invalidKeyLength(\n\t\texpected: number,\n\t\tactual: number,\n\t\tkeyType: string,\n\t): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid ${keyType} length: expected ${expected} bytes, got ${actual}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for ciphertext that is too short.\n\t *\n\t * @param minLength - Minimum required length\n\t * @param actual - Actual length\n\t */\n\tstatic ciphertextTooShort(minLength: number, actual: number): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.CIPHERTEXT_TOO_SHORT,\n\t\t\t`Ciphertext too short: minimum ${minLength} bytes required, got ${actual}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for encryption failure.\n\t *\n\t * @param cause - The underlying error\n\t */\n\tstatic encryptionFailed(cause: Error): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.ENCRYPTION_FAILED,\n\t\t\t`HPKE encryption failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for Borsh deserialization failure.\n\t *\n\t * @param cause - The underlying error\n\t */\n\tstatic borshDeserializeFailed(cause: Error): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.BORSH_DESERIALIZE_FAILED,\n\t\t\t`Borsh deserialization failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for invalid RexValue variant.\n\t *\n\t * @param variant - The invalid variant byte\n\t */\n\tstatic invalidRexValue(variant: number): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.INVALID_REX_VALUE,\n\t\t\t`Invalid RexValue variant: ${variant}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Constants for REX HPKE encryption.\n *\n * These constants MUST match the Rust implementation exactly:\n * - `crates/tee/secret-sharing/src/constants.rs`\n *\n * @module\n */\n\n/**\n * Additional Authenticated Data (AAD) prefix for user secrets.\n *\n * This 13-byte string is prepended to the sender's public key to form\n * the complete AAD for HPKE encryption. It provides domain separation\n * to prevent cross-protocol attacks.\n *\n * Format: `USER_SECRET_AAD || senderPubkey` = 45 bytes total AAD\n *\n * @remarks\n * Must match Rust: `pub const USER_SECRET_AAD: &[u8] = b\"rex-secret-v1\";`\n */\nexport const USER_SECRET_AAD = new TextEncoder().encode(\"rex-secret-v1\");\n\n/**\n * HPKE info string for secret sharing context.\n *\n * This 32-byte string is used as the `info` parameter in HPKE encryption,\n * providing domain separation for secret sharing operations.\n *\n * @remarks\n * Must match Rust: `pub const SECRET_SHARING_HPKE_INFO: &[u8; 32] = b\"rialo/tee/secret-sharing-hpke/v1\";`\n */\nexport const SECRET_SHARING_HPKE_INFO = new TextEncoder().encode(\n\t\"rialo/tee/secret-sharing-hpke/v1\",\n);\n\n/**\n * Length of an X25519 public key in bytes.\n *\n * Used for the REX encryption public key (secret sharing key).\n */\nexport const X25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of an Ed25519 public key in bytes.\n *\n * Used for sender identity binding in AAD construction.\n */\nexport const ED25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of the HPKE encapsulated key (enc) in bytes.\n *\n * For X25519, this is always 32 bytes.\n */\nexport const HPKE_ENC_LENGTH = 32;\n\n/**\n * Length of the ChaCha20-Poly1305 authentication tag in bytes.\n */\nexport const CHACHA20_POLY1305_TAG_LENGTH = 16;\n\n/**\n * Total overhead added by HPKE encryption.\n *\n * This is the additional bytes beyond the plaintext:\n * - enc (32 bytes): Encapsulated ephemeral public key\n * - tag (16 bytes): ChaCha20-Poly1305 authentication tag\n *\n * Ciphertext length = plaintext length + 48 bytes\n */\nexport const HPKE_OVERHEAD_LENGTH = HPKE_ENC_LENGTH + CHACHA20_POLY1305_TAG_LENGTH;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { HpkeError } from \"./errors.js\";\n\n/**\n * Variant discriminator for RexValue Borsh serialization.\n */\nexport enum RexValueVariant {\n\t/** Plain (unencrypted) data variant */\n\tPlain = 0,\n\t/** Encrypted data variant */\n\tEncrypted = 1,\n}\n\n/**\n * Represents an rex value that can be plain or encrypted.\n *\n * This class provides Borsh-compatible serialization that matches\n * the Rust `RexValue` enum:\n *\n * ```rust\n * pub enum RexValue {\n * Plain(Vec<u8>),\n * Encrypted(Vec<u8>),\n * }\n * ```\n *\n * ## Borsh Format\n *\n * - Plain: `[0x00] [length: u32 LE] [data bytes]`\n * - Encrypted: `[0x01] [length: u32 LE] [ciphertext bytes]`\n *\n * @example\n * ```typescript\n * // Plain value (unencrypted)\n * const plain = RexValue.plain(new TextEncoder().encode(\"hello\"));\n *\n * // Encrypted value (via HPKE)\n * const encrypted = RexValue.encrypted(ciphertextBytes);\n *\n * // Serialize to Borsh\n * const borsh = plain.toBorsh();\n *\n * // Deserialize from Borsh\n * const restored = RexValue.fromBorsh(borsh);\n * ```\n */\nexport class RexValue {\n\tprivate readonly variant: RexValueVariant;\n\tprivate readonly data: Uint8Array;\n\n\tprivate constructor(variant: RexValueVariant, data: Uint8Array) {\n\t\tthis.variant = variant;\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from raw bytes.\n\t *\n\t * @param data - The raw byte data\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plain(data: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Plain, data);\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from a UTF-8 string.\n\t *\n\t * @param s - The string to encode\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plainString(s: string): RexValue {\n\t\treturn new RexValue(\n\t\t\tRexValueVariant.Plain,\n\t\t\tnew TextEncoder().encode(s),\n\t\t);\n\t}\n\n\t/**\n\t * Create an encrypted RexValue from HPKE ciphertext.\n\t *\n\t * @param ciphertext - The HPKE-encrypted ciphertext (enc || ct || tag)\n\t * @returns A new RexValue with Encrypted variant\n\t */\n\tstatic encrypted(ciphertext: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Encrypted, ciphertext);\n\t}\n\n\t/**\n\t * Check if this is a plain (unencrypted) value.\n\t */\n\tisPlain(): boolean {\n\t\treturn this.variant === RexValueVariant.Plain;\n\t}\n\n\t/**\n\t * Check if this is an encrypted value.\n\t */\n\tisEncrypted(): boolean {\n\t\treturn this.variant === RexValueVariant.Encrypted;\n\t}\n\n\t/**\n\t * Get the variant type.\n\t */\n\tgetVariant(): RexValueVariant {\n\t\treturn this.variant;\n\t}\n\n\t/**\n\t * Get the raw bytes (plaintext or ciphertext).\n\t *\n\t * For Plain values, returns the plaintext.\n\t * For Encrypted values, returns the ciphertext.\n\t */\n\tasBytes(): Uint8Array {\n\t\treturn this.data;\n\t}\n\n\t/**\n\t * Try to decode the plain value as a UTF-8 string.\n\t *\n\t * @returns The decoded string, or null if encrypted or not valid UTF-8\n\t */\n\tasString(): string | null {\n\t\tif (!this.isPlain()) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(this.data);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Serialize to Borsh format.\n\t *\n\t * Format: `[variant: u8] [length: u32 LE] [data bytes]`\n\t *\n\t * @returns The Borsh-serialized bytes\n\t */\n\ttoBorsh(): Uint8Array {\n\t\t// 1 byte variant + 4 bytes length + data\n\t\tconst result = new Uint8Array(1 + 4 + this.data.length);\n\n\t\t// Write variant (1 byte)\n\t\tresult[0] = this.variant;\n\n\t\t// Write length as u32 LE (4 bytes)\n\t\tconst dataView = new DataView(result.buffer);\n\t\tdataView.setUint32(1, this.data.length, true);\n\n\t\t// Write data\n\t\tresult.set(this.data, 5);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Deserialize from Borsh format.\n\t *\n\t * @param data - The Borsh-serialized bytes\n\t * @returns A new RexValue\n\t * @throws {HpkeError} If deserialization fails\n\t */\n\tstatic fromBorsh(data: Uint8Array): RexValue {\n\t\tif (data.length < 5) {\n\t\t\tthrow HpkeError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected at least 5 bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst variant = data[0];\n\t\tif (variant !== RexValueVariant.Plain && variant !== RexValueVariant.Encrypted) {\n\t\t\tthrow HpkeError.invalidRexValue(variant);\n\t\t}\n\n\t\tconst dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tconst length = dataView.getUint32(1, true);\n\n\t\tif (data.length < 5 + length) {\n\t\t\tthrow HpkeError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected ${5 + length} bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst payload = data.slice(5, 5 + length);\n\n\t\treturn new RexValue(variant as RexValueVariant, payload);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Chacha20Poly1305 } from \"@hpke/chacha20poly1305\";\nimport { CipherSuite, DhkemX25519HkdfSha256, HkdfSha256 } from \"@hpke/core\";\n\nimport {\n\tED25519_PUBLIC_KEY_LENGTH,\n\tHPKE_OVERHEAD_LENGTH,\n\tSECRET_SHARING_HPKE_INFO,\n\tUSER_SECRET_AAD,\n\tX25519_PUBLIC_KEY_LENGTH,\n} from \"./constants\";\nimport { HpkeError } from \"./errors\";\nimport { RexValue } from \"./rex-value\";\n\n/**\n * HPKE cipher suite configuration.\n *\n * Uses the same parameters as the Rust REX implementation:\n * - KEM: DHKEM(X25519, HKDF-SHA256) (RFC 9180 ID: 0x0020)\n * - KDF: HKDF-SHA256 (RFC 9180 ID: 0x0001)\n * - AEAD: ChaCha20-Poly1305 (RFC 9180 ID: 0x0003)\n * - Mode: Base (0x00)\n */\nconst hpkeSuite = new CipherSuite({\n\tkem: new DhkemX25519HkdfSha256(),\n\tkdf: new HkdfSha256(),\n\taead: new Chacha20Poly1305(),\n});\n\n/**\n * Build the AAD (Additional Authenticated Data) for HPKE encryption.\n *\n * The AAD binds the ciphertext to the sender's identity, preventing\n * replay attacks where ciphertext is substituted between users.\n *\n * Format: USER_SECRET_AAD (16 bytes) || senderPubkey (32 bytes) = 48 bytes\n *\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes)\n * @returns The constructed AAD (48 bytes)\n */\nfunction buildAad(senderPubkey: Uint8Array): Uint8Array {\n\tconst aad = new Uint8Array(USER_SECRET_AAD.length + senderPubkey.length);\n\taad.set(USER_SECRET_AAD, 0);\n\taad.set(senderPubkey, USER_SECRET_AAD.length);\n\treturn aad;\n}\n\n/**\n * Encrypt data using HPKE for REX secret sharing.\n *\n * This function performs HPKE encryption using the Base mode with:\n * - X25519 for key encapsulation\n * - HKDF-SHA256 for key derivation\n * - ChaCha20-Poly1305 for authenticated encryption\n *\n * The output format is: `enc (32 bytes) || ciphertext || tag (16 bytes)`\n *\n * @param rexPubkey - The REX X25519 public key (32 bytes)\n * @param data - The plaintext data to encrypt\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes) for AAD construction\n * @returns The encrypted ciphertext including enc and tag\n * @throws {HpkeError} If key lengths are invalid or encryption fails\n *\n * @example\n * ```typescript\n * const rexPubkey = await client.getSecretSharingPubkey();\n * const ciphertext = await hpkeEncrypt(\n * rexPubkey,\n * new TextEncoder().encode(\"secret data\"),\n * keypair.publicKey.toBytes()\n * );\n * ```\n */\nexport async function hpkeEncrypt(\n\trexPubkey: Uint8Array,\n\tdata: Uint8Array,\n\tsenderPubkey: Uint8Array,\n): Promise<Uint8Array> {\n\t// Validate REX public key length (X25519)\n\tif (rexPubkey.length !== X25519_PUBLIC_KEY_LENGTH) {\n\t\tthrow HpkeError.invalidKeyLength(\n\t\t\tX25519_PUBLIC_KEY_LENGTH,\n\t\t\trexPubkey.length,\n\t\t\t\"REX public key\",\n\t\t);\n\t}\n\n\t// Validate sender public key length (Ed25519)\n\tif (senderPubkey.length !== ED25519_PUBLIC_KEY_LENGTH) {\n\t\tthrow HpkeError.invalidKeyLength(\n\t\t\tED25519_PUBLIC_KEY_LENGTH,\n\t\t\tsenderPubkey.length,\n\t\t\t\"sender public key\",\n\t\t);\n\t}\n\n\ttry {\n\t\t// Import the recipient's public key (convert to ArrayBuffer for HPKE library)\n\t\tconst recipientKey = await hpkeSuite.kem.importKey(\n\t\t\t\"raw\",\n\t\t\trexPubkey.buffer.slice(\n\t\t\t\trexPubkey.byteOffset,\n\t\t\t\trexPubkey.byteOffset + rexPubkey.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t);\n\n\t\t// Create sender context with the info string for domain separation\n\t\tconst sender = await hpkeSuite.createSenderContext({\n\t\t\trecipientPublicKey: recipientKey,\n\t\t\tinfo: SECRET_SHARING_HPKE_INFO.buffer.slice(\n\t\t\t\tSECRET_SHARING_HPKE_INFO.byteOffset,\n\t\t\t\tSECRET_SHARING_HPKE_INFO.byteOffset +\n\t\t\t\t\tSECRET_SHARING_HPKE_INFO.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t});\n\n\t\t// Build AAD: USER_SECRET_AAD || senderPubkey\n\t\tconst aad = buildAad(senderPubkey);\n\n\t\t// Encrypt the data (convert to ArrayBuffer for HPKE library)\n\t\tconst ciphertext = await sender.seal(\n\t\t\tdata.buffer.slice(\n\t\t\t\tdata.byteOffset,\n\t\t\t\tdata.byteOffset + data.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t\taad.buffer.slice(\n\t\t\t\taad.byteOffset,\n\t\t\t\taad.byteOffset + aad.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t);\n\n\t\t// Combine enc || ciphertext into final output\n\t\t// The enc is the encapsulated key from sender context\n\t\tconst enc = new Uint8Array(sender.enc);\n\t\tconst result = new Uint8Array(enc.length + ciphertext.byteLength);\n\t\tresult.set(enc, 0);\n\t\tresult.set(new Uint8Array(ciphertext), enc.length);\n\n\t\treturn result;\n\t} catch (error) {\n\t\tthrow HpkeError.encryptionFailed(\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n}\n\n/**\n * Encrypt data for REX and wrap it in an RexValue.\n *\n * This is a convenience function that combines:\n * 1. HPKE encryption using `hpkeEncrypt`\n * 2. Wrapping the ciphertext in an `RexValue.encrypted`\n *\n * The resulting RexValue can be serialized to Borsh and sent to the network.\n *\n * @param rexPubkey - The REX X25519 public key (32 bytes)\n * @param data - The plaintext data to encrypt\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes)\n * @returns An RexValue containing the encrypted ciphertext\n * @throws {HpkeError} If key lengths are invalid or encryption fails\n *\n * @example\n * ```typescript\n * import { RpcClient, Keypair } from \"@rialo/ts-cdk\";\n * import { encryptForRex, RexValue } from \"@rialo/ts-cdk/rex\";\n *\n * // Get REX public key from the network\n * const client = new RpcClient(\"https://rpc.rialo.xyz\");\n * const rexPubkey = await client.getSecretSharingPubkey();\n *\n * // Create keypair for signing\n * const keypair = Keypair.generate();\n *\n * // Encrypt secret data\n * const rexValue = await encryptForRex(\n * rexPubkey,\n * new TextEncoder().encode(\"my secret API key\"),\n * keypair.publicKey.toBytes()\n * );\n *\n * // The RexValue can now be serialized and used in transactions\n * const borshBytes = rexValue.toBorsh();\n * ```\n */\nexport async function encryptForRex(\n\trexPubkey: Uint8Array,\n\tdata: Uint8Array,\n\tsenderPubkey: Uint8Array,\n): Promise<RexValue> {\n\tconst ciphertext = await hpkeEncrypt(rexPubkey, data, senderPubkey);\n\treturn RexValue.encrypted(ciphertext);\n}\n\n/**\n * Calculate the expected ciphertext length for a given plaintext length.\n *\n * The ciphertext consists of:\n * - enc (32 bytes): Encapsulated ephemeral public key\n * - ciphertext (plaintext.length bytes): Encrypted data\n * - tag (16 bytes): ChaCha20-Poly1305 authentication tag\n *\n * @param plaintextLength - Length of the plaintext in bytes\n * @returns Expected ciphertext length\n *\n * @example\n * ```typescript\n * const ciphertextLen = getCiphertextLength(100);\n * console.log(ciphertextLen); // 148 (32 + 100 + 16)\n * ```\n */\nexport function getCiphertextLength(plaintextLength: number): number {\n\treturn HPKE_OVERHEAD_LENGTH + plaintextLength;\n}\n\n/**\n * Validate that a ciphertext has a valid length.\n *\n * A valid HPKE ciphertext must be at least 48 bytes (32 enc + 16 tag).\n *\n * @param ciphertext - The ciphertext to validate\n * @returns true if the ciphertext length is valid\n *\n * @example\n * ```typescript\n * if (!isValidCiphertextLength(ciphertext)) {\n * throw new Error(\"Ciphertext too short\");\n * }\n * ```\n */\nexport function isValidCiphertextLength(ciphertext: Uint8Array): boolean {\n\treturn ciphertext.length >= HPKE_OVERHEAD_LENGTH;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for RPC operations, categorized by type.\n */\nexport enum RpcErrorCode {\n\t// Network errors (retryable)\n\tREQUEST_TIMEOUT = \"REQUEST_TIMEOUT\",\n\tNETWORK_ERROR = \"NETWORK_ERROR\",\n\tCONNECTION_REFUSED = \"CONNECTION_REFUSED\",\n\tINVALID_NETWORK = \"INVALID_NETWORK\",\n\n\t// RPC protocol errors\n\tINVALID_RESPONSE = \"INVALID_RESPONSE\",\n\tPARSE_ERROR = \"PARSE_ERROR\",\n\tINVALID_REQUEST = \"INVALID_REQUEST\",\n\tMETHOD_NOT_FOUND = \"METHOD_NOT_FOUND\",\n\tINVALID_PARAMS = \"INVALID_PARAMS\",\n\tINTERNAL_ERROR = \"INTERNAL_ERROR\",\n\n\t// Transaction errors\n\tTRANSACTION_REJECTED = \"TRANSACTION_REJECTED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tTRANSACTION_CONFIRMATION_TIMEOUT = \"TRANSACTION_CONFIRMATION_TIMEOUT\",\n\n\t// Resource errors\n\tACCOUNT_NOT_FOUND = \"ACCOUNT_NOT_FOUND\",\n\n\t// Rate limiting (retryable after delay)\n\tRATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n\n\t// Node health\n\tNODE_UNHEALTHY = \"NODE_UNHEALTHY\",\n}\n\n/**\n * Detailed error context for debugging and error handling.\n */\ninterface RpcErrorDetails {\n\tmethod?: string;\n\tparams?: unknown;\n\trequestId?: number;\n\turl?: string;\n\thttpStatus?: number;\n\trpcCode?: number;\n\ttimeout?: number;\n\tattempts?: number;\n\t[key: string]: unknown;\n}\n\n/**\n * Error class for RPC operations with structured error information.\n *\n * Provides actionable error messages and indicates whether errors are retryable.\n */\nexport class RpcError extends Error {\n\tpublic readonly code: RpcErrorCode;\n\tpublic readonly details: RpcErrorDetails;\n\tpublic readonly retryable: boolean;\n\n\tconstructor(\n\t\tcode: RpcErrorCode,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails = {},\n\t\tretryable = false,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t\tthis.retryable = retryable;\n\t}\n\n\tstatic requestTimeout(timeoutMs: number, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.REQUEST_TIMEOUT,\n\t\t\t`RPC request timed out after ${timeoutMs}ms. The node may be slow or unreachable.`,\n\t\t\t{ ...details, timeout: timeoutMs },\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic networkError(message: string, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.NETWORK_ERROR,\n\t\t\t`Network error: ${message}. Check your internet connection and node URL.`,\n\t\t\tdetails,\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic invalidResponse(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.INVALID_RESPONSE,\n\t\t\t\"Received invalid response from RPC node. The response format is unexpected.\",\n\t\t\tdetails,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic accountNotFound(pubkey: string): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.ACCOUNT_NOT_FOUND,\n\t\t\t`Account ${pubkey} not found on chain. It may not exist or has zero balance.`,\n\t\t\t{ pubkey },\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic rateLimitExceeded(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t\t\"Rate limit exceeded. Too many requests to the RPC endpoint. Try again later or use a different endpoint.\",\n\t\t\tdetails,\n\t\t\ttrue, // Can retry after delay\n\t\t);\n\t}\n\n\tstatic fromRpcCode(\n\t\trpcCode: number,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails,\n\t): RpcError {\n\t\t// Map JSON-RPC error codes to our error codes\n\t\tconst codeMap: Record<number, RpcErrorCode> = {\n\t\t\t[-32700]: RpcErrorCode.PARSE_ERROR,\n\t\t\t[-32600]: RpcErrorCode.INVALID_REQUEST,\n\t\t\t[-32601]: RpcErrorCode.METHOD_NOT_FOUND,\n\t\t\t[-32602]: RpcErrorCode.INVALID_PARAMS,\n\t\t\t[-32603]: RpcErrorCode.INTERNAL_ERROR,\n\t\t\t[429]: RpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t};\n\n\t\tconst code = codeMap[rpcCode] || RpcErrorCode.INTERNAL_ERROR;\n\t\tconst retryable = rpcCode === 429 || rpcCode === -32603;\n\n\t\treturn new RpcError(code, message, { ...details, rpcCode }, retryable);\n\t}\n\n\ttoJSON(): {\n\t\tcode: RpcErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t\tretryable: boolean;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t\tretryable: this.retryable,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Base RPC client with JSON-RPC 2.0 protocol handling.\n *\n * Provides common functionality for all RPC clients including\n * request/response validation and error handling.\n */\nimport { RpcError } from \"../errors\";\nimport type { HttpTransport } from \"../http-transport\";\n\ninterface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id: number;\n method: string;\n params: unknown[];\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: \"2.0\";\n id: number;\n result?: T;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\n/**\n * Base client with JSON-RPC protocol handling.\n *\n * All specific clients (QueryClient, TransactionClient) extend this.\n */\nexport class BaseRpcClient {\n protected readonly transport: HttpTransport;\n private requestId = 0;\n\n constructor(transport: HttpTransport) {\n this.transport = transport;\n }\n\n /**\n * Makes a JSON-RPC 2.0 method call with type safety.\n *\n * Handles request serialization, response validation, and error mapping.\n */\n async call<T>(method: string, params: unknown[] = []): Promise<T> {\n const requestId = this.nextRequestId();\n\n const request: JsonRpcRequest = {\n jsonrpc: \"2.0\",\n id: requestId,\n method,\n params,\n };\n\n const requestBody = JSON.stringify(request);\n const requestDetails = { method, params, requestId };\n\n // Make HTTP request with retry logic\n const data = await this.transport.request(requestBody, requestDetails);\n\n // Validate response structure\n if (!this.isValidJsonRpcResponse(data)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response: data,\n });\n }\n\n const response = data as JsonRpcResponse<T>;\n\n // Check for RPC error\n if (response.error) {\n throw RpcError.fromRpcCode(response.error.code, response.error.message, {\n ...requestDetails,\n rpcData: response.error.data,\n });\n }\n\n // Check for result\n if (!(\"result\" in response)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response,\n });\n }\n\n return response.result as T;\n }\n\n /**\n * Validate JSON-RPC response structure\n */\n private isValidJsonRpcResponse(data: unknown): boolean {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n const response = data as Record<string, unknown>;\n\n return (\n response.jsonrpc === \"2.0\" &&\n typeof response.id === \"number\" &&\n (\"result\" in response || \"error\" in response)\n );\n }\n\n /**\n * Generates the next request ID with Overflow Protection.\n * @returns The next request ID.\n */\n private nextRequestId(): number {\n this.requestId = (this.requestId + 1) % Number.MAX_SAFE_INTEGER;\n return this.requestId;\n }\n\n /**\n * Returns the configured RPC endpoint URL.\n */\n getUrl(): string {\n return this.transport.getUrl();\n }\n\n /**\n * Call an arbitrary RPC method with a JSON string body.\n *\n * Escape hatch for methods not yet in the typed interface.\n *\n * @param method - The RPC method name\n * @param params - JSON string of parameters\n * @returns JSON string of the result\n */\n async callWithJson(method: string, params: string): Promise<string> {\n const parsedParams = JSON.parse(params);\n const result = await this.call<unknown>(method, parsedParams);\n return JSON.stringify(result);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { AccountFilter, AccountInfo, AllAccountsEntry, BlockInfo, ClusterNodeInfo, ConfigHashPrefix, ConfirmTransactionOptions, ConfirmedTransaction, ConnectedNode, EpochInfo, FeeResponse, GetAccountsByOwnerConfig, GetAllAccountsConfig, GetBlockConfig, GetSignaturesForAddressConfig, GetTransactionsConfig, GetValidatorAccountsRequest, GetWorkflowLineageRequest, GetWorkflowLineageResponse, Hash, IsBlockhashValidResponse, Kelvin, OptionalAccountInfo, OwnerAccount, PaginationInfo, PublicKey, RexInfoAndDuties, SecretSharingPubkey, SendAndConfirmOptions, SendTransactionOptions, Signature, SignatureInfo, SignatureStatus, StakeAccountInfo, SubmitEpochChangeRequest, SubmitEpochChangeResponse, Subscription, TokenBalance, TransactionInfo, TransactionResponse, TriggeredTransaction, ValidatorAccountInfo, ValidatorHealth } from \"./types.js\";\n\n/**\n * RpcClient interface — generated from spec.wit.\n *\n * Every method corresponds to a function in the `rpc-client` interface.\n */\nexport abstract class RpcClient {\n /**\n * Gets the balance of an account in kelvins.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * The account balance in the smallest denomination of the native token (kelvins).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getBalance(pubkey: PublicKey): Promise<Kelvin>;\n\n /**\n * Gets detailed information about an on-chain account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * Detailed account information including balance, owner, data, and executable flag.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getAccountInfo(pubkey: PublicKey): Promise<AccountInfo>;\n\n /**\n * Gets the current finalized block height from the blockchain.\n * \n * The block height represents the number of blocks produced since genesis.\n * Always returns the finalized block height for consistency.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeight(): Promise<bigint>;\n\n /**\n * Gets the current finalized block height with advanced configuration.\n * \n * Provides access to advanced parameters for block height retrieval,\n * specifically minimum context slot requirements.\n * \n * # Parameters\n * \n * * `min-context-slot` - The minimum context slot that the server must have\n * reached before responding. If absent, no minimum is required.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeightWithConfig(minContextSlot: bigint | undefined): Promise<bigint>;\n\n /**\n * Gets detailed information about a transaction by its signature.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature to look up.\n * \n * # Returns\n * \n * Full transaction details including block height, block hash, timestamp,\n * execution metadata (fee, errors), and the transaction content.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is not found.\n */\n abstract getTransaction(sig: Signature): Promise<TransactionResponse>;\n\n /**\n * Gets the total number of transactions processed since genesis.\n * \n * # Returns\n * \n * The total transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactionCount(): Promise<bigint>;\n\n /**\n * Calculates the minimum balance required for rent exemption.\n * \n * Accounts with at least this balance are exempt from paying rent.\n * \n * # Parameters\n * \n * * `data-size` - The size of the account data in bytes.\n * \n * # Returns\n * \n * The minimum balance (in kelvins) required for rent exemption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint>;\n\n /**\n * Gets the status of multiple transaction signatures.\n * \n * # Parameters\n * \n * * `signatures` - A list of transaction signatures to query.\n * \n * # Returns\n * \n * A list of signature statuses (slot, executed, error) corresponding\n * to the input signatures.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignatureStatuses(signatures: Signature[]): Promise<(SignatureStatus | undefined)[]>;\n\n /**\n * Gets signatures associated with an address, with optional pagination.\n * \n * # Parameters\n * \n * * `address` - The address to query signatures for.\n * * `config` - Optional configuration for pagination (limit, before, until).\n * \n * # Returns\n * \n * A list of signature info records for the given address.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignaturesForAddress(address: PublicKey, config: GetSignaturesForAddressConfig | undefined): Promise<SignatureInfo[]>;\n\n /**\n * Gets current epoch information.\n * \n * # Returns\n * \n * Epoch information including epoch number, slot indices, block height,\n * and transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getEpochInfo(): Promise<EpochInfo>;\n\n /**\n * Gets the fee for a given serialized message.\n * \n * # Parameters\n * \n * * `message` - The base64-encoded serialized message to calculate fees for.\n * \n * # Returns\n * \n * A fee response containing the fee in kelvins, or absent if the message\n * is invalid.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getFeeForMessage(message: string): Promise<FeeResponse>;\n\n /**\n * Gets information for multiple accounts in a single request.\n * \n * # Parameters\n * \n * * `pubkeys` - A list of public keys to query.\n * \n * # Returns\n * \n * A list of optional account info records. Each entry is absent if that\n * account does not exist.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMultipleAccounts(pubkeys: PublicKey[]): Promise<OptionalAccountInfo[]>;\n\n /**\n * Gets accounts owned by a given program or address.\n * \n * Returns all accounts whose owner matches the specified public key,\n * along with optional pagination metadata.\n * \n * # Parameters\n * \n * * `owner` - The public key of the owner/program to query accounts for.\n * * `filter` - Optional filter to specify account type (program accounts\n * or token accounts). Defaults to program-accounts if absent.\n * * `config` - Optional pagination configuration (limit, after cursor).\n * \n * # Returns\n * \n * A tuple of (accounts list, optional pagination info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAccountsByOwner(owner: PublicKey, filter: AccountFilter | undefined, config: GetAccountsByOwnerConfig | undefined): Promise<[OwnerAccount[], PaginationInfo | undefined]>;\n\n /**\n * Gets a subscription by subscriber public key and nonce.\n * \n * # Parameters\n * \n * * `subscriber` - The public key of the subscriber.\n * * `nonce` - The nonce identifying the specific subscription.\n * \n * # Returns\n * \n * The subscription record (kind, topic, subscriber, event-account).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the subscription is not found.\n */\n abstract getSubscription(subscriber: PublicKey, nonce: string): Promise<Subscription>;\n\n /**\n * Gets transactions triggered by a subscription.\n * \n * Returns transactions that were automatically triggered in response to\n * subscription matches or other programmatic conditions.\n * \n * # Parameters\n * \n * * `subscription-account` - The public key of the subscription account.\n * * `limit` - Optional maximum number of transactions to return.\n * \n * # Returns\n * \n * A list of triggered transaction records (signature, block number).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTriggeredTransactions(subscriptionAccount: PublicKey, limit: number | undefined): Promise<TriggeredTransaction[]>;\n\n /**\n * Gets the workflow lineage tree for a transaction.\n * \n * Traverses the chain of workflow-triggered transactions starting from\n * a root transaction, building a tree of parent-child relationships.\n * \n * # Parameters\n * \n * * `request` - The lineage request including root signature, max depth,\n * and whether to include event details.\n * \n * # Returns\n * \n * The workflow lineage response with nodes, leaves, and truncation info.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the root transaction is not found.\n */\n abstract getWorkflowLineage(request: GetWorkflowLineageRequest): Promise<GetWorkflowLineageResponse>;\n\n /**\n * Gets paginated transactions from the blockchain.\n * \n * Returns a list of transactions, optionally filtered and paginated.\n * Useful for transaction monitoring, analytics, and debugging.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for pagination (limit, before cursor).\n * If absent, defaults apply (limit: 100).\n * \n * # Returns\n * \n * A list of transaction info records with signatures, slots, block times,\n * and error status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactions(config: GetTransactionsConfig | undefined): Promise<TransactionInfo[]>;\n\n /**\n * Checks if a blockhash is still valid for transaction submission.\n * \n * # Parameters\n * \n * * `blockhash` - The blockhash to validate.\n * \n * # Returns\n * \n * `true` if the blockhash is still valid, `false` otherwise.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse>;\n\n /**\n * Gets the health status of the RPC node.\n * \n * # Returns\n * \n * A health status string, typically \"ok\" when the node is healthy.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the node is unhealthy.\n */\n abstract getHealth(): Promise<string>;\n\n /**\n * Gets the health status of the validator.\n * \n * # Returns\n * \n * The validator health status record.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorHealth(): Promise<ValidatorHealth>;\n\n /**\n * Gets the list of full nodes connected to the validator or full node.\n * \n * # Returns\n * \n * A list of connected nodes, each identified by a network public key\n * and connection duration in milliseconds.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedFullNodes(): Promise<ConnectedNode[]>;\n\n /**\n * Gets the TEE's secret sharing public key for HPKE encryption.\n * \n * This public key is used to encrypt secrets that only the TEE cluster\n * can decrypt.\n * \n * # Returns\n * \n * The X25519 public key (hex-encoded) used for HPKE encryption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails, the TEE Registry state account\n * doesn't exist, or the secret sharing public key has not been registered.\n */\n abstract getSecretSharingPubkey(): Promise<SecretSharingPubkey>;\n\n /**\n * Gets the config hash prefix for protecting against replay attacks.\n * \n * Retrieves the first 64 bits of the config hash, which is used for\n * transaction replay protection across chains.\n * \n * # Returns\n * \n * The config hash prefix as a u64 value.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConfigHashPrefix(): Promise<ConfigHashPrefix>;\n\n /**\n * Gets all accounts in the system.\n * \n * **Warning:** This can be very expensive on large networks. Intended\n * primarily for testing and debugging on local/devnet.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for encoding and data inclusion.\n * \n * # Returns\n * \n * A list of all account entries (pubkey + account info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAllAccounts(config: GetAllAccountsConfig | undefined): Promise<AllAccountsEntry[]>;\n\n /**\n * Gets a block by its height.\n * \n * # Parameters\n * \n * * `block-height` - The block height to query.\n * * `config` - Optional configuration for transaction detail level\n * (\"full\", \"signatures\", or \"none\"). Defaults to \"full\".\n * \n * # Returns\n * \n * Block information including blockhash, timestamp, and transactions\n * (detail level depends on config).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the block is not found.\n */\n abstract getBlock(blockHeight: bigint, config: GetBlockConfig | undefined): Promise<BlockInfo>;\n\n /**\n * Gets a list of confirmed block heights in a range (inclusive).\n * \n * # Parameters\n * \n * * `start-height` - The start of the block height range.\n * * `end-height` - The end of the range. If absent, returns up to the\n * latest confirmed block.\n * \n * # Returns\n * \n * A list of confirmed block height numbers.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlocks(startHeight: bigint, endHeight: bigint | undefined): Promise<bigint[]>;\n\n /**\n * Gets detailed information about a stake account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the stake account.\n * \n * # Returns\n * \n * The stake account info (state, balances, authorities), or absent if\n * the account is not a valid stake account.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getStakeAccount(pubkey: PublicKey): Promise<StakeAccountInfo | undefined>;\n\n /**\n * Gets all registered validator accounts.\n * \n * # Parameters\n * \n * * `request` - Request parameters specifying whether to use the frozen\n * (last epoch) or pending (current) snapshot.\n * \n * # Returns\n * \n * A list of validator account info records.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorAccounts(request: GetValidatorAccountsRequest): Promise<ValidatorAccountInfo[]>;\n\n /**\n * Gets the token balance of an SPL Token account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the SPL Token account.\n * \n * # Returns\n * \n * Token balance information including raw amount, decimals, and\n * human-readable amount string.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account is not a valid\n * token account.\n */\n abstract getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance>;\n\n /**\n * Gets registered REX requests for a creator.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - Optional nonce to filter for a specific REX request.\n * If absent, returns all requests by the creator.\n * \n * # Returns\n * \n * A list of REX request records with their associated duties.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexRequests(creator: PublicKey, nonce: string | undefined): Promise<RexInfoAndDuties[]>;\n\n /**\n * Gets missed REX duty proposal rounds for a specific REX request.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - The nonce identifying the specific REX request.\n * \n * # Returns\n * \n * A list of proposal round numbers where duties were missed.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexMissedDuties(creator: PublicKey, nonce: string): Promise<bigint[]>;\n\n /**\n * Gets information about all known cluster nodes.\n * \n * # Returns\n * \n * A list of cluster node info records including stake, addresses,\n * and public keys.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getClusterNodes(): Promise<ClusterNodeInfo[]>;\n\n /**\n * Gets the list of validator indices this node is connected to.\n * \n * # Returns\n * \n * A list of validator indices (u32).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedValidators(): Promise<number[]>;\n\n /**\n * Submits a signed transaction to the network.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional send options (skip preflight, max retries).\n * If absent, default options are used.\n * \n * # Returns\n * \n * The transaction signature, which can be used to check its status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is rejected.\n */\n abstract sendTransaction(transaction: Uint8Array, options: SendTransactionOptions | undefined): Promise<Signature>;\n\n /**\n * Requests an airdrop of tokens to the specified account.\n * \n * This method is typically only available on test networks (localnet, devnet).\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * The transaction signature of the airdrop transaction.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or airdrops are not supported.\n */\n abstract requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature>;\n\n /**\n * Polls until a transaction is confirmed or times out.\n * \n * This is a CDK compound method (not a single RPC call). It repeatedly\n * calls getSignatureStatuses until the transaction is confirmed or the\n * retry limit is reached.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature (base58) to monitor.\n * * `options` - Optional confirmation options (max retries, retry delay).\n * Defaults: 30 retries, 1000ms delay.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if the transaction fails or confirmation times out.\n */\n abstract confirmTransaction(sig: string, options: ConfirmTransactionOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Sends a transaction and waits for confirmation.\n * \n * This is a CDK compound method that combines send-transaction and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional combined send-and-confirm options.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if sending fails, the transaction is rejected,\n * or confirmation times out.\n */\n abstract sendAndConfirmTransaction(transaction: Uint8Array, options: SendAndConfirmOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Requests an airdrop and waits for confirmation.\n * \n * This is a CDK compound method that combines request-airdrop and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * A confirmed transaction record for the airdrop.\n * \n * # Errors\n * \n * Returns an error if the airdrop fails or confirmation times out.\n */\n abstract requestAirdropAndConfirm(pubkey: PublicKey, amount: Kelvin): Promise<ConfirmedTransaction>;\n\n /**\n * Submits an epoch change transaction (admin-only).\n * \n * This is a restricted admin method used for epoch management.\n * Only available to authorized admin accounts.\n * \n * # Parameters\n * \n * * `request` - The epoch change request containing serialized data.\n * \n * # Returns\n * \n * A response indicating whether the submission was accepted.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the sender is not authorized.\n */\n abstract sendAdminTransaction(request: SubmitEpochChangeRequest): Promise<SubmitEpochChangeResponse>;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey } from \"../../crypto\";\nimport type {\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConnectedNode,\n\tEpochInfo,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubscription,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport { BaseRpcClient } from \"./base-client\";\n\n/**\n * Filter for what kind of accounts to return from getAccountsByOwner.\n * Uses the serde-compatible discriminated union format expected by the RPC.\n */\nexport type AccountFilterParam =\n\t| { type: \"programAccounts\" }\n\t| { type: \"tokenAccounts\"; mint?: string };\n\n/**\n * Client for querying blockchain state.\n *\n * Handles all read-only operations like getting balances, account info, etc.\n */\nexport class QueryRpcClient extends BaseRpcClient {\n\t/**\n\t * Retrieve the balance of an account in kelvins (smallest unit).\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns The account balance in kelvins\n\t *\n\t * @example\n\t * ```typescript\n\t * const balance = await client.getBalance(publicKey);\n\t * console.log(`Balance: ${balance} kelvins`);\n\t * ```\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<bigint> {\n\t\tconst result = await this.call<{ value: number }>(\"getBalance\", [\n\t\t\t{ address: pubkey.toString() },\n\t\t]);\n\t\treturn BigInt(result.value);\n\t}\n\n\t/**\n\t * Retrieve detailed information about an account.\n\t *\n\t * Returns account data including balance, owner program, stored data,\n\t * executable status, and rent epoch.\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns Account information, or null if the account does not exist\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getAccountInfo(publicKey);\n\t * if (info) {\n\t * console.log(`Owner: ${info.owner}`);\n\t * console.log(`Balance: ${info.balance} kelvins`);\n\t * console.log(`Data length: ${info.data.length} bytes`);\n\t * }\n\t * ```\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string]; // [encoded_data, encoding_type]\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null;\n\t\t}>(\"getAccountInfo\", [{ address: pubkey.toString() }]);\n\n\t\tif (!result.value) {\n\t\t\treturn null; // Account doesn't exist\n\t\t}\n\n\t\treturn {\n\t\t\tkelvin: BigInt(result.value.kelvin),\n\t\t\towner: PublicKey.fromString(result.value.owner),\n\t\t\tdata: result.value.data,\n\t\t\texecutable: result.value.executable,\n\t\t\trentEpoch: BigInt(result.value.rentEpoch),\n\t\t\tspace: BigInt(result.value.space ?? 0),\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve the current block height of the blockchain.\n\t *\n\t * The block height represents the number of blocks that have been\n\t * confirmed on the chain since genesis.\n\t *\n\t * @returns The current block height\n\t *\n\t * @example\n\t * ```typescript\n\t * const height = await client.getBlockHeight();\n\t * console.log(`Current block height: ${height}`);\n\t * ```\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getBlockHeight\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve transaction signatures for a given address.\n\t *\n\t * Returns transaction signatures with metadata associated with the specified\n\t * address, ordered by slot height (most recent first).\n\t *\n\t * @param address - The public key of the address to query\n\t * @param config - Optional configuration options for the query (limit, before, until)\n\t * @returns Response containing context and array of signature info with blockHeight and blockTime\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getSignaturesForAddress(publicKey, { limit: 10 });\n\t * console.log(`Query slot: ${result.context.slot}`);\n\t * result.value.forEach(sig => {\n\t * console.log(`Transaction: ${sig.signature}, block: ${sig.blockHeight}`);\n\t * });\n\t * ```\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig?: GetSignaturesForAddressConfig,\n\t): Promise<SignatureInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: {\n\t\t\t\tslot: number;\n\t\t\t\tapi_version: string;\n\t\t\t};\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getSignaturesForAddress\", [\n\t\t\t{ address: address.toString(), config: config ?? {} },\n\t\t]);\n\t\treturn result.value.map((signature) => ({\n\t\t\tsignature: signature.signature,\n\t\t\tblockHeight: BigInt(signature.blockHeight),\n\t\t\tblockTime: BigInt(signature.blockTime),\n\t\t\terr: signature.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the total number of transactions processed since genesis.\n\t *\n\t * @returns The total transaction count\n\t *\n\t * @example\n\t * ```typescript\n\t * const count = await client.getTransactionCount();\n\t * console.log(`Total transactions: ${count}`);\n\t * ```\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getTransactionCount\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve the status of multiple transaction signatures in a single request.\n\t *\n\t * Useful for batch-checking transaction confirmations. Returns null for\n\t * signatures that are not found or have expired from the status cache.\n\t *\n\t * @param signatures - Array of transaction signatures to query\n\t * @returns Array of signature statuses (null if signature not found)\n\t *\n\t * @example\n\t * ```typescript\n\t * const statuses = await client.getSignatureStatuses([sig1, sig2, sig3]);\n\t * statuses.forEach((status, i) => {\n\t * if (status) {\n\t * console.log(`${signatures[i]}: slot ${status.slot}, executed: ${status.executed}`);\n\t * } else {\n\t * console.log(`${signatures[i]}: not found`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: string[],\n\t): Promise<(SignatureStatus | null)[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tslot: number;\n\t\t\t\texecuted: boolean;\n\t\t\t\terr?: string;\n\t\t\t} | null>;\n\t\t}>(\"getSignatureStatuses\", [{ signatures }]);\n\n\t\treturn result.value.map((status) => {\n\t\t\tif (!status) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tslot: BigInt(status.slot),\n\t\t\t\texecuted: status.executed,\n\t\t\t\terr: status.err,\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Retrieve information about the current epoch.\n\t *\n\t * Returns epoch metadata including the current epoch number, slot position\n\t * within the epoch, total slots per epoch, and current block height.\n\t *\n\t * @returns Current epoch information\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getEpochInfo();\n\t * console.log(`Epoch: ${info.epoch}`);\n\t * console.log(`Slot ${info.slotIndex} of ${info.slotsInEpoch}`);\n\t * console.log(`Block height: ${info.blockHeight}`);\n\t * ```\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\tconst result = await this.call<{\n\t\t\tepoch: number;\n\t\t\tslotIndex: number;\n\t\t\tslotsInEpoch: number;\n\t\t\tabsoluteSlot: number;\n\t\t\tblockHeight: number;\n\t\t\ttransactionCount?: number;\n\t\t}>(\"getEpochInfo\", []);\n\n\t\treturn {\n\t\t\tepoch: BigInt(result.epoch),\n\t\t\tslotIndex: BigInt(result.slotIndex),\n\t\t\tslotsInEpoch: BigInt(result.slotsInEpoch),\n\t\t\tabsoluteSlot: BigInt(result.absoluteSlot),\n\t\t\tblockHeight: BigInt(result.blockHeight),\n\t\t\ttransactionCount: result.transactionCount\n\t\t\t\t? BigInt(result.transactionCount)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Check the health status of the RPC node.\n\t *\n\t * Returns \"ok\" if the node is healthy. If the node is unhealthy,\n\t * returns an error message describing the issue.\n\t *\n\t * @returns \"ok\" if healthy, otherwise an error message\n\t *\n\t * @example\n\t * ```typescript\n\t * const health = await client.getHealth();\n\t * if (health === \"ok\") {\n\t * console.log(\"Node is healthy\");\n\t * } else {\n\t * console.log(`Node unhealthy: ${health}`);\n\t * }\n\t * ```\n\t */\n\tasync getHealth(): Promise<\"ok\" | string> {\n\t\tconst result = await this.call<string>(\"getHealth\", []);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * Accounts with at least this balance are exempt from paying rent.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t *\n\t * @example\n\t * ```typescript\n\t * const minBalance = await client.getMinimumBalanceForRentExemption(128);\n\t * console.log(`Need at least ${minBalance} kelvins for 128 bytes`);\n\t * ```\n\t */\n\tasync getMinimumBalanceForRentExemption(\n\t\taccountDataSize: number,\n\t): Promise<bigint> {\n\t\tconst result = await this.call<number>(\n\t\t\t\"getMinimumBalanceForRentExemption\",\n\t\t\t[{ data_length: accountDataSize }],\n\t\t);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee in kelvins, or null if message is invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const fee = await client.getFeeForMessage(base64Message);\n\t * if (fee !== null) {\n\t * console.log(`Fee: ${fee} kelvins`);\n\t * }\n\t * ```\n\t */\n\tasync getFeeForMessage(message: string): Promise<bigint | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: number | null;\n\t\t}>(\"getFeeForMessage\", [{ message }]);\n\t\treturn result.value !== null ? BigInt(result.value) : null;\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * Useful for batch operations and reducing RPC calls.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address (null for non-existent accounts)\n\t *\n\t * @example\n\t * ```typescript\n\t * const accounts = await client.getMultipleAccounts([pubkey1, pubkey2]);\n\t * accounts.value.forEach((account, i) => {\n\t * if (account) {\n\t * console.log(`Account ${i}: ${account.balance} kelvins`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<Array<AccountInfo | null>> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: ({\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string];\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null)[];\n\t\t}>(\"getMultipleAccounts\", [\n\t\t\t{ addresses: pubkeys.map((p) => p.toString()) },\n\t\t]);\n\n\t\treturn result.value.map((account) => {\n\t\t\tif (account === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\tdata: account.data,\n\t\t\t\texecutable: account.executable,\n\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * Essential for querying token accounts, program data, and more.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (ProgramAccounts or TokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Accounts owned by the specified owner with pagination info\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getAccountsByOwner(programId);\n\t * console.log(`Found ${result.value.length} accounts`);\n\t * result.value.forEach(({ pubkey, account }) => {\n\t * console.log(`${pubkey}: ${account.balance} kelvins`);\n\t * });\n\t * ```\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilterParam = { type: \"programAccounts\" },\n\t\tconfig?: GetAccountsByOwnerConfig,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number; api_version?: string };\n\t\t\tvalue: {\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}[];\n\t\t\tpagination?: { has_more: boolean; next_cursor?: string };\n\t\t}>(\"getAccountsByOwner\", [\n\t\t\t{\n\t\t\t\towner: owner.toString(),\n\t\t\t\tfilter,\n\t\t\t\tconfig: config\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tlimit: config.limit,\n\t\t\t\t\t\t\tafter: config.after,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t]);\n\n\t\tconst accounts: OwnerAccount[] = result.value.map(\n\t\t\t({ pubkey, account }) => ({\n\t\t\t\tpubkey: PublicKey.fromString(pubkey),\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\t\tdata: account.data,\n\t\t\t\t\texecutable: account.executable,\n\t\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tconst pagination: PaginationInfo | undefined = result.pagination\n\t\t\t? {\n\t\t\t\t\thasMore: result.pagination.has_more,\n\t\t\t\t\tnextCursor: result.pagination.next_cursor,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\treturn [accounts, pagination];\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * Returns the tree of transactions spawned from a root transaction\n\t * through subscriptions and triggers.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t *\n\t * @example\n\t * ```typescript\n\t * const lineage = await client.getWorkflowLineage({\n\t * signature: rootTxSignature,\n\t * maxDepth: 5,\n\t * });\n\t * console.log(`Found ${lineage.lineage.workflowNodes.length} nodes`);\n\t * ```\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\tconst result = await this.call<{\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: Array<{\n\t\t\t\t\tid: string;\n\t\t\t\t\tdepth: number;\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: number;\n\t\t\t\t\t\ttimestamp: number;\n\t\t\t\t\t\tsuccess: boolean;\n\t\t\t\t\t\tinstructionCount: number;\n\t\t\t\t\t\tinstructionProgramIds: string[];\n\t\t\t\t\t};\n\t\t\t\t\tsubscriptions: unknown[];\n\t\t\t\t\ttriggeredBy?: {\n\t\t\t\t\t\tevent: { topic: string; attributes: Record<string, unknown> };\n\t\t\t\t\t\tsubscriptionPubkey: string;\n\t\t\t\t\t\ttimestampRange?: { from: number; to: number };\n\t\t\t\t\t\teventAccount?: string;\n\t\t\t\t\t};\n\t\t\t\t\tworkflowChildren: string[];\n\t\t\t\t\thasMoreChildren: boolean;\n\t\t\t\t}>;\n\t\t\t};\n\t\t\tleaves: string[];\n\t\t\ttruncated: boolean;\n\t\t\ttruncationReason: string;\n\t\t\tcontinuationHints: string[];\n\t\t}>(\"getWorkflowLineage\", [\n\t\t\t{\n\t\t\t\tsignature: request.signature,\n\t\t\t\tmax_depth: request.maxDepth,\n\t\t\t\tinclude_events: request.includeEvents,\n\t\t\t},\n\t\t]);\n\n\t\treturn {\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: result.lineage.workflowNodes.map((node) => ({\n\t\t\t\t\tid: node.id,\n\t\t\t\t\tdepth: node.depth,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: BigInt(node.data.blockHeight),\n\t\t\t\t\t\ttimestamp: BigInt(node.data.timestamp),\n\t\t\t\t\t\tsuccess: node.data.success,\n\t\t\t\t\t\tinstructionCount: node.data.instructionCount,\n\t\t\t\t\t\tinstructionProgramIds: node.data.instructionProgramIds,\n\t\t\t\t\t},\n\t\t\t\t\tsubscriptions: node.subscriptions as Subscription[],\n\t\t\t\t\ttriggeredBy: node.triggeredBy\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tevent: { topic: node.triggeredBy.event.topic },\n\t\t\t\t\t\t\t\tsubscriptionPubkey: node.triggeredBy.subscriptionPubkey,\n\t\t\t\t\t\t\t\ttimestampRange: node.triggeredBy.timestampRange\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tstart: BigInt(node.triggeredBy.timestampRange.from),\n\t\t\t\t\t\t\t\t\t\t\tend: BigInt(node.triggeredBy.timestampRange.to),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\teventAccount: node.triggeredBy.eventAccount,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tworkflowChildren: node.workflowChildren,\n\t\t\t\t\thasMoreChildren: node.hasMoreChildren,\n\t\t\t\t})),\n\t\t\t},\n\t\t\tleaves: result.leaves,\n\t\t\ttruncated: result.truncated,\n\t\t\ttruncationReason: result.truncationReason as TruncationReason,\n\t\t\tcontinuationHints: result.continuationHints,\n\t\t};\n\t}\n\n\t/**\n\t * Get subscriptions for a given subscriber address.\n\t *\n\t * Returns subscriptions that will trigger transactions when matching events occur.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t *\n\t * @example\n\t * ```typescript\n\t * const subscription = await client.getSubscription(subscriberPubkey, \"my-nonce\");\n\t * console.log(`Topic: ${subscription.topic}, Kind: ${subscription.kind}`);\n\t * ```\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\tconst result = await this.call<{\n\t\t\tsubscription: {\n\t\t\t\tkind: string;\n\t\t\t\ttopic: string;\n\t\t\t\tinstructions: unknown[];\n\t\t\t\tsubscriber: string;\n\t\t\t\teventAccount?: string;\n\t\t\t\ttimestampRange?: [number, number];\n\t\t\t};\n\t\t}>(\"getSubscription\", [\n\t\t\t{\n\t\t\t\tsubscriber: subscriber.toString(),\n\t\t\t\tnonce,\n\t\t\t},\n\t\t]);\n\n\t\tconst sub = result.subscription;\n\t\treturn {\n\t\t\tkind: sub.kind as SubscriptionKind,\n\t\t\ttopic: sub.topic,\n\t\t\tinstructions: sub.instructions as SubscriptionInstruction[],\n\t\t\tsubscriber: sub.subscriber,\n\t\t\teventAccount: sub.eventAccount,\n\t\t\ttimestampRange: sub.timestampRange\n\t\t\t\t? [BigInt(sub.timestampRange[0]), BigInt(sub.timestampRange[1])]\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * Returns the history of transactions that were automatically executed\n\t * in response to subscription matches.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getTriggeredTransactions(subscriptionPubkey, 10);\n\t * result.transactions.forEach(tx => {\n\t * console.log(`Signature: ${tx.signature}, Block: ${tx.blockNumber}`);\n\t * });\n\t * ```\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit?: number,\n\t): Promise<TriggeredTransaction[]> {\n\t\t// This method uses raw array params (not object params) per Rust impl\n\t\tconst params: unknown[] = [subscriptionAccount.toString()];\n\t\tif (limit !== undefined) {\n\t\t\tparams.push(limit.toString());\n\t\t}\n\n\t\tconst result = await this.call<{\n\t\t\ttransactions: { signature: string; block_number: number }[];\n\t\t}>(\"getTriggeredTransactions\", params);\n\n\t\treturn result.transactions.map((tx) => ({\n\t\t\tsignature: tx.signature,\n\t\t\tblockNumber: BigInt(tx.block_number),\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the REX X25519 public key for secret sharing encryption.\n\t *\n\t * This key is used for HPKE encryption when sending encrypted data\n\t * that should only be decryptable within the REX execution environment.\n\t *\n\t * @returns The REX X25519 public key as a 32-byte Uint8Array\n\t *\n\t * @example\n\t * ```typescript\n\t * import { encryptForREX } from \"@rialo/ts-cdk\";\n\t *\n\t * // Get the REX public key\n\t * const rexPubkey = await client.getSecretSharingPubkey();\n\t *\n\t * // Use it for HPKE encryption\n\t * const encrypted = await encryptForRex(\n\t * rexPubkey,\n\t * new TextEncoder().encode(\"secret data\"),\n\t * keypair.publicKey.toBytes()\n\t * );\n\t * ```\n\t */\n\tasync getSecretSharingPubkey(): Promise<Uint8Array> {\n\t\tconst result = await this.call<{ public_key: string }>(\n\t\t\t\"getSecretSharingPubkey\",\n\t\t\t[],\n\t\t);\n\n\t\t// Convert hex string to bytes\n\t\tconst hexString = result.public_key;\n\t\tconst bytes = new Uint8Array(hexString.length / 2);\n\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\tbytes[i] = Number.parseInt(hexString.slice(i * 2, i * 2 + 2), 16);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t/**\n\t * Get the config hash prefix for replay protection.\n\t *\n\t * Returns the first 64 bits of the config hash, which is used\n\t * for transaction replay protection across chains.\n\t *\n\t * @returns The config hash prefix as a bigint\n\t *\n\t * @example\n\t * ```typescript\n\t * const configHashPrefix = await client.getConfigHashPrefix();\n\t * const tx = TransactionBuilder.create()\n\t * .setPayer(payer)\n\t * .setValidFrom(validFrom)\n\t * .setConfigHashPrefix(configHashPrefix)\n\t * .addInstruction(instruction)\n\t * .build();\n\t * ```\n\t */\n\tasync getConfigHashPrefix(): Promise<bigint> {\n\t\t// configHashPrefix is a u64 that can exceed Number.MAX_SAFE_INTEGER (2^53).\n\t\t// JSON.parse() silently rounds such values, so we parse the raw response\n\t\t// text to extract the exact digit string before converting to BigInt.\n\t\tconst body = JSON.stringify({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: 1,\n\t\t\tmethod: \"getRecentValidatorConfigHash\",\n\t\t\tparams: [{}],\n\t\t});\n\t\tconst response = await fetch(this.transport.getUrl(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody,\n\t\t});\n\t\tconst text = await response.text();\n\t\tconst match = text.match(/\"configHashPrefix\"\\s*:\\s*(\\d+)/);\n\t\tif (!match) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse configHashPrefix from RPC response: ${text}`,\n\t\t\t);\n\t\t}\n\t\treturn BigInt(match[1]);\n\t}\n\n\t/**\n\t * Retrieve the current block height with an optional minimum context slot.\n\t *\n\t * When minContextSlot is provided, the RPC will only return a result\n\t * if the node has processed at least that slot.\n\t *\n\t * @param minContextSlot - Minimum slot the node must have processed\n\t * @returns The current block height\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\tif (minContextSlot !== undefined) {\n\t\t\tconst result = await this.call<number>(\"getBlockHeight\", [\n\t\t\t\t{ min_context_slot: Number(minContextSlot) },\n\t\t\t]);\n\t\t\treturn BigInt(result);\n\t\t}\n\t\treturn await this.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieve full transaction details by signature.\n\t *\n\t * Returns the complete transaction including metadata (fee, errors, logs),\n\t * the transaction body (signatures, message, instructions), and block context.\n\t *\n\t * @param sig - Transaction signature (Uint8Array)\n\t * @returns Full transaction response with block height, metadata, and body\n\t */\n\tasync getTransactionDetails(sig: Signature): Promise<TransactionResponse> {\n\t\tconst sigStr = base58.encode(sig);\n\n\t\tconst result = await this.call<{\n\t\t\tblock_height: number | null;\n\t\t\tblock_time?: number | null;\n\t\t\tmeta: {\n\t\t\t\tfee: number;\n\t\t\t\terr?: string | null;\n\t\t\t\tlog_messages?: string[] | null;\n\t\t\t};\n\t\t\ttransaction: {\n\t\t\t\tsignatures: string[];\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnum_required_signatures: number;\n\t\t\t\t\t\tnum_readonly_signed_accounts: number;\n\t\t\t\t\t\tnum_readonly_unsigned_accounts: number;\n\t\t\t\t\t};\n\t\t\t\t\taccount_keys: string[];\n\t\t\t\t\tinstructions: Array<{\n\t\t\t\t\t\tprogram_id_index: number;\n\t\t\t\t\t\taccounts: number[];\n\t\t\t\t\t\tdata: string;\n\t\t\t\t\t}>;\n\t\t\t\t};\n\t\t\t\tvalid_from: number;\n\t\t\t};\n\t\t}>(\"getTransaction\", [{ signature: sigStr }]);\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\tblockTime:\n\t\t\t\tresult.block_time != null ? BigInt(result.block_time) : undefined,\n\t\t\tmeta: {\n\t\t\t\tfee: BigInt(result.meta.fee),\n\t\t\t\terr: result.meta.err ?? undefined,\n\t\t\t\tlogMessages: result.meta.log_messages ?? undefined,\n\t\t\t},\n\t\t\ttransaction: {\n\t\t\t\tsignatures: result.transaction.signatures.map(\n\t\t\t\t\t(s) => base58.decode(s) as Signature,\n\t\t\t\t),\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnumRequiredSignatures:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_required_signatures,\n\t\t\t\t\t\tnumReadonlySignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_signed_accounts,\n\t\t\t\t\t\tnumReadonlyUnsignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_unsigned_accounts,\n\t\t\t\t\t},\n\t\t\t\t\taccountKeys: result.transaction.message.account_keys.map((k) =>\n\t\t\t\t\t\tPublicKey.fromString(k),\n\t\t\t\t\t),\n\t\t\t\t\tinstructions: result.transaction.message.instructions.map((ix) => ({\n\t\t\t\t\t\tprogramIdIndex: ix.program_id_index,\n\t\t\t\t\t\taccounts: new Uint8Array(ix.accounts),\n\t\t\t\t\t\tdata: ix.data,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t\tvalidFrom: BigInt(result.transaction.valid_from),\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve a paginated list of recent transactions.\n\t *\n\t * @param config - Optional pagination config (limit, before cursor)\n\t * @returns Array of transaction summaries with signature, slot, time, and error status\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\tconst params: Record<string, unknown> = {};\n\t\tif (config) {\n\t\t\tif (config.limit !== undefined) params.limit = config.limit;\n\t\t\tif (config.before !== undefined) params.before = config.before;\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tslot: number;\n\t\t\t\tblockTime?: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getTransactions\", [\n\t\t\t{ config: Object.keys(params).length > 0 ? params : undefined },\n\t\t]);\n\n\t\treturn result.value.map((t) => ({\n\t\t\tsignature: t.signature,\n\t\t\tslot: BigInt(t.slot),\n\t\t\tblockTime: t.blockTime !== undefined ? BigInt(t.blockTime) : undefined,\n\t\t\terr: t.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Check whether a blockhash is still valid for transaction submission.\n\t *\n\t * @param blockhash - The blockhash to check (Uint8Array)\n\t * @returns Slot context and validity boolean\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst hashStr = base58.encode(blockhash);\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number };\n\t\t\tvalue: boolean;\n\t\t}>(\"isBlockhashValid\", [{ blockhash: hashStr }]);\n\n\t\treturn {\n\t\t\tslot: BigInt(result.context.slot),\n\t\t\tisValid: result.value,\n\t\t};\n\t}\n\n\t/**\n\t * Get the health status of the validator node.\n\t *\n\t * @returns Validator health details\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.call<ValidatorHealth>(\"getValidatorHealth\", [{}]);\n\t}\n\n\t/**\n\t * Get the list of full nodes connected to the validator or full node.\n\t *\n\t * @returns Array of connected nodes with their public key and connection duration\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\tconst result = await this.call<Array<[string, number]>>(\n\t\t\t\"getConnectedFullNodes\",\n\t\t\t[{}],\n\t\t);\n\t\treturn result.map(([publicKey, connectedMs]) => ({\n\t\t\tpublicKey,\n\t\t\tconnectedMs: BigInt(connectedMs),\n\t\t}));\n\t}\n\n\t/**\n\t * Get all accounts in the system.\n\t *\n\t * @param config - Optional filtering/pagination config\n\t * @returns Array of all account entries with pubkey and account data\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}>;\n\t\t}>(\"getAllAccounts\", [{ config: config ?? undefined }]);\n\n\t\treturn result.value.map((entry) => ({\n\t\t\tpubkey: entry.pubkey,\n\t\t\taccount: {\n\t\t\t\tkelvin: BigInt(entry.account.kelvin),\n\t\t\t\towner: PublicKey.fromString(entry.account.owner),\n\t\t\t\tdata: entry.account.data,\n\t\t\t\texecutable: entry.account.executable,\n\t\t\t\trentEpoch: BigInt(entry.account.rentEpoch),\n\t\t\t\tspace: BigInt(entry.account.space ?? 0),\n\t\t\t},\n\t\t}));\n\t}\n\n\t/**\n\t * Get a block by its height.\n\t *\n\t * @param blockHeight - The height of the block to retrieve\n\t * @param config - Optional config to control transaction detail level\n\t * @returns Block info including hash, height, time, and optional signatures\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\tconst params: Record<string, unknown> = {\n\t\t\tblock_height: Number(blockHeight),\n\t\t};\n\t\tif (config?.transactionDetails) {\n\t\t\tparams.config = { transaction_details: config.transactionDetails };\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tblockhash: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\ttransactions?: unknown[];\n\t\t\t\tsignatures?: string[];\n\t\t\t};\n\t\t\tblockhash?: string;\n\t\t\tblockHeight?: number;\n\t\t\tblockTime?: number;\n\t\t\ttransactions?: unknown[];\n\t\t\tsignatures?: string[];\n\t\t}>(\"getBlock\", [params]);\n\n\t\tconst block = result.value ?? result;\n\t\treturn {\n\t\t\tblockhash: (block.blockhash as string) ?? \"\",\n\t\t\tblockHeight: BigInt((block.blockHeight as number) ?? 0),\n\t\t\tblockTime: BigInt((block.blockTime as number) ?? 0),\n\t\t\tsignatures: block.signatures as string[] | undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get a list of confirmed block heights in a range.\n\t *\n\t * @param startHeight - Start of the range (inclusive)\n\t * @param endHeight - End of the range (inclusive), or undefined for open-ended\n\t * @returns Array of confirmed block heights\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<number[]>(\"getBlocks\", [\n\t\t\t{\n\t\t\t\tstart_slot: Number(startHeight),\n\t\t\t\tend_slot: endHeight !== undefined ? Number(endHeight) : undefined,\n\t\t\t},\n\t\t]);\n\t\treturn result.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get detailed information about a stake account.\n\t *\n\t * @param pubkey - The public key of the stake account\n\t * @returns Stake account info, or undefined if the account doesn't exist\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tstate: string;\n\t\t\t\tkelvins: number;\n\t\t\t\tdelegated_balance: number;\n\t\t\t\tundelegated_balance: number;\n\t\t\t\tactivation_requested?: number;\n\t\t\t\tdeactivation_requested?: number;\n\t\t\t\tvalidator?: string;\n\t\t\t\tadmin_authority: string;\n\t\t\t\twithdraw_authority: string;\n\t\t\t};\n\t\t}>(\"getStakeAccount\", [{ pubkey: pubkey.toString() }]);\n\n\t\tif (!result.value) return undefined;\n\t\tconst s = result.value;\n\t\treturn {\n\t\t\tstate: s.state as StakeAccountInfo[\"state\"],\n\t\t\tkelvins: BigInt(s.kelvins),\n\t\t\tdelegatedBalance: BigInt(s.delegated_balance),\n\t\t\tundelegatedBalance: BigInt(s.undelegated_balance),\n\t\t\tactivationRequested:\n\t\t\t\ts.activation_requested !== undefined\n\t\t\t\t\t? BigInt(s.activation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tdeactivationRequested:\n\t\t\t\ts.deactivation_requested !== undefined\n\t\t\t\t\t? BigInt(s.deactivation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tvalidator: s.validator,\n\t\t\tadminAuthority: s.admin_authority,\n\t\t\twithdrawAuthority: s.withdraw_authority,\n\t\t};\n\t}\n\n\t/**\n\t * Get all registered validator accounts.\n\t *\n\t * @param request - Request config (e.g. whether to use frozen state)\n\t * @returns Array of validator account info\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tcommission: number;\n\t\t\t\tpubkey: string;\n\t\t\t\tnode_identity: string;\n\t\t\t\tauthorized_withdrawer: string;\n\t\t\t\tstake_next: number;\n\t\t\t\tstake_current?: number;\n\t\t\t\taddress: string;\n\t\t\t}>;\n\t\t}>(\"getValidatorAccounts\", [{ use_frozen: request.useFrozen }]);\n\n\t\treturn result.value.map((v) => ({\n\t\t\tcommission: BigInt(v.commission),\n\t\t\tpubkey: v.pubkey,\n\t\t\tnodeIdentity: v.node_identity,\n\t\t\tauthorizedWithdrawer: v.authorized_withdrawer,\n\t\t\tstakeNext: BigInt(v.stake_next),\n\t\t\tstakeCurrent:\n\t\t\t\tv.stake_current !== undefined ? BigInt(v.stake_current) : undefined,\n\t\t\taddress: v.address,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the token balance of an SPL Token account.\n\t *\n\t * @param pubkey - The public key of the token account\n\t * @returns Token balance with amount, decimals, and UI-formatted string\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tamount: string;\n\t\t\t\tdecimals: number;\n\t\t\t\tuiAmountString: string;\n\t\t\t};\n\t\t}>(\"getTokenAccountBalance\", [{ address: pubkey.toString() }]);\n\n\t\treturn {\n\t\t\tamount: result.value.amount,\n\t\t\tdecimals: result.value.decimals,\n\t\t\tuiAmountString: result.value.uiAmountString,\n\t\t};\n\t}\n\n\t/**\n\t * Get registered REX requests for a creator.\n\t *\n\t * REX (Remote EXecution) requests are scheduled jobs that validators\n\t * execute on behalf of a creator.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - Optional nonce to filter a specific request\n\t * @returns Array of REX request info with their assigned duties\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\tconst result = await this.call<{\n\t\t\trex_requests: Array<{\n\t\t\t\tcreator: string;\n\t\t\t\tnonce: string;\n\t\t\t\tis_active: boolean;\n\t\t\t\tdescription: string;\n\t\t\t\tupdate_frequency: string;\n\t\t\t\tstarting_timestamp: string;\n\t\t\t\tcreated_at: string;\n\t\t\t\tvalidators_per_duty: number;\n\t\t\t\trex_request_delay_ms: number;\n\t\t\t\tcompute_units_limit?: number;\n\t\t\t\theap_size_limit?: number;\n\t\t\t\tduties: Array<{\n\t\t\t\t\ttarget_timestamp: string;\n\t\t\t\t\tassigned_validators: string[];\n\t\t\t\t}>;\n\t\t\t}>;\n\t\t}>(\"getRexRequests\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.rex_requests.map((r) => ({\n\t\t\tcreator: r.creator,\n\t\t\tnonce: r.nonce,\n\t\t\tisActive: r.is_active,\n\t\t\tdescription: r.description,\n\t\t\tupdateFrequency: r.update_frequency,\n\t\t\tstartingTimestamp: r.starting_timestamp,\n\t\t\tcreatedAt: r.created_at,\n\t\t\tvalidatorsPerDuty: r.validators_per_duty,\n\t\t\trexRequestDelayMs: BigInt(r.rex_request_delay_ms),\n\t\t\tcomputeUnitsLimit: r.compute_units_limit,\n\t\t\theapSizeLimit: r.heap_size_limit,\n\t\t\tduties: r.duties.map((d) => ({\n\t\t\t\ttargetTimestamp: d.target_timestamp,\n\t\t\t\tassignedValidators: d.assigned_validators,\n\t\t\t})),\n\t\t}));\n\t}\n\n\t/**\n\t * Get missed REX duty proposal rounds for a specific REX request.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - The nonce identifying the REX request\n\t * @returns Array of proposal round numbers where duties were missed\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<{\n\t\t\tmissed_duties_at_proposal_rounds: number[];\n\t\t}>(\"getRexMissedDuties\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.missed_duties_at_proposal_rounds.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get information about all known cluster nodes.\n\t *\n\t * @returns Array of cluster node info with stake, addresses, and keys\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tnodes: Array<{\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\thostname: string;\n\t\t\t\tauthority_pubkey: string;\n\t\t\t\tprotocol_pubkey: string;\n\t\t\t\tnetwork_pubkey: string;\n\t\t\t\tlast_committed_round?: number;\n\t\t\t}>;\n\t\t}>(\"getClusterNodes\", [null]);\n\n\t\treturn result.nodes.map((n) => ({\n\t\t\tstake: BigInt(n.stake),\n\t\t\taddress: n.address,\n\t\t\thostname: n.hostname,\n\t\t\tauthorityPubkey: n.authority_pubkey,\n\t\t\tprotocolPubkey: n.protocol_pubkey,\n\t\t\tnetworkPubkey: n.network_pubkey,\n\t\t\tlastCommittedRound: n.last_committed_round,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the list of validator indices this node is connected to.\n\t *\n\t * @returns Array of validator indices\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.call<number[]>(\"getConnectedValidators\", [{}]);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tURL_DEVNET,\n\tURL_LOCALNET,\n\tURL_MAINNET,\n\tURL_TESTNET,\n} from \"./constants\";\n\n/**\n * Converts bytes to base64 string.\n *\n * Works in both browser and Node.js environments.\n */\nexport function toBase64(bytes: Uint8Array): string {\n\t// Browser environment\n\tif (typeof btoa !== \"undefined\") {\n\t\t// For large arrays, chunk to avoid call stack size exceeded\n\t\tconst chunkSize = 8192;\n\t\tlet result = \"\";\n\n\t\tfor (let i = 0; i < bytes.length; i += chunkSize) {\n\t\t\tconst chunk = bytes.slice(i, i + chunkSize);\n\t\t\tresult += String.fromCharCode(...chunk);\n\t\t}\n\n\t\treturn btoa(result);\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn Buffer.from(bytes).toString(\"base64\");\n\t}\n\n\tthrow new Error(\"No base64 encoding available in this environment\");\n}\n\n/**\n * Converts base64 string to bytes.\n *\n * Works in both browser and Node.js environments.\n */\nexport function fromBase64(base64: string): Uint8Array {\n\t// Browser environment\n\tif (typeof atob !== \"undefined\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let i = 0; i < binary.length; i++) {\n\t\t\tbytes[i] = binary.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn new Uint8Array(Buffer.from(base64, \"base64\"));\n\t}\n\n\tthrow new Error(\"No base64 decoding available in this environment\");\n}\n\n/**\n * Sleeps for the specified duration.\n *\n * @param ms - Milliseconds to sleep\n */\nexport function sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculates exponential backoff delay with jitter.\n *\n * @param attempt - Current retry attempt (0-indexed)\n * @param baseMs - Base delay in milliseconds\n * @param maxMs - Maximum delay in milliseconds\n * @returns Calculated delay with 30% random jitter\n */\nexport function calculateBackoff(\n\tattempt: number,\n\tbaseMs = 1000,\n\tmaxMs = 30000,\n): number {\n\tconst exponentialDelay = baseMs * 2 ** attempt;\n\tconst jitter = Math.random() * 0.3 * exponentialDelay; // 30% jitter\n\treturn Math.min(exponentialDelay + jitter, maxMs);\n}\n\n/**\n * Returns the devnet RPC URL.\n */\nexport function getDevnetUrl(): string {\n\treturn URL_DEVNET;\n}\n\n/**\n * Returns the testnet RPC URL.\n */\nexport function getTestnetUrl(): string {\n\treturn URL_TESTNET;\n}\n\n/**\n * Returns the mainnet RPC URL.\n */\nexport function getMainnetUrl(): string {\n\treturn URL_MAINNET;\n}\n\n/**\n * Returns the localnet RPC URL.\n */\nexport function getLocalnetUrl(): string {\n\treturn URL_LOCALNET;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport type { PublicKey } from \"../../crypto\";\nimport type {\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n} from \"../../generated/types\";\nimport { toBase64 } from \"../../utils\";\nimport { RpcError, RpcErrorCode } from \"../errors\";\nimport { BaseRpcClient } from \"./base-client\";\n\ninterface TransactionPollResult {\n\tblockHeight: bigint;\n\terr?: string;\n}\n\nconst DEFAULT_MAX_RETRIES = 10;\nconst DEFAULT_RETRY_DELAY_MS = 200;\n\n/**\n * Client for sending/simulating transactions and requesting airdrops.\n *\n * Handles all transaction operations like sending transactions, requesting airdrops, etc.\n */\nexport class TransactionRpcClient extends BaseRpcClient {\n\t/**\n\t * Submit a signed transaction to the blockchain.\n\t *\n\t * Sends the transaction to the network for processing. The transaction\n\t * must be fully signed before submission. Returns immediately with the\n\t * transaction signature - use {@link confirmTransaction} or\n\t * {@link sendAndConfirmTransaction} to wait for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature (base58 encoded)\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.sendTransaction(signedTx);\n\t * console.log(`Submitted: ${signature}`);\n\t *\n\t * // With options\n\t * const signature = await client.sendTransaction(signedTx, {\n\t * skipPreflight: true,\n\t * maxRetries: 3,\n\t * });\n\t * ```\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<string> {\n\t\tconst base64Tx = toBase64(transaction);\n\n\t\tconst config = {\n\t\t\tencoding: \"base64\",\n\t\t\tskipPreflight: options?.skipPreflight ?? false,\n\t\t\tmaxRetries: options?.maxRetries ?? 5,\n\t\t};\n\n\t\tconst signature = await this.call<string>(\"sendTransaction\", [\n\t\t\tbase64Tx,\n\t\t\tconfig,\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Wait for a transaction to be confirmed.\n\t *\n\t * A transaction is considered confirmed when:\n\t * - It has been processed in a block (`blockHeight > 0`)\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t */\n\tasync confirmTransaction(\n\t\tsignature: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tconst retryDelayMs = options?.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n\n\t\t// Poll using getSignatureStatuses which is fast\n\t\tfor (let attempt = 0; attempt < maxRetries; attempt++) {\n\t\t\t// Wait before checking\n\t\t\tif (attempt > 0) {\n\t\t\t\tawait this.sleep(retryDelayMs);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst txInfo = await this.getTransaction(signature);\n\t\t\t\tif (!txInfo) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (txInfo.err) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: false,\n\t\t\t\t\t\terr: txInfo.err,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Transaction executed - fully confirmed\n\t\t\t\tif (txInfo.blockHeight && txInfo.blockHeight > 0n) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: true,\n\t\t\t\t\t\terr: undefined,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Re-throw transaction failures immediately\n\t\t\t\tif (\n\t\t\t\t\terror instanceof RpcError &&\n\t\t\t\t\terror.code === RpcErrorCode.TRANSACTION_REJECTED\n\t\t\t\t) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new RpcError(\n\t\t\tRpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT,\n\t\t\t\"Transaction confirmation timed out\",\n\t\t\t{\n\t\t\t\tsignature,\n\t\t\t\tmaxRetries,\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Submit a signed transaction and wait for confirmation.\n\t *\n\t * Polls the transaction status until it is confirmed (blockHeight > 0),\n\t * or until the maximum number of retries is reached.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in block ${result.blockHeight}, executed: ${result.executed}`);\n\t *\n\t * // With custom retry settings\n\t * const result = await client.sendAndConfirmTransaction(signedTx, {\n\t * maxRetries: 3,\n\t * confirmMaxRetries: 10,\n\t * confirmRetryDelayMs: 500,\n\t * });\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.sendTransaction(transaction, {\n\t\t\tskipPreflight: options?.skipPreflight,\n\t\t\tmaxRetries: options?.maxRetries,\n\t\t});\n\t\treturn await this.confirmTransaction(signature, {\n\t\t\tmaxRetries: options?.confirmMaxRetries,\n\t\t\tretryDelayMs: options?.confirmRetryDelayMs,\n\t\t});\n\t}\n\n\t/**\n\t * Request an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Returns immediately with the airdrop transaction signature.\n\t * Use {@link requestAirdropAndConfirm} to wait for the airdrop to complete.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @returns Airdrop transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.requestAirdrop(publicKey, 1_000_000_000n);\n\t * console.log(`Airdrop requested: ${signature}`);\n\t * ```\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: bigint): Promise<string> {\n\t\tif (amount > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_PARAMS,\n\t\t\t\t`Airdrop amount ${amount} exceeds maximum safe value`,\n\t\t\t);\n\t\t}\n\t\tconst signature = await this.call<string>(\"requestAirdrop\", [\n\t\t\t{\n\t\t\t\tpubkey: pubkey.toString(),\n\t\t\t\tkelvins: Number(amount),\n\t\t\t},\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Request an airdrop of tokens and wait for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Combines {@link requestAirdrop} and {@link confirmTransaction} into\n\t * a single call for convenience.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @param options - Confirmation options (max retries, retry delay)\n\t * @returns Confirmed transaction details\n\t * @throws {RpcError} If the airdrop transaction fails or confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.requestAirdropAndConfirm(publicKey, 1_000_000_000n);\n\t * if (result.executed) {\n\t * console.log(\"Airdrop confirmed!\");\n\t * }\n\t * ```\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: bigint,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.requestAirdrop(pubkey, amount);\n\t\treturn await this.confirmTransaction(signature, options);\n\t}\n\n\t/**\n\t * Submit an epoch change transaction (admin-only).\n\t *\n\t * @param request - The epoch change request payload\n\t * @returns Response from the epoch change submission\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.call<SubmitEpochChangeResponse>(\"submitEpochChange\", [\n\t\t\trequest,\n\t\t]);\n\t}\n\n\tprivate async getTransaction(\n\t\tsignature: string,\n\t): Promise<TransactionPollResult | null> {\n\t\tconst result = await this.call<{\n\t\t\tslot: number;\n\t\t\tblock_height?: number;\n\t\t\terr?: string;\n\t\t\tmeta: {\n\t\t\t\terr?: string;\n\t\t\t};\n\t\t} | null>(\"getTransaction\", [{ signature }]);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\terr: result.err ?? result.meta?.err ?? undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Sleeps for a given number of milliseconds.\n\t * @param ms - The number of milliseconds to sleep.\n\t * @returns A promise that resolves when the sleep is complete.\n\t */\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Main Rialo RPC client for blockchain interactions.\n */\nimport type { PublicKey } from \"../../crypto\";\nimport { RpcClient } from \"../../generated/rpc-client\";\nimport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochInfo,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport type { HttpTransport } from \"../http-transport\";\nimport type { ChainDefinition, IdentifierString } from \"./config\";\nimport type { AccountFilterParam } from \"./query-client\";\nimport { QueryRpcClient } from \"./query-client\";\nimport { TransactionRpcClient } from \"./transaction-client\";\n\n/**\n * High-level Rialo RPC client for blockchain interactions.\n *\n * Provides a unified interface for querying blockchain state and\n * sending transactions. Internally delegates to specialized clients\n * (QueryRpcClient, TransactionRpcClient) for modular organization.\n *\n * @example\n * ```typescript\n * import { createRialoClient, RIALO_DEVNET_CHAIN } from '@rialo/ts-cdk';\n *\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // Query operations\n * const balance = await client.getBalance(publicKey);\n * const chainId = client.getChainIdentifier();\n *\n * // Transaction operations\n * const signature = await client.sendTransaction(signedTx);\n * ```\n */\nexport class RialoClient extends RpcClient {\n\tprivate readonly queryClient: QueryRpcClient;\n\tprivate readonly transactionClient: TransactionRpcClient;\n\tprivate readonly transport: HttpTransport;\n\tprivate readonly chain: ChainDefinition;\n\n\tconstructor(transport: HttpTransport, chain: ChainDefinition) {\n\t\tsuper();\n\t\tthis.chain = chain;\n\t\tthis.transport = transport;\n\t\tthis.queryClient = new QueryRpcClient(transport);\n\t\tthis.transactionClient = new TransactionRpcClient(transport);\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.transport.getUrl();\n\t}\n\n\t/**\n\t * Returns the chain identifier.\n\t */\n\tgetChainIdentifier(): IdentifierString {\n\t\treturn this.chain.id;\n\t}\n\n\t/**\n\t * Returns the chain configuration.\n\t */\n\tgetChainConfig(): ChainDefinition {\n\t\treturn this.chain;\n\t}\n\n\t/**\n\t * Retrieves the balance of an account in kelvins (smallest unit).\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<Kelvin> {\n\t\treturn await this.queryClient.getBalance(pubkey);\n\t}\n\n\t/**\n\t * Retrieves detailed information about an account.\n\t *\n\t * @returns Account info or null if account doesn't exist\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo> {\n\t\tconst result = await this.queryClient.getAccountInfo(pubkey);\n\t\tif (!result) {\n\t\t\tthrow new Error(`Account does not exist: ${pubkey}`);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the current block height.\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieves the current block height with advanced configuration.\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeightWithConfig(minContextSlot);\n\t}\n\n\t/**\n\t * Retrieves the signatures for an address.\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig: GetSignaturesForAddressConfig | undefined,\n\t): Promise<SignatureInfo[]> {\n\t\treturn await this.queryClient.getSignaturesForAddress(address, config);\n\t}\n\n\t/**\n\t * Retrieves detailed information about a transaction.\n\t *\n\t * @returns Full transaction response\n\t */\n\tasync getTransaction(sig: Signature): Promise<TransactionResponse> {\n\t\treturn await this.queryClient.getTransactionDetails(sig);\n\t}\n\n\t/**\n\t * Retrieves the total number of transactions processed since genesis.\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\treturn await this.queryClient.getTransactionCount();\n\t}\n\n\t/**\n\t * Retrieves the status of multiple transaction signatures.\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: Signature[],\n\t): Promise<(SignatureStatus | undefined)[]> {\n\t\t// Convert Uint8Array signatures to base58 strings\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst sigStrings = signatures.map((s) => base58.encode(s));\n\t\tconst results = await this.queryClient.getSignatureStatuses(sigStrings);\n\t\t// Filter out null entries (unknown signatures) per spec behaviour\n\t\treturn results.filter((s): s is SignatureStatus => s !== null);\n\t}\n\n\t/**\n\t * Retrieves current epoch information.\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\treturn await this.queryClient.getEpochInfo();\n\t}\n\n\t/**\n\t * Checks the health status of the RPC node.\n\t *\n\t * @returns \"ok\" if healthy, error message otherwise\n\t */\n\tasync getHealth(): Promise<string> {\n\t\treturn await this.queryClient.getHealth();\n\t}\n\n\t/**\n\t * Submits a signed transaction to the blockchain.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.sendTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Requests an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t *\n\t * @param pubkey - Account to receive the airdrop\n\t * @param amount - Amount in kelvins (smallest unit)\n\t * @returns Transaction signature\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.requestAirdrop(pubkey, amount);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Submits a signed transaction and waits for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in slot ${result.slot}`);\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.sendAndConfirmTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Waits for a transaction to be confirmed.\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t */\n\tasync confirmTransaction(\n\t\tsig: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.confirmTransaction(sig, options);\n\t}\n\n\t/**\n\t * Requests an airdrop and waits for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: Kelvin,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.requestAirdropAndConfirm(\n\t\t\tpubkey,\n\t\t\tamount,\n\t\t);\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t */\n\tasync getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint> {\n\t\treturn await this.queryClient.getMinimumBalanceForRentExemption(\n\t\t\tNumber(dataSize),\n\t\t);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee response with value in kelvins\n\t */\n\tasync getFeeForMessage(message: string): Promise<FeeResponse> {\n\t\tconst value = await this.queryClient.getFeeForMessage(message);\n\t\treturn { value: value ?? undefined };\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<OptionalAccountInfo[]> {\n\t\tconst results = await this.queryClient.getMultipleAccounts(pubkeys);\n\t\t// Convert null → undefined to match OptionalAccountInfo type\n\t\treturn results.map((r) =>\n\t\t\tr === null ? undefined : r,\n\t\t) as OptionalAccountInfo[];\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (programAccounts or tokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Tuple of accounts and optional pagination info\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilter | undefined,\n\t\tconfig: GetAccountsByOwnerConfig | undefined,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\t// Convert generated string union AccountFilter to the serde-compatible param\n\t\tconst filterParam: AccountFilterParam =\n\t\t\tfilter === \"tokenAccounts\"\n\t\t\t\t? { type: \"tokenAccounts\" }\n\t\t\t\t: { type: \"programAccounts\" };\n\t\treturn await this.queryClient.getAccountsByOwner(\n\t\t\towner,\n\t\t\tfilterParam,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\treturn await this.queryClient.getWorkflowLineage(request);\n\t}\n\n\t/**\n\t * Get subscription for a given subscriber address and nonce.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\treturn await this.queryClient.getSubscription(subscriber, nonce);\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit: number | undefined,\n\t): Promise<TriggeredTransaction[]> {\n\t\treturn await this.queryClient.getTriggeredTransactions(\n\t\t\tsubscriptionAccount,\n\t\t\tlimit,\n\t\t);\n\t}\n\n\t/**\n\t * Gets paginated transactions from the blockchain.\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\treturn await this.queryClient.getTransactions(config);\n\t}\n\n\t/**\n\t * Checks if a blockhash is still valid for transaction submission.\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\treturn await this.queryClient.isBlockhashValid(blockhash);\n\t}\n\n\t/**\n\t * Gets the health status of the validator.\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.queryClient.getValidatorHealth();\n\t}\n\n\t/**\n\t * Gets the list of full nodes connected to the validator or full node.\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\treturn await this.queryClient.getConnectedFullNodes();\n\t}\n\n\t/**\n\t * Gets the TEE's secret sharing public key for HPKE encryption.\n\t */\n\tasync getSecretSharingPubkey(): Promise<SecretSharingPubkey> {\n\t\tconst rawBytes = await this.queryClient.getSecretSharingPubkey();\n\t\tconst hex = Array.from(rawBytes)\n\t\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t\t.join(\"\");\n\t\treturn { publicKey: hex };\n\t}\n\n\t/**\n\t * Gets the config hash prefix for protecting against replay attacks.\n\t */\n\tasync getConfigHashPrefix(): Promise<ConfigHashPrefix> {\n\t\treturn await this.queryClient.getConfigHashPrefix();\n\t}\n\n\t/**\n\t * Submits an epoch change transaction (admin-only).\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.transactionClient.sendAdminTransaction(request);\n\t}\n\n\t/**\n\t * Gets all accounts in the system.\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\treturn await this.queryClient.getAllAccounts(config);\n\t}\n\n\t/**\n\t * Gets a block by its height.\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\treturn await this.queryClient.getBlock(blockHeight, config);\n\t}\n\n\t/**\n\t * Gets a list of confirmed block heights in a range.\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getBlocks(startHeight, endHeight);\n\t}\n\n\t/**\n\t * Gets detailed information about a stake account.\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\treturn await this.queryClient.getStakeAccount(pubkey);\n\t}\n\n\t/**\n\t * Gets all registered validator accounts.\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\treturn await this.queryClient.getValidatorAccounts(request);\n\t}\n\n\t/**\n\t * Gets the token balance of an SPL Token account.\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\treturn await this.queryClient.getTokenAccountBalance(pubkey);\n\t}\n\n\t/**\n\t * Gets registered REX requests for a creator.\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\treturn await this.queryClient.getRexRequests(creator, nonce);\n\t}\n\n\t/**\n\t * Gets missed REX duty proposal rounds for a specific REX request.\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getRexMissedDuties(creator, nonce);\n\t}\n\n\t/**\n\t * Gets information about all known cluster nodes.\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\treturn await this.queryClient.getClusterNodes();\n\t}\n\n\t/**\n\t * Gets the list of validator indices this node is connected to.\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.queryClient.getConnectedValidators();\n\t}\n\n\t/**\n\t * Calls an arbitrary RPC method with a JSON string body.\n\t * Utility method for methods not yet in the generated interface.\n\t */\n\tasync callWithJson(method: string, params: string): Promise<string> {\n\t\treturn await this.queryClient.callWithJson(method, params);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Low-level HTTP transport with retry logic and timeout handling.\n *\n * Provides robust network communication with automatic retry,\n * exponential backoff, and proper error handling.\n */\nimport { calculateBackoff, sleep } from \"../utils\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\n\nexport interface HttpTransportConfig {\n\t/** Request timeout in milliseconds */\n\ttimeout?: number;\n\t/** Maximum number of retry attempts */\n\tmaxRetries?: number;\n\t/** Base delay for exponential backoff (ms) */\n\tretryBaseDelay?: number;\n\t/** Maximum retry delay (ms) */\n\tretryMaxDelay?: number;\n\t/** Custom headers to include in requests */\n\theaders?: Record<string, string>;\n}\n\ninterface RequestOptions {\n\tmethod: string;\n\theaders: Record<string, string>;\n\tbody: string;\n\tsignal?: AbortSignal;\n}\n\nconst DEFAULT_CONFIG: Required<HttpTransportConfig> = {\n\ttimeout: 30000, // 30 seconds\n\tmaxRetries: 3,\n\tretryBaseDelay: 1000, // 1 second\n\tretryMaxDelay: 30000, // 30 seconds\n\theaders: {},\n};\n\n/**\n * HTTP transport with built-in retry logic and timeout handling.\n *\n * Features:\n * - Automatic retries with exponential backoff\n * - Request timeouts using AbortController\n * - Network error recovery\n * - Rate limit handling\n * - Proper HTTP status code handling\n */\nexport class HttpTransport {\n\tprivate readonly url: string;\n\tprivate readonly config: Required<HttpTransportConfig>;\n\n\tconstructor(url: string, config: HttpTransportConfig = {}) {\n\t\tthis.url = url;\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\t/**\n\t * Makes an HTTP request with automatic retry logic.\n\t *\n\t * Retries are attempted for network errors and server errors (5xx).\n\t * Uses exponential backoff between retry attempts.\n\t */\n\tasync request(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown> = {},\n\t): Promise<unknown> {\n\t\tlet lastError: Error | undefined;\n\n\t\tfor (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await this.makeRequest(body, requestDetails, attempt);\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\n\t\t\t\t// Don't retry if it's not a retryable error\n\t\t\t\tif (error instanceof RpcError && !error.retryable) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Don't retry on the last attempt\n\t\t\t\tif (attempt === this.config.maxRetries) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Calculate backoff delay\n\t\t\t\tconst delay = calculateBackoff(\n\t\t\t\t\tattempt,\n\t\t\t\t\tthis.config.retryBaseDelay,\n\t\t\t\t\tthis.config.retryMaxDelay,\n\t\t\t\t);\n\n\t\t\t\t// Wait before retrying\n\t\t\t\tawait sleep(delay);\n\t\t\t}\n\t\t}\n\n\t\t// Should never reach here, but TypeScript doesn't know that\n\t\tthrow lastError;\n\t}\n\n\t/**\n\t * Make a single HTTP request with timeout\n\t */\n\tprivate async makeRequest(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<unknown> {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n\t\ttry {\n\t\t\tconst options: RequestOptions = {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...this.config.headers,\n\t\t\t\t},\n\t\t\t\tbody,\n\t\t\t\tsignal: controller.signal,\n\t\t\t};\n\n\t\t\tconst response = await fetch(this.url, options);\n\n\t\t\t// Handle HTTP errors\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow await this.handleHttpError(response, requestDetails, attempt);\n\t\t\t}\n\n\t\t\t// Parse JSON response\n\t\t\tconst data = await response.json();\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\t// Handle timeout\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\tthrow RpcError.requestTimeout(this.config.timeout, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Handle network errors\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tthrow RpcError.networkError(error.message, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t\tcause: error.message,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Re-throw RpcError\n\t\t\tif (error instanceof RpcError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Unknown error\n\t\t\tthrow RpcError.networkError(\"Unknown network error\", {\n\t\t\t\t...requestDetails,\n\t\t\t\turl: this.url,\n\t\t\t\tattempts: attempt + 1,\n\t\t\t\tcause: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\t/**\n\t * Handle HTTP error responses.\n\t *\n\t * Parses the response body to extract JSON-RPC error details when available,\n\t * regardless of HTTP status code. Falls back to HTTP status-based error handling.\n\t */\n\tprivate async handleHttpError(\n\t\tresponse: Response,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<RpcError> {\n\t\tconst status = response.status;\n\t\tconst isRetryable = status >= 500 || status === 429;\n\t\tconst baseDetails = {\n\t\t\t...requestDetails,\n\t\t\thttpStatus: status,\n\t\t\turl: this.url,\n\t\t\tattempts: attempt + 1,\n\t\t};\n\n\t\t// Try to parse response body for error details\n\t\tconst { message, rpcCode, errorData } = await this.parseErrorResponse(\n\t\t\tresponse,\n\t\t\tstatus,\n\t\t);\n\n\t\t// Rate limiting gets special handling\n\t\tif (status === 429) {\n\t\t\treturn RpcError.rateLimitExceeded({\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// If we have a JSON-RPC error code, use proper error mapping\n\t\tif (rpcCode !== undefined) {\n\t\t\treturn RpcError.fromRpcCode(rpcCode, message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Server errors (5xx) are retryable network errors\n\t\tif (status >= 500) {\n\t\t\treturn RpcError.networkError(message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Client errors (4xx) are not retryable\n\t\treturn new RpcError(RpcErrorCode.NETWORK_ERROR, message, baseDetails, isRetryable);\n\t}\n\n\t/**\n\t * Parse error response body to extract message and RPC error code.\n\t *\n\t * Handles multiple formats:\n\t * - JSON-RPC error: { error: { code, message, data? } }\n\t * - Simple JSON: { message: \"...\" }\n\t * - Non-JSON responses\n\t */\n\tprivate async parseErrorResponse(\n\t\tresponse: Response,\n\t\tstatus: number,\n\t): Promise<{ message: string; rpcCode?: number; errorData?: unknown }> {\n\t\tlet message = `HTTP ${status}: ${response.statusText}`;\n\t\tlet rpcCode: number | undefined;\n\t\tlet errorData: unknown;\n\n\t\ttry {\n\t\t\terrorData = await response.json();\n\n\t\t\tif (errorData && typeof errorData === \"object\") {\n\t\t\t\tconst data = errorData as Record<string, unknown>;\n\n\t\t\t\t// Check for JSON-RPC error format: { error: { code, message } }\n\t\t\t\tif (\n\t\t\t\t\tdata.error &&\n\t\t\t\t\ttypeof data.error === \"object\" &&\n\t\t\t\t\t\"message\" in data.error\n\t\t\t\t) {\n\t\t\t\t\tconst rpcError = data.error as Record<string, unknown>;\n\t\t\t\t\tmessage = String(rpcError.message);\n\t\t\t\t\trpcCode =\n\t\t\t\t\t\ttypeof rpcError.code === \"number\" ? rpcError.code : undefined;\n\t\t\t\t} else if (\"message\" in data) {\n\t\t\t\t\t// Fallback to top-level message\n\t\t\t\t\tmessage = String(data.message);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Response might not be JSON, keep default message\n\t\t}\n\n\t\treturn { message, rpcCode, errorData };\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.url;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochConsensusConfigRequest,\n\tEpochInfo,\n\tEventData,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexDuty,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tStakeState,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tSubscriptionAccountMeta,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTimestampRange,\n\tTokenBalance,\n\tTransactionData,\n\tTransactionInfo,\n\tTransactionMessage,\n\tTransactionNodeData,\n\tTransactionResponse,\n\tTransactionStatusMetadata,\n\tTransactionWithMeta,\n\tTriggeredTransaction,\n\tTriggerInfo,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n\tValidatorInfoRequest,\n\tWorkflowLineage,\n\tWorkflowNode,\n} from \"../generated/types\";\nexport * from \"./clients\";\nexport * from \"./errors\";\nexport * from \"./http-transport\";\n\nimport {\n\tRIALO_DEVNET_CHAIN,\n\tRIALO_LOCALNET_CHAIN,\n\tRIALO_MAINNET_CHAIN,\n\tRIALO_TESTNET_CHAIN,\n} from \"../constants\";\nimport {\n\tRialoClient,\n\ttype RialoClientConfig,\n\ttype RialoNetwork,\n} from \"./clients\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\nimport { HttpTransport } from \"./http-transport\";\n\n/**\n * Creates an RPC client with automatic retry and timeout handling.\n *\n * @param config - Client configuration with chain definition and optional transport settings\n * @param config.chain - Chain definition (e.g., RIALO_DEVNET_CHAIN, RIALO_MAINNET_CHAIN) or a custom chain with your own rpcUrl\n * @param config.transport - Optional transport configuration (timeout, retries, headers)\n * @returns Configured RialoClient instance\n *\n * @example\n * ```typescript\n * // Basic usage with preset chain\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // With custom transport config\n * const client = createRialoClient({\n * chain: RIALO_MAINNET_CHAIN,\n * transport: { timeout: 30000, maxRetries: 5 }\n * });\n *\n * // With custom RPC URL\n * const client = createRialoClient({\n * chain: {\n * id: 'rialo:mainnet',\n * name: 'Mainnet',\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function createRialoClient(config: RialoClientConfig): RialoClient {\n\tconst { chain, transport } = config;\n\tconst httpTransport = new HttpTransport(chain.rpcUrl, transport);\n\n\treturn new RialoClient(httpTransport, chain);\n}\n\n/**\n * Returns a default RialoClientConfig for a given network.\n *\n * Provides preset chain configurations for standard Rialo networks, making it easy\n * to connect to mainnet, devnet, testnet, or localnet without manual configuration.\n *\n * @param network - Network identifier: \"mainnet\", \"devnet\", \"testnet\", or \"localnet\"\n * @returns Default RialoClientConfig for the specified network\n * @throws {RpcError} With code INVALID_NETWORK if an unknown network is provided\n *\n * @example\n * ```typescript\n * // Get devnet config and create client\n * const config = getDefaultRialoClientConfig('devnet');\n * const client = createRialoClient(config);\n *\n * // Customize the config with transport options\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * transport: { timeout: 60000, maxRetries: 5 }\n * });\n *\n * // Use custom RPC URL while preserving network identity\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * chain: {\n * ...config.chain,\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function getDefaultRialoClientConfig(\n\tnetwork: RialoNetwork,\n): RialoClientConfig {\n\tswitch (network) {\n\t\tcase \"mainnet\":\n\t\t\treturn { chain: RIALO_MAINNET_CHAIN };\n\t\tcase \"devnet\":\n\t\t\treturn { chain: RIALO_DEVNET_CHAIN };\n\t\tcase \"testnet\":\n\t\t\treturn { chain: RIALO_TESTNET_CHAIN };\n\t\tcase \"localnet\":\n\t\t\treturn { chain: RIALO_LOCALNET_CHAIN };\n\t\tdefault:\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_NETWORK,\n\t\t\t\t`Unknown network: ${network}`,\n\t\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode deserialization reader\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeReader {\n\tprivate view: DataView;\n\tprivate offset: number;\n\tprivate bytes: Uint8Array;\n\n\tconstructor(data: Uint8Array) {\n\t\tthis.bytes = data;\n\t\tthis.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Position Management ==========\n\n\tgetOffset(): number {\n\t\treturn this.offset;\n\t}\n\n\tremaining(): number {\n\t\treturn this.bytes.length - this.offset;\n\t}\n\n\tisExhausted(): boolean {\n\t\treturn this.offset >= this.bytes.length;\n\t}\n\n\tskip(bytes: number): this {\n\t\tthis.ensureAvailable(bytes);\n\t\tthis.offset += bytes;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Peek at bytes without advancing the offset\n\t */\n\tpeek(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\treturn this.bytes.slice(this.offset, this.offset + length);\n\t}\n\n\t/**\n\t * Reset reader to beginning\n\t */\n\treset(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Seek to specific offset\n\t */\n\tseek(offset: number): this {\n\t\tif (offset < 0 || offset > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid seek offset: ${offset}, buffer length: ${this.bytes.length}`,\n\t\t\t);\n\t\t}\n\t\tthis.offset = offset;\n\t\treturn this;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\treadU8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getUint8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadU16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getUint16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadU32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getUint32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadU64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getUint32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadU128(): bigint {\n\t\tthis.ensureAvailable(16);\n\t\tconst low = this.readU64();\n\t\tconst high = this.readU64();\n\t\treturn low | (high << 64n);\n\t}\n\n\treadI8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadI16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getInt16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadI32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getInt32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadI64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getInt32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\t// Use BigInt arithmetic to properly handle sign extension\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadI128(): bigint {\n\t\t// Read as unsigned first, then convert to signed\n\t\tconst unsigned = this.readU128();\n\t\t// If sign bit (bit 127) is set, convert to negative\n\t\tconst signBit = 1n << 127n;\n\t\tif ((unsigned & signBit) !== 0n) {\n\t\t\treturn unsigned - (1n << 128n);\n\t\t}\n\t\treturn unsigned;\n\t}\n\n\treadF32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getFloat32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadF64(): number {\n\t\tthis.ensureAvailable(8);\n\t\tconst value = this.view.getFloat64(this.offset, true);\n\t\tthis.offset += 8;\n\t\treturn value;\n\t}\n\n\treadBool(): boolean {\n\t\tconst value = this.readU8();\n\t\tif (value > 1) {\n\t\t\tthrow new Error(`Invalid boolean value: ${value}`);\n\t\t}\n\t\treturn value === 1;\n\t}\n\n\t// ========== Compound Types ==========\n\n\treadBytes(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\tconst bytes = this.bytes.slice(this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn bytes;\n\t}\n\n\treadFixedArray(length: number): Uint8Array {\n\t\treturn this.readBytes(length);\n\t}\n\n\treadVecBytes(): Uint8Array {\n\t\tconst length = this.readLength();\n\t\treturn this.readBytes(length);\n\t}\n\n\treadString(): string {\n\t\tconst bytes = this.readVecBytes();\n\t\treturn new TextDecoder().decode(bytes);\n\t}\n\n\treadVariant(): number {\n\t\treturn this.readU32();\n\t}\n\n\treadOption<T>(readValue: () => T): T | null {\n\t\tconst hasValue = this.readU8();\n\t\tif (hasValue === 0) {\n\t\t\treturn null;\n\t\t}\n\t\tif (hasValue !== 1) {\n\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t}\n\t\treturn readValue();\n\t}\n\n\treadVec<T>(readElement: () => T): T[] {\n\t\tconst length = this.readLength();\n\t\tconst result: T[] = [];\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tresult.push(readElement());\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Read a tuple of fixed size with heterogeneous types\n\t */\n\treadTuple<T extends unknown[]>(readers: { [K in keyof T]: () => T[K] }): T {\n\t\treturn readers.map((read) => read()) as T;\n\t}\n\n\treadMap<K, V>(readKey: () => K, readValue: () => V): Map<K, V> {\n\t\tconst length = this.readLength();\n\t\tconst map = new Map<K, V>();\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst key = readKey();\n\t\t\tconst value = readValue();\n\t\t\tmap.set(key, value);\n\t\t}\n\t\treturn map;\n\t}\n\n\t// ========== Helpers ==========\n\n\t/**\n\t * Read length as u64 but validate it's within safe integer range\n\t */\n\tprivate readLength(): number {\n\t\tconst length = this.readU64();\n\t\tif (length > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new Error(`Length ${length} exceeds maximum safe integer`);\n\t\t}\n\t\tconst numLength = Number(length);\n\t\t// Additional sanity check: length shouldn't exceed remaining bytes\n\t\tif (numLength > this.remaining()) {\n\t\t\tthrow new Error(\n\t\t\t\t`Length ${numLength} exceeds remaining bytes ${this.remaining()}`,\n\t\t\t);\n\t\t}\n\t\treturn numLength;\n\t}\n\n\tprivate ensureAvailable(bytes: number): void {\n\t\tif (this.offset + bytes > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected end of data: need ${bytes} bytes at offset ${this.offset}, ` +\n\t\t\t\t\t`but only ${this.bytes.length - this.offset} available`,\n\t\t\t);\n\t\t}\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode serialization writer\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeWriter {\n\tprivate buffer: Uint8Array;\n\tprivate offset: number;\n\tprivate view: DataView;\n\n\tconstructor(initialCapacity = 256) {\n\t\tthis.buffer = new Uint8Array(initialCapacity);\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\twriteU8(value: number): this {\n\t\tif (value < 0 || value > 0xff) {\n\t\t\tthrow new Error(`u8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value;\n\t\treturn this;\n\t}\n\n\twriteU16(value: number): this {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`u16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setUint16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteU32(value: number): this {\n\t\tif (value < 0 || value > 0xffffffff) {\n\t\t\tthrow new Error(`u32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setUint32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteU64(value: bigint | number): this {\n\t\tconst val = BigInt(value);\n\t\tif (val < 0n || val > 0xffff_ffff_ffff_ffffn) {\n\t\t\tthrow new Error(`u64 value out of range: ${val}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// Write as two u32s for better performance\n\t\tthis.view.setUint32(this.offset, Number(val & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((val >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteU128(value: bigint): this {\n\t\tif (value < 0n || value > (1n << 128n) - 1n) {\n\t\t\tthrow new Error(`u128 value out of range: ${value}`);\n\t\t}\n\t\tthis.writeU64(value & ((1n << 64n) - 1n));\n\t\tthis.writeU64(value >> 64n);\n\t\treturn this;\n\t}\n\n\twriteI8(value: number): this {\n\t\tif (value < -128 || value > 127) {\n\t\t\tthrow new Error(`i8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.view.setInt8(this.offset, value);\n\t\tthis.offset += 1;\n\t\treturn this;\n\t}\n\n\twriteI16(value: number): this {\n\t\tif (value < -32768 || value > 32767) {\n\t\t\tthrow new Error(`i16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setInt16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteI32(value: number): this {\n\t\tif (value < -2147483648 || value > 2147483647) {\n\t\t\tthrow new Error(`i32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setInt32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteI64(value: bigint): this {\n\t\tconst min = -(1n << 63n);\n\t\tconst max = (1n << 63n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i64 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// For signed integers, we write the bit pattern directly\n\t\t// JavaScript's BigInt handles two's complement correctly\n\t\tconst unsigned = value < 0n ? value + (1n << 64n) : value;\n\t\tthis.view.setUint32(this.offset, Number(unsigned & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((unsigned >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteI128(value: bigint): this {\n\t\tconst min = -(1n << 127n);\n\t\tconst max = (1n << 127n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i128 value out of range: ${value}`);\n\t\t}\n\t\t// Convert to unsigned representation for writing\n\t\tconst unsigned = value < 0n ? value + (1n << 128n) : value;\n\t\tthis.writeU64(unsigned & ((1n << 64n) - 1n));\n\t\tthis.writeU64(unsigned >> 64n);\n\t\treturn this;\n\t}\n\n\twriteF32(value: number): this {\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setFloat32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteF64(value: number): this {\n\t\tthis.ensureCapacity(8);\n\t\tthis.view.setFloat64(this.offset, value, true);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteBool(value: boolean): this {\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value ? 1 : 0;\n\t\treturn this;\n\t}\n\n\t// ========== Compound Types ==========\n\n\twriteBytes(bytes: Uint8Array): this {\n\t\tthis.ensureCapacity(bytes.length);\n\t\tthis.buffer.set(bytes, this.offset);\n\t\tthis.offset += bytes.length;\n\t\treturn this;\n\t}\n\n\twriteFixedArray(bytes: Uint8Array, expectedLength?: number): this {\n\t\tif (expectedLength !== undefined && bytes.length !== expectedLength) {\n\t\t\tthrow new Error(\n\t\t\t\t`Fixed array length mismatch: expected ${expectedLength}, got ${bytes.length}`,\n\t\t\t);\n\t\t}\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteVecBytes(bytes: Uint8Array): this {\n\t\tthis.writeU64(BigInt(bytes.length));\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteString(str: string): this {\n\t\tconst bytes = new TextEncoder().encode(str);\n\t\treturn this.writeVecBytes(bytes);\n\t}\n\n\twriteVariant(index: number): this {\n\t\treturn this.writeU32(index);\n\t}\n\n\twriteOption<T>(\n\t\tvalue: T | null | undefined,\n\t\twriteValue: (writer: BincodeWriter, val: T) => void,\n\t): this {\n\t\tif (value === null || value === undefined) {\n\t\t\tthis.writeU8(0);\n\t\t} else {\n\t\t\tthis.writeU8(1);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteVec<T>(\n\t\titems: T[],\n\t\twriteItem: (writer: BincodeWriter, item: T) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(items.length));\n\t\tfor (const item of items) {\n\t\t\twriteItem(this, item);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Write a tuple (fixed-size heterogeneous collection)\n\t */\n\twriteTuple<T extends unknown[]>(\n\t\titems: T,\n\t\twriters: { [K in keyof T]: (writer: BincodeWriter, val: T[K]) => void },\n\t): this {\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t(writers[i] as (writer: BincodeWriter, val: unknown) => void)(\n\t\t\t\tthis,\n\t\t\t\titems[i],\n\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteMap<K, V>(\n\t\tmap: Map<K, V>,\n\t\twriteKey: (writer: BincodeWriter, key: K) => void,\n\t\twriteValue: (writer: BincodeWriter, value: V) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(map.size));\n\t\tfor (const [key, value] of map) {\n\t\t\twriteKey(this, key);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ========== Output ==========\n\n\ttoBytes(): Uint8Array {\n\t\treturn this.buffer.slice(0, this.offset);\n\t}\n\n\t/**\n\t * Get a view of the written bytes WITHOUT copying.\n\t *\n\t * ⚠️ WARNING: This returns a view into the internal buffer.\n\t * The view becomes INVALID if:\n\t * - The writer continues writing (may trigger resize)\n\t * - The writer is cleared via clear()\n\t *\n\t * Use toBytes() for a safe copy, or use this only for immediate\n\t * read-only access when performance is critical.\n\t */\n\ttoView(): Uint8Array {\n\t\treturn this.buffer.subarray(0, this.offset);\n\t}\n\n\tlength(): number {\n\t\treturn this.offset;\n\t}\n\n\tclear(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Reserve additional capacity\n\t */\n\treserve(additionalBytes: number): this {\n\t\tthis.ensureCapacity(additionalBytes);\n\t\treturn this;\n\t}\n\n\t// ========== Internal ==========\n\n\tprivate ensureCapacity(needed: number): void {\n\t\tconst required = this.offset + needed;\n\t\tif (required <= this.buffer.length) {\n\t\t\treturn;\n\t\t}\n\t\t// Grow by at least 2x or to required size\n\t\tlet newCapacity = this.buffer.length * 2;\n\t\twhile (newCapacity < required) {\n\t\t\tnewCapacity *= 2;\n\t\t}\n\t\tconst newBuffer = new Uint8Array(newCapacity);\n\t\tnewBuffer.set(this.buffer);\n\t\tthis.buffer = newBuffer;\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { BincodeReader } from \"./reader\";\nimport { BincodeWriter } from \"./writer\";\n\n/**\n * Type definitions for bincode schemas\n *\n * IMPORTANT: For structs and enums, field/variant order MUST match Rust definition order.\n * Use arrays of tuples instead of objects to guarantee order preservation.\n */\nexport type BincodeSchema =\n\t| { type: \"u8\" }\n\t| { type: \"u16\" }\n\t| { type: \"u32\" }\n\t| { type: \"u64\" }\n\t| { type: \"u128\" }\n\t| { type: \"i8\" }\n\t| { type: \"i16\" }\n\t| { type: \"i32\" }\n\t| { type: \"i64\" }\n\t| { type: \"i128\" }\n\t| { type: \"f32\" }\n\t| { type: \"f64\" }\n\t| { type: \"bool\" }\n\t| { type: \"string\" }\n\t| { type: \"bytes\" }\n\t| { type: \"unit\" } // Rust's () type - zero size\n\t| { type: \"fixedArray\"; length: number }\n\t| { type: \"vec\"; element: BincodeSchema }\n\t| { type: \"option\"; inner: BincodeSchema }\n\t| { type: \"tuple\"; elements: BincodeSchema[] }\n\t| { type: \"struct\"; fields: StructField[] } // Ordered array, not object!\n\t| { type: \"enum\"; variants: EnumVariant[] } // Ordered array, not object!\n\t| { type: \"map\"; key: BincodeSchema; value: BincodeSchema }\n\t| { type: \"pubkey\" }; // 32-byte public key (Solana specific)\n\n/**\n * Struct field definition - order matters!\n */\nexport interface StructField {\n\tname: string;\n\tschema: BincodeSchema;\n}\n\n/**\n * Enum variant definition - order matters!\n */\nexport interface EnumVariant {\n\tname: string;\n\tschema: BincodeSchema | null; // null for unit variants\n}\n\n// ========== Schema Builder Helpers ==========\n\nexport const Schema = {\n\tu8: (): BincodeSchema => ({ type: \"u8\" }),\n\tu16: (): BincodeSchema => ({ type: \"u16\" }),\n\tu32: (): BincodeSchema => ({ type: \"u32\" }),\n\tu64: (): BincodeSchema => ({ type: \"u64\" }),\n\tu128: (): BincodeSchema => ({ type: \"u128\" }),\n\ti8: (): BincodeSchema => ({ type: \"i8\" }),\n\ti16: (): BincodeSchema => ({ type: \"i16\" }),\n\ti32: (): BincodeSchema => ({ type: \"i32\" }),\n\ti64: (): BincodeSchema => ({ type: \"i64\" }),\n\ti128: (): BincodeSchema => ({ type: \"i128\" }),\n\tf32: (): BincodeSchema => ({ type: \"f32\" }),\n\tf64: (): BincodeSchema => ({ type: \"f64\" }),\n\tbool: (): BincodeSchema => ({ type: \"bool\" }),\n\tstring: (): BincodeSchema => ({ type: \"string\" }),\n\tbytes: (): BincodeSchema => ({ type: \"bytes\" }),\n\tunit: (): BincodeSchema => ({ type: \"unit\" }),\n\n\tfixedArray: (length: number): BincodeSchema => ({\n\t\ttype: \"fixedArray\",\n\t\tlength,\n\t}),\n\n\tvec: (element: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"vec\",\n\t\telement,\n\t}),\n\n\toption: (inner: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"option\",\n\t\tinner,\n\t}),\n\n\ttuple: (...elements: BincodeSchema[]): BincodeSchema => ({\n\t\ttype: \"tuple\",\n\t\telements,\n\t}),\n\n\t/**\n\t * Define a struct with ordered fields\n\t * @example\n\t * Schema.struct([\n\t * [\"id\", Schema.u64()],\n\t * [\"name\", Schema.string()],\n\t * [\"active\", Schema.bool()],\n\t * ])\n\t */\n\tstruct: (fields: [string, BincodeSchema][]): BincodeSchema => ({\n\t\ttype: \"struct\",\n\t\tfields: fields.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\t/**\n\t * Define an enum with ordered variants\n\t * @example\n\t * Schema.enum([\n\t * [\"None\", null],\n\t * [\"Some\", Schema.u64()],\n\t * [\"Error\", Schema.string()],\n\t * ])\n\t */\n\tenum: (variants: [string, BincodeSchema | null][]): BincodeSchema => ({\n\t\ttype: \"enum\",\n\t\tvariants: variants.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\tmap: (key: BincodeSchema, value: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"map\",\n\t\tkey,\n\t\tvalue,\n\t}),\n\n\tpubkey: (): BincodeSchema => ({ type: \"pubkey\" }),\n} as const;\n\n// ========== Serialization ==========\n\n/**\n * Serialize a value according to a schema\n */\nexport function serialize(schema: BincodeSchema, value: unknown): Uint8Array {\n\tconst writer = new BincodeWriter();\n\twriteValue(writer, schema, value);\n\treturn writer.toBytes();\n}\n\n/**\n * Deserialize bytes according to a schema\n */\nexport function deserialize<T>(schema: BincodeSchema, data: Uint8Array): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\t// Verify all bytes were consumed (optional strict mode)\n\tif (!reader.isExhausted()) {\n\t\tconsole.warn(\n\t\t\t`Bincode deserialize: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\n/**\n * Deserialize bytes with strict validation\n */\nexport function deserializeStrict<T>(\n\tschema: BincodeSchema,\n\tdata: Uint8Array,\n): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\tif (!reader.isExhausted()) {\n\t\tthrow new Error(\n\t\t\t`Unexpected data: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\nfunction writeValue(\n\twriter: BincodeWriter,\n\tschema: BincodeSchema,\n\tvalue: unknown,\n): void {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\twriter.writeU8(value as number);\n\t\t\tbreak;\n\t\tcase \"u16\":\n\t\t\twriter.writeU16(value as number);\n\t\t\tbreak;\n\t\tcase \"u32\":\n\t\t\twriter.writeU32(value as number);\n\t\t\tbreak;\n\t\tcase \"u64\":\n\t\t\twriter.writeU64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"u128\":\n\t\t\twriter.writeU128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i8\":\n\t\t\twriter.writeI8(value as number);\n\t\t\tbreak;\n\t\tcase \"i16\":\n\t\t\twriter.writeI16(value as number);\n\t\t\tbreak;\n\t\tcase \"i32\":\n\t\t\twriter.writeI32(value as number);\n\t\t\tbreak;\n\t\tcase \"i64\":\n\t\t\twriter.writeI64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i128\":\n\t\t\twriter.writeI128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"f32\":\n\t\t\twriter.writeF32(value as number);\n\t\t\tbreak;\n\t\tcase \"f64\":\n\t\t\twriter.writeF64(value as number);\n\t\t\tbreak;\n\t\tcase \"bool\":\n\t\t\twriter.writeBool(value as boolean);\n\t\t\tbreak;\n\t\tcase \"string\":\n\t\t\twriter.writeString(value as string);\n\t\t\tbreak;\n\t\tcase \"bytes\":\n\t\t\twriter.writeVecBytes(value as Uint8Array);\n\t\t\tbreak;\n\t\tcase \"unit\":\n\t\t\t// Nothing to write for unit type\n\t\t\tbreak;\n\t\tcase \"fixedArray\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== schema.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Fixed array length mismatch: expected ${schema.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"pubkey\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== 32) {\n\t\t\t\tthrow new Error(`Pubkey must be exactly 32 bytes, got ${arr.length}`);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vec\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\twriter.writeU64(BigInt(arr.length));\n\t\t\tfor (const item of arr) {\n\t\t\t\twriteValue(writer, schema.element, item);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\twriter.writeU8(0);\n\t\t\t} else {\n\t\t\t\twriter.writeU8(1);\n\t\t\t\twriteValue(writer, schema.inner, value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\tif (arr.length !== schema.elements.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tuple length mismatch: expected ${schema.elements.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let i = 0; i < schema.elements.length; i++) {\n\t\t\t\twriteValue(writer, schema.elements[i], arr[i]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst obj = value as Record<string, unknown>;\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tif (!(field.name in obj)) {\n\t\t\t\t\tthrow new Error(`Missing struct field: ${field.name}`);\n\t\t\t\t}\n\t\t\t\twriteValue(writer, field.schema, obj[field.name]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst enumValue = value as { variant: string; value?: unknown };\n\t\t\tconst variantIndex = schema.variants.findIndex(\n\t\t\t\t(v) => v.name === enumValue.variant,\n\t\t\t);\n\t\t\tif (variantIndex === -1) {\n\t\t\t\tconst validVariants = schema.variants.map((v) => v.name).join(\", \");\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unknown variant: ${enumValue.variant}. Valid variants: ${validVariants}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeVariant(variantIndex);\n\t\t\tconst variantSchema = schema.variants[variantIndex].schema;\n\t\t\tif (variantSchema !== null) {\n\t\t\t\twriteValue(writer, variantSchema, enumValue.value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst map = value as Map<unknown, unknown>;\n\t\t\twriter.writeU64(BigInt(map.size));\n\t\t\tfor (const [k, v] of map) {\n\t\t\t\twriteValue(writer, schema.key, k);\n\t\t\t\twriteValue(writer, schema.value, v);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown schema type: ${JSON.stringify(schema)}`);\n\t\t}\n\t}\n}\n\nfunction readValue(reader: BincodeReader, schema: BincodeSchema): unknown {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\treturn reader.readU8();\n\t\tcase \"u16\":\n\t\t\treturn reader.readU16();\n\t\tcase \"u32\":\n\t\t\treturn reader.readU32();\n\t\tcase \"u64\":\n\t\t\treturn reader.readU64();\n\t\tcase \"u128\":\n\t\t\treturn reader.readU128();\n\t\tcase \"i8\":\n\t\t\treturn reader.readI8();\n\t\tcase \"i16\":\n\t\t\treturn reader.readI16();\n\t\tcase \"i32\":\n\t\t\treturn reader.readI32();\n\t\tcase \"i64\":\n\t\t\treturn reader.readI64();\n\t\tcase \"i128\":\n\t\t\treturn reader.readI128();\n\t\tcase \"f32\":\n\t\t\treturn reader.readF32();\n\t\tcase \"f64\":\n\t\t\treturn reader.readF64();\n\t\tcase \"bool\":\n\t\t\treturn reader.readBool();\n\t\tcase \"string\":\n\t\t\treturn reader.readString();\n\t\tcase \"bytes\":\n\t\t\treturn reader.readVecBytes();\n\t\tcase \"unit\":\n\t\t\treturn undefined;\n\t\tcase \"fixedArray\":\n\t\t\treturn reader.readFixedArray(schema.length);\n\t\tcase \"pubkey\":\n\t\t\treturn reader.readFixedArray(32);\n\t\tcase \"vec\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Vec length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tresult.push(readValue(reader, schema.element));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tconst hasValue = reader.readU8();\n\t\t\tif (hasValue === 0) return null;\n\t\t\tif (hasValue !== 1) {\n\t\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t\t}\n\t\t\treturn readValue(reader, schema.inner);\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (const elementSchema of schema.elements) {\n\t\t\t\tresult.push(readValue(reader, elementSchema));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst result: Record<string, unknown> = {};\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tresult[field.name] = readValue(reader, field.schema);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst variantIndex = reader.readVariant();\n\t\t\tif (variantIndex >= schema.variants.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid variant index: ${variantIndex}, max: ${schema.variants.length - 1}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst variant = schema.variants[variantIndex];\n\t\t\tif (variant.schema === null) {\n\t\t\t\treturn { variant: variant.name };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tvariant: variant.name,\n\t\t\t\tvalue: readValue(reader, variant.schema),\n\t\t\t};\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Map length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst map = new Map<unknown, unknown>();\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst key = readValue(reader, schema.key);\n\t\t\t\tconst value = readValue(reader, schema.value);\n\t\t\t\tmap.set(key, value);\n\t\t\t}\n\t\t\treturn map;\n\t\t}\n\t\tdefault: {\n\t\t\t// Exhaustive check - TypeScript will error if a case is missing\n\t\t\tconst _exhaustive: never = schema;\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown schema type: ${(_exhaustive as BincodeSchema).type}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// ========== Type Inference Helpers ==========\n\n/**\n * Infer TypeScript type from schema (for documentation purposes)\n *\n * Usage:\n * const mySchema = Schema.struct([...]);\n * type MyType = InferSchema<typeof mySchema>;\n */\nexport type InferSchema<S extends BincodeSchema> = S extends { type: \"u8\" }\n\t? number\n\t: S extends { type: \"u16\" }\n\t\t? number\n\t\t: S extends { type: \"u32\" }\n\t\t\t? number\n\t\t\t: S extends { type: \"u64\" }\n\t\t\t\t? bigint\n\t\t\t\t: S extends { type: \"u128\" }\n\t\t\t\t\t? bigint\n\t\t\t\t\t: S extends { type: \"i8\" }\n\t\t\t\t\t\t? number\n\t\t\t\t\t\t: S extends { type: \"i16\" }\n\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t: S extends { type: \"i32\" }\n\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t: S extends { type: \"i64\" }\n\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t: S extends { type: \"i128\" }\n\t\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f32\" }\n\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f64\" }\n\t\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bool\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t? boolean\n\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"string\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? string\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bytes\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"unit\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"fixedArray\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"pubkey\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"vec\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telement: infer E;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? E extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<E>[]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"option\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner: infer I;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? I extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<I> | null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: unknown;\n",null,null,null,null,null,"// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tdeserialize,\n\tfield,\n\tfixedArray,\n\toption,\n\tserialize,\n\tvec,\n} from \"@dao-xyz/borsh\";\n\n/**\n * Serializes data using Borsh (Binary Object Representation Serializer for Hashing) encoding.\n *\n * Borsh is efficient for complex types like enums, Options, vectors, and nested structs.\n * Use the exported decorators (@field, @option, @vec) to define your data structures.\n *\n * @param data - Data object to serialize\n * @returns Serialized bytes\n *\n * @example\n * ```typescript\n * import { serializeBorsh, field, option } from '@rialo/ts-cdk';\n *\n * class SwapInstruction {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amountIn: bigint;\n *\n * @field({ type: option('u64') })\n * minAmountOut?: bigint;\n * }\n *\n * const data = serializeBorsh(new SwapInstruction({\n * instruction: 1,\n * amountIn: 1000n,\n * minAmountOut: 900n,\n * }));\n * ```\n */\nexport function serializeBorsh<T>(data: T): Uint8Array {\n\treturn serialize(data);\n}\n\n/**\n * Deserializes Borsh-encoded data into a typed object.\n *\n * @param data - Borsh-encoded bytes\n * @param type - Class constructor for the target type\n * @returns Deserialized object instance\n */\nexport function deserializeBorsh<T>(data: Uint8Array, type: new () => T): T {\n\treturn deserialize(data, type);\n}\n\n// Re-export Borsh decorators for convenience\nexport { field, fixedArray, option, vec };\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Account metadata table for deduplication and sorting.\n * Avoids: Complex account sorting logic scattered throughout builder\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport type { AccountMeta, MessageHeader } from \"./types\";\n\n/**\n * Internal account entry with aggregated metadata.\n */\ninterface AccountEntry {\n\tpubkey: PublicKey;\n\tisSigner: boolean;\n\tisWritable: boolean;\n}\n\n/**\n * Manages account deduplication and sorting for transaction messages.\n *\n * Accounts are sorted according to these rules:\n * 1. Signer + writable accounts first\n * 2. Then signer + readonly accounts\n * 3. Then non-signer + writable accounts\n * 4. Finally non-signer + readonly accounts\n * 5. Within each group, sort by public key bytes\n *\n * This matches Solana's account sorting rules for compatibility.\n */\nexport class AccountMetaTable {\n\tprivate readonly accounts: Map<string, AccountEntry> = new Map();\n\tprivate readonly accountOrder: string[] = [];\n\tprivate payerKey: string | null = null;\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t * The fee payer is always pinned at index 0 in the sorted account list,\n\t * regardless of lexicographic ordering. This matches Solana's invariant\n\t * that account_keys[0] is always the fee payer.\n\t */\n\tsetFeePayer(pubkey: PublicKey): void {\n\t\tthis.payerKey = pubkey.toString();\n\t\tthis.add({ pubkey, isSigner: true, isWritable: true });\n\t}\n\n\t/**\n\t * Add or update an account in the table.\n\t * If account already exists, merges signer/writable flags (OR operation).\n\t */\n\tadd(meta: AccountMeta): void {\n\t\tconst key = meta.pubkey.toString();\n\n\t\tif (this.accounts.has(key)) {\n\t\t\t// Merge with existing entry (OR flags)\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\t\tconst existing = this.accounts.get(key)!;\n\t\t\texisting.isSigner ||= meta.isSigner;\n\t\t\texisting.isWritable ||= meta.isWritable;\n\t\t} else {\n\t\t\t// New entry\n\t\t\tthis.accounts.set(key, {\n\t\t\t\tpubkey: meta.pubkey,\n\t\t\t\tisSigner: meta.isSigner,\n\t\t\t\tisWritable: meta.isWritable,\n\t\t\t});\n\t\t\tthis.accountOrder.push(key);\n\t\t}\n\t}\n\n\t/**\n\t * Add multiple accounts at once.\n\t */\n\taddAll(metas: readonly AccountMeta[]): void {\n\t\tfor (const meta of metas) {\n\t\t\tthis.add(meta);\n\t\t}\n\t}\n\n\t/**\n\t * Get the index of an account in the sorted order.\n\t * Returns -1 if account not found.\n\t */\n\tgetIndex(pubkey: PublicKey): number {\n\t\tconst sorted = this.getSortedAccounts();\n\t\treturn sorted.findIndex((entry) => entry.pubkey.equals(pubkey));\n\t}\n\n\t/**\n\t * Get sorted accounts according to transaction rules.\n\t */\n\tgetSortedAccounts(): readonly AccountEntry[] {\n\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\tconst entries = this.accountOrder.map((key) => this.accounts.get(key)!);\n\n\t\t// Separate fee payer from the rest so it can be pinned at index 0.\n\t\t// This matches the Rust CDK and Solana's invariant: account_keys[0] == fee_payer.\n\t\tlet payerEntry: AccountEntry | null = null;\n\t\tconst rest: AccountEntry[] = [];\n\t\tfor (const entry of entries) {\n\t\t\tif (this.payerKey !== null && entry.pubkey.toString() === this.payerKey) {\n\t\t\t\tpayerEntry = entry;\n\t\t\t} else {\n\t\t\t\trest.push(entry);\n\t\t\t}\n\t\t}\n\n\t\trest.sort((a, b): number => {\n\t\t\t// Priority 1: Signer + writable\n\t\t\tconst aPriority =\n\t\t\t\ta.isSigner && a.isWritable ? 0 : a.isSigner ? 1 : a.isWritable ? 2 : 3;\n\t\t\tconst bPriority =\n\t\t\t\tb.isSigner && b.isWritable ? 0 : b.isSigner ? 1 : b.isWritable ? 2 : 3;\n\n\t\t\tif (aPriority !== bPriority) {\n\t\t\t\treturn aPriority - bPriority;\n\t\t\t}\n\n\t\t\t// Priority 2: Sort by public key bytes\n\t\t\tconst aBytes = a.pubkey.toBytes();\n\t\t\tconst bBytes = b.pubkey.toBytes();\n\n\t\t\tfor (let i = 0; i < 32; i++) {\n\t\t\t\tif (aBytes[i] !== bBytes[i]) {\n\t\t\t\t\treturn aBytes[i] - bBytes[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t\t// Pin fee payer at index 0\n\t\tif (payerEntry !== null) {\n\t\t\treturn [payerEntry, ...rest];\n\t\t}\n\t\treturn rest;\n\t}\n\n\t/**\n\t * Get the message header based on sorted accounts.\n\t */\n\tgetHeader(): MessageHeader {\n\t\tconst sorted = this.getSortedAccounts();\n\n\t\tlet numRequiredSignatures = 0;\n\t\tlet numReadonlySignedAccounts = 0;\n\t\tlet numReadonlyUnsignedAccounts = 0;\n\n\t\tfor (const entry of sorted) {\n\t\t\tif (entry.isSigner) {\n\t\t\t\tnumRequiredSignatures++;\n\t\t\t\tif (!entry.isWritable) {\n\t\t\t\t\tnumReadonlySignedAccounts++;\n\t\t\t\t}\n\t\t\t} else if (!entry.isWritable) {\n\t\t\t\tnumReadonlyUnsignedAccounts++;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tnumRequiredSignatures,\n\t\t\tnumReadonlySignedAccounts,\n\t\t\tnumReadonlyUnsignedAccounts,\n\t\t};\n\t}\n\n\t/**\n\t * Get sorted public keys.\n\t */\n\tgetPublicKeys(): readonly PublicKey[] {\n\t\treturn this.getSortedAccounts().map((entry) => entry.pubkey);\n\t}\n\n\t/**\n\t * Get number of accounts in table.\n\t */\n\tsize(): number {\n\t\treturn this.accounts.size;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for transaction operations.\n */\nexport enum TransactionErrorCode {\n\t// Building errors\n\tINVALID_INSTRUCTION = \"INVALID_INSTRUCTION\",\n\tINVALID_ACCOUNT_META = \"INVALID_ACCOUNT_META\",\n\tNO_INSTRUCTIONS = \"NO_INSTRUCTIONS\",\n\tDUPLICATE_ACCOUNT = \"DUPLICATE_ACCOUNT\",\n\n\t// Signing errors\n\tMISSING_SIGNATURE = \"MISSING_SIGNATURE\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tSIGNATURE_OUT_OF_BOUNDS = \"SIGNATURE_OUT_OF_BOUNDS\",\n\tSIGNER_NOT_FOUND = \"SIGNER_NOT_FOUND\",\n\tALREADY_SIGNED = \"ALREADY_SIGNED\",\n\n\t// Serialization errors\n\tINVALID_MESSAGE_FORMAT = \"INVALID_MESSAGE_FORMAT\",\n\tINSUFFICIENT_DATA = \"INSUFFICIENT_DATA\",\n\tSERIALIZATION_FAILED = \"SERIALIZATION_FAILED\",\n\n\t// Simulation errors\n\tSIMULATION_FAILED = \"SIMULATION_FAILED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tBLOCKHASH_EXPIRED = \"BLOCKHASH_EXPIRED\",\n}\n\n/**\n * Error class for transaction operations with structured error information.\n */\nexport class TransactionError extends Error {\n\tconstructor(\n\t\tpublic readonly code: TransactionErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"TransactionError\";\n\t}\n\n\tstatic noInstructions(): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.NO_INSTRUCTIONS,\n\t\t\t\"Transaction must contain at least one instruction. Use addInstruction() to add instructions.\",\n\t\t);\n\t}\n\n\tstatic signerNotFound(pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIGNER_NOT_FOUND,\n\t\t\t`Public key ${pubkey} is not a required signer for this transaction. Check that the account is marked as a signer in the instruction.`,\n\t\t\t{ pubkey },\n\t\t);\n\t}\n\n\tstatic missingSignature(index: number, pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t`Missing signature for signer ${index} (${pubkey}). Transaction requires ${index + 1} signatures.`,\n\t\t\t{ index, pubkey },\n\t\t);\n\t}\n\n\tstatic simulationFailed(logs: string[], error: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIMULATION_FAILED,\n\t\t\t`Transaction simulation failed: ${error}`,\n\t\t\t{ logs, error },\n\t\t);\n\t}\n\n\tstatic insufficientFunds(\n\t\trequired: bigint,\n\t\tavailable: bigint,\n\t): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_FUNDS,\n\t\t\t`Insufficient funds: need ${required}, have ${available}`,\n\t\t\t{ required: required.toString(), available: available.toString() },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: TransactionErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PublicKey } from \"../../crypto\";\nimport { serializeBorsh } from \"../../serialization\";\nimport type { AccountMeta, Instruction } from \"../types\";\n\n/**\n * Create an instruction with Borsh-encoded data.\n *\n * @example\n * ```typescript\n * // Define your instruction data class\n * class MyInstructionData {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amount: bigint;\n *\n * @field({ type: option('string') })\n * memo?: string;\n * }\n *\n * // Create instruction\n * const instruction = createBorshInstruction({\n * programId: myProgramId,\n * accounts: [\n * { pubkey: account1, isSigner: true, isWritable: true },\n * { pubkey: account2, isSigner: false, isWritable: false },\n * ],\n * data: new MyInstructionData({\n * instruction: 5,\n * amount: 1000n,\n * memo: \"Hello, Rialo!\",\n * }),\n * });\n * ```\n */\nexport function createBorshInstruction<T>(params: {\n\tprogramId: PublicKey;\n\taccounts: AccountMeta[];\n\tdata: T;\n}): Instruction {\n\treturn {\n\t\tprogramId: params.programId,\n\t\taccounts: params.accounts,\n\t\tdata: serializeBorsh(params.data),\n\t};\n}\n\n/**\n * Helper for creating Borsh-serialized instruction data from a plain object.\n *\n * This is useful when you don't want to define a class with decorators.\n *\n * @example\n * ```typescript\n * const data = encodeBorshData({\n * instruction: { type: 'u8', value: 1 },\n * amount: { type: 'u64', value: 1000n },\n * recipient: { type: fixedArray('u8', 32), value: recipientBytes },\n * });\n * ```\n */\nexport function encodeBorshData(\n\t_schema: Record<string, { type: unknown; value: unknown }>,\n): Uint8Array {\n\t// TODO: Implement this\n\tthrow new Error(\"Use class-based Borsh serialization with decorators\");\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SYSTEM_PROGRAM_ID } from \"../../constants\";\nimport { PublicKey } from \"../../crypto\";\nimport { BincodeWriter } from \"../../serialization/bincode\";\nimport type { Instruction } from \"../types\";\n\n/**\n * System program instruction types.\n */\nexport enum SystemInstruction {\n\tCreateAccount = 0,\n\tAssign = 1,\n\tTransfer = 2,\n\tCreateAccountWithSeed = 3,\n\tAdvanceNonceAccount = 4,\n\tWithdrawNonceAccount = 5,\n\tInitializeNonceAccount = 6,\n\tAuthorizeNonceAccount = 7,\n\tAllocate = 8,\n\tAllocateWithSeed = 9,\n\tAssignWithSeed = 10,\n\tTransferWithSeed = 11,\n}\n\n/**\n * Create a transfer instruction.\n *\n * Transfers native tokens from one account to another.\n *\n * @param from - Source account (must be signer)\n * @param to - Destination account\n * @param amount - Amount to transfer in smallest denomination (kelvins)\n *\n * @example\n * ```typescript\n * const instruction = transferInstruction(fromPubkey, toPubkey, 1_000_000n);\n *\n * const tx = TransactionBuilder.create()\n * .setPayer(fromPubkey)\n * .addInstruction(instruction)\n * .build();\n * ```\n */\nexport function transferInstruction(\n\tfrom: PublicKey,\n\tto: PublicKey,\n\tamount: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (2 for Transfer)\n\t// - 8 bytes: amount as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Transfer);\n\twriter.writeU64(amount);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: to, isSigner: false, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an account creation instruction.\n *\n * @param from - Funding account (must be signer)\n * @param newAccount - New account to create (must be signer)\n * @param kelvins - Initial balance for new account\n * @param space - Number of bytes to allocate for account data\n * @param owner - Program that will own the new account\n */\nexport function createAccount(\n\tfrom: PublicKey,\n\tnewAccount: PublicKey,\n\tkelvins: bigint,\n\tspace: bigint,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (0 for CreateAccount)\n\t// - 8 bytes: kelvins as u64 little-endian\n\t// - 8 bytes: space as u64 little-endian\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(52);\n\twriter.writeVariant(SystemInstruction.CreateAccount);\n\twriter.writeU64(kelvins);\n\twriter.writeU64(space);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: newAccount, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an allocate instruction.\n *\n * Allocates space for an account's data. The account must be owned by\n * the system program and must sign the transaction.\n *\n * @param account - Account to allocate space for (must be signer)\n * @param space - Number of bytes to allocate\n */\nexport function allocateInstruction(\n\taccount: PublicKey,\n\tspace: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (8 for Allocate)\n\t// - 8 bytes: space as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Allocate);\n\twriter.writeU64(space);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an assign instruction.\n *\n * Changes the owner of an account. The account must currently be owned\n * by the system program and must sign the transaction.\n *\n * @param account - Account to reassign (must be signer)\n * @param owner - New owner program\n */\nexport function assignInstruction(\n\taccount: PublicKey,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (1 for Assign)\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(36);\n\twriter.writeVariant(SystemInstruction.Assign);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport type { CompiledInstruction, MessageHeader } from \"./types\";\n\n/**\n * An unsigned transaction message ready to be signed.\n *\n * This is the data that gets signed by transaction signers.\n * It's immutable to prevent accidental modification after creation.\n *\n * @example\n * ```typescript\n * const message = MessageBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transferInstruction)\n * .build();\n *\n * // Serialize for signing\n * const messageBytes = message.serialize();\n * ```\n */\nexport class Message {\n\t/** Message header with signature requirements */\n\tpublic readonly header: MessageHeader;\n\n\t/** All account public keys referenced in the transaction */\n\tpublic readonly accountKeys: readonly PublicKey[];\n\n\t/** Transaction valid from (milliseconds since Unix epoch) */\n\tvalidFrom?: bigint;\n\n\t/** Config hash prefix for replay protection across chains */\n\tpublic readonly configHashPrefix: bigint;\n\n\t/** Whether the transaction should use OCC (optimistic concurrency control) scheduling */\n\tpublic readonly occ: boolean;\n\n\t/** Compiled instructions with account indices */\n\tpublic readonly instructions: readonly CompiledInstruction[];\n\n\t/** Cached serialized bytes */\n\tprivate serializedCache?: Uint8Array;\n\n\tconstructor(\n\t\theader: MessageHeader,\n\t\taccountKeys: readonly PublicKey[],\n\t\tvalidFrom: bigint,\n\t\tconfigHashPrefix: bigint,\n\t\tocc: boolean,\n\t\tinstructions: readonly CompiledInstruction[],\n\t) {\n\t\tthis.header = Object.freeze({ ...header });\n\t\tthis.accountKeys = Object.freeze([...accountKeys]);\n\t\tthis.validFrom = validFrom;\n\t\tthis.configHashPrefix = configHashPrefix;\n\t\tthis.occ = occ;\n\t\tthis.instructions = Object.freeze(\n\t\t\tinstructions.map((ix) => Object.freeze({ ...ix })),\n\t\t);\n\t}\n\n\t/**\n\t * Serialize message to bytes for signing.\n\t * Result is cached for performance.\n\t */\n\tserialize(): Uint8Array {\n\t\tif (!this.serializedCache) {\n\t\t\tthis.serializedCache = this.serializeInternal();\n\t\t}\n\t\treturn new Uint8Array(this.serializedCache); // Return copy\n\t}\n\n\t/**\n\t * Deserialize a message from wire format.\n\t *\n\t * @param data - Serialized message bytes\n\t * @returns Deserialized Message\n\t */\n\tstatic deserialize(data: Uint8Array): Message {\n\t\tif (data.length < 3) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for message header\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize header (3 bytes)\n\t\tconst header: MessageHeader = {\n\t\t\tnumRequiredSignatures: data[cursor++],\n\t\t\tnumReadonlySignedAccounts: data[cursor++],\n\t\t\tnumReadonlyUnsignedAccounts: data[cursor++],\n\t\t};\n\n\t\t// Deserialize account keys with compact-u16 length prefix\n\t\tconst [accountKeysLength, newCursor1] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor1;\n\n\t\tconst accountKeys: PublicKey[] = [];\n\t\tfor (let i = 0; i < accountKeysLength; i++) {\n\t\t\tif (data.length < cursor + 32) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for account key ${i}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst keyBytes = data.slice(cursor, cursor + 32);\n\t\t\taccountKeys.push(PublicKey.fromBytes(keyBytes));\n\t\t\tcursor += 32;\n\t\t}\n\n\t\t// Deserialize recent valid from (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for validFrom\",\n\t\t\t);\n\t\t}\n\t\tconst validFromBytes = data.slice(cursor, cursor + 8);\n\t\tconst validFrom = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(validFromBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize config hash prefix (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for configHashPrefix\",\n\t\t\t);\n\t\t}\n\t\tconst configHashPrefixBytes = data.slice(cursor, cursor + 8);\n\t\tconst configHashPrefix = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(configHashPrefixBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize occ flag (1 byte)\n\t\tif (data.length < cursor + 1) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for occ flag\",\n\t\t\t);\n\t\t}\n\t\tconst occ = data[cursor++] !== 0;\n\n\t\t// Deserialize instructions with compact-u16 length prefix\n\t\tconst [instructionsLength, newCursor2] = deserializeCompactU16(\n\t\t\tdata,\n\t\t\tcursor,\n\t\t);\n\t\tcursor = newCursor2;\n\n\t\tconst instructions: CompiledInstruction[] = [];\n\t\tfor (let i = 0; i < instructionsLength; i++) {\n\t\t\t// Read program ID index\n\t\t\tif (data.length < cursor + 1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} program index`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst programIdIndex = data[cursor++];\n\n\t\t\t// Read account key indexes array\n\t\t\tconst [accountIndexesLength, newCursor3] = deserializeCompactU16(\n\t\t\t\tdata,\n\t\t\t\tcursor,\n\t\t\t);\n\t\t\tcursor = newCursor3;\n\n\t\t\tconst accountKeyIndexes: number[] = [];\n\t\t\tfor (let j = 0; j < accountIndexesLength; j++) {\n\t\t\t\tif (data.length < cursor + 1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t\t`Insufficient data for instruction ${i} account index ${j}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\taccountKeyIndexes.push(data[cursor++]);\n\t\t\t}\n\n\t\t\t// Read instruction data array\n\t\t\tconst [dataLength, newCursor4] = deserializeCompactU16(data, cursor);\n\t\t\tcursor = newCursor4;\n\n\t\t\tif (data.length < cursor + dataLength) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} data`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst instructionData = data.slice(cursor, cursor + dataLength);\n\t\t\tcursor += dataLength;\n\n\t\t\tinstructions.push({\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instructionData,\n\t\t\t});\n\t\t}\n\n\t\treturn new Message(header, accountKeys, validFrom, configHashPrefix, occ, instructions);\n\t}\n\n\tprivate serializeInternal(): Uint8Array {\n\t\tconst buffer: number[] = [];\n\n\t\t// Serialize header (3 bytes)\n\t\tbuffer.push(this.header.numRequiredSignatures);\n\t\tbuffer.push(this.header.numReadonlySignedAccounts);\n\t\tbuffer.push(this.header.numReadonlyUnsignedAccounts);\n\n\t\t// Serialize account keys with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.accountKeys, (buf, key) => {\n\t\t\tbuf.push(...key.toBytes());\n\t\t});\n\n\t\t// Serialize recent valid from (8 bytes, little-endian to match Rust's bincode)\n\t\tconst validFromBuffer = new ArrayBuffer(8);\n\t\tnew DataView(validFromBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.validFrom ?? BigInt(0),\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(validFromBuffer));\n\n\t\t// Serialize config hash prefix (8 bytes, little-endian)\n\t\tconst configHashPrefixBuffer = new ArrayBuffer(8);\n\t\tnew DataView(configHashPrefixBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.configHashPrefix,\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(configHashPrefixBuffer));\n\n\t\t// Serialize occ flag (1 byte, bincode bool)\n\t\tbuffer.push(this.occ ? 1 : 0);\n\n\t\t// Serialize instructions with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.instructions, (buf, ix) => {\n\t\t\t// Program ID index (1 byte)\n\t\t\tbuf.push(ix.programIdIndex);\n\n\t\t\t// Account indexes array\n\t\t\tthis.serializeCompactArray(buf, ix.accountKeyIndexes, (b, idx) => {\n\t\t\t\tb.push(idx);\n\t\t\t});\n\n\t\t\t// Instruction data array\n\t\t\tthis.serializeCompactArray(buf, Array.from(ix.data), (b, byte) => {\n\t\t\t\tb.push(byte);\n\t\t\t});\n\t\t});\n\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tprivate serializeCompactArray<T>(\n\t\tbuffer: number[],\n\t\titems: readonly T[],\n\t\tserializeItem: (buf: number[], item: T) => void,\n\t): void {\n\t\t// Serialize length as compact-u16\n\t\tthis.serializeCompactU16(buffer, items.length);\n\n\t\t// Serialize each item\n\t\tfor (const item of items) {\n\t\t\tserializeItem(buffer, item);\n\t\t}\n\t}\n\n\tprivate serializeCompactU16(buffer: number[], value: number): void {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`Value out of range for compact-u16: ${value}`);\n\t\t}\n\n\t\t// Single byte (0-127)\n\t\tif (value <= 0x7f) {\n\t\t\tbuffer.push(value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Two bytes (128-16383)\n\t\tif (value <= 0x3fff) {\n\t\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\t\tbuffer.push((value >> 7) & 0x7f);\n\t\t\treturn;\n\t\t}\n\n\t\t// Three bytes (16384-65535)\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 14) & 0xff);\n\t}\n\n\t/**\n\t * Get all signers required for this message.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.accountKeys.slice(0, this.header.numRequiredSignatures);\n\t}\n\n\t/**\n\t * Check if a public key is a required signer.\n\t */\n\tisSignerRequired(pubkey: PublicKey): boolean {\n\t\treturn this.getSigners().some((signer) => signer.equals(pubkey));\n\t}\n\n\t/**\n\t * Get the index of a signer in the signers array.\n\t * Returns -1 if not a signer.\n\t */\n\tgetSignerIndex(pubkey: PublicKey): number {\n\t\treturn this.getSigners().findIndex((signer) => signer.equals(pubkey));\n\t}\n}\n\nfunction deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// transaction/transaction.ts\n// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport { deserializeCompactU16, writeCompactU16 } from \"../serialization\";\nimport type { Signer } from \"../signer\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\n\n/**\n * A transaction with zero or more signatures.\n *\n * Transactions are immutable - signing methods return new instances.\n * This prevents accidental modification and signature tampering.\n *\n * @example\n * ```typescript\n * // Simple signing\n * const tx = builder.build();\n * const signed = tx.sign(keypair);\n *\n * // Method chaining\n * const signed = tx\n * .sign(keypair1)\n * .sign(keypair2)\n * .sign(keypair3);\n *\n * // Multi-sig convenience\n * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n * ```\n */\nexport class Transaction {\n\t/** The unsigned message */\n\tprivate readonly message: Message;\n\n\t/** Signatures (64 bytes each), aligned with message.header.numRequiredSignatures */\n\tprivate readonly signatures: readonly Uint8Array[];\n\n\t// Private constructor - use static factories\n\tprivate constructor(message: Message, signatures: readonly Uint8Array[]) {\n\t\tthis.message = message;\n\n\t\t// Deep copy signatures to prevent external mutation\n\t\tthis.signatures = signatures.map((sig) => new Uint8Array(sig));\n\n\t\t// Validate signature count matches required signers\n\t\tif (signatures.length !== message.header.numRequiredSignatures) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature count (${signatures.length}) doesn't match required signers (${message.header.numRequiredSignatures})`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create an unsigned transaction from a message.\n\t * All signature slots are initialized to zero.\n\t *\n\t * @internal - Users should use TransactionBuilder instead\n\t */\n\tstatic fromMessage(message: Message): Transaction {\n\t\tconst numSignatures = message.header.numRequiredSignatures;\n\t\tconst signatures = Array.from(\n\t\t\t{ length: numSignatures },\n\t\t\t() => new Uint8Array(SIGNATURE_LENGTH),\n\t\t);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Create transaction from message and existing signatures.\n\t * @internal\n\t */\n\tstatic fromMessageAndSignatures(\n\t\tmessage: Message,\n\t\tsignatures: readonly Uint8Array[],\n\t): Transaction {\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Deserialize a transaction from wire format.\n\t */\n\tstatic deserialize(data: Uint8Array): Transaction {\n\t\tif (data.length === 0) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t\t\"Cannot deserialize empty transaction data\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize signatures with compact-u16 length prefix\n\t\tconst [signaturesLength, newCursor] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor;\n\n\t\tconst signatures: Uint8Array[] = [];\n\t\tfor (let i = 0; i < signaturesLength; i++) {\n\t\t\tif (data.length < cursor + SIGNATURE_LENGTH) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for signature ${i}: need ${SIGNATURE_LENGTH} bytes at offset ${cursor}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst signature = data.slice(cursor, cursor + SIGNATURE_LENGTH);\n\t\t\tsignatures.push(signature);\n\t\t\tcursor += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Remaining data is the message\n\t\tif (cursor >= data.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"No message data found after signatures\",\n\t\t\t);\n\t\t}\n\n\t\tconst messageBytes = data.slice(cursor);\n\t\tconst message = Message.deserialize(messageBytes);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\tgetMessage(): Message {\n\t\treturn this.message;\n\t}\n\n\t/**\n\t * Sign the transaction with a keypair.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @param keypair - Keypair to sign with\n\t * @returns New Transaction instance with signature added\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx.sign(keypair);\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tsign(keypair: Keypair): Transaction {\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = keypair.sign(messageBytes);\n\t\treturn this.addSignatureForPubkey(keypair.publicKey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple keypairs at once.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n\t * ```\n\t */\n\tsignAll(keypairs: Keypair[]): Transaction {\n\t\tlet result: Transaction = this;\n\t\tfor (const keypair of keypairs) {\n\t\t\tresult = result.sign(keypair);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Sign the transaction with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = await tx.signWith(browserWallet);\n\t * ```\n\t */\n\tasync signWith(signer: Signer): Promise<Transaction> {\n\t\tconst pubkey = await signer.getPublicKey();\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = await signer.signMessage(messageBytes);\n\t\treturn this.addSignatureForPubkey(pubkey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple signers.\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync signAllWith(signers: Signer[]): Promise<Transaction> {\n\t\tlet result: Transaction = this;\n\t\tfor (const signer of signers) {\n\t\t\tresult = await result.signWith(signer);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Partially sign the transaction (for multi-sig transactions).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx\n\t * .partialSign(signer1)\n\t * .partialSign(signer2);\n\t * ```\n\t */\n\tpartialSign(keypair: Keypair): Transaction {\n\t\treturn this.sign(keypair);\n\t}\n\n\t/**\n\t * Partially sign with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync partialSignWith(signer: Signer): Promise<Transaction> {\n\t\treturn this.signWith(signer);\n\t}\n\n\t/**\n\t * Add a signature at a specific index.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignature(index: number, signature: Signature | Uint8Array): Transaction {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds (must be 0-${this.signatures.length - 1})`,\n\t\t\t);\n\t\t}\n\n\t\tconst sigBytes =\n\t\t\tsignature instanceof Uint8Array ? signature : signature.toBytes();\n\n\t\tif (sigBytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature must be ${SIGNATURE_LENGTH} bytes, got ${sigBytes.length}`,\n\t\t\t);\n\t\t}\n\n\t\t// Create NEW signatures array (immutable update)\n\t\tconst newSignatures = this.signatures.map((sig, i) =>\n\t\t\ti === index ? new Uint8Array(sigBytes) : new Uint8Array(sig),\n\t\t);\n\n\t\t// Return NEW Transaction instance\n\t\treturn new Transaction(this.message, newSignatures);\n\t}\n\n\t/**\n\t * Add a signature for a specific public key.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignatureForPubkey(\n\t\tpubkey: PublicKey,\n\t\tsignature: Signature | Uint8Array,\n\t): Transaction {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\n\t\treturn this.addSignature(signerIndex, signature);\n\t}\n\n\t/**\n\t * Check if transaction is fully signed (all signatures present).\n\t */\n\tisSigned(): boolean {\n\t\treturn this.signatures.every((sig) => sig.some((byte) => byte !== 0));\n\t}\n\n\t/**\n\t * Check if a specific signature slot is filled.\n\t */\n\tisSignaturePresent(index: number): boolean {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.signatures[index].some((byte) => byte !== 0);\n\t}\n\n\t/**\n\t * Get all signatures (returns copies to prevent mutation).\n\t */\n\tgetSignatures(): readonly Uint8Array[] {\n\t\treturn this.signatures.map((sig) => new Uint8Array(sig));\n\t}\n\n\t/**\n\t * Get a specific signature (returns copy).\n\t */\n\tgetSignature(index: number): Uint8Array {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds`,\n\t\t\t);\n\t\t}\n\t\treturn new Uint8Array(this.signatures[index]);\n\t}\n\n\t/**\n\t * Get a specific signature for a public key.\n\t */\n\tgetSignatureForPubkey(pubkey: PublicKey): Uint8Array {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\t\treturn this.getSignature(signerIndex);\n\t}\n\n\t\n\n\t/**\n\t * Get required signers for this transaction.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.message.getSigners();\n\t}\n\n\t/**\n\t * Get the number of required signatures.\n\t */\n\tgetRequiredSignatureCount(): number {\n\t\treturn this.message.header.numRequiredSignatures;\n\t}\n\n\t/**\n\t * Throw an error if the transaction is not fully signed.\n\t *\n\t * @throws {TransactionError} If transaction is not fully signed\n\t *\n\t * @example\n\t * ```typescript\n\t * signedTx.ensureSigned(); // Throws if not signed\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tensureSigned(): void {\n\t\tif (!this.isSigned()) {\n\t\t\tconst missingIndices = this.signatures\n\t\t\t\t.map((sig, i) => ({ sig, i }))\n\t\t\t\t.filter(({ sig }) => !sig.some((byte) => byte !== 0))\n\t\t\t\t.map(({ i }) => i);\n\n\t\t\tconst signers = this.getSigners();\n\t\t\tconst missingSigners = missingIndices.map((i) => signers[i].toString());\n\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t\t`Transaction is not fully signed. Missing signatures for: ${missingSigners.join(\", \")}`,\n\t\t\t\t{ missingIndices, missingSigners },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Serialize transaction to wire format.\n\t */\n\tserialize(): Uint8Array {\n\t\t// Calculate exact size\n\t\tconst compactU16Size = this.signatures.length < 128 ? 1 : 2;\n\t\tconst sigsSize = compactU16Size + this.signatures.length * SIGNATURE_LENGTH;\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst totalSize = sigsSize + messageBytes.length;\n\n\t\t// Pre-allocate buffer\n\t\tconst buffer = new Uint8Array(totalSize);\n\t\tlet offset = 0;\n\n\t\t// Write signature count\n\t\toffset = writeCompactU16(buffer, offset, this.signatures.length);\n\n\t\t// Write signatures\n\t\tfor (const sig of this.signatures) {\n\t\t\tbuffer.set(sig, offset);\n\t\t\toffset += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Write message\n\t\tbuffer.set(messageBytes, offset);\n\n\t\treturn buffer;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Fluent API for building transactions.\n * Returns Transaction directly (not Message).\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport { AccountMetaTable } from \"./account-meta-table\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\nimport { Transaction } from \"./transaction\";\nimport type { CompiledInstruction, Instruction } from \"./types\";\n\n/**\n * Builder for creating transactions with a fluent API.\n *\n * Provides an intuitive interface for constructing transactions.\n * Call build() to get an unsigned Transaction ready for signing.\n *\n * @example\n * ```typescript\n * // Simple transfer\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .build();\n *\n * const signedTx = tx.sign(keypair);\n * await client.transaction.sendTransaction(signedTx.serialize());\n * ```\n *\n * @example\n * ```typescript\n * // Multi-instruction transaction\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .addInstruction(memoInstruction(\"Payment for invoice #123\"))\n * .build();\n * ```\n */\nexport class TransactionBuilder {\n\tprivate payer?: PublicKey;\n private validFrom?: bigint;\n private configHashPrefix?: bigint;\n private occ = false;\n\tprivate readonly instructions: Instruction[] = [];\n\n\tprivate constructor() {}\n\n\t/**\n\t * Create a new transaction builder.\n\t */\n\tstatic create(): TransactionBuilder {\n\t\treturn new TransactionBuilder();\n\t}\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t *\n\t * The payer will be the first account and must sign the transaction.\n\t * The payer pays for transaction fees.\n\t *\n\t * @param payer - Public key of the fee payer\n\t */\n\tsetPayer(payer: PublicKey): this {\n\t\tthis.payer = payer;\n\t\treturn this;\n\t}\n\n /**\n * Set the Transaction valid from.\n *\n * This is the time the transaction is valid from, in milliseconds since Unix epoch.\n * It can be used for additional replay protection or auditing.\n *\n * @param validFrom - Transaction valid from in milliseconds since Unix epoch\n */\n setValidFrom(validFrom: bigint): this {\n this.validFrom = validFrom;\n return this;\n }\n\n /**\n * Set the config hash prefix for replay protection.\n *\n * This is the first 64 bits of the config hash, used to ensure\n * transactions cannot be replayed on different chains.\n *\n * @param configHashPrefix - config hash prefix as a u64\n */\n setConfigHashPrefix(configHashPrefix: bigint): this {\n this.configHashPrefix = configHashPrefix;\n return this;\n }\n\n /**\n * Enable OCC (optimistic concurrency control) scheduling for this transaction.\n *\n * @param occ - Whether to use OCC scheduling (default: false)\n */\n setOcc(occ: boolean): this {\n this.occ = occ;\n return this;\n }\n\n\t/**\n\t * Add an instruction to the transaction.\n\t *\n\t * @param instruction - Instruction to add\n\t */\n\taddInstruction(instruction: Instruction): this {\n\t\tthis.instructions.push(instruction);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add multiple instructions at once.\n\t *\n\t * @param instructions - Array of instructions to add\n\t */\n\taddInstructions(instructions: readonly Instruction[]): this {\n\t\tthis.instructions.push(...instructions);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the transaction (unsigned).\n\t *\n\t * Returns an unsigned Transaction that's ready to be signed.\n\t *\n\t * @returns Unsigned Transaction\n\t * @throws {TransactionError} If payer, valid_from, or instructions are missing\n\t *\n\t * @example\n\t * ```typescript\n\t * const tx = builder.build();\n\t * const signedTx = tx.sign(keypair);\n\t * ```\n\t */\n\tbuild(): Transaction {\n\t\t// Validate required fields\n\t\tif (!this.payer) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_ACCOUNT_META,\n\t\t\t\t\"Transaction must have a fee payer. Use setPayer() to set the fee payer.\",\n\t\t\t);\n\t\t}\n\n if (!this.validFrom) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a valid from. Use setValidFrom() to set the valid from.\",\n );\n }\n\n if (this.configHashPrefix === undefined) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a config hash prefix. Use setConfigHashPrefix() to set the config hash prefix.\",\n );\n }\n\n\t\tif (this.instructions.length === 0) {\n\t\t\tthrow TransactionError.noInstructions();\n\t\t}\n\n\t\t// Build account meta table\n\t\tconst accountTable = new AccountMetaTable();\n\n\t\t// Pin payer at index 0 (signer + writable)\n\t\taccountTable.setFeePayer(this.payer);\n\n\t\t// Add all accounts from instructions\n\t\tfor (const instruction of this.instructions) {\n\t\t\taccountTable.addAll(instruction.accounts);\n\n\t\t\t// Add program ID as readonly non-signer\n\t\t\taccountTable.add({\n\t\t\t\tpubkey: instruction.programId,\n\t\t\t\tisSigner: false,\n\t\t\t\tisWritable: false,\n\t\t\t});\n\t\t}\n\n\t\t// Get sorted accounts and header\n\t\tconst accountKeys = accountTable.getPublicKeys();\n\t\tconst header = accountTable.getHeader();\n\n\t\t// Compile instructions (convert pubkeys to indices)\n\t\tconst compiledInstructions = this.instructions.map((instruction) => {\n\t\t\tconst programIdIndex = accountTable.getIndex(instruction.programId);\n\t\t\tif (programIdIndex === -1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t`Program ID ${instruction.programId.toString()} not found in account table`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst accountKeyIndexes = instruction.accounts.map((meta) => {\n\t\t\t\tconst index = accountTable.getIndex(meta.pubkey);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t\t`Account ${meta.pubkey.toString()} not found in account table`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn index;\n\t\t\t});\n\n\t\t\tconst compiled: CompiledInstruction = {\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instruction.data,\n\t\t\t};\n\n\t\t\treturn compiled;\n\t\t});\n\n\t\t// Create message\n\t\tconst message = new Message(\n\t\t\theader,\n\t\t\taccountKeys,\n this.validFrom,\n this.configHashPrefix,\n this.occ,\n\t\t\tcompiledInstructions,\n\t\t);\n\n\t\t// Return unsigned transaction\n\t\treturn Transaction.fromMessage(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Compact-u16 encoding for efficient variable-length integer serialization.\n *\n * Uses 1-3 bytes depending on value size:\n * - 0-127: 1 byte (7 bits)\n * - 128-16,383: 2 bytes (14 bits)\n * - 16,384-65,535: 3 bytes (16 bits)\n *\n * This encoding saves space for small numbers while supporting the full u16 range.\n */\nimport {\n\tTransactionError,\n\tTransactionErrorCode,\n} from \"../transaction/index.js\";\n\n/**\n * Serializes a u16 value into compact encoding.\n *\n * @param buffer - Output buffer to append bytes to\n * @param value - Value to encode (0-65535)\n * @throws {TransactionError} If value is out of range\n */\nexport function serializeCompactU16(buffer: number[], value: number): void {\n\tif (value < 0 || value > 0xffff) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t`Value out of range for compact-u16: ${value}`,\n\t\t);\n\t}\n\n\t// Single byte (0-127)\n\tif (value <= 0x7f) {\n\t\tbuffer.push(value);\n\t\treturn;\n\t}\n\n\t// Two bytes (128-16383)\n\tif (value <= 0x3fff) {\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 7) & 0x7f);\n\t\treturn;\n\t}\n\n\t// Three bytes (16384-65535)\n\tbuffer.push((value & 0x7f) | 0x80);\n\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\tbuffer.push((value >> 14) & 0xff);\n}\n\n/**\n * Deserializes a compact-u16 value from bytes.\n *\n * @param data - Input byte array\n * @param currentCursor - Starting position in the array\n * @returns Tuple of [decoded value, new cursor position]\n * @throws {TransactionError} If data is insufficient or malformed\n */\nexport function deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n\n/**\n * Writes a compact-u16 value directly to a buffer (zero-copy).\n *\n * Optimized version for in-place writing without intermediate allocations.\n *\n * @param buffer - Target buffer\n * @param offset - Starting position to write at\n * @param value - Value to encode (0-127 only, uses 1-2 bytes)\n * @returns New offset after writing\n */\nexport function writeCompactU16(\n\tbuffer: Uint8Array,\n\toffset: number,\n\tvalue: number,\n): number {\n\tif (value < 0x80) {\n\t\tbuffer[offset] = value;\n\t\treturn offset + 1;\n\t}\n\tbuffer[offset] = (value & 0x7f) | 0x80;\n\tbuffer[offset + 1] = value >> 7;\n\treturn offset + 2;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport type { Signer } from \"./signer\";\n\n/**\n * Signer implementation using a local Ed25519 keypair.\n *\n * Provides synchronous signing without external dependencies.\n * Suitable for server-side applications, CLIs, and testing.\n *\n * @example\n * ```typescript\n * import { Keypair, KeypairSigner } from '@rialo/ts-cdk';\n *\n * // Generate new keypair\n * const keypair = Keypair.generate();\n * const signer = new KeypairSigner(keypair);\n *\n * // Or from mnemonic\n * const mnemonic = Mnemonic.generate();\n * const keypair = await mnemonic.toKeypair(0);\n * const signer = new KeypairSigner(keypair);\n *\n * // Sign messages\n * const publicKey = await signer.getPublicKey();\n * const signature = await signer.signMessage(message);\n * ```\n */\nexport class KeypairSigner implements Signer {\n\tconstructor(private readonly keypair: Keypair) {}\n\n\t/**\n\t * Returns the keypair's public key.\n\t */\n\tasync getPublicKey(): Promise<PublicKey> {\n\t\treturn this.keypair.publicKey;\n\t}\n\n\t/**\n\t * Signs a message using the keypair's private key.\n\t */\n\tasync signMessage(message: Uint8Array): Promise<Signature> {\n\t\treturn this.keypair.sign(message);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/@scure/base/index.ts","../node_modules/@protobufjs/float/index.js","../node_modules/@protobufjs/utf8/index.js","../src/constants.ts","../src/crypto/errors.ts","../node_modules/@noble/ed25519/index.js","../node_modules/@noble/hashes/src/utils.ts","../node_modules/@noble/hashes/src/_md.ts","../node_modules/@noble/hashes/src/_u64.ts","../node_modules/@noble/hashes/src/sha2.ts","../src/crypto/public-key.ts","../src/crypto/utils.ts","../src/crypto/signature.ts","../src/crypto/keypair.ts","../node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/utils.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/hmac.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/pbkdf2.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_md.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/_u64.ts","../node_modules/@scure/bip39/node_modules/@noble/hashes/src/sha2.ts","../node_modules/@scure/bip39/index.js","../node_modules/@scure/bip39/wordlists/english.js","../src/crypto/mnemonic.ts","../src/error.ts","../src/rex/errors.ts","../src/rex/constants.ts","../src/rex/rex-value.ts","../src/rex/hpke.ts","../src/rpc/errors.ts","../src/rpc/clients/base-client.ts","../src/generated/rpc-client.ts","../src/rpc/clients/query-client.ts","../src/utils.ts","../src/rpc/clients/transaction-client.ts","../src/rpc/clients/client.ts","../src/rpc/http-transport.ts","../src/rpc/index.ts","../src/serialization/bincode/reader.ts","../src/serialization/bincode/writer.ts","../src/serialization/bincode/schema.ts","../node_modules/@dao-xyz/borsh/src/binary.ts","../node_modules/@dao-xyz/borsh/src/bigint.ts","../node_modules/@dao-xyz/borsh/src/error.ts","../node_modules/@dao-xyz/borsh/src/types.ts","../node_modules/@dao-xyz/borsh/src/index.ts","../src/serialization/borsh.ts","../src/transaction/account-meta-table.ts","../src/transaction/errors.ts","../src/transaction/instructions/borsh-instruction.ts","../src/transaction/instructions/system.ts","../src/transaction/message.ts","../src/transaction/transaction.ts","../src/transaction/transaction-builder.ts","../src/serialization/compact-u16.ts","../src/signer/keypair-signer.ts","../src/program/constants.ts","../src/program/deployment.ts","../src/program/errors.ts","../src/program/instructions.ts"],"names":["isBytes","abytes","anumber","padding","bytes","str","alphabet","sha256","exports","sign","utf8","CryptoErrorCode","hex","C","G","P","h","cr","concatBytes","ahash","aexists","aoutput","clean","createView","rotr","createHasher","randomBytes","oidNist","_HMAC","hmac","Chi","Maj","HashMD","SHA256_IV","SHA512_IV","U32_MASK64","_32n","fromBig","split","shrSH","shrSL","rotrSH","rotrSL","rotrBH","rotrBL","add","add3L","add3H","add4L","add4H","add5L","add5H","SHA256_K","SHA256_W","SHA2_32B","_SHA256","K512","SHA512_Kh","SHA512_Kl","SHA512_W_H","SHA512_W_L","SHA2_64B","_SHA512","sha512","wordlist","normalize","RialoErrorType","HpkeErrorCode","RexValueVariant","RpcErrorCode","base58","base64","chain","readValue","writeValue","field","serialize","deserialize","i","obj","TransactionErrorCode","SystemInstruction","deserializeCompactU16","DEFAULT_MAX_RETRIES","DeploymentErrorCode","err","RiscVLoaderInstruction","calculateBackoff"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAAA,CAAA,CA+/DnB,MAAM,IAAI,CAAA;;;ACl9DR,IAAM,QAAA,GAAN,MAAM,SAAA,CAAS;AAAA,EACJ,MAAA;AAAA,EAET,YAAY,MAAA,EAAgB;AACnC,IAAA,IAAI,CAAO,gBAAA,CAAiB,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAC9C,MAAA,MAAM,WAAA,CAAY,gBAAgB,+BAA+B,CAAA;AAAA,IAClE;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,QAAA,CAAS,QAAA,GAA6B,GAAA,EAAe;AAC3D,IAAA,MAAM,MAAA,GAAe,gBAAA,CAAiB,QAAA,EAAU,QAAQ,CAAA;AACxD,IAAA,OAAO,IAAI,UAAS,MAAM,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WAAW,MAAA,EAA0B;AAC3C,IAAA,OAAO,IAAI,UAAS,MAAM,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAO,QAAQ,MAAA,EAAyB;AACvC,IAAA,OAAa,gBAAA,CAAiB,QAAQ,QAAQ,CAAA;AAAA,EAC/C;AAAA,EAEQ,qBAAqB,IAAA,EAA6B;AACzD,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY,CAAE,OAAO,cAAc,CAAA;AACvD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAEzC,IAAA,OAAO;AAAA,MACN,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MAC9B,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,EAAA,EAAI,EAAE;AAAA,KAC/B;AAAA,EACD;AAAA,EAEQ,cAAA,CAAe,WAAsB,KAAA,EAA0B;AACtE,IAAA,MAAM,gBAAgB,KAAA,GAAQ,UAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,IAAI,UAAA,CAAW,CAAA,GAAI,KAAK,CAAC,CAAA;AACtC,IAAA,IAAA,CAAK,CAAC,CAAA,GAAI,CAAA;AACV,IAAA,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,UAAA,EAAY,CAAC,CAAA;AAEhC,IAAA,MAAM,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AACrC,IAAA,IAAA,CAAK,SAAA,CAAU,EAAA,EAAI,aAAA,EAAe,KAAK,CAAA;AAEvC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAQ,SAAA,CAAU,WAAW,IAAI,CAAA;AAErD,IAAA,OAAO;AAAA,MACN,UAAA,EAAY,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,MAC9B,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,EAAA,EAAI,EAAE;AAAA,KAC/B;AAAA,EACD;AAAA,EAEQ,UAAA,CAAW,MAAc,IAAA,EAA6B;AAC7D,IAAA,IAAI,CAAC,IAAA,CAAK,UAAA,CAAW,IAAI,CAAA,EAAG;AAC3B,MAAA,MAAM,IAAI,WAAA;AAAA,QAAA,uBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AAEA,IAAA,IAAI,IAAA,GAAO,IAAA,CAAK,oBAAA,CAAqB,IAAI,CAAA;AACzC,IAAA,MAAM,WAAW,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,CAAE,MAAM,GAAG,CAAA;AAExC,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC/B,MAAA,IAAI,CAAC,OAAA,EAAS;AAEd,MAAA,MAAM,QAAQ,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAC/B,OAAO,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,EAAE,IACxC,MAAA,CAAO,QAAA,CAAS,SAAS,EAAE,CAAA;AAE9B,MAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,IAAK,QAAQ,CAAA,EAAG;AACrC,QAAA,MAAM,IAAI,WAAA;AAAA,UAAA,uBAAA;AAAA,UAET,yBAAyB,OAAO,CAAA;AAAA,SACjC;AAAA,MACD;AAEA,MAAA,IAAA,GAAO,IAAA,CAAK,cAAA,CAAe,IAAA,EAAM,KAAK,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,SAAA,CACL,YAAA,GAAe,CAAA,EACf,OAAA,EAImB;AACnB,IAAA,IAAI,eAAe,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA,EAAG;AACxD,MAAA,MAAM,IAAI,WAAA;AAAA,QAAA,uBAAA;AAAA,QAET,8CAAA;AAAA,QACA,EAAE,YAAA;AAAa,OAChB;AAAA,IACD;AAEA,IAAA,MAAM,EAAE,UAAA,GAAa,EAAA,EAAI,qBAAqB,oBAAA,EAAqB,GAClE,WAAW,EAAC;AAEb,IAAA,IAAI;AACH,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,aAAA,CAAc,kBAAA,EAAoB,YAAY,CAAA;AACpE,MAAA,MAAM,IAAA,GAAO,MAAY,cAAA,CAAe,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC/D,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,IAAI,CAAA;AAElD,MAAA,OAAO,OAAA,CAAQ,aAAA,CAAc,WAAA,CAAY,UAAU,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACf,MAAA,IAAI,iBAAiB,WAAA,EAAa;AACjC,QAAA,MAAM,KAAA;AAAA,MACP;AACA,MAAA,MAAM,WAAA,CAAY,mBAAA;AAAA,QACjB,kBAAA;AAAA,QACA,KAAA,YAAiB,QAAQ,KAAA,GAAQ;AAAA,OAClC;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAA,CAAkB,QAAA,EAAkB,UAAA,GAAa,EAAA,EAAsB;AAC5E,IAAA,IAAI;AACH,MAAA,MAAM,IAAA,GAAO,MAAY,cAAA,CAAe,IAAA,CAAK,QAAQ,UAAU,CAAA;AAC/D,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,UAAA,CAAW,QAAA,EAAU,IAAI,CAAA;AAClD,MAAA,OAAO,OAAA,CAAQ,aAAA,CAAc,WAAA,CAAY,UAAU,CAAA;AAAA,IACpD,SAAS,KAAA,EAAO;AACf,MAAA,IAAI,iBAAiB,WAAA,EAAa;AACjC,QAAA,MAAM,KAAA;AAAA,MACP;AACA,MAAA,MAAM,WAAA,CAAY,mBAAA;AAAA,QACjB,QAAA;AAAA,QACA,KAAA,YAAiB,QAAQ,KAAA,GAAQ;AAAA,OAClC;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,cAAA,CACL,KAAA,EACA,UAAA,GAAa,GACb,OAAA,EAIqB;AACrB,IAAA,IAAI,SAAS,CAAA,IAAK,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,EAAG;AAC3C,MAAA,MAAM,IAAI,WAAA;AAAA,QAAA,uBAAA;AAAA,QAET,kCAAA;AAAA,QACA,EAAE,KAAA;AAAM,OACT;AAAA,IACD;AAEA,IAAA,MAAM,WAAsB,EAAC;AAC7B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC/B,MAAA,MAAM,UAAU,MAAM,IAAA,CAAK,SAAA,CAAU,UAAA,GAAa,GAAG,OAAO,CAAA;AAC5D,MAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAAA,IACtB;AAEA,IAAA,OAAO,QAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,MAAA,CAAO,UAAA,GAAa,EAAA,EAAyB;AAClD,IAAA,OAAa,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,UAAU,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAmB;AAClB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAqB;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,YAAA,GAAwB;AACvB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,QAAA,EAAS,CAAE,MAAA;AAC9B,IAAA,OAAO,KAAA,KAAU,KAAK,EAAA,GAAK,EAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAgC;AAC/B,IAAA,OAAO,IAAA,CAAK,YAAA,EAAa,KAAM,EAAA,GAAK,GAAA,GAAM,GAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAA,EAA0B;AAChC,IAAA,IAAI,KAAK,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,MAAA,CAAO,QAAQ,OAAO,KAAA;AACvD,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAA,IAAU,IAAA,CAAK,OAAO,UAAA,CAAW,CAAC,IAAI,KAAA,CAAM,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,MAAA,KAAW,CAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAiB;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACb;AAAA,EAEQ,aAAA,CACP,oBACA,YAAA,EACS;AACT,IAAA,MAAM,aAAA,GAAgB,kBAAA,CAAmB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAE1D,IAAA,IAAI,CAAC,aAAA,CAAc,UAAA,CAAW,IAAI,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,WAAA;AAAA,QAAA,uBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AAEA,IAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,YAAY,CAAA,IAAA,CAAA;AAAA,EACxC;AACD;;;AC1SO,IAAK,cAAA,qBAAAC,eAAAA,KAAL;AAEN,EAAAA,gBAAA,IAAA,CAAA,GAAK,IAAA;AAEL,EAAAA,gBAAA,KAAA,CAAA,GAAM,KAAA;AAEN,EAAAA,gBAAA,cAAA,CAAA,GAAe,cAAA;AAEf,EAAAA,gBAAA,0BAAA,CAAA,GAA2B,0BAAA;AAE3B,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AAET,EAAAA,gBAAA,QAAA,CAAA,GAAS,QAAA;AAET,EAAAA,gBAAA,aAAA,CAAA,GAAc,aAAA;AAEd,EAAAA,gBAAA,SAAA,CAAA,GAAU,SAAA;AAEV,EAAAA,gBAAA,UAAA,CAAA,GAAW,UAAA;AAEX,EAAAA,gBAAA,YAAA,CAAA,GAAa,YAAA;AAEb,EAAAA,gBAAA,MAAA,CAAA,GAAO,MAAA;AAEP,EAAAA,gBAAA,OAAA,CAAA,GAAQ,OAAA;AAER,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AAEhB,EAAAA,gBAAA,eAAA,CAAA,GAAgB,eAAA;AA5BL,EAAA,OAAAA,eAAAA;AAAA,CAAA,EAAA,cAAA,IAAA,EAAA;AAuDL,IAAM,UAAA,GAAN,MAAM,WAAA,SAAmB,KAAA,CAAM;AAAA,EACrB,IAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EAET,WAAA,CACN,IAAA,EACA,OAAA,EACA,KAAA,EACA,OAAA,EACC;AACD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAGf,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC5B,MAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,WAAU,CAAA;AAAA,IACzC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,EAAA,CAAG,OAAA,EAAiB,KAAA,EAA2B;AAC5D,IAAA,OAAO,IAAI,WAAA,CAAW,IAAA,WAAmB,CAAA,WAAA,EAAc,OAAO,IAAI,KAAK,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,IAAI,OAAA,EAAsC;AACvD,IAAA,IAAI,UAAkB,OAAA,CAAQ,OAAA;AAC9B,IAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AACjC,MAAA,OAAA,GAAU,CAAA,EAAG,QAAQ,OAAO,CAAA,OAAA,EAAU,QAAQ,MAAM,CAAA,MAAA,EAAS,QAAQ,IAAI,CAAA,CAAA,CAAA;AAAA,IAC1E,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,CAAA,EAAG;AAC9B,MAAA,OAAA,GAAU,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,OAAA,EAAU,QAAQ,IAAI,CAAA,CAAA,CAAA;AAAA,IACnD;AACA,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,KAAA;AAAA,MACA,cAAc,OAAO,CAAA,CAAA;AAAA,MACrB,MAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,YAAY,OAAA,EAA6B;AACtD,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,cAAA;AAAA,MACA,iBAAiB,OAAO,CAAA;AAAA,KACzB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,iBAAiB,OAAA,EAA6B;AAC3D,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,0BAAA;AAAA,MACA,6BAA6B,OAAO,CAAA;AAAA,KACrC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OAAO,OAAA,EAA6B;AACjD,IAAA,OAAO,IAAI,WAAA,CAAW,QAAA,eAAuB,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAE,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OAAO,OAAA,EAA6B;AACjD,IAAA,OAAO,IAAI,WAAA,CAAW,QAAA,eAAuB,CAAA,cAAA,EAAiB,OAAO,CAAA,CAAE,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,YAAY,OAAA,EAA6B;AACtD,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,aAAA;AAAA,MACA,sBAAsB,OAAO,CAAA;AAAA,KAC9B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,OAAA,CAAQ,OAAA,EAAiB,KAAA,EAA2B;AACjE,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,SAAA;AAAA,MACA,kBAAkB,OAAO,CAAA,CAAA;AAAA,MACzB;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAAS,OAAA,EAA6B;AACnD,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,UAAA;AAAA,MACA,mBAAmB,OAAO,CAAA;AAAA,KAC3B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,WAAW,OAAA,EAA6B;AACrD,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,YAAA;AAAA,MACA,qBAAqB,OAAO,CAAA;AAAA,KAC7B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,IAAA,CAAK,OAAA,EAAiB,KAAA,EAA2B;AAC9D,IAAA,OAAO,IAAI,WAAA,CAAW,MAAA,aAAqB,CAAA,YAAA,EAAe,OAAO,IAAI,KAAK,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,MAAM,OAAA,EAA6B;AAChD,IAAA,OAAO,IAAI,WAAA,CAAW,OAAA,cAAsB,CAAA,aAAA,EAAgB,OAAO,CAAA,CAAE,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,aAAa,OAAA,EAA6B;AACvD,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,eAAA;AAAA,MACA,kBAAkB,OAAO,CAAA;AAAA,KAC1B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,cAAc,OAAA,EAA6B;AACxD,IAAA,OAAO,IAAI,WAAA;AAAA,MACV,eAAA;AAAA,MACA,wBAAwB,OAAO,CAAA;AAAA,KAChC;AAAA,EACD;AACD;;;ACtOO,IAAK,aAAA,qBAAAC,cAAAA,KAAL;AAEN,EAAAA,eAAA,oBAAA,CAAA,GAAqB,oBAAA;AAErB,EAAAA,eAAA,sBAAA,CAAA,GAAuB,sBAAA;AAEvB,EAAAA,eAAA,mBAAA,CAAA,GAAoB,mBAAA;AAEpB,EAAAA,eAAA,0BAAA,CAAA,GAA2B,0BAAA;AAE3B,EAAAA,eAAA,mBAAA,CAAA,GAAoB,mBAAA;AAVT,EAAA,OAAAA,cAAAA;AAAA,CAAA,EAAA,aAAA,IAAA,EAAA;AAmBL,IAAM,SAAA,GAAN,MAAM,UAAA,SAAkB,KAAA,CAAM;AAAA,EAC3B,IAAA;AAAA,EACA,KAAA;AAAA,EAET,WAAA,CAAY,IAAA,EAAqB,OAAA,EAAiB,KAAA,EAAe;AAChE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,WAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAGb,IAAA,IAAI,MAAM,iBAAA,EAAmB;AAC5B,MAAA,KAAA,CAAM,iBAAA,CAAkB,MAAM,UAAS,CAAA;AAAA,IACxC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,gBAAA,CACN,QAAA,EACA,MAAA,EACA,OAAA,EACY;AACZ,IAAA,OAAO,IAAI,UAAA;AAAA,MACV,oBAAA;AAAA,MACA,CAAA,QAAA,EAAW,OAAO,CAAA,kBAAA,EAAqB,QAAQ,eAAe,MAAM,CAAA;AAAA,KACrE;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,kBAAA,CAAmB,SAAA,EAAmB,MAAA,EAA2B;AACvE,IAAA,OAAO,IAAI,UAAA;AAAA,MACV,sBAAA;AAAA,MACA,CAAA,8BAAA,EAAiC,SAAS,CAAA,qBAAA,EAAwB,MAAM,CAAA;AAAA,KACzE;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,iBAAiB,KAAA,EAAyB;AAChD,IAAA,OAAO,IAAI,UAAA;AAAA,MACV,mBAAA;AAAA,MACA,CAAA,wBAAA,EAA2B,MAAM,OAAO,CAAA,CAAA;AAAA,MACxC;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,uBAAuB,KAAA,EAAyB;AACtD,IAAA,OAAO,IAAI,UAAA;AAAA,MACV,0BAAA;AAAA,MACA,CAAA,8BAAA,EAAiC,MAAM,OAAO,CAAA,CAAA;AAAA,MAC9C;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,gBAAgB,OAAA,EAA4B;AAClD,IAAA,OAAO,IAAI,UAAA;AAAA,MACV,mBAAA;AAAA,MACA,6BAA6B,OAAO,CAAA;AAAA,KACrC;AAAA,EACD;AACD;;;ACrFO,IAAM,eAAA,GAAkB,IAAI,WAAA,EAAY,CAAE,OAAO,eAAe;AAWhE,IAAM,wBAAA,GAA2B,IAAI,WAAA,EAAY,CAAE,MAAA;AAAA,EACzD;AACD;AAOO,IAAM,wBAAA,GAA2B;AAOjC,IAAM,yBAAA,GAA4B;AAOlC,IAAM,eAAA,GAAkB;AAKxB,IAAM,4BAAA,GAA+B;AAWrC,IAAM,uBAAuB,eAAA,GAAkB;;;AClE/C,IAAK,eAAA,qBAAAC,gBAAAA,KAAL;AAEN,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AAEA,EAAAA,gBAAAA,CAAAA,gBAAAA,CAAA,eAAY,CAAA,CAAA,GAAZ,WAAA;AAJW,EAAA,OAAAA,gBAAAA;AAAA,CAAA,EAAA,eAAA,IAAA,EAAA;AAwCL,IAAM,QAAA,GAAN,MAAM,SAAA,CAAS;AAAA,EACJ,OAAA;AAAA,EACA,IAAA;AAAA,EAET,WAAA,CAAY,SAA0B,IAAA,EAAkB;AAC/D,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAM,IAAA,EAA4B;AACxC,IAAA,OAAO,IAAI,SAAA,CAAS,CAAA,cAAuB,IAAI,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,CAAA,EAAqB;AACvC,IAAA,OAAO,IAAI,SAAA;AAAA,MACV,CAAA;AAAA,MACA,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,CAAC;AAAA,KAC3B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,UAAU,UAAA,EAAkC;AAClD,IAAA,OAAO,IAAI,SAAA,CAAS,CAAA,kBAA2B,UAAU,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAmB;AAClB,IAAA,OAAO,KAAK,OAAA,KAAY,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,WAAA,GAAuB;AACtB,IAAA,OAAO,KAAK,OAAA,KAAY,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAA8B;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAA,GAAsB;AACrB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAA,GAA0B;AACzB,IAAA,IAAI,CAAC,IAAA,CAAK,OAAA,EAAQ,EAAG;AACpB,MAAA,OAAO,IAAA;AAAA,IACR;AACA,IAAA,IAAI;AACH,MAAA,OAAO,IAAI,WAAA,CAAY,OAAA,EAAS,EAAE,KAAA,EAAO,MAAM,CAAA,CAAE,MAAA,CAAO,IAAA,CAAK,IAAI,CAAA;AAAA,IAClE,CAAA,CAAA,MAAQ;AACP,MAAA,OAAO,IAAA;AAAA,IACR;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAA,GAAsB;AAErB,IAAA,MAAM,SAAS,IAAI,UAAA,CAAW,IAAI,CAAA,GAAI,IAAA,CAAK,KAAK,MAAM,CAAA;AAGtD,IAAA,MAAA,CAAO,CAAC,IAAI,IAAA,CAAK,OAAA;AAGjB,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA;AAC3C,IAAA,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,QAAQ,IAAI,CAAA;AAG5C,IAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,IAAA,EAAM,CAAC,CAAA;AAEvB,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,UAAU,IAAA,EAA4B;AAC5C,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,SAAA,CAAU,sBAAA;AAAA,QACf,IAAI,KAAA,CAAM,CAAA,iDAAA,EAAoD,IAAA,CAAK,MAAM,CAAA,CAAE;AAAA,OAC5E;AAAA,IACD;AAEA,IAAA,MAAM,OAAA,GAAU,KAAK,CAAC,CAAA;AACtB,IAAA,IAAI,OAAA,KAAY,CAAA,gBAAyB,OAAA,KAAY,CAAA,kBAA2B;AAC/E,MAAA,MAAM,SAAA,CAAU,gBAAgB,OAAO,CAAA;AAAA,IACxC;AAEA,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,CAAS,IAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AAC3E,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,CAAA,EAAG,IAAI,CAAA;AAEzC,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,GAAI,MAAA,EAAQ;AAC7B,MAAA,MAAM,SAAA,CAAU,sBAAA;AAAA,QACf,IAAI,MAAM,CAAA,2BAAA,EAA8B,CAAA,GAAI,MAAM,CAAA,YAAA,EAAe,IAAA,CAAK,MAAM,CAAA,CAAE;AAAA,OAC/E;AAAA,IACD;AAEA,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,IAAI,MAAM,CAAA;AAExC,IAAA,OAAO,IAAI,SAAA,CAAS,OAAA,EAA4B,OAAO,CAAA;AAAA,EACxD;AACD;ACxKA,IAAM,SAAA,GAAY,IAAI,WAAA,CAAY;AAAA,EACjC,GAAA,EAAK,IAAI,qBAAA,EAAsB;AAAA,EAC/B,GAAA,EAAK,IAAI,UAAA,EAAW;AAAA,EACpB,IAAA,EAAM,IAAI,gBAAA;AACX,CAAC,CAAA;AAaD,SAAS,SAAS,YAAA,EAAsC;AACvD,EAAA,MAAM,MAAM,IAAI,UAAA,CAAW,eAAA,CAAgB,MAAA,GAAS,aAAa,MAAM,CAAA;AACvE,EAAA,GAAA,CAAI,GAAA,CAAI,iBAAiB,CAAC,CAAA;AAC1B,EAAA,GAAA,CAAI,GAAA,CAAI,YAAA,EAAc,eAAA,CAAgB,MAAM,CAAA;AAC5C,EAAA,OAAO,GAAA;AACR;AA4BA,eAAsB,WAAA,CACrB,SAAA,EACA,IAAA,EACA,YAAA,EACsB;AAEtB,EAAA,IAAI,SAAA,CAAU,WAAW,wBAAA,EAA0B;AAClD,IAAA,MAAM,SAAA,CAAU,gBAAA;AAAA,MACf,wBAAA;AAAA,MACA,SAAA,CAAU,MAAA;AAAA,MACV;AAAA,KACD;AAAA,EACD;AAGA,EAAA,IAAI,YAAA,CAAa,WAAW,yBAAA,EAA2B;AACtD,IAAA,MAAM,SAAA,CAAU,gBAAA;AAAA,MACf,yBAAA;AAAA,MACA,YAAA,CAAa,MAAA;AAAA,MACb;AAAA,KACD;AAAA,EACD;AAEA,EAAA,IAAI;AAEH,IAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,GAAA,CAAI,SAAA;AAAA,MACxC,KAAA;AAAA,MACA,UAAU,MAAA,CAAO,KAAA;AAAA,QAChB,SAAA,CAAU,UAAA;AAAA,QACV,SAAA,CAAU,aAAa,SAAA,CAAU;AAAA;AAClC,KACD;AAGA,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,mBAAA,CAAoB;AAAA,MAClD,kBAAA,EAAoB,YAAA;AAAA,MACpB,IAAA,EAAM,yBAAyB,MAAA,CAAO,KAAA;AAAA,QACrC,wBAAA,CAAyB,UAAA;AAAA,QACzB,wBAAA,CAAyB,aACxB,wBAAA,CAAyB;AAAA;AAC3B,KACA,CAAA;AAGD,IAAA,MAAM,GAAA,GAAM,SAAS,YAAY,CAAA;AAGjC,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,IAAA;AAAA,MAC/B,KAAK,MAAA,CAAO,KAAA;AAAA,QACX,IAAA,CAAK,UAAA;AAAA,QACL,IAAA,CAAK,aAAa,IAAA,CAAK;AAAA,OACxB;AAAA,MACA,IAAI,MAAA,CAAO,KAAA;AAAA,QACV,GAAA,CAAI,UAAA;AAAA,QACJ,GAAA,CAAI,aAAa,GAAA,CAAI;AAAA;AACtB,KACD;AAIA,IAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA;AACrC,IAAA,MAAM,SAAS,IAAI,UAAA,CAAW,GAAA,CAAI,MAAA,GAAS,WAAW,UAAU,CAAA;AAChE,IAAA,MAAA,CAAO,GAAA,CAAI,KAAK,CAAC,CAAA;AACjB,IAAA,MAAA,CAAO,IAAI,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG,IAAI,MAAM,CAAA;AAEjD,IAAA,OAAO,MAAA;AAAA,EACR,SAAS,KAAA,EAAO;AACf,IAAA,MAAM,SAAA,CAAU,gBAAA;AAAA,MACf,iBAAiB,KAAA,GAAQ,KAAA,GAAQ,IAAI,KAAA,CAAM,MAAA,CAAO,KAAK,CAAC;AAAA,KACzD;AAAA,EACD;AACD;AAwCA,eAAsB,aAAA,CACrB,SAAA,EACA,IAAA,EACA,YAAA,EACoB;AACpB,EAAA,MAAM,UAAA,GAAa,MAAM,WAAA,CAAY,SAAA,EAAW,MAAM,YAAY,CAAA;AAClE,EAAA,OAAO,QAAA,CAAS,UAAU,UAAU,CAAA;AACrC;AAmBO,SAAS,oBAAoB,eAAA,EAAiC;AACpE,EAAA,OAAO,oBAAA,GAAuB,eAAA;AAC/B;AAiBO,SAAS,wBAAwB,UAAA,EAAiC;AACxE,EAAA,OAAO,WAAW,MAAA,IAAU,oBAAA;AAC7B;;;ACnOO,IAAK,YAAA,qBAAAC,aAAAA,KAAL;AAEN,EAAAA,cAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,cAAA,eAAA,CAAA,GAAgB,eAAA;AAChB,EAAAA,cAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,cAAA,iBAAA,CAAA,GAAkB,iBAAA;AAGlB,EAAAA,cAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,cAAA,aAAA,CAAA,GAAc,aAAA;AACd,EAAAA,cAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,cAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,cAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,cAAA,gBAAA,CAAA,GAAiB,gBAAA;AAGjB,EAAAA,cAAA,sBAAA,CAAA,GAAuB,sBAAA;AACvB,EAAAA,cAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,cAAA,kCAAA,CAAA,GAAmC,kCAAA;AAGnC,EAAAA,cAAA,mBAAA,CAAA,GAAoB,mBAAA;AAGpB,EAAAA,cAAA,qBAAA,CAAA,GAAsB,qBAAA;AAGtB,EAAAA,cAAA,gBAAA,CAAA,GAAiB,gBAAA;AA3BN,EAAA,OAAAA,aAAAA;AAAA,CAAA,EAAA,YAAA,IAAA,EAAA;AAkDL,IAAM,QAAA,GAAN,MAAM,SAAA,SAAiB,KAAA,CAAM;AAAA,EACnB,IAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EAEhB,YACC,IAAA,EACA,OAAA,EACA,UAA2B,EAAC,EAC5B,YAAY,KAAA,EACX;AACD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EAClB;AAAA,EAEA,OAAO,cAAA,CAAe,SAAA,EAAmB,OAAA,EAAoC;AAC5E,IAAA,OAAO,IAAI,SAAA;AAAA,MACV,iBAAA;AAAA,MACA,+BAA+B,SAAS,CAAA,wCAAA,CAAA;AAAA,MACxC,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,SAAA,EAAU;AAAA,MACjC;AAAA;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,YAAA,CAAa,OAAA,EAAiB,OAAA,EAAoC;AACxE,IAAA,OAAO,IAAI,SAAA;AAAA,MACV,eAAA;AAAA,MACA,kBAAkB,OAAO,CAAA,8CAAA,CAAA;AAAA,MACzB,OAAA;AAAA,MACA;AAAA;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,gBAAgB,OAAA,EAAoC;AAC1D,IAAA,OAAO,IAAI,SAAA;AAAA,MACV,kBAAA;AAAA,MACA,6EAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,gBAAgB,MAAA,EAA0B;AAChD,IAAA,OAAO,IAAI,SAAA;AAAA,MACV,mBAAA;AAAA,MACA,WAAW,MAAM,CAAA,0DAAA,CAAA;AAAA,MACjB,EAAE,MAAA,EAAO;AAAA,MACT;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,kBAAkB,OAAA,EAAoC;AAC5D,IAAA,OAAO,IAAI,SAAA;AAAA,MACV,qBAAA;AAAA,MACA,0GAAA;AAAA,MACA,OAAA;AAAA,MACA;AAAA;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,WAAA,CACN,OAAA,EACA,OAAA,EACA,OAAA,EACW;AAEX,IAAA,MAAM,OAAA,GAAwC;AAAA,MAC7C,CAAC,MAAM,GAAG,aAAA;AAAA,MACV,CAAC,MAAM,GAAG,iBAAA;AAAA,MACV,CAAC,MAAM,GAAG,kBAAA;AAAA,MACV,CAAC,MAAM,GAAG,gBAAA;AAAA,MACV,CAAC,MAAM,GAAG,gBAAA;AAAA,MACV,CAAC,GAAG,GAAG,qBAAA;AAAA,KACR;AAEA,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAO,CAAA,IAAK,gBAAA;AACjC,IAAA,MAAM,SAAA,GAAY,OAAA,KAAY,GAAA,IAAO,OAAA,KAAY,MAAA;AAEjD,IAAA,OAAO,IAAI,UAAS,IAAA,EAAM,OAAA,EAAS,EAAE,GAAG,OAAA,EAAS,OAAA,EAAQ,EAAG,SAAS,CAAA;AAAA,EACtE;AAAA,EAEA,MAAA,GAKE;AACD,IAAA,OAAO;AAAA,MACN,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK;AAAA,KACjB;AAAA,EACD;AACD;;;ACtHO,IAAM,gBAAN,MAAoB;AAAA,EACN,SAAA;AAAA,EACX,SAAA,GAAY,CAAA;AAAA,EAEpB,YAAY,SAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,IAAA,CAAQ,MAAA,EAAgB,MAAA,GAAoB,EAAC,EAAe;AAChE,IAAA,MAAM,SAAA,GAAY,KAAK,aAAA,EAAc;AAErC,IAAA,MAAM,OAAA,GAA0B;AAAA,MAC9B,OAAA,EAAS,KAAA;AAAA,MACT,EAAA,EAAI,SAAA;AAAA,MACJ,MAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA;AAC1C,IAAA,MAAM,cAAA,GAAiB,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAU;AAGnD,IAAA,MAAM,OAAO,MAAM,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,aAAa,cAAc,CAAA;AAGrE,IAAA,IAAI,CAAC,IAAA,CAAK,sBAAA,CAAuB,IAAI,CAAA,EAAG;AACtC,MAAA,MAAM,SAAS,eAAA,CAAgB;AAAA,QAC7B,GAAG,cAAA;AAAA,QACH,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA;AAGjB,IAAA,IAAI,SAAS,KAAA,EAAO;AAClB,MAAA,MAAM,SAAS,WAAA,CAAY,QAAA,CAAS,MAAM,IAAA,EAAM,QAAA,CAAS,MAAM,OAAA,EAAS;AAAA,QACtE,GAAG,cAAA;AAAA,QACH,OAAA,EAAS,SAAS,KAAA,CAAM;AAAA,OACzB,CAAA;AAAA,IACH;AAGA,IAAA,IAAI,EAAE,YAAY,QAAA,CAAA,EAAW;AAC3B,MAAA,MAAM,SAAS,eAAA,CAAgB;AAAA,QAC7B,GAAG,cAAA;AAAA,QACH;AAAA,OACD,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,QAAA,CAAS,MAAA;AAAA,EAClB;AAAA;AAAA;AAAA;AAAA,EAKQ,uBAAuB,IAAA,EAAwB;AACrD,IAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC7C,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,MAAM,QAAA,GAAW,IAAA;AAEjB,IAAA,OACE,QAAA,CAAS,YAAY,KAAA,IACrB,OAAO,SAAS,EAAA,KAAO,QAAA,KACtB,QAAA,IAAY,QAAA,IAAY,OAAA,IAAW,QAAA,CAAA;AAAA,EAExC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAA,GAAwB;AAC9B,IAAA,IAAA,CAAK,SAAA,GAAA,CAAa,IAAA,CAAK,SAAA,GAAY,CAAA,IAAK,MAAA,CAAO,gBAAA;AAC/C,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAiB;AACf,IAAA,OAAO,IAAA,CAAK,UAAU,MAAA,EAAO;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,YAAA,CAAa,MAAA,EAAgB,MAAA,EAAiC;AAClE,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAc,QAAQ,YAAY,CAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,EAC9B;AACF;;;ACjIO,IAAe,YAAf,MAAyB;AAksBhC,CAAA;;;ACtsBA,SAAA,EAAA;AAoDO,IAAM,cAAA,GAAN,cAA6B,aAAA,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAajD,MAAM,WAAW,MAAA,EAAoC;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAwB,YAAA,EAAc;AAAA,MAC/D,EAAE,OAAA,EAAS,MAAA,CAAO,QAAA,EAAS;AAAE,KAC7B,CAAA;AACD,IAAA,OAAO,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,eAAe,MAAA,EAAgD;AACpE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CASvB,gBAAA,EAAkB,CAAC,EAAE,OAAA,EAAS,MAAA,CAAO,QAAA,EAAS,EAAG,CAAC,CAAA;AAErD,IAAA,IAAI,CAAC,OAAO,KAAA,EAAO;AAClB,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,OAAO;AAAA,MACN,MAAA,EAAQ,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AAAA,MAClC,KAAA,EAAO,SAAA,CAAU,UAAA,CAAW,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,MAC9C,IAAA,EAAM,OAAO,KAAA,CAAM,IAAA;AAAA,MACnB,UAAA,EAAY,OAAO,KAAA,CAAM,UAAA;AAAA,MACzB,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA;AAAA,MACxC,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAA,CAAM,SAAS,CAAC;AAAA,KACtC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,cAAA,GAAkC;AACvC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,IAAA,CAAa,gBAAA,EAAkB,EAAE,CAAA;AAC3D,IAAA,OAAO,OAAO,MAAM,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,uBAAA,CACL,OAAA,EACA,MAAA,EAC2B;AAC3B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAWvB,yBAAA,EAA2B;AAAA,MAC7B,EAAE,SAAS,OAAA,CAAQ,QAAA,IAAY,MAAA,EAAQ,MAAA,IAAU,EAAC;AAAE,KACpD,CAAA;AACD,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,SAAA,MAAe;AAAA,MACvC,WAAW,SAAA,CAAU,SAAA;AAAA,MACrB,WAAA,EAAa,MAAA,CAAO,SAAA,CAAU,WAAW,CAAA;AAAA,MACzC,SAAA,EAAW,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA;AAAA,MACrC,KAAK,SAAA,CAAU;AAAA,KAChB,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,mBAAA,GAAuC;AAC5C,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,IAAA,CAAa,qBAAA,EAAuB,EAAE,CAAA;AAChE,IAAA,OAAO,OAAO,MAAM,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAM,qBACL,UAAA,EACsC;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAMvB,wBAAwB,CAAC,EAAE,UAAA,EAAY,CAAC,CAAA;AAE3C,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,MAAA,KAAW;AACnC,MAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,QAAA,OAAO,IAAA;AAAA,MACR;AAEA,MAAA,OAAO;AAAA,QACN,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,IAAI,CAAA;AAAA,QACxB,UAAU,MAAA,CAAO,QAAA;AAAA,QACjB,KAAK,MAAA,CAAO;AAAA,OACb;AAAA,IACD,CAAC,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,YAAA,GAAmC;AACxC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,IAAA,CAOvB,cAAA,EAAgB,EAAE,CAAA;AAErB,IAAA,OAAO;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA;AAAA,MAC1B,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AAAA,MAClC,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAAA,MACxC,YAAA,EAAc,MAAA,CAAO,MAAA,CAAO,YAAY,CAAA;AAAA,MACxC,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,WAAW,CAAA;AAAA,MACtC,kBAAkB,MAAA,CAAO,gBAAA,GACtB,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,GAC9B;AAAA,KACJ;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,SAAA,GAAoC;AACzC,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,IAAA,CAAa,WAAA,EAAa,EAAE,CAAA;AACtD,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,kCACL,eAAA,EACkB;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA;AAAA,MACzB,mCAAA;AAAA,MACA,CAAC,EAAE,WAAA,EAAa,eAAA,EAAiB;AAAA,KAClC;AACA,IAAA,OAAO,OAAO,MAAM,CAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,iBAAiB,OAAA,EAAyC;AAC/D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAEvB,oBAAoB,CAAC,EAAE,OAAA,EAAS,CAAC,CAAA;AACpC,IAAA,OAAO,OAAO,KAAA,KAAU,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,KAAK,CAAA,GAAI,IAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,oBACL,OAAA,EACqC;AACrC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CASvB,qBAAA,EAAuB;AAAA,MACzB,EAAE,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,EAAU,CAAA;AAAE,KAC9C,CAAA;AAED,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,OAAA,KAAY;AACpC,MAAA,IAAI,YAAY,IAAA,EAAM;AACrB,QAAA,OAAO,IAAA;AAAA,MACR;AACA,MAAA,OAAO;AAAA,QACN,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAAA,QAC7B,KAAA,EAAO,SAAA,CAAU,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA;AAAA,QACzC,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,YAAY,OAAA,CAAQ,UAAA;AAAA,QACpB,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,QACnC,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,IAAS,CAAC;AAAA,OACjC;AAAA,IACD,CAAC,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,mBACL,KAAA,EACA,MAAA,GAA6B,EAAE,IAAA,EAAM,iBAAA,IACrC,MAAA,EACwD;AACxD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAcvB,oBAAA,EAAsB;AAAA,MACxB;AAAA,QACC,KAAA,EAAO,MAAM,QAAA,EAAS;AAAA,QACtB,MAAA;AAAA,QACA,QAAQ,MAAA,GACL;AAAA,UACA,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,OAAO,MAAA,CAAO;AAAA,SACf,GACC;AAAA;AACJ,KACA,CAAA;AAED,IAAA,MAAM,QAAA,GAA2B,OAAO,KAAA,CAAM,GAAA;AAAA,MAC7C,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAQ,MAAO;AAAA,QACzB,MAAA,EAAQ,SAAA,CAAU,UAAA,CAAW,MAAM,CAAA;AAAA,QACnC,OAAA,EAAS;AAAA,UACR,MAAA,EAAQ,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA;AAAA,UAC7B,KAAA,EAAO,SAAA,CAAU,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA;AAAA,UACzC,MAAM,OAAA,CAAQ,IAAA;AAAA,UACd,YAAY,OAAA,CAAQ,UAAA;AAAA,UACpB,SAAA,EAAW,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAAA,UACnC,KAAA,EAAO,MAAA,CAAO,OAAA,CAAQ,KAAA,IAAS,CAAC;AAAA;AACjC,OACD;AAAA,KACD;AACA,IAAA,MAAM,UAAA,GAAyC,OAAO,UAAA,GACnD;AAAA,MACA,OAAA,EAAS,OAAO,UAAA,CAAW,QAAA;AAAA,MAC3B,UAAA,EAAY,OAAO,UAAA,CAAW;AAAA,KAC/B,GACC,MAAA;AACH,IAAA,OAAO,CAAC,UAAU,UAAU,CAAA;AAAA,EAC7B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,mBACL,OAAA,EACsC;AACtC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CA2BvB,oBAAA,EAAsB;AAAA,MACxB;AAAA,QACC,WAAW,OAAA,CAAQ,SAAA;AAAA,QACnB,WAAW,OAAA,CAAQ,QAAA;AAAA,QACnB,gBAAgB,OAAA,CAAQ;AAAA;AACzB,KACA,CAAA;AAED,IAAA,OAAO;AAAA,MACN,OAAA,EAAS;AAAA,QACR,eAAe,MAAA,CAAO,OAAA,CAAQ,aAAA,CAAc,GAAA,CAAI,CAAC,IAAA,MAAU;AAAA,UAC1D,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,IAAA,EAAM;AAAA,YACL,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,WAAW,CAAA;AAAA,YACzC,SAAA,EAAW,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,YACrC,OAAA,EAAS,KAAK,IAAA,CAAK,OAAA;AAAA,YACnB,gBAAA,EAAkB,KAAK,IAAA,CAAK,gBAAA;AAAA,YAC5B,qBAAA,EAAuB,KAAK,IAAA,CAAK;AAAA,WAClC;AAAA,UACA,eAAe,IAAA,CAAK,aAAA;AAAA,UACpB,WAAA,EAAa,KAAK,WAAA,GACf;AAAA,YACA,OAAO,EAAE,KAAA,EAAO,IAAA,CAAK,WAAA,CAAY,MAAM,KAAA,EAAM;AAAA,YAC7C,kBAAA,EAAoB,KAAK,WAAA,CAAY,kBAAA;AAAA,YACrC,cAAA,EAAgB,IAAA,CAAK,WAAA,CAAY,cAAA,GAC9B;AAAA,cACA,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,eAAe,IAAI,CAAA;AAAA,cAClD,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,WAAA,CAAY,eAAe,EAAE;AAAA,aAC/C,GACC,MAAA;AAAA,YACH,YAAA,EAAc,KAAK,WAAA,CAAY;AAAA,WAChC,GACC,MAAA;AAAA,UACH,kBAAkB,IAAA,CAAK,gBAAA;AAAA,UACvB,iBAAiB,IAAA,CAAK;AAAA,SACvB,CAAE;AAAA,OACH;AAAA,MACA,QAAQ,MAAA,CAAO,MAAA;AAAA,MACf,WAAW,MAAA,CAAO,SAAA;AAAA,MAClB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,MACzB,mBAAmB,MAAA,CAAO;AAAA,KAC3B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,eAAA,CACL,UAAA,EACA,KAAA,EACwB;AACxB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CASvB,iBAAA,EAAmB;AAAA,MACrB;AAAA,QACC,UAAA,EAAY,WAAW,QAAA,EAAS;AAAA,QAChC;AAAA;AACD,KACA,CAAA;AAED,IAAA,MAAM,MAAM,MAAA,CAAO,YAAA;AACnB,IAAA,OAAO;AAAA,MACN,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,OAAO,GAAA,CAAI,KAAA;AAAA,MACX,cAAc,GAAA,CAAI,YAAA;AAAA,MAClB,YAAY,GAAA,CAAI,UAAA;AAAA,MAChB,cAAc,GAAA,CAAI,YAAA;AAAA,MAClB,gBAAgB,GAAA,CAAI,cAAA,GACjB,CAAC,MAAA,CAAO,IAAI,cAAA,CAAe,CAAC,CAAC,CAAA,EAAG,OAAO,GAAA,CAAI,cAAA,CAAe,CAAC,CAAC,CAAC,CAAA,GAC7D;AAAA,KACJ;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,wBAAA,CACL,mBAAA,EACA,KAAA,EACkC;AAElC,IAAA,MAAM,MAAA,GAAoB,CAAC,mBAAA,CAAoB,QAAA,EAAU,CAAA;AACzD,IAAA,IAAI,UAAU,MAAA,EAAW;AACxB,MAAA,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,CAAA;AAAA,IAC7B;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAEvB,4BAA4B,MAAM,CAAA;AAErC,IAAA,OAAO,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACvC,WAAW,EAAA,CAAG,SAAA;AAAA,MACd,WAAA,EAAa,MAAA,CAAO,EAAA,CAAG,YAAY;AAAA,KACpC,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAM,sBAAA,GAA8C;AACnD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA;AAAA,MACzB,wBAAA;AAAA,MACA;AAAC,KACF;AAGA,IAAA,MAAM,YAAY,MAAA,CAAO,UAAA;AACzB,IAAA,MAAMjE,MAAAA,GAAQ,IAAI,UAAA,CAAW,SAAA,CAAU,SAAS,CAAC,CAAA;AACjD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,MAAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAAA,MAAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,KAAA,CAAM,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,GAAI,CAAC,GAAG,EAAE,CAAA;AAAA,IACjE;AACA,IAAA,OAAOA,MAAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,mBAAA,GAAuC;AAI5C,IAAA,MAAM,IAAA,GAAO,KAAK,SAAA,CAAU;AAAA,MAC3B,OAAA,EAAS,KAAA;AAAA,MACT,EAAA,EAAI,CAAA;AAAA,MACJ,MAAA,EAAQ,8BAAA;AAAA,MACR,MAAA,EAAQ,CAAC,EAAE;AAAA,KACX,CAAA;AACD,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,IAAA,CAAK,SAAA,CAAU,QAAO,EAAG;AAAA,MACrD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,MAC9C;AAAA,KACA,CAAA;AACD,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,gCAAgC,CAAA;AACzD,IAAA,IAAI,CAAC,KAAA,EAAO;AACX,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,uDAAuD,IAAI,CAAA;AAAA,OAC5D;AAAA,IACD;AACA,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,yBACL,cAAA,EACkB;AAClB,IAAA,IAAI,mBAAmB,MAAA,EAAW;AACjC,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAa,gBAAA,EAAkB;AAAA,QACxD,EAAE,gBAAA,EAAkB,MAAA,CAAO,cAAc,CAAA;AAAE,OAC3C,CAAA;AACD,MAAA,OAAO,OAAO,MAAM,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,MAAM,KAAK,cAAA,EAAe;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,sBAAsB,GAAA,EAA8C;AACzE,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,GAAG,CAAA;AAEhC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAyBvB,gBAAA,EAAkB,CAAC,EAAE,SAAA,EAAW,MAAA,EAAQ,CAAC,CAAA;AAE5C,IAAA,OAAO;AAAA,MACN,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA;AAAA,MAC5C,WACC,MAAA,CAAO,UAAA,IAAc,OAAO,MAAA,CAAO,MAAA,CAAO,UAAU,CAAA,GAAI,MAAA;AAAA,MACzD,IAAA,EAAM;AAAA,QACL,GAAA,EAAK,MAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,QAC3B,GAAA,EAAK,MAAA,CAAO,IAAA,CAAK,GAAA,IAAO,MAAA;AAAA,QACxB,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,YAAA,IAAgB;AAAA,OAC1C;AAAA,MACA,WAAA,EAAa;AAAA,QACZ,UAAA,EAAY,MAAA,CAAO,WAAA,CAAY,UAAA,CAAW,GAAA;AAAA,UACzC,CAAC,CAAA,KAAM,MAAA,CAAO,MAAA,CAAO,CAAC;AAAA,SACvB;AAAA,QACA,OAAA,EAAS;AAAA,UACR,MAAA,EAAQ;AAAA,YACP,qBAAA,EACC,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,uBAAA;AAAA,YACnC,yBAAA,EACC,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO,4BAAA;AAAA,YACnC,2BAAA,EACC,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,MAAA,CAAO;AAAA,WACpC;AAAA,UACA,WAAA,EAAa,MAAA,CAAO,WAAA,CAAY,OAAA,CAAQ,YAAA,CAAa,GAAA;AAAA,YAAI,CAAC,CAAA,KACzD,SAAA,CAAU,UAAA,CAAW,CAAC;AAAA,WACvB;AAAA,UACA,cAAc,MAAA,CAAO,WAAA,CAAY,QAAQ,YAAA,CAAa,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,YAClE,gBAAgB,EAAA,CAAG,gBAAA;AAAA,YACnB,QAAA,EAAU,IAAI,UAAA,CAAW,EAAA,CAAG,QAAQ,CAAA;AAAA,YACpC,MAAM,EAAA,CAAG;AAAA,WACV,CAAE;AAAA,SACH;AAAA,QACA,SAAA,EAAW,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,UAAU;AAAA;AAChD,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACL,MAAA,EAC6B;AAC7B,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,IAAI,MAAA,CAAO,KAAA,KAAU,MAAA,EAAW,MAAA,CAAO,QAAQ,MAAA,CAAO,KAAA;AACtD,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,MAAA,EAAW,MAAA,CAAO,SAAS,MAAA,CAAO,MAAA;AAAA,IACzD;AACA,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAOvB,iBAAA,EAAmB;AAAA,MACrB,EAAE,QAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,MAAA,GAAS,MAAA;AAAU,KAC9D,CAAA;AAED,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC/B,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,IAAA,EAAM,MAAA,CAAO,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,WAAW,CAAA,CAAE,SAAA,KAAc,SAAY,MAAA,CAAO,CAAA,CAAE,SAAS,CAAA,GAAI,MAAA;AAAA,MAC7D,KAAK,CAAA,CAAE;AAAA,KACR,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,SAAA,EAAoD;AAC1E,IAAA,MAAM,EAAE,MAAA,EAAAkE,OAAAA,EAAO,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,SAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AACzB,IAAA,MAAM,OAAA,GAAUA,OAAAA,CAAO,MAAA,CAAO,SAAS,CAAA;AACvC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAGvB,kBAAA,EAAoB,CAAC,EAAE,SAAA,EAAW,OAAA,EAAS,CAAC,CAAA;AAE/C,IAAA,OAAO;AAAA,MACN,IAAA,EAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAAA,MAChC,SAAS,MAAA,CAAO;AAAA,KACjB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAA,GAA+C;AACpD,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAsB,sBAAsB,CAAC,EAAE,CAAC,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,qBAAA,GAAkD;AACvD,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA;AAAA,MACzB,uBAAA;AAAA,MACA,CAAC,EAAE;AAAA,KACJ;AACA,IAAA,OAAO,OAAO,GAAA,CAAI,CAAC,CAAC,SAAA,EAAW,WAAW,CAAA,MAAO;AAAA,MAChD,SAAA;AAAA,MACA,WAAA,EAAa,OAAO,WAAW;AAAA,KAChC,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eACL,MAAA,EAC8B;AAC9B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAYvB,gBAAA,EAAkB,CAAC,EAAE,MAAA,EAAQ,MAAA,IAAU,MAAA,EAAW,CAAC,CAAA;AAEtD,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,MAAW;AAAA,MACnC,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,OAAA,EAAS;AAAA,QACR,MAAA,EAAQ,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,QACnC,KAAA,EAAO,SAAA,CAAU,UAAA,CAAW,KAAA,CAAM,QAAQ,KAAK,CAAA;AAAA,QAC/C,IAAA,EAAM,MAAM,OAAA,CAAQ,IAAA;AAAA,QACpB,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,QAC1B,SAAA,EAAW,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA;AAAA,QACzC,KAAA,EAAO,MAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAC;AAAA;AACvC,KACD,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QAAA,CACL,WAAA,EACA,MAAA,EACqB;AACrB,IAAA,MAAM,MAAA,GAAkC;AAAA,MACvC,YAAA,EAAc,OAAO,WAAW;AAAA,KACjC;AACA,IAAA,IAAI,QAAQ,kBAAA,EAAoB;AAC/B,MAAA,MAAA,CAAO,MAAA,GAAS,EAAE,mBAAA,EAAqB,MAAA,CAAO,kBAAA,EAAmB;AAAA,IAClE;AACA,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,KAavB,UAAA,EAAY,CAAC,MAAM,CAAC,CAAA;AAEvB,IAAA,MAAM,KAAA,GAAQ,OAAO,KAAA,IAAS,MAAA;AAC9B,IAAA,OAAO;AAAA,MACN,SAAA,EAAY,MAAM,SAAA,IAAwB,EAAA;AAAA,MAC1C,WAAA,EAAa,MAAA,CAAQ,KAAA,CAAM,WAAA,IAA0B,CAAC,CAAA;AAAA,MACtD,SAAA,EAAW,MAAA,CAAQ,KAAA,CAAM,SAAA,IAAwB,CAAC,CAAA;AAAA,MAClD,YAAY,KAAA,CAAM;AAAA,KACnB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,SAAA,CACL,WAAA,EACA,SAAA,EACoB;AACpB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAAe,WAAA,EAAa;AAAA,MACrD;AAAA,QACC,UAAA,EAAY,OAAO,WAAW,CAAA;AAAA,QAC9B,QAAA,EAAU,SAAA,KAAc,MAAA,GAAY,MAAA,CAAO,SAAS,CAAA,GAAI;AAAA;AACzD,KACA,CAAA;AACD,IAAA,OAAO,OAAO,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBACL,MAAA,EACwC;AACxC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAYvB,iBAAA,EAAmB,CAAC,EAAE,MAAA,EAAQ,MAAA,CAAO,QAAA,EAAS,EAAG,CAAC,CAAA;AAErD,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,EAAO,OAAO,MAAA;AAC1B,IAAA,MAAM,IAAI,MAAA,CAAO,KAAA;AACjB,IAAA,OAAO;AAAA,MACN,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,OAAA,EAAS,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA;AAAA,MACzB,gBAAA,EAAkB,MAAA,CAAO,CAAA,CAAE,iBAAiB,CAAA;AAAA,MAC5C,kBAAA,EAAoB,MAAA,CAAO,CAAA,CAAE,mBAAmB,CAAA;AAAA,MAChD,qBACC,CAAA,CAAE,oBAAA,KAAyB,SACxB,MAAA,CAAO,CAAA,CAAE,oBAAoB,CAAA,GAC7B,MAAA;AAAA,MACJ,uBACC,CAAA,CAAE,sBAAA,KAA2B,SAC1B,MAAA,CAAO,CAAA,CAAE,sBAAsB,CAAA,GAC/B,MAAA;AAAA,MACJ,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,gBAAgB,CAAA,CAAE,eAAA;AAAA,MAClB,mBAAmB,CAAA,CAAE;AAAA,KACtB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBACL,OAAA,EACkC;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAUvB,sBAAA,EAAwB,CAAC,EAAE,UAAA,EAAY,OAAA,CAAQ,SAAA,EAAW,CAAC,CAAA;AAE9D,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC/B,UAAA,EAAY,MAAA,CAAO,CAAA,CAAE,UAAU,CAAA;AAAA,MAC/B,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,YAAY,CAAA,CAAE,WAAA;AAAA,MACd,eAAe,CAAA,CAAE,cAAA;AAAA,MACjB,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,kBAAkB,CAAA,CAAE;AAAA,KACrB,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,uBAAuB,MAAA,EAA0C;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAMvB,wBAAA,EAA0B,CAAC,EAAE,OAAA,EAAS,MAAA,CAAO,QAAA,EAAS,EAAG,CAAC,CAAA;AAE7D,IAAA,OAAO;AAAA,MACN,MAAA,EAAQ,OAAO,KAAA,CAAM,MAAA;AAAA,MACrB,QAAA,EAAU,OAAO,KAAA,CAAM,QAAA;AAAA,MACvB,cAAA,EAAgB,OAAO,KAAA,CAAM;AAAA,KAC9B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,cAAA,CACL,OAAA,EACA,KAAA,EAC8B;AAC9B,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAkBvB,gBAAA,EAAkB,CAAC,EAAE,OAAA,EAAS,OAAA,CAAQ,QAAA,EAAS,EAAG,KAAA,EAAO,CAAC,CAAA;AAE7D,IAAA,OAAO,MAAA,CAAO,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACtC,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,UAAU,CAAA,CAAE,SAAA;AAAA,MACZ,aAAa,CAAA,CAAE,WAAA;AAAA,MACf,iBAAiB,CAAA,CAAE,gBAAA;AAAA,MACnB,mBAAmB,CAAA,CAAE,kBAAA;AAAA,MACrB,WAAW,CAAA,CAAE,UAAA;AAAA,MACb,mBAAmB,CAAA,CAAE,mBAAA;AAAA,MACrB,iBAAA,EAAmB,MAAA,CAAO,CAAA,CAAE,oBAAoB,CAAA;AAAA,MAChD,mBAAmB,CAAA,CAAE,mBAAA;AAAA,MACrB,eAAe,CAAA,CAAE,eAAA;AAAA,MACjB,MAAA,EAAQ,CAAA,CAAE,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QAC5B,iBAAiB,CAAA,CAAE,gBAAA;AAAA,QACnB,oBAAoB,CAAA,CAAE;AAAA,OACvB,CAAE;AAAA,KACH,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,kBAAA,CACL,OAAA,EACA,KAAA,EACoB;AACpB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAEvB,oBAAA,EAAsB,CAAC,EAAE,OAAA,EAAS,OAAA,CAAQ,QAAA,EAAS,EAAG,KAAA,EAAO,CAAC,CAAA;AAEjE,IAAA,OAAO,OAAO,gCAAA,CAAiC,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAA,GAA8C;AACnD,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,KAUvB,iBAAA,EAAmB,CAAC,IAAI,CAAC,CAAA;AAE5B,IAAA,OAAO,MAAA,CAAO,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC/B,KAAA,EAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,UAAU,CAAA,CAAE,QAAA;AAAA,MACZ,iBAAiB,CAAA,CAAE,gBAAA;AAAA,MACnB,gBAAgB,CAAA,CAAE,eAAA;AAAA,MAClB,eAAe,CAAA,CAAE,cAAA;AAAA,MACjB,oBAAoB,CAAA,CAAE;AAAA,KACvB,CAAE,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,sBAAA,GAA4C;AACjD,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAe,0BAA0B,CAAC,EAAE,CAAC,CAAA;AAAA,EAChE;AACD;;;AChrCO,SAAS,SAASlE,MAAAA,EAA2B;AAEnD,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAEhC,IAAA,MAAM,SAAA,GAAY,IAAA;AAClB,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAIA,MAAAA,CAAM,MAAA,EAAQ,KAAK,SAAA,EAAW;AACjD,MAAA,MAAM,KAAA,GAAQA,MAAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAI,SAAS,CAAA;AAC1C,MAAA,MAAA,IAAU,MAAA,CAAO,YAAA,CAAa,GAAG,KAAK,CAAA;AAAA,IACvC;AAEA,IAAA,OAAO,KAAK,MAAM,CAAA;AAAA,EACnB;AAGA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAClC,IAAA,OAAO,MAAA,CAAO,IAAA,CAAKA,MAAK,CAAA,CAAE,SAAS,QAAQ,CAAA;AAAA,EAC5C;AAEA,EAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACnE;AAOO,SAAS,WAAWmE,OAAAA,EAA4B;AAEtD,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAChC,IAAA,MAAM,MAAA,GAAS,KAAKA,OAAM,CAAA;AAC1B,IAAA,MAAMnE,MAAAA,GAAQ,IAAI,UAAA,CAAW,MAAA,CAAO,MAAM,CAAA;AAC1C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACvC,MAAAA,MAAAA,CAAM,CAAC,CAAA,GAAI,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IAC/B;AACA,IAAA,OAAOA,MAAAA;AAAA,EACR;AAGA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAClC,IAAA,OAAO,IAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAKmE,OAAAA,EAAQ,QAAQ,CAAC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACnE;AAOO,SAAS,MAAM,EAAA,EAA2B;AAChD,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACxD;AAUO,SAAS,gBAAA,CACf,OAAA,EACA,MAAA,GAAS,GAAA,EACT,QAAQ,GAAA,EACC;AACT,EAAA,MAAM,gBAAA,GAAmB,SAAS,CAAA,IAAK,OAAA;AACvC,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,GAAI,GAAA,GAAM,gBAAA;AACrC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,gBAAA,GAAmB,MAAA,EAAQ,KAAK,CAAA;AACjD;AAKO,SAAS,YAAA,GAAuB;AACtC,EAAA,OAAO,UAAA;AACR;AAKO,SAAS,aAAA,GAAwB;AACvC,EAAA,OAAO,WAAA;AACR;AAKO,SAAS,aAAA,GAAwB;AACvC,EAAA,OAAO,WAAA;AACR;AAKO,SAAS,cAAA,GAAyB;AACxC,EAAA,OAAO,YAAA;AACR;;;AC1FA,IAAM,mBAAA,GAAsB,EAAA;AAC5B,IAAM,sBAAA,GAAyB,GAAA;AAOxB,IAAM,oBAAA,GAAN,cAAmC,aAAA,CAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBvD,MAAM,eAAA,CACL,WAAA,EACA,OAAA,EACkB;AAClB,IAAA,MAAM,QAAA,GAAW,SAAS,WAAW,CAAA;AAErC,IAAA,MAAM,MAAA,GAAS;AAAA,MACd,QAAA,EAAU,QAAA;AAAA,MACV,aAAA,EAAe,SAAS,aAAA,IAAiB,KAAA;AAAA,MACzC,UAAA,EAAY,SAAS,UAAA,IAAc;AAAA,KACpC;AAEA,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,IAAA,CAAa,iBAAA,EAAmB;AAAA,MAC5D,QAAA;AAAA,MACA;AAAA,KACA,CAAA;AACD,IAAA,OAAO,SAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,kBAAA,CACL,SAAA,EACA,OAAA,EACgC;AAChC,IAAA,MAAM,UAAA,GAAa,SAAS,UAAA,IAAc,mBAAA;AAC1C,IAAA,MAAM,YAAA,GAAe,SAAS,YAAA,IAAgB,sBAAA;AAG9C,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,UAAA,EAAY,OAAA,EAAA,EAAW;AAEtD,MAAA,IAAI,UAAU,CAAA,EAAG;AAChB,QAAA,MAAM,IAAA,CAAK,MAAM,YAAY,CAAA;AAAA,MAC9B;AAEA,MAAA,IAAI;AACH,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA;AAClD,QAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,UAAA;AAAA,QACD;AAEA,QAAA,IAAI,OAAO,GAAA,EAAK;AACf,UAAA,OAAO;AAAA,YACN,SAAA;AAAA,YACA,QAAA,EAAU,KAAA;AAAA,YACV,KAAK,MAAA,CAAO;AAAA,WACb;AAAA,QACD;AAGA,QAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,GAAc,EAAA,EAAI;AAClD,UAAA,OAAO;AAAA,YACN,SAAA;AAAA,YACA,QAAA,EAAU,IAAA;AAAA,YACV,GAAA,EAAK,KAAA;AAAA,WACN;AAAA,QACD;AAAA,MACD,SAAS,KAAA,EAAO;AAEf,QAAA,IACC,KAAA,YAAiB,QAAA,IACjB,KAAA,CAAM,IAAA,KAAA,sBAAA,6BACL;AACD,UAAA,MAAM,KAAA;AAAA,QACP;AAAA,MACD;AAAA,IACD;AAEA,IAAA,MAAM,IAAI,QAAA;AAAA,MAAA,kCAAA;AAAA,MAET,oCAAA;AAAA,MACA;AAAA,QACC,SAAA;AAAA,QACA;AAAA;AACD,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA2BA,MAAM,yBAAA,CACL,WAAA,EACA,OAAA,EACgC;AAChC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,eAAA,CAAgB,WAAA,EAAa;AAAA,MACzD,eAAe,OAAA,EAAS,aAAA;AAAA,MACxB,YAAY,OAAA,EAAS;AAAA,KACrB,CAAA;AACD,IAAA,OAAO,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAW;AAAA,MAC/C,YAAY,OAAA,EAAS,iBAAA;AAAA,MACrB,cAAc,OAAA,EAAS;AAAA,KACvB,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,cAAA,CAAe,MAAA,EAAmB,MAAA,EAAiC;AACxE,IAAA,IAAI,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAC7C,MAAA,MAAM,IAAI,QAAA;AAAA,QAAA,gBAAA;AAAA,QAET,kBAAkB,MAAM,CAAA,2BAAA;AAAA,OACzB;AAAA,IACD;AACA,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,IAAA,CAAa,gBAAA,EAAkB;AAAA,MAC3D;AAAA,QACC,MAAA,EAAQ,OAAO,QAAA,EAAS;AAAA,QACxB,OAAA,EAAS,OAAO,MAAM;AAAA;AACvB,KACA,CAAA;AACD,IAAA,OAAO,SAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,MAAM,wBAAA,CACL,MAAA,EACA,MAAA,EACA,OAAA,EACgC;AAChC,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,cAAA,CAAe,QAAQ,MAAM,CAAA;AAC1D,IAAA,OAAO,MAAM,IAAA,CAAK,kBAAA,CAAmB,SAAA,EAAW,OAAO,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,qBACL,OAAA,EACqC;AACrC,IAAA,OAAO,MAAM,IAAA,CAAK,IAAA,CAAgC,mBAAA,EAAqB;AAAA,MACtE;AAAA,KACA,CAAA;AAAA,EACF;AAAA,EAEA,MAAc,eACb,SAAA,EACwC;AACxC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,IAAA,CAOhB,kBAAkB,CAAC,EAAE,SAAA,EAAW,CAAC,CAAA;AAE3C,IAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,MAAA,OAAO,IAAA;AAAA,IACR;AAEA,IAAA,OAAO;AAAA,MACN,WAAA,EAAa,MAAA,CAAO,MAAA,CAAO,YAAA,IAAgB,CAAC,CAAA;AAAA,MAC5C,GAAA,EAAK,MAAA,CAAO,GAAA,IAAO,MAAA,CAAO,MAAM,GAAA,IAAO;AAAA,KACxC;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,MAAM,EAAA,EAA2B;AACxC,IAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AAAA,EACxD;AACD;;;ACvNO,IAAM,WAAA,GAAN,cAA0B,SAAA,CAAU;AAAA,EACzB,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EAEjB,WAAA,CAAY,WAA0BC,MAAAA,EAAwB;AAC7D,IAAA,KAAA,EAAM;AACN,IAAA,IAAA,CAAK,KAAA,GAAQA,MAAAA;AACb,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,cAAA,CAAe,SAAS,CAAA;AAC/C,IAAA,IAAA,CAAK,iBAAA,GAAoB,IAAI,oBAAA,CAAqB,SAAS,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAiB;AAChB,IAAA,OAAO,IAAA,CAAK,UAAU,MAAA,EAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAA,GAAuC;AACtC,IAAA,OAAO,KAAK,KAAA,CAAM,EAAA;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAA,GAAkC;AACjC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,MAAA,EAAoC;AACpD,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,UAAA,CAAW,MAAM,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe,MAAA,EAAyC;AAC7D,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,WAAA,CAAY,eAAe,MAAM,CAAA;AAC3D,IAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,MAAM,CAAA,CAAE,CAAA;AAAA,IACpD;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,GAAkC;AACvC,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,cAAA,EAAe;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,yBACL,cAAA,EACkB;AAClB,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,wBAAA,CAAyB,cAAc,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAA,CACL,OAAA,EACA,MAAA,EAC2B;AAC3B,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,uBAAA,CAAwB,SAAS,MAAM,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,eAAe,GAAA,EAA8C;AAClE,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,qBAAA,CAAsB,GAAG,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,GAAuC;AAC5C,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,mBAAA,EAAoB;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBACL,UAAA,EAC2C;AAE3C,IAAA,MAAM,EAAE,MAAA,EAAAF,OAAAA,EAAO,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,SAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AACzB,IAAA,MAAM,UAAA,GAAa,WAAW,GAAA,CAAI,CAAC,MAAMA,OAAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA;AACzD,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAAY,qBAAqB,UAAU,CAAA;AAEtE,IAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAA4B,MAAM,IAAI,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,GAAmC;AACxC,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,YAAA,EAAa;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,SAAA,GAA6B;AAClC,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,SAAA,EAAU;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eAAA,CACL,WAAA,EACA,OAAA,EACqB;AACrB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,iBAAA,CAAkB,eAAA;AAAA,MAC3C,WAAA;AAAA,MACA;AAAA,KACD;AACA,IAAA,MAAM,EAAE,MAAA,EAAAA,OAAAA,EAAO,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,SAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AACzB,IAAA,OAAOA,OAAAA,CAAO,OAAO,MAAM,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,cAAA,CAAe,MAAA,EAAmB,MAAA,EAAoC;AAC3E,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,iBAAA,CAAkB,cAAA,CAAe,QAAQ,MAAM,CAAA;AACzE,IAAA,MAAM,EAAE,MAAA,EAAAA,OAAAA,EAAO,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,OAAA,SAAA,EAAA,EAAA,YAAA,CAAA,CAAA;AACzB,IAAA,OAAOA,OAAAA,CAAO,OAAO,MAAM,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,yBAAA,CACL,WAAA,EACA,OAAA,EACgC;AAChC,IAAA,OAAO,MAAM,KAAK,iBAAA,CAAkB,yBAAA;AAAA,MACnC,WAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,kBAAA,CACL,GAAA,EACA,OAAA,EACgC;AAChC,IAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,kBAAA,CAAmB,KAAK,OAAO,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,wBAAA,CACL,MAAA,EACA,MAAA,EACgC;AAChC,IAAA,OAAO,MAAM,KAAK,iBAAA,CAAkB,wBAAA;AAAA,MACnC,MAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kCAAkC,QAAA,EAAmC;AAC1E,IAAA,OAAO,MAAM,KAAK,WAAA,CAAY,iCAAA;AAAA,MAC7B,OAAO,QAAQ;AAAA,KAChB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,OAAA,EAAuC;AAC7D,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,WAAA,CAAY,iBAAiB,OAAO,CAAA;AAC7D,IAAA,OAAO,EAAE,KAAA,EAAO,KAAA,IAAS,MAAA,EAAU;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,oBACL,OAAA,EACiC;AACjC,IAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,WAAA,CAAY,oBAAoB,OAAO,CAAA;AAElE,IAAA,OAAO,OAAA,CAAQ,GAAA;AAAA,MAAI,CAAC,CAAA,KACnB,CAAA,KAAM,IAAA,GAAO,MAAA,GAAY;AAAA,KAC1B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,kBAAA,CACL,KAAA,EACA,MAAA,EACA,MAAA,EACwD;AAExD,IAAA,MAAM,WAAA,GACL,WAAW,eAAA,GACR,EAAE,MAAM,eAAA,EAAgB,GACxB,EAAE,IAAA,EAAM,iBAAA,EAAkB;AAC9B,IAAA,OAAO,MAAM,KAAK,WAAA,CAAY,kBAAA;AAAA,MAC7B,KAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,mBACL,OAAA,EACsC;AACtC,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,kBAAA,CAAmB,OAAO,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,eAAA,CACL,UAAA,EACA,KAAA,EACwB;AACxB,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,YAAY,KAAK,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,wBAAA,CACL,mBAAA,EACA,KAAA,EACkC;AAClC,IAAA,OAAO,MAAM,KAAK,WAAA,CAAY,wBAAA;AAAA,MAC7B,mBAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACL,MAAA,EAC6B;AAC7B,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,MAAM,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAiB,SAAA,EAAoD;AAC1E,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,gBAAA,CAAiB,SAAS,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,GAA+C;AACpD,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,kBAAA,EAAmB;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,GAAkD;AACvD,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,qBAAA,EAAsB;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,GAAuD;AAC5D,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,CAAY,sBAAA,EAAuB;AAC/D,IAAA,MAAM1D,OAAM,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,CAC7B,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,EAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,KAAK,EAAE,CAAA;AACT,IAAA,OAAO,EAAE,WAAWA,IAAAA,EAAI;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,GAAiD;AACtD,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,mBAAA,EAAoB;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBACL,OAAA,EACqC;AACrC,IAAA,OAAO,MAAM,IAAA,CAAK,iBAAA,CAAkB,oBAAA,CAAqB,OAAO,CAAA;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eACL,MAAA,EAC8B;AAC9B,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,cAAA,CAAe,MAAM,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,QAAA,CACL,WAAA,EACA,MAAA,EACqB;AACrB,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,QAAA,CAAS,aAAa,MAAM,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CACL,WAAA,EACA,SAAA,EACoB;AACpB,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,SAAA,CAAU,aAAa,SAAS,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACL,MAAA,EACwC;AACxC,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,CAAgB,MAAM,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBACL,OAAA,EACkC;AAClC,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,oBAAA,CAAqB,OAAO,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,MAAA,EAA0C;AACtE,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,sBAAA,CAAuB,MAAM,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACL,OAAA,EACA,KAAA,EAC8B;AAC9B,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,cAAA,CAAe,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACL,OAAA,EACA,KAAA,EACoB;AACpB,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,kBAAA,CAAmB,SAAS,KAAK,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,GAA8C;AACnD,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,eAAA,EAAgB;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,GAA4C;AACjD,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,sBAAA,EAAuB;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,CAAa,MAAA,EAAgB,MAAA,EAAiC;AACnE,IAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,YAAA,CAAa,QAAQ,MAAM,CAAA;AAAA,EAC1D;AACD;;;ACzgBA,IAAM,cAAA,GAAgD;AAAA,EACrD,OAAA,EAAS,GAAA;AAAA;AAAA,EACT,UAAA,EAAY,CAAA;AAAA,EACZ,cAAA,EAAgB,GAAA;AAAA;AAAA,EAChB,aAAA,EAAe,GAAA;AAAA;AAAA,EACf,SAAS;AACV,CAAA;AAYO,IAAM,gBAAN,MAAoB;AAAA,EACT,GAAA;AAAA,EACA,MAAA;AAAA,EAEjB,WAAA,CAAY,GAAA,EAAa,MAAA,GAA8B,EAAC,EAAG;AAC1D,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,cAAA,EAAgB,GAAG,MAAA,EAAO;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAA,CACL,IAAA,EACA,cAAA,GAA0C,EAAC,EACxB;AACnB,IAAA,IAAI,SAAA;AAEJ,IAAA,KAAA,IAAS,UAAU,CAAA,EAAG,OAAA,IAAW,IAAA,CAAK,MAAA,CAAO,YAAY,OAAA,EAAA,EAAW;AACnE,MAAA,IAAI;AACH,QAAA,OAAO,MAAM,IAAA,CAAK,WAAA,CAAY,IAAA,EAAM,gBAAgB,OAAO,CAAA;AAAA,MAC5D,SAAS,KAAA,EAAO;AACf,QAAA,SAAA,GAAY,KAAA;AAGZ,QAAA,IAAI,KAAA,YAAiB,QAAA,IAAY,CAAC,KAAA,CAAM,SAAA,EAAW;AAClD,UAAA,MAAM,KAAA;AAAA,QACP;AAGA,QAAA,IAAI,OAAA,KAAY,IAAA,CAAK,MAAA,CAAO,UAAA,EAAY;AACvC,UAAA,MAAM,KAAA;AAAA,QACP;AAGA,QAAA,MAAM,KAAA,GAAQ,gBAAA;AAAA,UACb,OAAA;AAAA,UACA,KAAK,MAAA,CAAO,cAAA;AAAA,UACZ,KAAK,MAAA,CAAO;AAAA,SACb;AAGA,QAAA,MAAM,MAAM,KAAK,CAAA;AAAA,MAClB;AAAA,IACD;AAGA,IAAA,MAAM,SAAA;AAAA,EACP;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,WAAA,CACb,IAAA,EACA,cAAA,EACA,OAAA,EACmB;AACnB,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,SAAA,GAAY,WAAW,MAAM,UAAA,CAAW,OAAM,EAAG,IAAA,CAAK,OAAO,OAAO,CAAA;AAE1E,IAAA,IAAI;AACH,MAAA,MAAM,OAAA,GAA0B;AAAA,QAC/B,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACR,cAAA,EAAgB,kBAAA;AAAA,UAChB,GAAG,KAAK,MAAA,CAAO;AAAA,SAChB;AAAA,QACA,IAAA;AAAA,QACA,QAAQ,UAAA,CAAW;AAAA,OACpB;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,KAAK,OAAO,CAAA;AAG9C,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACjB,QAAA,MAAM,MAAM,IAAA,CAAK,eAAA,CAAgB,QAAA,EAAU,gBAAgB,OAAO,CAAA;AAAA,MACnE;AAGA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,OAAO,IAAA;AAAA,IACR,SAAS,KAAA,EAAO;AAEf,MAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AAC1D,QAAA,MAAM,QAAA,CAAS,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS;AAAA,UAClD,GAAG,cAAA;AAAA,UACH,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,UAAU,OAAA,GAAU;AAAA,SACpB,CAAA;AAAA,MACF;AAGA,MAAA,IAAI,iBAAiB,SAAA,EAAW;AAC/B,QAAA,MAAM,QAAA,CAAS,YAAA,CAAa,KAAA,CAAM,OAAA,EAAS;AAAA,UAC1C,GAAG,cAAA;AAAA,UACH,KAAK,IAAA,CAAK,GAAA;AAAA,UACV,UAAU,OAAA,GAAU,CAAA;AAAA,UACpB,OAAO,KAAA,CAAM;AAAA,SACb,CAAA;AAAA,MACF;AAGA,MAAA,IAAI,iBAAiB,QAAA,EAAU;AAC9B,QAAA,MAAM,KAAA;AAAA,MACP;AAGA,MAAA,MAAM,QAAA,CAAS,aAAa,uBAAA,EAAyB;AAAA,QACpD,GAAG,cAAA;AAAA,QACH,KAAK,IAAA,CAAK,GAAA;AAAA,QACV,UAAU,OAAA,GAAU,CAAA;AAAA,QACpB,OAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK;AAAA,OAC5D,CAAA;AAAA,IACF,CAAA,SAAE;AACD,MAAA,YAAA,CAAa,SAAS,CAAA;AAAA,IACvB;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAc,eAAA,CACb,QAAA,EACA,cAAA,EACA,OAAA,EACoB;AACpB,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA;AACxB,IAAA,MAAM,WAAA,GAAc,MAAA,IAAU,GAAA,IAAO,MAAA,KAAW,GAAA;AAChD,IAAA,MAAM,WAAA,GAAc;AAAA,MACnB,GAAG,cAAA;AAAA,MACH,UAAA,EAAY,MAAA;AAAA,MACZ,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,UAAU,OAAA,GAAU;AAAA,KACrB;AAGA,IAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAU,GAAI,MAAM,IAAA,CAAK,kBAAA;AAAA,MAClD,QAAA;AAAA,MACA;AAAA,KACD;AAGA,IAAA,IAAI,WAAW,GAAA,EAAK;AACnB,MAAA,OAAO,SAAS,iBAAA,CAAkB;AAAA,QACjC,GAAG,WAAA;AAAA,QACH,WAAA,EAAa;AAAA,OACb,CAAA;AAAA,IACF;AAGA,IAAA,IAAI,YAAY,MAAA,EAAW;AAC1B,MAAA,OAAO,QAAA,CAAS,WAAA,CAAY,OAAA,EAAS,OAAA,EAAS;AAAA,QAC7C,GAAG,WAAA;AAAA,QACH,WAAA,EAAa;AAAA,OACb,CAAA;AAAA,IACF;AAGA,IAAA,IAAI,UAAU,GAAA,EAAK;AAClB,MAAA,OAAO,QAAA,CAAS,aAAa,OAAA,EAAS;AAAA,QACrC,GAAG,WAAA;AAAA,QACH,WAAA,EAAa;AAAA,OACb,CAAA;AAAA,IACF;AAGA,IAAA,OAAO,IAAI,QAAA,CAAA,eAAA,sBAAqC,OAAA,EAAS,WAAA,EAAa,WAAW,CAAA;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAc,kBAAA,CACb,QAAA,EACA,MAAA,EACsE;AACtE,IAAA,IAAI,OAAA,GAAU,CAAA,KAAA,EAAQ,MAAM,CAAA,EAAA,EAAK,SAAS,UAAU,CAAA,CAAA;AACpD,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAI;AACH,MAAA,SAAA,GAAY,MAAM,SAAS,IAAA,EAAK;AAEhC,MAAA,IAAI,SAAA,IAAa,OAAO,SAAA,KAAc,QAAA,EAAU;AAC/C,QAAA,MAAM,IAAA,GAAO,SAAA;AAGb,QAAA,IACC,IAAA,CAAK,SACL,OAAO,IAAA,CAAK,UAAU,QAAA,IACtB,SAAA,IAAa,KAAK,KAAA,EACjB;AACD,UAAA,MAAM,WAAW,IAAA,CAAK,KAAA;AACtB,UAAA,OAAA,GAAU,MAAA,CAAO,SAAS,OAAO,CAAA;AACjC,UAAA,OAAA,GACC,OAAO,QAAA,CAAS,IAAA,KAAS,QAAA,GAAW,SAAS,IAAA,GAAO,KAAA,CAAA;AAAA,QACtD,CAAA,MAAA,IAAW,aAAa,IAAA,EAAM;AAE7B,UAAA,OAAA,GAAU,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,QAC9B;AAAA,MACD;AAAA,IACD,CAAA,CAAA,MAAQ;AAAA,IAER;AAEA,IAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAU;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAA,GAAiB;AAChB,IAAA,OAAO,IAAA,CAAK,GAAA;AAAA,EACb;AACD;;;ACtKO,SAAS,kBAAkB,MAAA,EAAwC;AACzE,EAAA,MAAM,EAAE,KAAA,EAAA4D,MAAAA,EAAO,SAAA,EAAU,GAAI,MAAA;AAC7B,EAAA,MAAM,aAAA,GAAgB,IAAI,aAAA,CAAcA,MAAAA,CAAM,QAAQ,SAAS,CAAA;AAE/D,EAAA,OAAO,IAAI,WAAA,CAAY,aAAA,EAAeA,MAAK,CAAA;AAC5C;AAoCO,SAAS,4BACf,OAAA,EACoB;AACpB,EAAA,QAAQ,OAAA;AAAS,IAChB,KAAK,SAAA;AACJ,MAAA,OAAO,EAAE,OAAO,mBAAA,EAAoB;AAAA,IACrC,KAAK,QAAA;AACJ,MAAA,OAAO,EAAE,OAAO,kBAAA,EAAmB;AAAA,IACpC,KAAK,SAAA;AACJ,MAAA,OAAO,EAAE,OAAO,mBAAA,EAAoB;AAAA,IACrC,KAAK,UAAA;AACJ,MAAA,OAAO,EAAE,OAAO,oBAAA,EAAqB;AAAA,IACtC;AACC,MAAA,MAAM,IAAI,QAAA;AAAA,QAAA,iBAAA;AAAA,QAET,oBAAoB,OAAO,CAAA;AAAA,OAC5B;AAAA;AAEH;;;AC7JO,IAAM,gBAAN,MAAoB;AAAA,EAClB,IAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EAER,YAAY,IAAA,EAAkB;AAC7B,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,QAAQ,IAAA,CAAK,UAAA,EAAY,KAAK,UAAU,CAAA;AACtE,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EACf;AAAA;AAAA,EAIA,SAAA,GAAoB;AACnB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACb;AAAA,EAEA,SAAA,GAAoB;AACnB,IAAA,OAAO,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,MAAA;AAAA,EACjC;AAAA,EAEA,WAAA,GAAuB;AACtB,IAAA,OAAO,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,EAClC;AAAA,EAEA,KAAKpE,MAAAA,EAAqB;AACzB,IAAA,IAAA,CAAK,gBAAgBA,MAAK,CAAA;AAC1B,IAAA,IAAA,CAAK,MAAA,IAAUA,MAAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAA,EAA4B;AAChC,IAAA,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAC3B,IAAA,OAAO,KAAK,KAAA,CAAM,KAAA,CAAM,KAAK,MAAA,EAAQ,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA,EAKA,KAAA,GAAc;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAAA,EAAsB;AAC1B,IAAA,IAAI,MAAA,GAAS,CAAA,IAAK,MAAA,GAAS,IAAA,CAAK,MAAM,MAAA,EAAQ;AAC7C,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,qBAAA,EAAwB,MAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,MAAM,MAAM,CAAA;AAAA,OACpE;AAAA,IACD;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA,EAIA,MAAA,GAAiB;AAChB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,KAAK,MAAM,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,IAAI,CAAA;AACnD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,IAAI,CAAA;AACjD,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA,GAAS,GAAG,IAAI,CAAA;AACtD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,MAAA,CAAO,GAAG,CAAA,GAAK,MAAA,CAAO,IAAI,CAAA,IAAK,GAAA;AAAA,EACvC;AAAA,EAEA,QAAA,GAAmB;AAClB,IAAA,IAAA,CAAK,gBAAgB,EAAE,CAAA;AACvB,IAAA,MAAM,GAAA,GAAM,KAAK,OAAA,EAAQ;AACzB,IAAA,MAAM,IAAA,GAAO,KAAK,OAAA,EAAQ;AAC1B,IAAA,OAAO,MAAO,IAAA,IAAQ,GAAA;AAAA,EACvB;AAAA,EAEA,MAAA,GAAiB;AAChB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAM,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,QAAQ,IAAI,CAAA;AAClD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,IAAI,CAAA;AACjD,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA,CAAK,SAAS,IAAA,CAAK,MAAA,GAAS,GAAG,IAAI,CAAA;AACrD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AAEf,IAAA,OAAO,MAAA,CAAO,GAAG,CAAA,GAAK,MAAA,CAAO,IAAI,CAAA,IAAK,GAAA;AAAA,EACvC;AAAA,EAEA,QAAA,GAAmB;AAElB,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,EAAS;AAE/B,IAAA,MAAM,UAAU,EAAA,IAAM,IAAA;AACtB,IAAA,IAAA,CAAK,QAAA,GAAW,aAAa,EAAA,EAAI;AAChC,MAAA,OAAO,YAAY,EAAA,IAAM,IAAA,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,QAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,OAAA,GAAkB;AACjB,IAAA,IAAA,CAAK,gBAAgB,CAAC,CAAA;AACtB,IAAA,MAAM,QAAQ,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,QAAQ,IAAI,CAAA;AACpD,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,KAAA;AAAA,EACR;AAAA,EAEA,QAAA,GAAoB;AACnB,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,EAAO;AAC1B,IAAA,IAAI,QAAQ,CAAA,EAAG;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,KAAA,KAAU,CAAA;AAAA,EAClB;AAAA;AAAA,EAIA,UAAU,MAAA,EAA4B;AACrC,IAAA,IAAA,CAAK,gBAAgB,MAAM,CAAA;AAC3B,IAAA,MAAMA,MAAAA,GAAQ,KAAK,KAAA,CAAM,KAAA,CAAM,KAAK,MAAA,EAAQ,IAAA,CAAK,SAAS,MAAM,CAAA;AAChE,IAAA,IAAA,CAAK,MAAA,IAAU,MAAA;AACf,IAAA,OAAOA,MAAAA;AAAA,EACR;AAAA,EAEA,eAAe,MAAA,EAA4B;AAC1C,IAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,EAC7B;AAAA,EAEA,YAAA,GAA2B;AAC1B,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,IAAA,OAAO,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,EAC7B;AAAA,EAEA,UAAA,GAAqB;AACpB,IAAA,MAAMA,MAAAA,GAAQ,KAAK,YAAA,EAAa;AAChC,IAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAOA,MAAK,CAAA;AAAA,EACtC;AAAA,EAEA,WAAA,GAAsB;AACrB,IAAA,OAAO,KAAK,OAAA,EAAQ;AAAA,EACrB;AAAA,EAEA,WAAcqE,UAAAA,EAA8B;AAC3C,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,EAAO;AAC7B,IAAA,IAAI,aAAa,CAAA,EAAG;AACnB,MAAA,OAAO,IAAA;AAAA,IACR;AACA,IAAA,IAAI,aAAa,CAAA,EAAG;AACnB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAA;AAAA,IAC3D;AACA,IAAA,OAAOA,UAAAA,EAAU;AAAA,EAClB;AAAA,EAEA,QAAW,WAAA,EAA2B;AACrC,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,IAAA,MAAM,SAAc,EAAC;AACrB,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAChC,MAAA,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA;AAAA,IAC1B;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,UAA+B,OAAA,EAA4C;AAC1E,IAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAS,MAAM,CAAA;AAAA,EACpC;AAAA,EAEA,OAAA,CAAc,SAAkBA,UAAAA,EAA+B;AAC9D,IAAA,MAAM,MAAA,GAAS,KAAK,UAAA,EAAW;AAC/B,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAU;AAC1B,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAChC,MAAA,MAAM,MAAM,OAAA,EAAQ;AACpB,MAAA,MAAM,QAAQA,UAAAA,EAAU;AACxB,MAAA,GAAA,CAAI,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IACnB;AACA,IAAA,OAAO,GAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAOQ,UAAA,GAAqB;AAC5B,IAAA,MAAM,MAAA,GAAS,KAAK,OAAA,EAAQ;AAC5B,IAAA,IAAI,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AAC7C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,MAAM,CAAA,6BAAA,CAA+B,CAAA;AAAA,IAChE;AACA,IAAA,MAAM,SAAA,GAAY,OAAO,MAAM,CAAA;AAE/B,IAAA,IAAI,SAAA,GAAY,IAAA,CAAK,SAAA,EAAU,EAAG;AACjC,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,OAAA,EAAU,SAAS,CAAA,yBAAA,EAA4B,IAAA,CAAK,WAAW,CAAA;AAAA,OAChE;AAAA,IACD;AACA,IAAA,OAAO,SAAA;AAAA,EACR;AAAA,EAEQ,gBAAgBrE,MAAAA,EAAqB;AAC5C,IAAA,IAAI,IAAA,CAAK,MAAA,GAASA,MAAAA,GAAQ,IAAA,CAAK,MAAM,MAAA,EAAQ;AAC5C,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,6BAAA,EAAgCA,MAAK,CAAA,iBAAA,EAAoB,IAAA,CAAK,MAAM,cACvD,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,IAAA,CAAK,MAAM,CAAA,UAAA;AAAA,OAC7C;AAAA,IACD;AAAA,EACD;AACD;;;AC9PO,IAAM,gBAAN,MAAoB;AAAA,EAClB,MAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EAER,WAAA,CAAY,kBAAkB,GAAA,EAAK;AAClC,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,UAAA,CAAW,eAAe,CAAA;AAC5C,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAO,MAAM,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AAAA,EACf;AAAA;AAAA,EAIA,QAAQ,KAAA,EAAqB;AAC5B,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,GAAA,EAAM;AAC9B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,KAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA,EAAQ;AAChC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAI,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,UAAA,EAAY;AACpC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAI,CAAA;AAC5C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAA8B;AACtC,IAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,IAAA,IAAI,GAAA,GAAM,EAAA,IAAM,GAAA,GAAM,mBAAA,EAAwB;AAC7C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAE,CAAA;AAAA,IACjD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AAErB,IAAA,IAAA,CAAK,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA,EAAQ,OAAO,GAAA,GAAM,WAAY,GAAG,IAAI,CAAA;AACjE,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA;AAAA,MACT,KAAK,MAAA,GAAS,CAAA;AAAA,MACd,MAAA,CAAQ,GAAA,IAAO,GAAA,GAAO,WAAY,CAAA;AAAA,MAClC;AAAA,KACD;AACA,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,UAAU,KAAA,EAAqB;AAC9B,IAAA,IAAI,KAAA,GAAQ,EAAA,IAAM,KAAA,GAAA,CAAS,EAAA,IAAM,QAAQ,EAAA,EAAI;AAC5C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,CAAA,CAAE,CAAA;AAAA,IACpD;AACA,IAAA,IAAA,CAAK,QAAA,CAAS,KAAA,GAAA,CAAU,EAAA,IAAM,GAAA,IAAO,EAAG,CAAA;AACxC,IAAA,IAAA,CAAK,QAAA,CAAS,SAAS,GAAG,CAAA;AAC1B,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,QAAQ,KAAA,EAAqB;AAC5B,IAAA,IAAI,KAAA,GAAQ,IAAA,IAAQ,KAAA,GAAQ,GAAA,EAAK;AAChC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,KAAK,CAAA,CAAE,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,MAAA,EAAQ,KAAK,CAAA;AACpC,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,IAAI,KAAA,GAAQ,MAAA,IAAU,KAAA,GAAQ,KAAA,EAAO;AACpC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,IAAI,KAAA,GAAQ,WAAA,IAAe,KAAA,GAAQ,UAAA,EAAY;AAC9C,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAI,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,MAAM,GAAA,GAAM,EAAE,EAAA,IAAM,GAAA,CAAA;AACpB,IAAA,MAAM,GAAA,GAAA,CAAO,MAAM,GAAA,IAAO,EAAA;AAC1B,IAAA,IAAI,KAAA,GAAQ,GAAA,IAAO,KAAA,GAAQ,GAAA,EAAK;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,CAAE,CAAA;AAAA,IACnD;AACA,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AAGrB,IAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,EAAA,GAAK,KAAA,IAAS,MAAM,GAAA,CAAA,GAAO,KAAA;AACpD,IAAA,IAAA,CAAK,IAAA,CAAK,UAAU,IAAA,CAAK,MAAA,EAAQ,OAAO,QAAA,GAAW,WAAY,GAAG,IAAI,CAAA;AACtE,IAAA,IAAA,CAAK,IAAA,CAAK,SAAA;AAAA,MACT,KAAK,MAAA,GAAS,CAAA;AAAA,MACd,MAAA,CAAQ,QAAA,IAAY,GAAA,GAAO,WAAY,CAAA;AAAA,MACvC;AAAA,KACD;AACA,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,UAAU,KAAA,EAAqB;AAC9B,IAAA,MAAM,GAAA,GAAM,EAAE,EAAA,IAAM,IAAA,CAAA;AACpB,IAAA,MAAM,GAAA,GAAA,CAAO,MAAM,IAAA,IAAQ,EAAA;AAC3B,IAAA,IAAI,KAAA,GAAQ,GAAA,IAAO,KAAA,GAAQ,GAAA,EAAK;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yBAAA,EAA4B,KAAK,CAAA,CAAE,CAAA;AAAA,IACpD;AAEA,IAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,EAAA,GAAK,KAAA,IAAS,MAAM,IAAA,CAAA,GAAQ,KAAA;AACrD,IAAA,IAAA,CAAK,QAAA,CAAS,QAAA,GAAA,CAAa,EAAA,IAAM,GAAA,IAAO,EAAG,CAAA;AAC3C,IAAA,IAAA,CAAK,QAAA,CAAS,YAAY,GAAG,CAAA;AAC7B,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,SAAS,KAAA,EAAqB;AAC7B,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,MAAA,EAAQ,OAAO,IAAI,CAAA;AAC7C,IAAA,IAAA,CAAK,MAAA,IAAU,CAAA;AACf,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,UAAU,KAAA,EAAsB;AAC/B,IAAA,IAAA,CAAK,eAAe,CAAC,CAAA;AACrB,IAAA,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ,CAAA,GAAI,QAAQ,CAAA,GAAI,CAAA;AACzC,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA,EAIA,WAAWA,MAAAA,EAAyB;AACnC,IAAA,IAAA,CAAK,cAAA,CAAeA,OAAM,MAAM,CAAA;AAChC,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAIA,MAAAA,EAAO,IAAA,CAAK,MAAM,CAAA;AAClC,IAAA,IAAA,CAAK,UAAUA,MAAAA,CAAM,MAAA;AACrB,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,eAAA,CAAgBA,QAAmB,cAAA,EAA+B;AACjE,IAAA,IAAI,cAAA,KAAmB,MAAA,IAAaA,MAAAA,CAAM,MAAA,KAAW,cAAA,EAAgB;AACpE,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,sCAAA,EAAyC,cAAc,CAAA,MAAA,EAASA,MAAAA,CAAM,MAAM,CAAA;AAAA,OAC7E;AAAA,IACD;AACA,IAAA,OAAO,IAAA,CAAK,WAAWA,MAAK,CAAA;AAAA,EAC7B;AAAA,EAEA,cAAcA,MAAAA,EAAyB;AACtC,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAOA,MAAAA,CAAM,MAAM,CAAC,CAAA;AAClC,IAAA,OAAO,IAAA,CAAK,WAAWA,MAAK,CAAA;AAAA,EAC7B;AAAA,EAEA,YAAYC,IAAAA,EAAmB;AAC9B,IAAA,MAAMD,MAAAA,GAAQ,IAAI,WAAA,EAAY,CAAE,OAAOC,IAAG,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,cAAcD,MAAK,CAAA;AAAA,EAChC;AAAA,EAEA,aAAa,KAAA,EAAqB;AACjC,IAAA,OAAO,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EAC3B;AAAA,EAEA,WAAA,CACC,OACAsE,WAAAA,EACO;AACP,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAC1C,MAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,IACf,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,QAAQ,CAAC,CAAA;AACd,MAAAA,WAAAA,CAAW,MAAM,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,QAAA,CACC,OACA,SAAA,EACO;AACP,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,KAAA,CAAM,MAAM,CAAC,CAAA;AAClC,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACzB,MAAA,SAAA,CAAU,MAAM,IAAI,CAAA;AAAA,IACrB;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,CACC,OACA,OAAA,EACO;AACP,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAC,QAAQ,CAAC,CAAA;AAAA,QACT,IAAA;AAAA,QACA,MAAM,CAAC;AAAA,OACR;AAAA,IACD;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA,EAEA,QAAA,CACC,GAAA,EACA,QAAA,EACAA,WAAAA,EACO;AACP,IAAA,IAAA,CAAK,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC,CAAA;AAC9B,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,CAAA,IAAK,GAAA,EAAK;AAC/B,MAAA,QAAA,CAAS,MAAM,GAAG,CAAA;AAClB,MAAAA,WAAAA,CAAW,MAAM,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA,EAIA,OAAA,GAAsB;AACrB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAA,GAAqB;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,KAAK,MAAM,CAAA;AAAA,EAC3C;AAAA,EAEA,MAAA,GAAiB;AAChB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACb;AAAA,EAEA,KAAA,GAAc;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,CAAA;AACd,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,eAAA,EAA+B;AACtC,IAAA,IAAA,CAAK,eAAe,eAAe,CAAA;AACnC,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA,EAIQ,eAAe,MAAA,EAAsB;AAC5C,IAAA,MAAM,QAAA,GAAW,KAAK,MAAA,GAAS,MAAA;AAC/B,IAAA,IAAI,QAAA,IAAY,IAAA,CAAK,MAAA,CAAO,MAAA,EAAQ;AACnC,MAAA;AAAA,IACD;AAEA,IAAA,IAAI,WAAA,GAAc,IAAA,CAAK,MAAA,CAAO,MAAA,GAAS,CAAA;AACvC,IAAA,OAAO,cAAc,QAAA,EAAU;AAC9B,MAAA,WAAA,IAAe,CAAA;AAAA,IAChB;AACA,IAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,WAAW,CAAA;AAC5C,IAAA,SAAA,CAAU,GAAA,CAAI,KAAK,MAAM,CAAA;AACzB,IAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,QAAA,CAAS,IAAA,CAAK,OAAO,MAAM,CAAA;AAAA,EAC5C;AACD;;;ACvPO,IAAM,MAAA,GAAS;AAAA,EACrB,EAAA,EAAI,OAAsB,EAAE,IAAA,EAAM,IAAA,EAAK,CAAA;AAAA,EACvC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,IAAA,EAAM,OAAsB,EAAE,IAAA,EAAM,MAAA,EAAO,CAAA;AAAA,EAC3C,EAAA,EAAI,OAAsB,EAAE,IAAA,EAAM,IAAA,EAAK,CAAA;AAAA,EACvC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,IAAA,EAAM,OAAsB,EAAE,IAAA,EAAM,MAAA,EAAO,CAAA;AAAA,EAC3C,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,GAAA,EAAK,OAAsB,EAAE,IAAA,EAAM,KAAA,EAAM,CAAA;AAAA,EACzC,IAAA,EAAM,OAAsB,EAAE,IAAA,EAAM,MAAA,EAAO,CAAA;AAAA,EAC3C,MAAA,EAAQ,OAAsB,EAAE,IAAA,EAAM,QAAA,EAAS,CAAA;AAAA,EAC/C,KAAA,EAAO,OAAsB,EAAE,IAAA,EAAM,OAAA,EAAQ,CAAA;AAAA,EAC7C,IAAA,EAAM,OAAsB,EAAE,IAAA,EAAM,MAAA,EAAO,CAAA;AAAA,EAE3C,UAAA,EAAY,CAAC,MAAA,MAAmC;AAAA,IAC/C,IAAA,EAAM,YAAA;AAAA,IACN;AAAA,GACD,CAAA;AAAA,EAEA,GAAA,EAAK,CAAC,OAAA,MAA2C;AAAA,IAChD,IAAA,EAAM,KAAA;AAAA,IACN;AAAA,GACD,CAAA;AAAA,EAEA,MAAA,EAAQ,CAAC,KAAA,MAAyC;AAAA,IACjD,IAAA,EAAM,QAAA;AAAA,IACN;AAAA,GACD,CAAA;AAAA,EAEA,KAAA,EAAO,IAAI,QAAA,MAA8C;AAAA,IACxD,IAAA,EAAM,OAAA;AAAA,IACN;AAAA,GACD,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAA,EAAQ,CAAC,MAAA,MAAsD;AAAA,IAC9D,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,MAAO,EAAE,IAAA,EAAM,MAAA,EAAO,CAAE;AAAA,GAC1D,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,IAAA,EAAM,CAAC,QAAA,MAA+D;AAAA,IACrE,IAAA,EAAM,MAAA;AAAA,IACN,QAAA,EAAU,QAAA,CAAS,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,MAAO,EAAE,IAAA,EAAM,MAAA,EAAO,CAAE;AAAA,GAC9D,CAAA;AAAA,EAEA,GAAA,EAAK,CAAC,GAAA,EAAoB,KAAA,MAAyC;AAAA,IAClE,IAAA,EAAM,KAAA;AAAA,IACN,GAAA;AAAA,IACA;AAAA,GACD,CAAA;AAAA,EAEA,MAAA,EAAQ,OAAsB,EAAE,IAAA,EAAM,QAAA,EAAS;AAChD;AAOO,SAAS,SAAA,CAAU,QAAuB,KAAA,EAA4B;AAC5E,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,EAAc;AACjC,EAAA,UAAA,CAAW,MAAA,EAAQ,QAAQ,KAAK,CAAA;AAChC,EAAA,OAAO,OAAO,OAAA,EAAQ;AACvB;AAKO,SAAS,WAAA,CAAe,QAAuB,IAAA,EAAqB;AAC1E,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,IAAI,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAA;AAGvC,EAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAY,EAAG;AAC1B,IAAA,OAAA,CAAQ,IAAA;AAAA,MACP,CAAA,qBAAA,EAAwB,MAAA,CAAO,SAAA,EAAW,CAAA,8BAAA;AAAA,KAC3C;AAAA,EACD;AAEA,EAAA,OAAO,MAAA;AACR;AAKO,SAAS,iBAAA,CACf,QACA,IAAA,EACI;AACJ,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,IAAI,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,EAAQ,MAAM,CAAA;AAEvC,EAAA,IAAI,CAAC,MAAA,CAAO,WAAA,EAAY,EAAG;AAC1B,IAAA,MAAM,IAAI,KAAA;AAAA,MACT,CAAA,iBAAA,EAAoB,MAAA,CAAO,SAAA,EAAW,CAAA,8BAAA;AAAA,KACvC;AAAA,EACD;AAEA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,UAAA,CACR,MAAA,EACA,MAAA,EACA,KAAA,EACO;AACP,EAAA,QAAQ,OAAO,IAAA;AAAM,IACpB,KAAK,IAAA;AACJ,MAAA,MAAA,CAAO,QAAQ,KAAe,CAAA;AAC9B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,MAAA;AACJ,MAAA,MAAA,CAAO,UAAU,KAAe,CAAA;AAChC,MAAA;AAAA,IACD,KAAK,IAAA;AACJ,MAAA,MAAA,CAAO,QAAQ,KAAe,CAAA;AAC9B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,MAAA;AACJ,MAAA,MAAA,CAAO,UAAU,KAAe,CAAA;AAChC,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,KAAA;AACJ,MAAA,MAAA,CAAO,SAAS,KAAe,CAAA;AAC/B,MAAA;AAAA,IACD,KAAK,MAAA;AACJ,MAAA,MAAA,CAAO,UAAU,KAAgB,CAAA;AACjC,MAAA;AAAA,IACD,KAAK,QAAA;AACJ,MAAA,MAAA,CAAO,YAAY,KAAe,CAAA;AAClC,MAAA;AAAA,IACD,KAAK,OAAA;AACJ,MAAA,MAAA,CAAO,cAAc,KAAmB,CAAA;AACxC,MAAA;AAAA,IACD,KAAK,MAAA;AAEJ,MAAA;AAAA,IACD,KAAK,YAAA,EAAc;AAClB,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,CAAO,MAAA,EAAQ;AACjC,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,CAAA,sCAAA,EAAyC,MAAA,CAAO,MAAM,CAAA,MAAA,EAAS,IAAI,MAAM,CAAA;AAAA,SAC1E;AAAA,MACD;AACA,MAAA,MAAA,CAAO,gBAAgB,GAAG,CAAA;AAC1B,MAAA;AAAA,IACD;AAAA,IACA,KAAK,QAAA,EAAU;AACd,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,IAAI,GAAA,CAAI,WAAW,EAAA,EAAI;AACtB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,GAAA,CAAI,MAAM,CAAA,CAAE,CAAA;AAAA,MACrE;AACA,MAAA,MAAA,CAAO,gBAAgB,GAAG,CAAA;AAC1B,MAAA;AAAA,IACD;AAAA,IACA,KAAK,KAAA,EAAO;AACX,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,MAAM,CAAC,CAAA;AAClC,MAAA,KAAA,MAAW,QAAQ,GAAA,EAAK;AACvB,QAAA,UAAA,CAAW,MAAA,EAAQ,MAAA,CAAO,OAAA,EAAS,IAAI,CAAA;AAAA,MACxC;AACA,MAAA;AAAA,IACD;AAAA,IACA,KAAK,QAAA,EAAU;AACd,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AAC1C,QAAA,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,MACjB,CAAA,MAAO;AACN,QAAA,MAAA,CAAO,QAAQ,CAAC,CAAA;AAChB,QAAA,UAAA,CAAW,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAO,KAAK,CAAA;AAAA,MACvC;AACA,MAAA;AAAA,IACD;AAAA,IACA,KAAK,OAAA,EAAS;AACb,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,IAAI,GAAA,CAAI,MAAA,KAAW,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ;AAC1C,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,mCAAmC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,MAAA,EAAS,IAAI,MAAM,CAAA;AAAA,SAC7E;AAAA,MACD;AACA,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AAChD,QAAA,UAAA,CAAW,QAAQ,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,GAAA,CAAI,CAAC,CAAC,CAAA;AAAA,MAC9C;AACA,MAAA;AAAA,IACD;AAAA,IACA,KAAK,QAAA,EAAU;AACd,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,KAAA,MAAWC,MAAAA,IAAS,OAAO,MAAA,EAAQ;AAClC,QAAA,IAAI,EAAEA,MAAAA,CAAM,IAAA,IAAQ,GAAA,CAAA,EAAM;AACzB,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyBA,MAAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAAA,QACtD;AACA,QAAA,UAAA,CAAW,QAAQA,MAAAA,CAAM,MAAA,EAAQ,GAAA,CAAIA,MAAAA,CAAM,IAAI,CAAC,CAAA;AAAA,MACjD;AACA,MAAA;AAAA,IACD;AAAA,IACA,KAAK,MAAA,EAAQ;AACZ,MAAA,MAAM,SAAA,GAAY,KAAA;AAClB,MAAA,MAAM,YAAA,GAAe,OAAO,QAAA,CAAS,SAAA;AAAA,QACpC,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,KAAS,SAAA,CAAU;AAAA,OAC7B;AACA,MAAA,IAAI,iBAAiB,EAAA,EAAI;AACxB,QAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,QAAA,CAAS,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAClE,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,CAAA,iBAAA,EAAoB,SAAA,CAAU,OAAO,CAAA,kBAAA,EAAqB,aAAa,CAAA;AAAA,SACxE;AAAA,MACD;AACA,MAAA,MAAA,CAAO,aAAa,YAAY,CAAA;AAChC,MAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA,CAAE,MAAA;AACpD,MAAA,IAAI,kBAAkB,IAAA,EAAM;AAC3B,QAAA,UAAA,CAAW,MAAA,EAAQ,aAAA,EAAe,SAAA,CAAU,KAAK,CAAA;AAAA,MAClD;AACA,MAAA;AAAA,IACD;AAAA,IACA,KAAK,KAAA,EAAO;AACX,MAAA,MAAM,GAAA,GAAM,KAAA;AACZ,MAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,IAAI,CAAC,CAAA;AAChC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,GAAA,EAAK;AACzB,QAAA,UAAA,CAAW,MAAA,EAAQ,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA;AAChC,QAAA,UAAA,CAAW,MAAA,EAAQ,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,MACnC;AACA,MAAA;AAAA,IACD;AAAA,IACA,SAAS;AACR,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,KAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,IACjE;AAAA;AAEF;AAEA,SAAS,SAAA,CAAU,QAAuB,MAAA,EAAgC;AACzE,EAAA,QAAQ,OAAO,IAAA;AAAM,IACpB,KAAK,IAAA;AACJ,MAAA,OAAO,OAAO,MAAA,EAAO;AAAA,IACtB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,MAAA;AACJ,MAAA,OAAO,OAAO,QAAA,EAAS;AAAA,IACxB,KAAK,IAAA;AACJ,MAAA,OAAO,OAAO,MAAA,EAAO;AAAA,IACtB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,MAAA;AACJ,MAAA,OAAO,OAAO,QAAA,EAAS;AAAA,IACxB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,KAAA;AACJ,MAAA,OAAO,OAAO,OAAA,EAAQ;AAAA,IACvB,KAAK,MAAA;AACJ,MAAA,OAAO,OAAO,QAAA,EAAS;AAAA,IACxB,KAAK,QAAA;AACJ,MAAA,OAAO,OAAO,UAAA,EAAW;AAAA,IAC1B,KAAK,OAAA;AACJ,MAAA,OAAO,OAAO,YAAA,EAAa;AAAA,IAC5B,KAAK,MAAA;AACJ,MAAA,OAAO,MAAA;AAAA,IACR,KAAK,YAAA;AACJ,MAAA,OAAO,MAAA,CAAO,cAAA,CAAe,MAAA,CAAO,MAAM,CAAA;AAAA,IAC3C,KAAK,QAAA;AACJ,MAAA,OAAO,MAAA,CAAO,eAAe,EAAE,CAAA;AAAA,IAChC,KAAK,KAAA,EAAO;AACX,MAAA,MAAM,YAAA,GAAe,OAAO,OAAA,EAAQ;AACpC,MAAA,IAAI,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACnD,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,cAAc,YAAY,CAAA,2BAAA;AAAA,SAC3B;AAAA,MACD;AACA,MAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,MAAA,MAAM,SAAoB,EAAC;AAC3B,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAChC,QAAA,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MAC9C;AACA,MAAA,OAAO,MAAA;AAAA,IACR;AAAA,IACA,KAAK,QAAA,EAAU;AACd,MAAA,MAAM,QAAA,GAAW,OAAO,MAAA,EAAO;AAC/B,MAAA,IAAI,QAAA,KAAa,GAAG,OAAO,IAAA;AAC3B,MAAA,IAAI,aAAa,CAAA,EAAG;AACnB,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,QAAQ,CAAA,CAAE,CAAA;AAAA,MAC3D;AACA,MAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA;AAAA,IACtC;AAAA,IACA,KAAK,OAAA,EAAS;AACb,MAAA,MAAM,SAAoB,EAAC;AAC3B,MAAA,KAAA,MAAW,aAAA,IAAiB,OAAO,QAAA,EAAU;AAC5C,QAAA,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,aAAa,CAAC,CAAA;AAAA,MAC7C;AACA,MAAA,OAAO,MAAA;AAAA,IACR;AAAA,IACA,KAAK,QAAA,EAAU;AACd,MAAA,MAAM,SAAkC,EAAC;AACzC,MAAA,KAAA,MAAWA,MAAAA,IAAS,OAAO,MAAA,EAAQ;AAClC,QAAA,MAAA,CAAOA,OAAM,IAAI,CAAA,GAAI,SAAA,CAAU,MAAA,EAAQA,OAAM,MAAM,CAAA;AAAA,MACpD;AACA,MAAA,OAAO,MAAA;AAAA,IACR;AAAA,IACA,KAAK,MAAA,EAAQ;AACZ,MAAA,MAAM,YAAA,GAAe,OAAO,WAAA,EAAY;AACxC,MAAA,IAAI,YAAA,IAAgB,MAAA,CAAO,QAAA,CAAS,MAAA,EAAQ;AAC3C,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,0BAA0B,YAAY,CAAA,OAAA,EAAU,MAAA,CAAO,QAAA,CAAS,SAAS,CAAC,CAAA;AAAA,SAC3E;AAAA,MACD;AACA,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA;AAC5C,MAAA,IAAI,OAAA,CAAQ,WAAW,IAAA,EAAM;AAC5B,QAAA,OAAO,EAAE,OAAA,EAAS,OAAA,CAAQ,IAAA,EAAK;AAAA,MAChC;AACA,MAAA,OAAO;AAAA,QACN,SAAS,OAAA,CAAQ,IAAA;AAAA,QACjB,KAAA,EAAO,SAAA,CAAU,MAAA,EAAQ,OAAA,CAAQ,MAAM;AAAA,OACxC;AAAA,IACD;AAAA,IACA,KAAK,KAAA,EAAO;AACX,MAAA,MAAM,YAAA,GAAe,OAAO,OAAA,EAAQ;AACpC,MAAA,IAAI,YAAA,GAAe,MAAA,CAAO,MAAA,CAAO,gBAAgB,CAAA,EAAG;AACnD,QAAA,MAAM,IAAI,KAAA;AAAA,UACT,cAAc,YAAY,CAAA,2BAAA;AAAA,SAC3B;AAAA,MACD;AACA,MAAA,MAAM,MAAA,GAAS,OAAO,YAAY,CAAA;AAClC,MAAA,MAAM,GAAA,uBAAU,GAAA,EAAsB;AACtC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAChC,QAAA,MAAM,GAAA,GAAM,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,GAAG,CAAA;AACxC,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA;AAC5C,QAAA,GAAA,CAAI,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,MACnB;AACA,MAAA,OAAO,GAAA;AAAA,IACR;AAAA,IACA,SAAS;AAER,MAAA,MAAM,WAAA,GAAqB,MAAA;AAC3B,MAAA,MAAM,IAAI,KAAA;AAAA,QACT,CAAA,qBAAA,EAAyB,YAA8B,IAAI,CAAA;AAAA,OAC5D;AAAA,IACD;AAAA;AAEF;;;ACpbA,IAAA,YAAA,GAKO,OAAA,CAAA,aAAA,EAAA,CAAA;AACP,IAAA,WAAA,GAAiB,OAAA,CAAA,YAAA,EAAA,CAAA;;;ACNjB,SAAS,UAAA,CAAW,GAAA,EAAiB,OAAA,GAAmB,KAAA,EAAK;AAC5D,EAAA,OAAO,CAAC,GAAI,OAAA,GAAU,IAAI,UAAA,CAAW,GAAG,CAAA,CAAE,OAAA,EAAO,GAAK,IAAI,UAAA,CAAW,GAAG,CAAE,CAAA,CACxE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAC1C,IAAA,CAAK,EAAE,CAAA;AACV;AAEM,SAAU,WAAW,GAAA,EAAe;AACzC,EAAA,MAAM/D,IAAAA,GAAM,UAAA,CAAW,GAAA,EAAK,IAAI,CAAA;AAChC,EAAA,IAAIA,IAAAA,CAAI,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,OAAO,CAAC,CAAA;AAChB,EAAA;AACA,EAAA,OAAO,MAAA,CAAO,CAAA,EAAA,EAAKA,IAAG,CAAA,CAAE,CAAA;AACzB;AAEM,SAAU,mBAAA,CACf,GAAA,EACA,KAAA,EACA,MAAA,EACA,MAAA,EAAc;AAEd,EAAA,MAAMA,IAAAA,GAAM,GAAA,CAAI,QAAA,CAAS,EAAE,CAAA;AAC3B,EAAA,MAAM,MAAA,GAASA,IAAAA,CAAI,QAAA,CAAS,KAAA,GAAQ,CAAA,EAAG,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAA;AAC9D,EAAA,KAAA,MAAW,CAAC,EAAA,EAAI,KAAK,CAAA,IAAK,MAAA,CACxB,MAAM,SAAS,CAAA,CACf,GAAA,CAAI,CAAC,SAAS,QAAA,CAAS,IAAA,EAAM,EAAE,CAAC,CAAA,CAChC,SAAO,EAAI;AACZ,IAAA,MAAA,CAAO,MAAA,GAAS,KAAA,GAAQ,CAAA,GAAI,EAAE,CAAA,GAAI,KAAA;AACnC,EAAA;AACD;AAEM,SAAU,aAAA,CAAc,KAAA,EAAe,GAAA,EAAiB,MAAA,EAAc;AAC3E,EAAA,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,UAAA,EAAY,CAAC,CAAA;AAChC,EAAA,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA;AACd,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,KAAU,CAAA;AAC5B,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,KAAU,EAAA;AAC5B,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,KAAU,EAAA;AAC7B;AAEM,SAAU,aAAA,CAAc,KAAA,EAAe,GAAA,EAAiB,MAAA,EAAc;AAC3E,EAAA,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,KAAA,EAAQ,CAAC,CAAA;AAC5B,EAAA,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA;AACd,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,KAAU,CAAA;AAC7B;AAEO,IAAM,gBAAA,GAAmB,CAC/B,cAAA,EACA,GAAA,EACA,MAAA,KACG;AACH,EAAA,IAAI,EAAA,EAAI,EAAA;AACR,EAAA,IAAI,OAAO,mBAAmB,QAAA,EAAU;AACvC,IAAA,IAAI,cAAA,IAAkB,OAAO,gBAAA,EAAkB;AAC9C,MAAA,IAAI,iBAAiB,CAAA,EAAG;AACvB,QAAA,MAAM,IAAI,KAAA,CAAM,kCAAA,GAAqC,cAAc,CAAA;AACpE,MAAA;AACA,MAAA,cAAA,GAAiB,OAAO,cAAc,CAAA;AACtC,MAAA,EAAA,GAAK,cAAA,KAAmB,CAAA;AACxB,MAAA,EAAA,GAAA,CAAM,iBAAiB,EAAA,IAAM,UAAA;IAC9B,CAAA,MAAO;AACN,MAAA,IAAI,iBAAiB,qBAAA,EAAuB;AAC3C,QAAA,MAAM,IAAI,KAAA,CAAM,qCAAA,GAAwC,cAAc,CAAA;AACvE,MAAA;AACA,MAAA,EAAA,GAAK,MAAA,CAAO,iBAAiB,WAAW,CAAA;AACxC,MAAA,EAAA,GAAK,MAAA,CAAQ,cAAA,IAAkB,GAAA,GAAO,WAAW,CAAA;AAClD,IAAA;EACD,CAAA,MAAO;AACN,IAAA,IAAI,cAAA,GAAiB,CAAA,IAAK,cAAA,GAAiB,qBAAA,EAAuB;AACjE,MAAA,MAAM,IAAI,KAAA,CAAM,kCAAA,GAAqC,cAAc,CAAA;AACpE,IAAA;AAEA,IAAA,EAAA,GAAK,cAAA,KAAmB,CAAA;AACxB,IAAA,EAAA,GAAA,CAAM,iBAAiB,EAAA,IAAM,UAAA;AAC9B,EAAA;AAEA,EAAA,GAAA,CAAI,MAAM,CAAA,GAAI,EAAA;AACd,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA,KAAO,CAAA;AACzB,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA,KAAO,EAAA;AACzB,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA,KAAO,EAAA;AACzB,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA;AAClB,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA,KAAO,CAAA;AACzB,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA,KAAO,EAAA;AACzB,EAAA,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GAAI,EAAA,KAAO,EAAA;AAC1B,CAAA;AAEO,IAAM,eAAA,GAAkB,CAAC,GAAA,EAAiB,MAAA,KAAkB;AAClE,EAAA,MAAM,KAAA,GAAQ,IAAI,MAAM,CAAA;AACxB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA;AAC3B,EAAA,IAAI,KAAA,KAAU,UAAa,IAAA,KAAS,MAAA;AACnC,IAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAEhC,EAAA,IAAI,MACF,KAAA,GACC,GAAA,CAAI,MAAA,GAAS,CAAC,KAAK,CAAA,GACnB,GAAA,CAAI,MAAA,GAAS,CAAC,KAAK,EAAA,GACnB,GAAA,CAAI,MAAA,GAAS,CAAC,KAAK,EAAA,MACrB,CAAA;AACD,EAAA,IAAI,MACF,GAAA,CAAI,MAAA,GAAS,CAAC,CAAA,GACb,IAAI,MAAA,GAAS,CAAC,CAAA,IAAK,CAAA,GACnB,IAAI,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA,GACnB,QAAQ,EAAA,MACV,CAAA;AACD,EAAA,IAAI,KAAK,CAAA,EAAG;AACX,IAAA,OAAO,MAAA,CAAO,EAAE,CAAA,IAAK,MAAA,CAAO,EAAE,CAAA,IAAK,GAAA,CAAA;AACpC,EAAA;AACA,EAAA,OAAO,OAAO,EAAE,CAAA;AACjB,CAAA;AAEM,SAAU,UAAA,CACf,GAAA,EACA,MAAA,EACA,KAAA,EAAa;AAEb,EAAA,MAAMA,IAAAA,GAAM,WAAW,GAAA,CAAI,QAAA,CAAS,QAAQ,MAAA,GAAS,KAAK,GAAG,IAAI,CAAA;AACjE,EAAA,IAAIA,IAAAA,CAAI,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,OAAO,CAAC,CAAA;AAChB,EAAA;AACA,EAAA,OAAO,MAAA,CAAO,CAAA,EAAA,EAAKA,IAAG,CAAA,CAAE,CAAA;AACzB;AAEO,IAAM,YAAA,GAAe,CAAC,MAAA,EAAoB,MAAA,KAAkB;AAClE,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAM,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC9B,EAAA,IAAI,KAAA,KAAU,UAAa,IAAA,KAAS,MAAA;AACnC,IAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAEhC,EAAA,OACC,KAAA,GACA,MAAA,CAAO,MAAA,GAAS,CAAC,IAAI,CAAA,IAAK,CAAA,GAC1B,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,CAAA,IAAK,EAAA,GAC1B,OAAO,CAAA,IAAK,EAAA;AAEd,CAAA;AAEO,IAAM,YAAA,GAAe,CAAC,MAAA,EAAoB,MAAA,KAAkB;AAClE,EAAA,MAAM,KAAA,GAAQ,OAAO,MAAM,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA;AAC9B,EAAA,IAAI,KAAA,KAAU,UAAa,IAAA,KAAS,MAAA;AACnC,IAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAEhC,EAAA,OAAO,KAAA,GAAQ,OAAO,CAAA,IAAK,CAAA;AAC5B,CAAA;AAEO,IAAM,QAAA,GAAW,CACvB,KAAA,EACA,GAAA,EACA,KACA,UAAA,KACG;AACH,EAAA,IAAI,KAAA,GAAQ,GAAA,IAAO,KAAA,GAAQ,GAAA,EAAK;AAC/B,IAAA,MAAM,CAAA,GAAoC,EAAA;AAC1C,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,aAAa,CAAA,EAAG;AACnB,MAA6B;AAC5B,QAAA,KAAA,GAAQ,CAAA,IAAA,EAAO,CAAC,CAAA,QAAA,EAAW,CAAC,QAAQ,UAAA,GAAa,CAAA,IAAK,CAAC,CAAA,EAAG,CAAC,CAAA,CAAA;MAC5D;IAKD,CAAA,MAAO;AACN,MAAA,KAAA,GAAQ,MAAM,GAAG,CAAA,EAAG,CAAC,CAAA,QAAA,EAAW,GAAG,GAAG,CAAC,CAAA,CAAA;AACxC,IAAA;AACA,IAAA,MAAM,IAAI,KAAA,CAAM,sBAAA,GAAyB,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC9D,EAAA;AACD,CAAA;;;ACrKM,IAAO,UAAA,GAAP,cAA0B,KAAA,CAAK;AAIpC,EAAA,WAAA,CAAY,OAAA,EAAe;AAC1B,IAAA,KAAA,CAAM,OAAO,CAAA;AAHd,IAAA,IAAA,CAAA,YAAsB,EAAA;AAIrB,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA;AACxB,EAAA;AAEA,EAAA,cAAA,CAAe,SAAA,EAAiB;AAC/B,IAAA,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AACrC,IAAA,IAAA,CAAK,UACJ,IAAA,CAAK,eAAA,GACL,uCACA,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,CAAA;AACzB,EAAA;;;;AFOD,IAAM,gBAAgB,MAAoC;AACzD,EAAA,IAAK,WAAmB,MAAA,EAAQ;AAC/B,IAAA,OAAQ,WAAmB,MAAA,CAAO,WAAA;AACnC,EAAA;AACA,EAAA,OAAO,CAAC,GAAA,KAAQ,IAAI,UAAA,CAAW,GAAG,CAAA;AACnC,CAAA;AACA,IAAM,cAAc,aAAA,EAAa;AAEjC,IAAM,wBAE2D,MAAK;AACrE,EAAA,IAAK,WAAmB,MAAA,EAAQ;AAC/B,IAAA,OAAO,CAAC,MAAA,KAAkB;AACzB,MAAA,IAAI,MAAA,GAAS,EAAA;AAAI,QAAA,OAAO,YAAAF,OAAAA,CAAK,KAAA;AAC7B,MAAA,OAAO,CAAC,MAAA,EAAgB,GAAA,EAAiB,WACvC,GAAA,CAAY,KAAA,CAAM,QAAQ,MAAM,CAAA;AACnC,IAAA,CAAA;AACD,EAAA;AACA,EAAA,OAAO,MAAM,YAAAA,OAAAA,CAAK,KAAA;AACnB,CAAA;AACA,IAAM,sBAAsB,qBAAA,EAAqB;AAEjD,IAAM,iBAAgD,MAAK;AAC1D,EAAA,IAAK,WAAmB,MAAA,EAAQ;AAC/B,IAAA,OAAQ,WAAmB,MAAA,CAAO,UAAA;AACnC,EAAA;AACA,EAAA,OAAO,YAAAA,OAAAA,CAAK,MAAA;AACb,CAAA;AAGM,IAAO,YAAA,GAAP,MAAO,aAAA,CAAY;EAOxB,WAAA,GAAA;AACC,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAA,CAAK,UAAU,MAAO,IAAA,CAAK,IAAA,GAAO,WAAA,CAAY,KAAK,SAAS,CAAA;AAC5D,IAAA,IAAA,CAAK,cAAc,IAAA,CAAK,OAAA;AACzB,EAAA;AAEO,EAAA,IAAA,CAAK,KAAA,EAAc;AACzB,IAAA,OAAO,aAAA,CAAa,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AACrC,EAAA;EAEO,OAAO,IAAA,CAAK,OAAgB,MAAA,EAAoB;AACtD,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MACrC,OAAO,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,CAAA;AACpC,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AACO,EAAA,EAAA,CAAG,KAAA,EAAa;AACtB,IAAA,OAAO,aAAA,CAAa,EAAA,CAAG,KAAA,EAAO,IAAI,CAAA;AACnC,EAAA;EAEO,OAAO,EAAA,CAAG,OAAe,MAAA,EAAoB;AACnD,IAAA,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,GAAA,EAAM,CAAC,CAAA;AAC1B,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,CAAQ,IAAA,GAAO,MAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,GAAI,KAAA;AACpE,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AAEO,EAAA,GAAA,CAAI,KAAA,EAAa;AACvB,IAAA,OAAO,aAAA,CAAa,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA;EAEO,OAAO,GAAA,CAAI,OAAe,MAAA,EAAoB;AACpD,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,CAAQ,IAAA,GAAO,MACtC,aAAA,CAAc,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACzC,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AAEO,EAAA,GAAA,CAAI,KAAA,EAAa;AACvB,IAAA,OAAO,aAAA,CAAa,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA;EAEO,OAAO,GAAA,CAAI,OAAe,MAAA,EAAoB;AACpD,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,CAAQ,IAAA,GAAO,MACtC,aAAA,CAAc,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACzC,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AAEO,EAAA,GAAA,CAAI,KAAA,EAAsB;AAChC,IAAA,OAAO,aAAA,CAAa,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA;EAEO,OAAO,GAAA,CAAI,OAAwB,MAAA,EAAoB;AAC7D,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,CAAQ,IAAA,GAAO,MACtC,gBAAA,CAAiB,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC5C,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AAEO,EAAA,IAAA,CAAK,KAAA,EAAsB;AACjC,IAAA,OAAO,aAAA,CAAa,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AACrC,EAAA;EAEO,OAAO,IAAA,CAAK,OAAwB,MAAA,EAAoB;AAC9D,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MACtC,oBAAoB,KAAA,EAAO,EAAA,EAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACnD,IAAA,MAAA,CAAO,SAAA,IAAa,EAAA;AACrB,EAAA;AAEO,EAAA,IAAA,CAAK,KAAA,EAAsB;AACjC,IAAA,OAAO,aAAA,CAAa,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AACrC,EAAA;EAEO,OAAO,IAAA,CAAK,OAAwB,MAAA,EAAoB;AAC9D,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MACtC,oBAAoB,KAAA,EAAO,EAAA,EAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACnD,IAAA,MAAA,CAAO,SAAA,IAAa,EAAA;AACrB,EAAA;AAEO,EAAA,IAAA,CAAK,KAAA,EAAsB;AACjC,IAAA,OAAO,aAAA,CAAa,IAAA,CAAK,KAAA,EAAO,IAAI,CAAA;AACrC,EAAA;EAEO,OAAO,IAAA,CAAK,OAAwB,MAAA,EAAoB;AAC9D,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MACtC,oBAAoB,KAAA,EAAO,EAAA,EAAI,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACnD,IAAA,MAAA,CAAO,SAAA,IAAa,EAAA;AACrB,EAAA;AAEO,EAAA,GAAA,CAAI,KAAA,EAAa;AACvB,IAAA,OAAO,aAAA,CAAa,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA;EAEO,OAAO,GAAA,CAAI,OAAe,MAAA,EAAoB;AACpD,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,WAAW,8BAA8B,CAAA;AACpD,IAAA;AACA,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,CAAQ,IAAA,GAAO,UACtC,YAAA,CAAA,YAAA,EAAa,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACxC,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AAEO,EAAA,GAAA,CAAI,KAAA,EAAa;AACvB,IAAA,OAAO,aAAA,CAAa,GAAA,CAAI,KAAA,EAAO,IAAI,CAAA;AACpC,EAAA;EAEO,OAAO,GAAA,CAAI,OAAe,MAAA,EAAoB;AACpD,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,WAAW,8BAA8B,CAAA;AACpD,IAAA;AACA,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,OAAO,OAAA,CAAQ,IAAA,GAAO,UACtC,YAAA,CAAA,aAAA,EAAc,KAAA,EAAO,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACzC,IAAA,MAAA,CAAO,SAAA,IAAa,CAAA;AACrB,EAAA;AAEO,EAAA,MAAA,CAAOL,IAAAA,EAAW;AACxB,IAAA,OAAO,aAAA,CAAa,MAAA,CAAOA,IAAAA,EAAK,IAAI,CAAA;AACrC,EAAA;EAEO,OAAO,MAAA,CAAOA,MAAa,MAAA,EAAoB;AACrD,IAAA,MAAM,GAAA,GAAM,cAAA,EAAc,CAAGA,IAAG,CAAA;AAChC,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MAAK;AAC3C,MAAA,aAAA,CAAc,GAAA,EAAK,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACtC,MAAA,mBAAA,CAAoB,GAAG,CAAA,CAAEA,IAAAA,EAAK,MAAA,CAAO,IAAA,EAAM,SAAS,CAAC,CAAA;AACtD,IAAA,CAAA;AACA,IAAA,MAAA,CAAO,aAAa,CAAA,GAAI,GAAA;AACzB,EAAA;AAEO,EAAA,OAAO,aACbA,IAAAA,EACA,MAAA,EACA,YAAA,GAIY,aAAA,EACZ,aAAa,CAAA,EAAC;AAEd,IAAA,MAAM,GAAA,GAAM,WAAA,CAAAK,OAAAA,CAAK,MAAA,CAAOL,IAAG,CAAA;AAC3B,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MAAK;AAC3C,MAAA,YAAA,CAAa,GAAA,EAAK,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACrC,MAAA,mBAAA,CAAoB,GAAG,CAAA,CAAEA,IAAAA,EAAK,MAAA,CAAO,IAAA,EAAM,SAAS,UAAU,CAAA;AAC/D,IAAA,CAAA;AAEA,IAAA,MAAA,CAAO,aAAa,UAAA,GAAa,GAAA;AAClC,EAAA;AAEO,EAAA,GAAA,CAAI,KAAA,EAAiB;AAC3B,IAAA,IAAI,SAAS,IAAA,CAAK,SAAA;AAClB,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,GAAO,MAAK;AACvC,MAAA,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AAC5B,IAAA,CAAA;AACA,IAAA,IAAA,CAAK,aAAa,KAAA,CAAM,MAAA;AACzB,EAAA;AAEO,EAAA,UAAA,CAAW,KAAA,EAAiB;AAClC,IAAA,OAAO,aAAA,CAAa,UAAA,CAAW,KAAA,EAAO,IAAI,CAAA;AAC3C,EAAA;EAEO,OAAO,UAAA,CAAW,OAAmB,MAAA,EAAoB;AAC/D,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MAAK;AAC3C,MAAA,aAAA,CAAc,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC/C,MAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAA,GAAS,CAAC,CAAA;AAClC,IAAA,CAAA;AACA,IAAA,MAAA,CAAO,SAAA,IAAa,MAAM,MAAA,GAAS,CAAA;AACpC,EAAA;AAEO,EAAA,OAAO,iBACb,KAAA,EACA,MAAA,EACA,YAAA,GAIY,aAAA,EACZ,aAAa,CAAA,EAAC;AAEd,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MAAK;AAC3C,MAAA,YAAA,CAAa,KAAA,CAAM,MAAA,EAAQ,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC9C,MAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAA,GAAS,UAAU,CAAA;AAC3C,IAAA,CAAA;AAEA,IAAA,MAAA,CAAO,SAAA,IAAa,MAAM,MAAA,GAAS,UAAA;AACpC,EAAA;EAEO,OAAO,eAAA,CAAgB,OAAmB,MAAA,EAAoB;AACpE,IAAA,IAAI,SAAS,MAAA,CAAO,SAAA;AACpB,IAAA,MAAA,CAAO,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAO,MAAK;AAC3C,MAAA,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AAC9B,IAAA,CAAA;AACA,IAAA,MAAA,CAAO,aAAa,KAAA,CAAM,MAAA;AAC3B,EAAA;AAEO,EAAA,OAAO,oBACb,QAAA,EAA0B;AAE1B,IAAA,IAAI,aAAa,IAAA,EAAM;AACtB,MAAA,OAAO;AACN,QAAA,CAAC,KAAA,EAAe,GAAA,EAAiB,MAAA,KAC/B,GAAA,CAAI,MAAM,CAAA,GAAI,KAAA;AAChB,QAAA;;AAEF,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,CAAC,eAAe,CAAC,CAAA;AACzB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,CAAC,eAAe,CAAC,CAAA;IACzB,CAAA,MAAO;AACN,MAAA,MAAM,IAAI,KAAA,CAAM,wBAAA,GAA2B,QAAQ,CAAA;AACpD,IAAA;AACD,EAAA;AAEO,EAAA,OAAO,MACb,QAAA,EAAuB;AAKvB,IAAA,IAAI,aAAa,IAAA,EAAM;AACtB,MAAA,OAAO,aAAA,CAAa,EAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,QAAA,EAAU;AACjC,MAAA,OAAO,aAAA,CAAa,MAAA;IACrB,CAAA,MAAO;AACN,MAAA,MAAM,IAAI,KAAA,CAAM,wBAAA,GAA2B,QAAQ,CAAA;AACpD,IAAA;AACD,EAAA;EAEO,QAAA,GAAQ;AACd,IAAA,IAAI,UAAwB,IAAA,CAAK,WAAA;AACjC,IAAA,OAAO,WAAW,IAAA,EAAM;AACvB,MAAA,OAAA,EAAO;AACP,MAAA,OAAA,GAAU,OAAA,CAAQ,IAAA;AACnB,IAAA;AACA,IAAA,OAAO,IAAA,CAAK,IAAA;AACb,EAAA;;AAGK,IAAO,YAAA,GAAP,MAAO,aAAA,CAAY;AAIxB,EAAA,WAAA,CAAmB,GAAA,EAAe;AACjC,IAAA,IAAA,CAAK,IAAA,GAAO,GAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,CAAA;AAChB,EAAA;EAEA,IAAA,GAAI;AACH,IAAA,OAAO,aAAA,CAAa,KAAK,IAAI,CAAA;AAC9B,EAAA;AAEA,EAAA,OAAO,KAAK,MAAA,EAAoB;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AACxC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,IAAI,KAAA,KAAU,CAAA,IAAK,KAAA,KAAU,CAAA,EAAG;AAC/B,MAAA,MAAM,IAAI,UAAA,CACT,gCAAA,GAAmC,KAAA,GAAQ,4BAA4B,CAAA;AAEzE,IAAA;AACA,IAAA,OAAO,QAAQ,IAAA,GAAO,KAAA;AACvB,EAAA;EAEA,EAAA,GAAE;AACD,IAAA,OAAO,aAAA,CAAa,GAAG,IAAI,CAAA;AAC5B,EAAA;AAEA,EAAA,OAAO,GAAG,MAAA,EAAoB;AAC7B,IAAA,IAAI,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AACzC,MAAA,MAAM,IAAI,WAAW,sBAAsB,CAAA;AAC5C,IAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AACxC,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,GAAA,GAAG;AACF,IAAA,OAAO,aAAA,CAAa,IAAI,IAAI,CAAA;AAC7B,EAAA;AAEA,EAAA,OAAO,IAAI,MAAA,EAAoB;AAC9B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AACtD,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,GAAA,GAAG;AACF,IAAA,OAAO,aAAA,CAAa,IAAI,IAAI,CAAA;AAC7B,EAAA;AAEA,EAAA,OAAO,IAAI,MAAA,EAAoB;AAC9B,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AACtD,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,GAAA,GAAG;AACF,IAAA,OAAO,aAAA,CAAa,IAAI,IAAI,CAAA;AAC7B,EAAA;AAEA,EAAA,OAAO,IAAI,MAAA,EAAoB;AAC9B,IAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AACzD,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,IAAA,GAAI;AACH,IAAA,OAAO,aAAA,CAAa,KAAK,IAAI,CAAA;AAC9B,EAAA;AACA,EAAA,OAAO,KAAK,MAAA,EAAoB;AAC/B,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,SAAS,EAAE,CAAA;AACxD,IAAA,MAAA,CAAO,OAAA,IAAW,EAAA;AAClB,IAAA,OAAO,KAAA;AACR,EAAA;EACA,IAAA,GAAI;AACH,IAAA,OAAO,aAAA,CAAa,KAAK,IAAI,CAAA;AAC9B,EAAA;AAEA,EAAA,OAAO,KAAK,MAAA,EAAoB;AAC/B,IAAA,MAAM,QAAQ,UAAA,CAAW,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,SAAS,EAAE,CAAA;AACxD,IAAA,MAAA,CAAO,OAAA,IAAW,EAAA;AAClB,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,IAAA,GAAI;AACH,IAAA,OAAO,aAAA,CAAa,KAAK,IAAI,CAAA;AAC9B,EAAA;AAEA,EAAA,OAAO,KAAK,MAAA,EAAoB;AAC/B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAC5B,IAAA,OAAO,WAAW,GAAG,CAAA;AACtB,EAAA;EAEA,GAAA,GAAG;AACF,IAAA,OAAO,aAAA,CAAa,IAAI,IAAI,CAAA;AAC7B,EAAA;AAEA,EAAA,OAAO,IAAI,MAAA,EAAoB;AAC9B,IAAA,MAAM,KAAA,GAAA,IAAQ,YAAA,CAAA,WAAA,EAAY,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AACrD,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,WAAW,0BAA0B,CAAA;AAChD,IAAA;AACA,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,GAAA,GAAG;AACF,IAAA,OAAO,aAAA,CAAa,IAAI,IAAI,CAAA;AAC7B,EAAA;AAEA,EAAA,OAAO,IAAI,MAAA,EAAoB;AAC9B,IAAA,MAAM,KAAA,GAAA,IAAQ,YAAA,CAAA,YAAA,EAAa,MAAA,CAAO,IAAA,EAAM,OAAO,OAAO,CAAA;AACtD,IAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AAClB,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AACxB,MAAA,MAAM,IAAI,WAAW,0BAA0B,CAAA;AAChD,IAAA;AACA,IAAA,OAAO,KAAA;AACR,EAAA;EAEA,MAAA,GAAM;AACL,IAAA,OAAO,aAAA,CAAa,OAAO,IAAI,CAAA;AAChC,EAAA;AAEA,EAAA,OAAO,OAAO,MAAA,EAAoB;AACjC,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,EAAG;AACtB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,GAAU,GAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAC7B,MAAA,MAAM,IAAI,WAAW,6CAA6C,CAAA;AACnE,IAAA;AAEA,IAAA,IAAI;AACH,MAAA,MAAM,MAAA,GAAS,YAAAK,OAAAA,CAAK,IAAA,CAAK,OAAO,IAAA,EAAM,MAAA,CAAO,SAAS,GAAG,CAAA;AACzD,MAAA,MAAA,CAAO,OAAA,GAAU,GAAA;AACjB,MAAA,OAAO,MAAA;AACR,IAAA,CAAA,CAAA,OAAS,CAAA,EAAG;AACX,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6BAAA,EAAgC,CAAC,CAAA,CAAE,CAAA;AACzD,IAAA;AACD,EAAA;AAEA,EAAA,OAAO,aAAa,MAAA,EAAoB;AACvC,IAAA,MAAM,GAAA,GAAM,OAAO,GAAA,EAAG;AACtB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,GAAU,GAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAC7B,MAAA,MAAM,IAAI,WAAW,6CAA6C,CAAA;AACnE,IAAA;AAEA,IAAA,MAAM,SAAU,MAAA,CAAO,IAAA,CAAgB,SACtC,MAAA,EACA,MAAA,CAAO,SACP,GAAG,CAAA;AAEJ,IAAA,MAAA,CAAO,OAAA,GAAU,GAAA;AACjB,IAAA,OAAO,MAAA;AACR,EAAA;EAEA,OAAO,kBAAA,CACN,QACA,MAAA,EAAwC;AAExC,IAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,GAAU,GAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAC7B,MAAA,MAAM,IAAI,WAAW,6CAA6C,CAAA;AACnE,IAAA;AAEA,IAAA,IAAI;AACH,MAAA,MAAM,SAAU,MAAA,CAAO,IAAA,CAAgB,SACtC,KAAA,CAAA,EACA,MAAA,CAAO,SACP,GAAG,CAAA;AAEJ,MAAA,MAAA,CAAO,OAAA,GAAU,GAAA;AACjB,MAAA,OAAO,MAAA;AACR,IAAA,CAAA,CAAA,OAAS,CAAA,EAAG;AACX,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6BAAA,EAAgC,CAAC,CAAA,CAAE,CAAA;AACzD,IAAA;AACD,EAAA;EAEA,OAAO,YAAA,CACN,QACA,MAAA,EAAwC;AAExC,IAAA,MAAM,GAAA,GAAM,OAAO,MAAM,CAAA;AACzB,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,GAAU,GAAA;AAC7B,IAAA,IAAI,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,MAAA,EAAQ;AAC7B,MAAA,MAAM,IAAI,WAAW,6CAA6C,CAAA;AACnE,IAAA;AAEA,IAAA,IAAI;AACH,MAAA,MAAM,MAAA,GAAS,YAAAA,OAAAA,CAAK,IAAA,CAAK,OAAO,IAAA,EAAM,MAAA,CAAO,SAAS,GAAG,CAAA;AACzD,MAAA,MAAA,CAAO,OAAA,GAAU,GAAA;AACjB,MAAA,OAAO,MAAA;AACR,IAAA,CAAA,CAAA,OAAS,CAAA,EAAG;AACX,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,6BAAA,EAAgC,CAAC,CAAA,CAAE,CAAA;AACzD,IAAA;AACD,EAAA;EAEO,OAAO,IAAA,CACb,UACA,UAAA,EAAoB;AAMpB,IAAA,IAAI,aAAa,IAAA,EAAM;AACtB,MAAA,OAAO,aAAA,CAAa,EAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,QAAA,EAAU;AACjC,MAAA,OAAO,UAAA,GAAa,aAAA,CAAa,YAAA,GAAe,aAAA,CAAa,MAAA;AAC9D,IAAA,CAAA,MAAA,IAAW,aAAa,MAAA,EAAQ;AAC/B,MAAA,OAAO,aAAA,CAAa,IAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;AACrB,IAAA,CAAA,MAAA,IAAW,aAAa,KAAA,EAAO;AAC9B,MAAA,OAAO,aAAA,CAAa,GAAA;IACrB,CAAA,MAAO;AACN,MAAA,MAAM,IAAI,KAAA,CAAM,wBAAA,GAA2B,QAAQ,CAAA;AACpD,IAAA;AACD,EAAA;AAEO,EAAA,MAAA,CAAO,GAAA,EAAW;AACxB,IAAA,MAAM,GAAA,GAAM,KAAK,OAAA,GAAU,GAAA;AAC3B,IAAA,MAAM,SAAS,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,IAAA,CAAK,SAAS,GAAG,CAAA;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,GAAA;AACf,IAAA,OAAO,MAAA;AACR,EAAA;EAEA,UAAA,GAAU;AACT,IAAA,OAAO,aAAA,CAAa,WAAW,IAAI,CAAA;AACpC,EAAA;AAEA,EAAA,OAAO,UAAA,CAAW,MAAA,EAAsB,IAAA,GAAO,MAAA,CAAO,KAAG,EAAE;AAC1D,IAAA,OAAO,MAAA,CAAO,OAAO,IAAI,CAAA;AAC1B,EAAA;AAEA,EAAA,SAAA,CAAU,EAAA,EAAO;AAChB,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAG;AACpB,IAAA,MAAM,MAAA,GAAS,IAAI,KAAA,CAAW,GAAG,CAAA;AACjC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,EAAE,CAAA,EAAG;AAC7B,MAAA,MAAA,CAAO,CAAC,IAAI,EAAA,EAAE;AACf,IAAA;AACA,IAAA,OAAO,MAAA;AACR,EAAA;;;;AG1jBM,IAAM,gBAAA,GAAmB,CAAC,KAAA,KAAqB;AACrD,EAAA,IAAI,MAAM,EAAA;AACV,EAAA,IAAI,iBAAiB,QAAA,EAAU;AAC9B,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,OAAO,SAAA,EAAW;AACjB,MAAA,MAAM,YAAA,GAAe,MAAA,CAAO,cAAA,CAAe,SAAS,CAAA;AACpD,MAAA,IAAI,YAAA,IAAgB,YAAA,KAAiB,MAAA,IAAU,YAAA,CAAa,IAAA,EAAM;AACjE,QAAA,GAAA,CAAI,KAAK,YAAY,CAAA;AACrB,QAAA,SAAA,GAAY,YAAA;MACb,CAAA,MAAO;AACN,QAAA,OAAO,GAAA;AACR,MAAA;AACD,IAAA;AACD,EAAA;AACA,EAAA,OAAO,GAAA;AACR,CAAA;AAMO,IAAM,SAAA,GAAY,CAAC,KAAA,KAAe,gBAAA,CAAiB,KAAK,CAAA,CAAE,MAAA;AA4B3D,IAAO,WAAA,GAAP,MAAO,YAAA,CAAW;AAEvB,EAAA,WAAA,CAAY,WAAA,EAAsB;AACjC,IAAA,IAAA,CAAK,WAAA,GAAc,WAAA;AACpB,EAAA;EAEA,aAAA,GAAa;AACZ,IAAA,IAAI,OAAO,KAAK,WAAA,KAAgB,UAAA;AAAY,MAAA,OAAO,IAAA,CAAK,WAAA;AACxD,IAAA,IAAI,KAAK,WAAA,YAAuB,YAAA;AAC/B,MAAA,OAAO,IAAA,CAAK,YAAY,aAAA,EAAa;AACtC,IAAA,OAAO,MAAA;AACR,EAAA;;AAGK,IAAO,aAAP,MAAiB;AAEtB,EAAA,WAAA,CAAY,YAAA,EAA8B;AACzC,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACrB,EAAA;;AAOK,IAAO,UAAA,GAAP,cAA0B,WAAA,CAAW;;AAEpC,IAAM,MAAA,GAAS,CAAC,IAAA,KAA+B;AACrD,EAAA,OAAO,IAAI,WAAW,IAAI,CAAA;AAC3B;AAEM,IAAO,OAAA,GAAP,cAAuB,WAAA,CAAW;AAEvC,EAAA,WAAA,CAAY,aAAwB,YAAA,EAA8B;AACjE,IAAA,KAAA,CAAM,WAAW,CAAA;AACjB,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACrB,EAAA;;AAGM,IAAM,GAAA,GAAM,CAClB,IAAA,EACA,YAAA,GAAiC,KAAA,KACrB;AACZ,EAAA,OAAO,IAAI,OAAA,CAAQ,IAAA,EAAM,YAAY,CAAA;AACtC;AAEM,IAAO,cAAA,GAAP,cAA8B,WAAA,CAAW;AAE9C,EAAA,WAAA,CAAY,MAAiB,MAAA,EAAc;AAC1C,IAAA,KAAA,CAAM,IAAI,CAAA;AACV,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACf,EAAA;;AAEM,IAAM,UAAA,GAAa,CAAC,IAAA,EAAiB,MAAA,KAAkC;AAC7E,EAAA,OAAO,IAAI,cAAA,CAAe,IAAA,EAAM,MAAM,CAAA;AACvC;AAOM,IAAO,aAAP,MAAiB;AAQtB,EAAA,WAAA,CAAY,UAAA,EAGX;AACA,IAAA,IAAI,UAAA,EAAY;AACf,MAAA,IAAA,CAAK,SAAS,UAAA,CAAW,MAAA;AACzB,MAAA,IAAA,CAAK,UAAU,UAAA,CAAW,OAAA;IAC3B,CAAA,MAAO;AACN,MAAA,IAAA,CAAK,SAAS,EAAA;AACf,IAAA;AACD,EAAA;EACA,eAAA,GAAe;AACd,IAAA,IAAI,MAAgD,EAAA;AACpD,IAAA,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,CAACiE,MAAAA,EAAO,EAAA,KAAM;AACjC,MAAA,IAAI,CAACA,MAAAA,EAAO;AACX,QAAA,MAAM,IAAI,UAAA,CAAW,SAAA,GAAY,EAAA,GAAK,2BAA2B,CAAA;AAClE,MAAA;AACA,MAAA,IAAIA,MAAAA,CAAM,gBAAgB,WAAA,EAAa;AACtC,QAAA,IAAI,UAAA,GAAaA,MAAAA,CAAM,IAAA,CAAK,aAAA,EAAa;AACzC,QAAA,IAAI,UAAA;AAAY,UAAA,GAAA,CAAI,KAAK,UAAU,CAAA;MACpC,CAAA,MAAA,IAAW,OAAOA,MAAAA,CAAM,IAAA,KAAS,UAAA,EAAY;AAC5C,QAAA,GAAA,CAAI,IAAA,CAAKA,OAAM,IAAI,CAAA;AACpB,MAAA;IACD,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AACR,EAAA;;;;AC5HD,IAAM,oBAAA,GAAuB,GAAA;AAC7B,IAAM,iCAAA,GAAoC,GAAA;AAC1C,IAAM,wCAAA,GAA2C,GAAA;AACjD,IAAM,sCACL,wCAAA,GAA2C,iCAAA;AAC5C,IAAM,uBAAA,GACL,2CACA,iCAAA,GAAoC,CAAA;AAO/B,SAAUC,UAAAA,CACf,GAAA,EACA,MAAA,GAAuB,IAAI,cAAY,EAAE;AAEzC,EAAA,CACC,GAAA,CAAI,WAAA,CAAY,gBAAA,KACf,GAAA,CAAI,WAAA,CAAY,gBAAA,GAAmB,eAAA,CAAgB,GAAA,CAAI,WAAA,EAAa,IAAI,CAAA,CAAA,EACxE,GAAA,EAAK,MAAM,CAAA;AACb,EAAA,OAAO,OAAO,QAAA,EAAQ;AACvB;AAEA,SAAS,kBAAA,CACR,GAAA,EACA,MAAA,GAAuB,IAAI,cAAY,EAAE;AAEzC,EAAA,CACC,GAAA,CAAI,WAAA,CAAY,0BAAA,KACf,GAAA,CAAI,WAAA,CAAY,0BAAA,GAA6B,eAAA,CAC7C,GAAA,CAAI,WAAA,EACJ,KAAK,CAAA,CAAA,EAEL,GAAA,EAAK,MAAM,CAAA;AACb,EAAA,OAAO,OAAO,QAAA,EAAQ;AACvB;AAgBM,SAAUC,YAAAA,CACf,MAAA,EACA,SAAA,EACA,OAAA,EAAkC;AAGlC,EAAA,MAAM,MAAA,GAAS,IAAI,YAAA,CAAa,MAAM,CAAA;AACtC,EAAA,IAAI,UAAA,GAAa,OAAO,WAAA,KAAgB,UAAA;AACxC,EAAA,MAAM,SAAS,iBAAA,CAAkB,SAAA,EAAW,UAAU,CAAA,CAAE,QAAQ,OAAO,CAAA;AACvE,EAAA,IAA2B,MAAA,CAAO,OAAA,KAAY,OAAO,MAAA,EAAQ;AAC5D,IAAA,MAAM,IAAI,UAAA,CACT,CAAA,WAAA,EACC,OAAO,MAAA,GAAS,MAAA,CAAO,OACxB,CAAA,0GAAA,CAA4G,CAAA;AAE9G,EAAA;AACA,EAAA,OAAO,MAAA;AACR;AAEA,SAAS,cAAA,CACR,SAAA,EACA,SAAA,EACA,OAAA,EAAgC;AAEhC,EAAA,IAAI,OAAO,SAAA,CAAU,SAAA,IAAa,UAAA,EAAY;AAC7C,IAAA,OAAO,CAAC,GAAA,EAAK,MAAA,KAAW,SAAA,CAAU,SAAA,CAAU,KAAK,MAAM,CAAA;AACxD,EAAA;AACA,EAAA,IAAI;AACH,IAAA,MAAM,WAAW,MAAgD;AAChE,MAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AAClC,QAAA,OAAO,YAAA,CAAa,MAAM,SAAwB,CAAA;AACnD,MAAA,CAAA,MAAA,IAAW,cAAc,UAAA,EAAY;AACpC,QAAA,OAAO,YAAA,CAAa,UAAA;AACrB,MAAA,CAAA,MAAA,IAAW,qBAAqB,UAAA,EAAY;AAC3C,QAAA,MAAM,WAAA,GAAc,cAAA,CAAe,SAAA,EAAW,SAAA,CAAU,WAAW,CAAA;AAEnE,QAAA,OAAO,CAAC,KAAK,MAAA,KAAU;AACtB,UAAA,IAAI,OAAO,IAAA,EAAM;AAChB,YAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AACX,YAAA,WAAA,CAAY,KAAK,MAAM,CAAA;UACxB,CAAA,MAAO;AACN,YAAA,MAAA,CAAO,GAAG,CAAC,CAAA;AACZ,UAAA;AACD,QAAA,CAAA;MACD,CAAA,MAAA,IACC,SAAA,YAAqB,OAAA,IACrB,SAAA,YAAqB,cAAA,EACpB;AACD,QAAA,IAAI,SAAA,CAAU,gBAAgB,IAAA,EAAM;AACnC,UAAA,IAAI,qBAAqB,cAAA,EAAgB;AACxC,YAAA,OAAO,SAAS,SAAA,GACb,YAAA,CAAa,eAAA,GACb,CAAC,KAAK,MAAA,KAAU;AAChB,cAAA,IAAI,GAAA,CAAI,MAAA,KAAW,SAAA,CAAU,MAAA,EAAQ;AACpC,gBAAA,MAAM,IAAI,UAAA,CACT,CAAA,yDAAA,EAA4D,SAAS,CAAA,YAAA,EAAe,IAAI,MAAM,CAAA,YAAA,EAAe,SAAA,CAAU,MAAM,CAAA,CAAE,CAAA;AAEjI,cAAA;AACA,cAAA,OAAO,YAAA,CAAa,eAAA,CAAgB,GAAA,EAAK,MAAM,CAAA;AAChD,YAAA,CAAA;UACH,CAAA,MAAO;AACN,YAAA,IAAI,UAAU,YAAA,KAAiB,KAAA;AAC9B,cAAA,OAAO,YAAA,CAAa,UAAA;AAChB,iBAAA;AACJ,cAAA,MAAM,CAAC,UAAA,EAAY,KAAK,IAAI,YAAA,CAAa,mBAAA,CACxC,UAAU,YAAY,CAAA;AAEvB,cAAA,OAAO,CAAC,KAAK,MAAA,KACZ,YAAA,CAAa,iBAAiB,GAAA,EAAK,MAAA,EAAQ,YAAY,KAAK,CAAA;AAC9D,YAAA;AACD,UAAA;QACD,CAAA,MAAO;AACN,UAAA,MAAM,aACL,SAAA,YAAqB,cAAA,GAClB,SACA,YAAA,CAAa,KAAA,CAAM,UAAU,YAAY,CAAA;AAC7C,UAAA,MAAM,WAAA,GAAc,cAAA,CAAe,IAAA,EAAM,SAAA,CAAU,WAAW,CAAA;AAC9D,UAAA,OAAO,CAAC,KAAK,MAAA,KAAU;AACtB,YAAA,IAAI,MAAM,GAAA,CAAI,MAAA;AACd,YAAA,IAAI,CAAC,UAAA,EAAY;AAChB,cAAA,IAAK,SAAA,CAA6B,UAAU,GAAA,EAAK;AAChD,gBAAA,MAAM,IAAI,WACT,CAAA,0BAAA,EAA8B,SAAA,CAAkB,CAAC,CAAC,CAAA,UAAA,EACjD,GAAA,CAAI,MACL,CAAA,CAAE,CAAA;AAEJ,cAAA;YACD,CAAA,MAAO;AACN,cAAA,UAAA,CAAW,KAAK,MAAM,CAAA;AACvB,YAAA;AACA,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC7B,cAAA,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAA;AAC3B,YAAA;AACD,UAAA,CAAA;AACD,QAAA;AACD,MAAA,CAAA,MAAA,IAAW,qBAAqB,UAAA,EAAY;AAC3C,QAAA,MAAM,CAAC,UAAA,EAAY,KAAK,IAAI,YAAA,CAAa,mBAAA,CACxC,UAAU,YAAY,CAAA;AAEvB,QAAA,OAAO,CAAC,KAAK,MAAA,KACZ,YAAA,CAAa,aAAa,GAAA,EAAK,MAAA,EAAQ,YAAY,KAAK,CAAA;MAC1D,CAAA,MAAO;AACN,QAAA,OAAO,CAAC,KAAK,MAAA,KAAU;AACtB,UAAA,IACC,CAAC,SAAS,SAAA,IACV,CAAC,uBAAuB,GAAA,CAAI,WAAA,EAAa,SAAS,CAAA,EACjD;AACD,YAAA,MAAM,IAAI,UAAA,CACT,CAAA,qBAAA,EAAwB,SAAS,CAAA,mCAAA,EAAsC,iBAAA,CAAkB,SAAS,CAAA,EAAG,IAAI,CAAA,OAAA,EAAU,GAAA,CAAI,WAAA,CAAY,IAAI,CAAA,CAAE,CAAA;AAE3I,UAAA;AACA,UAAA,eAAA,CAAgB,GAAA,CAAI,WAAW,CAAA,CAAE,GAAA,EAAK,MAAM,CAAA;AAC7C,QAAA,CAAA;AACD,MAAA;AACD,IAAA,CAAA;AAEA,IAAA,MAAM,SAAS,QAAA,EAAQ;AAEvB,IAAA,IAAI,CAAC,SAAS,SAAA,EAAW;AACxB,MAAA,OAAO,CAAC,KAAU,MAAA,KAAwB;AACzC,QAAA,IAAI,GAAA,IAAO,IAAA,IAAQ,SAAA,YAAqB,UAAA,KAAe,KAAA,EAAO;AAC7D,UAAA,MAAM,IAAI,UAAA,CACT,CAAA,2CAAA,EAA8C,SAAS,CAAA,gFAAA,EAAmF,OAAO,SAAA,KAAc,UAAA,IAAc,SAAA,EAAW,IAAA,GAAO,SAAA,EAAW,IAAA,GAAO,SAAS,CAAA,yEAAA,CAA2E,CAAA;AAEvS,QAAA;AACA,QAAA,OAAO,MAAA,CAAO,KAAK,MAAM,CAAA;AAC1B,MAAA,CAAA;IACD;AAGD,EAAA,CAAA,CAAA,OAAS,KAAA,EAAO;AACf,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAChC,MAAA,KAAA,CAAM,eAAe,SAAS,CAAA;AAC/B,IAAA;AACA,IAAA,MAAM,KAAA;AACP,EAAA;AACD;AAEA,SAAS,eAAA,CAAgB,IAAA,EAAgB,qBAAA,GAAwB,IAAA,EAAI;AACpE,EAAA,IAAI,MAAA,GAAkD,MAAA;AACtD,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,IAAI,IAAA,GAAO,KAAA;AACX,EAAA,OAAO,IAAA,EAAM;AACZ,IAAA,IAAI,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,CAAC,CAAA;AAC9B,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,IAAA,GAAO,IAAA;AACP,MAAA,MAAM,QAAQ,MAAA,CAAO,OAAA;AACrB,MAAA,IAAI,SAAS,MAAA,EAAW;AACvB,QAAA,IAAI,IAAA,GAAO,MAAA;AAEX,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC9B,UAAA,MAAA,GAAS,IAAA,GACN,CAAC,GAAA,EAAK,MAAA,KAAU;AAChB,YAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAChB,YAAA,MAAA,CAAO,GAAG,KAAK,CAAA;AAChB,UAAA,CAAA,GACC,CAAC,IAAA,EAAM,MAAA,KAAW,YAAA,CAAa,EAAA,CAAG,OAAO,MAAM,CAAA;QACnD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChC,UAAA,IAAI,IAAA,EAAM;AACT,YAAA,MAAA,GAAS,CAAC,KAAK,MAAA,KAAU;AACxB,cAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAChB,cAAA,KAAA,MAAWC,MAAK,KAAA,EAAO;AACtB,gBAAA,MAAA,CAAO,GAAGA,EAAC,CAAA;AACZ,cAAA;AACD,YAAA,CAAA;UACD,CAAA,MAAO;AACN,YAAA,MAAA,GAAS,CAAC,MAAM,MAAA,KAAU;AACzB,cAAA,KAAA,MAAWA,MAAK,KAAA,EAAO;AACtB,gBAAA,MAAA,CAAO,GAAGA,EAAC,CAAA;AACZ,cAAA;AACD,YAAA,CAAA;AACD,UAAA;QACD,CAAA,MAAO;AAEN,UAAA,MAAA,GAAS,IAAA,GACN,CAAC,GAAA,EAAK,MAAA,KAAU;AAChB,YAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAChB,YAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AACpB,UAAA,CAAA,GACC,CAAC,IAAA,EAAM,MAAA,KAAW,MAAA,CAAO,OAAO,KAAK,CAAA;AACzC,QAAA;AACD,MAAA;AACA,MAAA,IAAI,qBAAA,IAAyB,OAAO,UAAA,EAAY;AAC/C,QAAA,IAAI,IAAA,GAAO,MAAA;AACX,QAAA,MAAA,GAAS,IAAA,GACN,CAAC,GAAA,EAAK,MAAA,KAAU;AAChB,UAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAChB,UAAA,MAAA,CAAO,WAAW,GAAA,EAAK,MAAA,EAAQ,CAACC,IAAAA,KAC/B,kBAAA,CAAmBA,IAAG,CAAC,CAAA;QAEzB,CAAA,GACC,CAAC,GAAA,EAAK,MAAA,KACN,MAAA,CAAO,UAAA,CAAW,GAAA,EAAK,MAAA,EAAQ,CAACA,IAAAA,KAC/B,kBAAA,CAAmBA,IAAG,CAAC,CAAA;MAE5B,CAAA,MAAO;AACN,QAAA,KAAA,MAAWJ,MAAAA,IAAS,OAAO,MAAA,EAAQ;AAClC,UAAA,IAAI,IAAA,GAAO,MAAA;AACX,UAAA,MAAM,WAAA,GAAc,cAAA,CAAeA,MAAAA,CAAM,GAAA,EAAKA,OAAM,IAAI,CAAA;AACxD,UAAA,IAAI,IAAA,EAAM;AACT,YAAA,MAAA,GAAS,CAAC,KAAK,MAAA,KAAU;AACxB,cAAA,IAAA,CAAK,KAAK,MAAM,CAAA;AAChB,cAAA,WAAA,CAAY,GAAA,CAAIA,MAAAA,CAAM,GAAG,CAAA,EAAG,MAAM,CAAA;AACnC,YAAA,CAAA;UACD,CAAA,MAAO;AACN,YAAA,MAAA,GAAS,CAAC,KAAK,MAAA,KAAW,WAAA,CAAY,IAAIA,MAAAA,CAAM,GAAG,GAAG,MAAM,CAAA;AAC7D,UAAA;AACD,QAAA;AACD,MAAA;AACD,IAAA,CAAA,MAAA,IAAW,QAAQ,CAAC,eAAA,CAAgB,IAAA,EAAM,CAAC,GAAG,MAAA,EAAQ;AACrD,MAAA,OAAO,MAAA;AACR,IAAA;AACA,IAAA,CAAA,EAAA;AACA,IAAA,IAAI,CAAA,IAAK,oBAAA,IAAwB,CAAC,IAAA,EAAM;AACvC,MAAA,MAAM,IAAI,UAAA,CAAW,CAAA,MAAA,EAAS,IAAA,CAAK,IAAI,CAAA,qBAAA,CAAuB,CAAA;AAC/D,IAAA;AACD,EAAA;AACD;AAEA,IAAM,4BAA4B,IAAA,GAAO,IAAA;AAEzC,SAAS,gBAAA,CACR,SAAA,EACA,SAAA,EACA,UAAA,EAAmB;AAEnB,EAAA,IAAI;AACH,IAAA,IAAI,OAAO,cAAc,QAAA,EAAU;AAClC,MAAA,OAAO,YAAA,CAAa,IAAA,CAAK,SAAA,EAA0B,UAAU,CAAA;AAC9D,IAAA;AAEA,IAAA,IAAI,cAAc,UAAA,EAAY;AAC7B,MAAA,OAAO,CAAC,MAAA,KAAW,MAAA,CAAO,UAAA,EAAU;AACrC,IAAA;AAEA,IAAA,IAAI,SAAA,YAAqB,OAAA,IAAW,SAAA,YAAqB,cAAA,EAAgB;AACxE,MAAA,IAAI,SAAA,CAAU,gBAAgB,IAAA,EAAM;AACnC,QAAA,IAAI,qBAAqB,cAAA,EAAgB;AACxC,UAAA,OAAO,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,UAAU,MAAM,CAAA;QAClD,CAAA,MAAO;AACN,UAAA,MAAM,UAAA,GAAa,YAAA,CAAa,IAAA,CAC/B,SAAA,CAAU,cACV,UAAU,CAAA;AAEX,UAAA,OAAO,CAAC,MAAA,KACP,YAAA,CAAa,WAAW,MAAA,EAAQ,UAAA,CAAW,MAAM,CAAC,CAAA;AACpD,QAAA;MACD,CAAA,MAAO;AACN,QAAA,IAAI,UAAA,GACH,SAAA,YAAqB,OAAA,GACjB,YAAA,CAAa,IAAA,CAAK,UAAU,YAAA,EAAc,UAAU,CAAA,GAGrD,MAAM,SAAA,CAAU,MAAA;AACpB,QAAA,MAAM,WAAA,GAAc,gBAAA,CACnB,IAAA,EACA,SAAA,CAAU,aACV,UAAU,CAAA;AAEX,QAAA,OAAO,CAAC,QAAQ,OAAA,KAAW;AAC1B,UAAA,MAAM,GAAA,GAAM,WAAW,MAAM,CAAA;AAC7B,UAAA,IAAI,MAAM,yBAAA,EAA2B;AACpC,YAAA,IAAI,GAAA,GAAM,IAAI,KAAA,CAAM,GAAG,CAAA;AACvB,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC7B,cAAA,GAAA,CAAI,CAAC,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AACrC,YAAA;AACA,YAAA,OAAO,GAAA;UACR,CAAA,MAAO;AACN,YAAA,IAAI,GAAA,GAAM,IAAI,KAAA,CAAM,yBAAyB,CAAA;AAC7C,YAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,EAAK,CAAA,EAAA,EAAK;AAC7B,cAAA,GAAA,CAAI,CAAC,CAAA,GAAI,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AACrC,YAAA;AACA,YAAA,OAAO,GAAA;AACR,UAAA;AACD,QAAA,CAAA;AACD,MAAA;AACD,IAAA;AAEA,IAAA,IAAI,qBAAqB,UAAA,EAAY;AACpC,MAAA,MAAM,UAAA,GAAa,YAAA,CAAa,IAAA,CAC/B,SAAA,CAAU,cACV,UAAU,CAAA;AAGX,MAAA,OAAO,UAAA,GACJ,CAAC,MAAA,KAAW,YAAA,CAAa,kBAAA,CAAmB,MAAA,EAAQ,UAAU,CAAA,GAC9D,CAAC,MAAA,KAAW,YAAA,CAAa,YAAA,CAAa,QAAQ,UAAU,CAAA;AAC5D,IAAA;AAEA,IAAA,IAAI,OAAO,SAAA,CAAU,aAAa,CAAA,IAAK,UAAA,EAAY;AAClD,MAAA,OAAO,CAAC,MAAA,KAAW,SAAA,CAAU,WAAA,CAAY,MAAM,CAAA;AAChD,IAAA;AAEA,IAAA,IAAI,qBAAqB,UAAA,EAAY;AACpC,MAAA,MAAM,WAAA,GAAc,gBAAA,CACnB,SAAA,EACA,SAAA,CAAU,aACV,UAAU,CAAA;AAEX,MAAA,OAAO,CAAC,QAAQ,OAAA,KAAW;AAC1B,QAAA,OAAO,OAAO,IAAA,EAAI,GAAK,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA,GAAI,KAAA,CAAA;AACvD,MAAA,CAAA;AACD,IAAA;AACA,IAAA,OAAO,iBAAA,CAAkB,WAAW,UAAU,CAAA;AAC/C,EAAA,CAAA,CAAA,OAAS,KAAA,EAAO;AACf,IAAA,IAAI,iBAAiB,UAAA,EAAY;AAChC,MAAA,KAAA,CAAM,eAAe,SAAS,CAAA;AAC/B,IAAA;AACA,IAAA,MAAM,KAAA;AACP,EAAA;AACD;AACM,SAAU,iBAAA,CACf,aACA,UAAA,EAAmB;AAEnB,EAAA,MAAM,MAAA,GAAS,8BAAA,CAA+B,WAAA,EAAa,CAAA,EAAG,UAAU,CAAA;AAExE,EAAA,OAAO,CAAC,QAAsB,OAAA,KAAsC;AAEnE,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,EAAA,EAAI,QAAQ,OAAO,CAAA;AACzC,IAAA,IACC,CAAC,OAAA,EAAS,SAAA,IACV,CAAE,OAAA,EAAiB,MAAA,IACnB,CAAC,sBAAA,CAAuB,MAAA,CAAO,WAAA,EAAa,WAAW,CAAA,EACtD;AACD,MAAA,MAAM,IAAI,UAAA,CACT,CAAA,mBAAA,EAAsB,WAAA,EAAa,IAAA,IAAQ,WAAW,CAAA,wBAAA,EAA2B,MAAA,CAAO,WAAA,EAAa,IAAI,CAAA,yBAAA,CAA2B,CAAA;AAEtI,IAAA;AACA,IAAA,OAAO,MAAA;AACR,EAAA,CAAA;AACD;AAEA,IAAM,iCAAiC,CACtC,KAAA,EACA,QACA,UAAA,KAMA,wBAAA,CAAyB,OAAO,MAAA,EAAQ,UAAU,CAAA,IAClD,wBAAA,CACC,OACA,MAAA,EACA,UAAA,EACA,8BAA8B,KAAA,EAAO,MAAA,EAAQ,UAAU,CAAC,CAAA;AAE1D,IAAM,wBAAA,GAA2B,CAChC,KAAA,EACA,MAAA,EACA,UAAA,KAEA,KAAA,CAAM,SAAA,CACL,wCAAA,GACC,MAAA,IACC,UAAA,GAAa,oBAAA,GAAuB,CAAA,CAAE,CAAA;AAE1C,IAAM,wBAAA,GAA2B,CAChC,KAAA,EACA,MAAA,EACA,UAAA,EACA,MAAA,KAMC,KAAA,CAAM,SAAA,CACN,wCAAA,GACC,MAAA,IACC,UAAA,GAAa,oBAAA,GAAuB,EAAE,CAAA,GACrC,MAAA;AAWL,IAAM,6BAAA,GAAgC,CACrC,SAAA,EACA,MAAA,EACA,UAAA,KAKW;AACX,EAAA,IAAI,MAAA,GAImB,MAAA;AACvB,EAAA,IAAI,SAAA,GAAY,CACf,MAAA,EACA,MAAA,EACA,OAAA,KACG;AACH,IAAA,IAAK,SAAiB,MAAA,EAAQ;AAC7B,MAAA,OAAO,MAAA;AACR,IAAA;AACA,IAAA,OAAO,MAAA,CAAO,MAAA,CACZ,OAAA,EAAiB,SAAA,GACf,IAAI,SAAA,EAAS,GACb,MAAA,CAAO,MAAA,CAAO,SAAA,CAAU,SAAS,CAAA,EACpC,MAAM,CAAA;AAER,EAAA,CAAA;AACA,EAAA,IAAI,YAAA,GAAe,SAAA,CAAU,SAAA,EAAW,MAAM,CAAA;AAC9C,EAAA,IAAI,YAAA,EAAc;AACjB,IAAA,IAAI,WAAW,CAAA,EAAG;AACjB,MAAA,IAAI,KAAA,GAAQ,gBAAgB,YAAY,CAAA;AACxC,MAAA,IAAI,SAAS,IAAA,EAAM;AAGlB,QAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC9B,UAAA,MAAA,GAAS,CAAC,CAAA,EAAG,MAAA,EAAQ,EAAA,KAAM;AAC1B,YAAA,MAAA,CAAO,OAAA,IAAW,CAAA;AACnB,UAAA,CAAA;QACD,CAAA,MAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChC,UAAA,MAAA,GAAS,CAAC,CAAA,EAAG,MAAA,EAAQ,EAAA,KAAM;AAC1B,YAAA,MAAA,CAAO,WAAY,KAAA,CAAqB,MAAA;AACzC,UAAA,CAAA;QACD,CAAA,MAAO;AAEN,UAAA,MAAA,GAAS,CAAC,CAAA,EAAG,MAAA,EAAQ,EAAA,KAAM;AAC1B,YAAA,MAAA,CAAO,MAAA,EAAM;AACd,UAAA,CAAA;AACD,QAAA;AACD,MAAA;AACD,IAAA;AAEA,IAAA,KAAA,MAAWA,MAAAA,IAAS,aAAa,MAAA,EAAQ;AACxC,MAAA,MAAM,IAAA,GAAO,MAAA;AACb,MAAA,MAAM,cAAc,gBAAA,CAAiBA,MAAAA,CAAM,GAAA,EAAKA,MAAAA,CAAM,MAAM,UAAU,CAAA;AACtE,MAAA,IAAI,IAAA,EAAM;AACT,QAAA,MAAA,GAAS,CACR,MAAA,EACA,MAAA,EACA,OAAA,KACG;AACH,UAAA,IAAA,CAAK,MAAA,EAAQ,QAAQ,OAAO,CAAA;AAC5B,UAAA,MAAA,CAAOA,MAAAA,CAAM,GAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,OAAO,CAAA;AAChD,QAAA,CAAA;AACD,MAAA,CAAA;AACC,QAAA,MAAA,GAAS,CACR,MAAA,EACA,MAAA,EACA,OAAA,KACG;AACH,UAAA,MAAA,CAAOA,MAAAA,CAAM,GAAG,CAAA,GAAI,WAAA,CAAY,QAAQ,OAAO,CAAA;AAChD,QAAA,CAAA;AACF,IAAA;AACD,EAAA;AAGA,EAAA,IAAI,YAAA,GAAe,kBAAA,CAAmB,SAAA,EAAW,MAAM,CAAA;AACvD,EAAA,IAAI,YAAA,EAAc;AACjB,IAAA,IAAI,qBAOE,EAAA;AACN,IAAA,IAAI,WAAA;AACJ,IAAA,KAAA,MAAW,CAAC,WAAA,EAAa,UAAU,CAAA,IAAK,YAAA,EAAc;AACrD,MAAA,MAAM,YAAA,GAAe,eAAA,CAAgB,UAAA,CAAW,MAAM,CAAA;AACtD,MAAA,IAAI,qBACH,OAAO,YAAA,KAAiB,QAAA,GACrB,YAAA,CAAa,SACZ,OAAO,YAAA;AACZ,MAAA,IAAI,CAAC,WAAA,EAAa;AACjB,QAAA,WAAA,GAAc,kBAAA;AACf,MAAA,CAAA,MAAA,IAAW,uBAAuB,WAAA,EAAa;AAC9C,QAAA,MAAM,IAAI,KAAA,CACT,CAAA,kBAAA,EAAqB,SAAA,CAAU,IAAI,CAAA,mHAAA,CAAqH,CAAA;AAE1J,MAAA;AACA,MAAA,kBAAA,CAAmB,IAAA,CAAK,CAAC,YAAA,EAAc,WAAA,EAAa,UAAU,CAAC,CAAA;AAChE,IAAA;AACA,IAAA,IAAI,gBAAgB,WAAA,EAAa;AAChC,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC5B,QAAA,MAAM,GAAA,GAAM,mBAAmB,CAAC,CAAA;AAChC,QAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAA,KAAW;AAClC,UAAA,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AACxC,UAAA,OAAO,8BAAA,CACN,GAAA,CAAI,CAAC,CAAA,EACL,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,EACP,UAAU,CAAA,CACT,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC1B,QAAA,CAAA;AACD,MAAA,CAAA;AACC,QAAA,MAAM,IAAI,UAAA,CACT,CAAA,4CAAA,EAA+C,SAAA,CAAU,IAAI,CAAA,sEAAA,CAAwE,CAAA;AAExI,IAAA;AAEA,IAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAA,KAAW;AAClC,MAAA,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AACxC,MAAA,IAAI,IAAA,GAAO,MAAA;AACX,MAAA,IAAI,UAAA,GAAa,MAAA;AAEjB,MAAA,IAAI,gBAAgB,QAAA,EAAU;AAC7B,QAAA,IAAI,GAAA,GAAM,OAAO,EAAA,EAAE;AACnB,QAAA,KAAA,MAAW,OAAO,kBAAA,EAAoB;AACrC,UAAA,IAAI,GAAA,KAAQ,GAAA,CAAI,CAAC,CAAA,EAAG;AACnB,YAAA,OAAO,8BAAA,CACN,GAAA,CAAI,CAAC,CAAA,EACL,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,EACP,UAAU,CAAA,CACT,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC1B,UAAA;AACD,QAAA;AACD,MAAA,CAAA,MAAA,IAAW,gBAAgB,QAAA,EAAU;AACpC,QAAA,IAAI,OAAA,GAAU,OAAO,MAAA,EAAM;AAC3B,QAAA,KAAA,MAAW,OAAO,kBAAA,EAAoB;AACrC,UAAA,IAAI,OAAA,KAAY,GAAA,CAAI,CAAC,CAAA,EAAG;AACvB,YAAA,OAAO,8BAAA,CACN,GAAA,CAAI,CAAC,CAAA,EACL,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,EACP,UAAU,CAAA,CACT,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC1B,UAAA;AACD,QAAA;MACD,CAAA,MACK;AACJ,QAAA,IAAI,MAAgB,EAAA;AACpB,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAK,WAAA,EAAwB,CAAA,EAAA,EAAK;AACjD,UAAA,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,EAAA,EAAI,CAAA;AACrB,QAAA;AACA,QAAA,KAAA,MAAW,OAAO,kBAAA,EAAoB;AACrC,UAAA,IAAI,cAAA,GAAiB,IAAI,CAAC,CAAA;AAC1B,UAAA,IACC,cAAA,CAAe,MAAA,KAAW,GAAA,CAAI,MAAA,IAC7B,cAAA,CAA4B,KAAA,CAC5B,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,KAAU,GAAA,CAAI,KAAK,CAAC,CAAA,EAEtC;AACD,YAAA,OAAO,8BAAA,CACN,GAAA,CAAI,CAAC,CAAA,EACL,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,EACP,UAAU,CAAA,CACT,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AAC1B,UAAA;AACD,QAAA;AACD,MAAA;AAEA,MAAA,IAAI,IAAA,IAAQ,UAAa,YAAA,EAAc;AAItC,QAAA,IAAI,YAAA,CAAa,QAAQ,CAAA,EAAG;AAE3B,UAAA,MAAM,CAAA,GAAI,YAAA,CAAa,OAAA,EAAO,CAAG,MAAI,CAAG,KAAA;AACxC,UAAA,IAAA,GAAO,EAAE,CAAC,CAAA;AACV,UAAA,UAAA,GAAa,CAAA,CAAE,CAAC,CAAA,CAAE,MAAA;QACnB,CAAA,MAAA,IAAW,YAAA,CAAa,OAAO,CAAA,EAAG;AACjC,UAAA,MAAM,UAAU,CAAC,GAAG,YAAA,CAAa,OAAA,EAAS,CAAA,CACxC,GAAA,CAAI,CAAC,CAAC,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CACnB,KAAK,IAAI,CAAA;AACX,UAAA,MAAM,IAAI,UAAA,CACT,CAAA,4CAAA,EAA+C,UAAU,IAAI,CAAA,QAAA,EAAW,OAAO,CAAA,mDAAA,CAAqD,CAAA;AAEtI,QAAA;AACD,MAAA;AACA,MAAA,IAAI,QAAQ,IAAA,EAAM;AACjB,QAAA,8BAAA,CAA+B,MAAM,UAAA,EAAY,UAAU,CAAA,CAC1D,MAAA,EACA,QACA,OAAO,CAAA;MAET,CAAA,MAAO;AACN,QAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AACzC,MAAA;AACD,IAAA,CAAA;EACD,CAAA,MAAO;AACN,IAAA,IAAI,MAAA,EAAQ;AACX,MAAA,OAAO,CAAC,MAAA,EAAQ,MAAA,EAAQ,OAAA,KAAW;AAClC,QAAA,MAAA,CAAO,MAAA,EAAQ,QAAQ,OAAO,CAAA;AAC9B,QAAA,OAAO,SAAA,CAAU,MAAA,EAAQ,MAAA,EAAQ,OAAO,CAAA;AACzC,MAAA,CAAA;AACD,IAAA;AACA,IAAA,OAAO,SAAA;AACR,EAAA;AACD,CAAA;AAEA,IAAM,qBAAA,GAAwB,CAAC,KAAA,EAAY,MAAA,KAA8B;AACxE,EAAA,IAAI,MAAA,GAAqB,SAAA,CAAU,KAAA,EAAO,MAAM,CAAA;AAChD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACZ,IAAA,MAAA,GAAS,IAAI,UAAA,EAAU;AACxB,EAAA;AAEA,EAAA,SAAA,CAAU,KAAA,EAAO,QAAQ,MAAM,CAAA;AAC/B,EAAA,OAAO,MAAA;AACR,CAAA;AACA,IAAM,wBAAA,GAA2B,CAAC,IAAA,EAAgB,MAAA,KAAkB;AACnE,EAAA,IAAI,KAAA,GAAQ,MAAA,CAAO,cAAA,CAAe,IAAI,CAAA;AACtC,EAAA,OAAO,KAAA,CAAM,SAAA,EAAW,WAAA,IAAe,MAAA,EAAW;AAEjD,IAAA,IAAI,YAAY,EAAE,MAAA;AAClB,IAAA,IAAI,YAAA,GAAe,eAAA,CAAgB,KAAA,EAAO,SAAS,CAAA;AACnD,IAAA,IAAI,YAAA,EAAc;AACjB,MAAA,KAAA,MAAW,cAAc,YAAA,EAAc;AACtC,QAAA,IAAI,IAAA,CAAK,SAAA,YAAqB,UAAA,IAAc,UAAA,KAAe,IAAA,EAAM;AAChE,UAAA;AACD,QAAA;AACD,MAAA;IACD,CAAA,MAAO;AACN,MAAA,YAAA,GAAe,EAAA;AAChB,IAAA;AACA,IAAA,YAAA,CAAa,KAAK,IAAI,CAAA;AACtB,IAAA,eAAA,CAAgB,KAAA,EAAO,WAAW,YAAY,CAAA;AAC9C,IAAA,KAAA,GAAQ,MAAA,CAAO,eAAe,KAAK,CAAA;AACpC,EAAA;AACD,CAAA;AAEA,IAAM,iBAAA,GAAoB,CAAC,KAAA,KAA4B;AACtD,EAAA,OAAO,MAAA,CAAO,cAAA,CAAe,KAAK,CAAA,CAAE,aAAa,MAAA,EAAW;AAC3D,IAAA,KAAA,GAAQ,MAAA,CAAO,eAAe,KAAK,CAAA;AACpC,EAAA;AACA,EAAA,OAAO,KAAA;AACR,CAAA;AAMA,IAAM,sBAAA,GAAyB,CAC9B,MAAA,EACA,MAAA,KACG;AACH,EAAA,OACC,MAAA,IAAU,UACV,MAAA,CAAO,aAAA,CAAc,MAAM,CAAA,IAC3B,MAAA,CAAO,cAAc,MAAM,CAAA;AAE7B,CAAA;AAEO,IAAM,kBAAkB,CAC9B,IAAA,EACA,WAEA,IAAA,CAAK,SAAA,CAAU,sCAAsC,MAAM,CAAA;AAE5D,IAAM,eAAA,GAAkB,CACvB,IAAA,EACA,MAAA,EACA,YAAA,KACG;AACH,EAAA,IAAA,CAAK,SAAA,CAAU,mCAAA,GAAsC,MAAM,CAAA,GAAI,YAAA;AAChE,CAAA;AAEO,IAAM,kBAAA,GAAqB,CACjC,IAAA,EACA,MAAA,KACsE;AACtE,EAAA,IAAI,QAAA,GAAW,eAAA,CAAgB,IAAA,EAAM,MAAM,CAAA;AAC3C,EAAA,IAAI,QAAA,EAAU;AACb,IAAA,IAAI,GAAA,uBAAiE,GAAA,EAAG;AACxE,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACzB,MAAA,IAAI,MAAA,GAAS,iBAAiB,CAAC,CAAA;AAC/B,MAAA,IAAI,OAAO,MAAA,CAAO,MAAA,GAAS,CAAA,IAAK,MAAA,CAAO,WAAW,MAAA,EAAW;AAE5D,QAAA,GAAA,CAAI,GAAA,CAAI,GAAG,EAAE,MAAA,EAAQ,QAAQ,SAAA,CAAU,CAAC,GAAG,CAAA;MAC5C,CAAA,MAAO;AAEN,QAAA,IAAI,GAAA,GAAM,kBAAA,CAAmB,CAAA,EAAG,MAAM,CAAA;AACtC,QAAA,KAAA,MAAW,CAAC,EAAA,EAAI,EAAE,CAAA,IAAK,GAAA,EAAK;AAC3B,UAAA,GAAA,CAAI,GAAA,CAAI,IAAI,EAAE,CAAA;AACf,QAAA;AACD,MAAA;AACD,IAAA;AACA,IAAA,OAAO,GAAA;AACR,EAAA;AACD,CAAA;AAoBA,IAAM,SAAA,GAAY,CAAC,IAAA,EAAgB,OAAA,EAAqB,MAAA,KAAkB;AACzE,EAAA,IAAA,CAAK,SAAA,CAAU,uBAAA,GAA0B,MAAM,CAAA,GAAI,OAAA;AACpD,CAAA;AAEO,IAAM,SAAA,GAAY,CACxB,IAAA,EACA,MAAA,GAAiB,SAAA,CAAU,IAAI,CAAA,KACf,IAAA,CAAK,SAAA,CAAU,uBAAA,GAA0B,MAAM,CAAA;AAEhE,IAAM,gBAAA,GAAmB,CAAC,IAAA,KAA8B;AACvD,EAAA,IAAI,IAAA,GAAO,MAAA;AACX,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,oBAAA,EAAsB,CAAA,EAAA,EAAK;AAC9C,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,uBAAA,GAA0B,CAAC,CAAA;AACvD,IAAA,IAAI,CAAC,QAAQ,IAAA,IAAQ,CAAC,gBAAgB,IAAA,EAAM,CAAC,GAAG,MAAA,EAAQ;AACvD,MAAA,OAAO,IAAA;AACR,IAAA;AACA,IAAA,IAAA,GAAO,IAAA;AACR,EAAA;AACA,EAAA;AACD,CAAA;AAgFA,IAAM,eAAA,GAAkB,CACvB,MAAA,KAC2C;AAC3C,EAAA,OAAO,MAAA,CAAO,OAAA;AACf,CAAA;AAMM,SAAU,MAAM,UAAA,EAA0C;AAC/D,EAAA,OAAO,CAAC,QAAkB,IAAA,KAA2B;AACpD,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,MAAA,CAAO,WAAW,CAAA;AAC3C,IAAA,wBAAA,CAAyB,MAAA,CAAO,aAAa,MAAM,CAAA;AACnD,IAAA,MAAM,OAAA,GAAU,qBAAA,CAAsB,MAAA,CAAO,WAAA,EAAa,MAAM,CAAA;AAChE,IAAA,MAAM,MAAA,GAAS,OAAA;AACf,IAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAQ;AAEzB,IAAA,IAAIA,MAAAA,GAAe,MAAA;AACnB,IAAA,IAAK,UAAA,CAA2B,MAAM,CAAA,IAAK,MAAA,EAAW;AACrD,MAAAA,MAAAA,GAAQ;AACP,QAAA,GAAA;AACA,QAAA,IAAA,EAAO,WAA2B,MAAM;;IAE1C,CAAA,MAAO;AACN,MAAAA,MAAAA,GAAQ;AACP,QAAA,GAAA;QACA,IAAA,EAAM;;AAER,IAAA;AAEA,IAAA,IAAI,UAAA,CAAW,UAAU,MAAA,EAAW;AACnC,MAAA,MAAA,CAAO,MAAA,CAAO,KAAKA,MAAK,CAAA;IACzB,CAAA,MAAO;AACN,MAAA,IAAI,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,EAAG;AACpC,QAAA,MAAM,IAAI,WACT,6CAAA,GACC,UAAA,CAAW,QACX,WAAA,GACA,MAAA,CAAO,YAAY,IAAI,CAAA;AAE1B,MAAA;AACA,MAAA,IAAI,UAAA,CAAW,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ;AAC7C,QAAA,MAAA,CAAO,MAAA,CAAO,MAAA,EAAQ,UAAA,CAAW,KAAA,GAAQ,GAAG,MAAS,CAAA;AACtD,MAAA;AACA,MAAA,MAAA,CAAO,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA,GAAIA,MAAAA;AACnC,IAAA;AACD,EAAA,CAAA;AACD;AAqGA,IAAM,MAAA,GAAS,CAAC,GAAA,EAAiB,OAAA,EAAiB,YAAA,KAAqB;AACtE,EAAA,OAAO,UAAU,GAAA,CAAI,MAAA;AAAQ,IAAA,GAAA,CAAI,KAAK,YAAY,CAAA;AAClD,EAAA,GAAA,CAAI,MAAA,GAAS,OAAA;AACd,CAAA;;;AC/9BO,SAAS,eAAkB,IAAA,EAAqB;AACtD,EAAA,OAAOC,WAAU,IAAI,CAAA;AACtB;AASO,SAAS,gBAAA,CAAoB,MAAkB,IAAA,EAAsB;AAC3E,EAAA,OAAOC,YAAAA,CAAY,MAAM,IAAI,CAAA;AAC9B;;;ACxBO,IAAM,mBAAN,MAAuB;AAAA,EACZ,QAAA,uBAA0C,GAAA,EAAI;AAAA,EAC9C,eAAyB,EAAC;AAAA,EACnC,QAAA,GAA0B,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQlC,YAAY,MAAA,EAAyB;AACpC,IAAA,IAAA,CAAK,QAAA,GAAW,OAAO,QAAA,EAAS;AAChC,IAAA,IAAA,CAAK,IAAI,EAAE,MAAA,EAAQ,UAAU,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,IAAA,EAAyB;AAC5B,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,CAAO,QAAA,EAAS;AAEjC,IAAA,IAAI,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA,EAAG;AAG3B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACtC,MAAA,QAAA,CAAS,aAAa,IAAA,CAAK,QAAA;AAC3B,MAAA,QAAA,CAAS,eAAe,IAAA,CAAK,UAAA;AAAA,IAC9B,CAAA,MAAO;AAEN,MAAA,IAAA,CAAK,QAAA,CAAS,IAAI,GAAA,EAAK;AAAA,QACtB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,YAAY,IAAA,CAAK;AAAA,OACjB,CAAA;AACD,MAAA,IAAA,CAAK,YAAA,CAAa,KAAK,GAAG,CAAA;AAAA,IAC3B;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,KAAA,EAAqC;AAC3C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACzB,MAAA,IAAA,CAAK,IAAI,IAAI,CAAA;AAAA,IACd;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAS,MAAA,EAA2B;AACnC,IAAA,MAAM,MAAA,GAAS,KAAK,iBAAA,EAAkB;AACtC,IAAA,OAAO,MAAA,CAAO,UAAU,CAAC,KAAA,KAAU,MAAM,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAA,GAA6C;AAE5C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,QAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAE,CAAA;AAItE,IAAA,IAAI,UAAA,GAAkC,IAAA;AACtC,IAAA,MAAM,OAAuB,EAAC;AAC9B,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC5B,MAAA,IAAI,IAAA,CAAK,aAAa,IAAA,IAAQ,KAAA,CAAM,OAAO,QAAA,EAAS,KAAM,KAAK,QAAA,EAAU;AACxE,QAAA,UAAA,GAAa,KAAA;AAAA,MACd,CAAA,MAAO;AACN,QAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,MAChB;AAAA,IACD;AAEA,IAAA,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAc;AAE3B,MAAA,MAAM,SAAA,GACL,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,UAAA,GAAa,CAAA,GAAI,CAAA,CAAE,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,UAAA,GAAa,CAAA,GAAI,CAAA;AACtE,MAAA,MAAM,SAAA,GACL,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,UAAA,GAAa,CAAA,GAAI,CAAA,CAAE,QAAA,GAAW,CAAA,GAAI,CAAA,CAAE,UAAA,GAAa,CAAA,GAAI,CAAA;AAEtE,MAAA,IAAI,cAAc,SAAA,EAAW;AAC5B,QAAA,OAAO,SAAA,GAAY,SAAA;AAAA,MACpB;AAGA,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,CAAO,OAAA,EAAQ;AAChC,MAAA,MAAM,MAAA,GAAS,CAAA,CAAE,MAAA,CAAO,OAAA,EAAQ;AAEhC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC5B,QAAA,IAAI,MAAA,CAAO,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAA,EAAG;AAC5B,UAAA,OAAO,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA;AAAA,QAC5B;AAAA,MACD;AAEA,MAAA,OAAO,CAAA;AAAA,IACR,CAAC,CAAA;AAGD,IAAA,IAAI,eAAe,IAAA,EAAM;AACxB,MAAA,OAAO,CAAC,UAAA,EAAY,GAAG,IAAI,CAAA;AAAA,IAC5B;AACA,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAA2B;AAC1B,IAAA,MAAM,MAAA,GAAS,KAAK,iBAAA,EAAkB;AAEtC,IAAA,IAAI,qBAAA,GAAwB,CAAA;AAC5B,IAAA,IAAI,yBAAA,GAA4B,CAAA;AAChC,IAAA,IAAI,2BAAA,GAA8B,CAAA;AAElC,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC3B,MAAA,IAAI,MAAM,QAAA,EAAU;AACnB,QAAA,qBAAA,EAAA;AACA,QAAA,IAAI,CAAC,MAAM,UAAA,EAAY;AACtB,UAAA,yBAAA,EAAA;AAAA,QACD;AAAA,MACD,CAAA,MAAA,IAAW,CAAC,KAAA,CAAM,UAAA,EAAY;AAC7B,QAAA,2BAAA,EAAA;AAAA,MACD;AAAA,IACD;AAEA,IAAA,OAAO;AAAA,MACN,qBAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAsC;AACrC,IAAA,OAAO,KAAK,iBAAA,EAAkB,CAAE,IAAI,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,IAAA,GAAe;AACd,IAAA,OAAO,KAAK,QAAA,CAAS,IAAA;AAAA,EACtB;AACD;;;AC/KO,IAAK,oBAAA,qBAAAG,qBAAAA,KAAL;AAEN,EAAAA,sBAAA,qBAAA,CAAA,GAAsB,qBAAA;AACtB,EAAAA,sBAAA,sBAAA,CAAA,GAAuB,sBAAA;AACvB,EAAAA,sBAAA,iBAAA,CAAA,GAAkB,iBAAA;AAClB,EAAAA,sBAAA,mBAAA,CAAA,GAAoB,mBAAA;AAGpB,EAAAA,sBAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,sBAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,sBAAA,yBAAA,CAAA,GAA0B,yBAAA;AAC1B,EAAAA,sBAAA,kBAAA,CAAA,GAAmB,kBAAA;AACnB,EAAAA,sBAAA,gBAAA,CAAA,GAAiB,gBAAA;AAGjB,EAAAA,sBAAA,wBAAA,CAAA,GAAyB,wBAAA;AACzB,EAAAA,sBAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,sBAAA,sBAAA,CAAA,GAAuB,sBAAA;AAGvB,EAAAA,sBAAA,mBAAA,CAAA,GAAoB,mBAAA;AACpB,EAAAA,sBAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,sBAAA,mBAAA,CAAA,GAAoB,mBAAA;AAtBT,EAAA,OAAAA,qBAAAA;AAAA,CAAA,EAAA,oBAAA,IAAA,EAAA;AA4BL,IAAM,gBAAA,GAAN,MAAM,iBAAA,SAAyB,KAAA,CAAM;AAAA,EAC3C,WAAA,CACiB,IAAA,EAChB,OAAA,EACgB,OAAA,EACf;AACD,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,kBAAA;AAAA,EACb;AAAA,EAEA,OAAO,cAAA,GAAmC;AACzC,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,iBAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,eAAe,MAAA,EAAkC;AACvD,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,kBAAA;AAAA,MACA,cAAc,MAAM,CAAA,gHAAA,CAAA;AAAA,MACpB,EAAE,MAAA;AAAO,KACV;AAAA,EACD;AAAA,EAEA,OAAO,gBAAA,CAAiB,KAAA,EAAe,MAAA,EAAkC;AACxE,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,mBAAA;AAAA,MACA,gCAAgC,KAAK,CAAA,EAAA,EAAK,MAAM,CAAA,wBAAA,EAA2B,QAAQ,CAAC,CAAA,YAAA,CAAA;AAAA,MACpF,EAAE,OAAO,MAAA;AAAO,KACjB;AAAA,EACD;AAAA,EAEA,OAAO,gBAAA,CAAiB,IAAA,EAAgB,KAAA,EAAiC;AACxE,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,mBAAA;AAAA,MACA,kCAAkC,KAAK,CAAA,CAAA;AAAA,MACvC,EAAE,MAAM,KAAA;AAAM,KACf;AAAA,EACD;AAAA,EAEA,OAAO,iBAAA,CACN,QAAA,EACA,SAAA,EACmB;AACnB,IAAA,OAAO,IAAI,iBAAA;AAAA,MACV,oBAAA;AAAA,MACA,CAAA,yBAAA,EAA4B,QAAQ,CAAA,OAAA,EAAU,SAAS,CAAA,CAAA;AAAA,MACvD,EAAE,UAAU,QAAA,CAAS,QAAA,IAAY,SAAA,EAAW,SAAA,CAAU,UAAS;AAAE,KAClE;AAAA,EACD;AAAA,EAEA,MAAA,GAIE;AACD,IAAA,OAAO;AAAA,MACN,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK;AAAA,KACf;AAAA,EACD;AACD;;;AC1DO,SAAS,uBAA0B,MAAA,EAI1B;AACf,EAAA,OAAO;AAAA,IACN,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,UAAU,MAAA,CAAO,QAAA;AAAA,IACjB,IAAA,EAAM,cAAA,CAAe,MAAA,CAAO,IAAI;AAAA,GACjC;AACD;AAgBO,SAAS,gBACf,OAAA,EACa;AAEb,EAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AACtE;;;AC3DO,IAAK,iBAAA,qBAAAC,kBAAAA,KAAL;AACN,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,mBAAgB,CAAA,CAAA,GAAhB,eAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,2BAAwB,CAAA,CAAA,GAAxB,uBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,yBAAsB,CAAA,CAAA,GAAtB,qBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,0BAAuB,CAAA,CAAA,GAAvB,sBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,4BAAyB,CAAA,CAAA,GAAzB,wBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,2BAAwB,CAAA,CAAA,GAAxB,uBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,oBAAiB,EAAA,CAAA,GAAjB,gBAAA;AACA,EAAAA,kBAAAA,CAAAA,kBAAAA,CAAA,sBAAmB,EAAA,CAAA,GAAnB,kBAAA;AAZW,EAAA,OAAAA,kBAAAA;AAAA,CAAA,EAAA,iBAAA,IAAA,EAAA;AAkCL,SAAS,mBAAA,CACf,IAAA,EACA,EAAA,EACA,MAAA,EACc;AAId,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,EAAE,CAAA;AACnC,EAAA,MAAA,CAAO,aAAa,CAAA,gBAA0B;AAC9C,EAAA,MAAA,CAAO,SAAS,MAAM,CAAA;AAEtB,EAAA,OAAO;AAAA,IACN,SAAA,EAAW,SAAA,CAAU,UAAA,CAAW,iBAAiB,CAAA;AAAA,IACjD,QAAA,EAAU;AAAA,MACT,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,MACjD,EAAE,MAAA,EAAQ,EAAA,EAAI,QAAA,EAAU,KAAA,EAAO,YAAY,IAAA;AAAK,KACjD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACtB;AACD;AAWO,SAAS,aAAA,CACf,IAAA,EACA,UAAA,EACA,OAAA,EACA,OACA,KAAA,EACc;AAMd,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,EAAE,CAAA;AACnC,EAAA,MAAA,CAAO,aAAa,CAAA,qBAA+B;AACnD,EAAA,MAAA,CAAO,SAAS,OAAO,CAAA;AACvB,EAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AACrB,EAAA,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,OAAA,EAAS,CAAA;AAEjC,EAAA,OAAO;AAAA,IACN,SAAA,EAAW,SAAA,CAAU,UAAA,CAAW,iBAAiB,CAAA;AAAA,IACjD,QAAA,EAAU;AAAA,MACT,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,YAAY,IAAA,EAAK;AAAA,MACjD,EAAE,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,IAAA,EAAM,YAAY,IAAA;AAAK,KACxD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACtB;AACD;AAWO,SAAS,mBAAA,CACf,SACA,KAAA,EACc;AAId,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,EAAE,CAAA;AACnC,EAAA,MAAA,CAAO,aAAa,CAAA,gBAA0B;AAC9C,EAAA,MAAA,CAAO,SAAS,KAAK,CAAA;AAErB,EAAA,OAAO;AAAA,IACN,SAAA,EAAW,SAAA,CAAU,UAAA,CAAW,iBAAiB,CAAA;AAAA,IACjD,QAAA,EAAU;AAAA,MACT,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,YAAY,IAAA;AAAK,KACrD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACtB;AACD;AAWO,SAAS,iBAAA,CACf,SACA,KAAA,EACc;AAId,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,EAAE,CAAA;AACnC,EAAA,MAAA,CAAO,aAAa,CAAA,cAAwB;AAC5C,EAAA,MAAA,CAAO,UAAA,CAAW,KAAA,CAAM,OAAA,EAAS,CAAA;AAEjC,EAAA,OAAO;AAAA,IACN,SAAA,EAAW,SAAA,CAAU,UAAA,CAAW,iBAAiB,CAAA;AAAA,IACjD,QAAA,EAAU;AAAA,MACT,EAAE,MAAA,EAAQ,OAAA,EAAS,QAAA,EAAU,IAAA,EAAM,YAAY,IAAA;AAAK,KACrD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACtB;AACD;;;ACvIO,IAAM,OAAA,GAAN,MAAM,QAAA,CAAQ;AAAA;AAAA,EAEJ,MAAA;AAAA;AAAA,EAGA,WAAA;AAAA;AAAA,EAGhB,SAAA;AAAA;AAAA,EAGgB,gBAAA;AAAA;AAAA,EAGA,GAAA;AAAA;AAAA,EAGA,YAAA;AAAA;AAAA,EAGR,eAAA;AAAA,EAER,YACC,MAAA,EACA,WAAA,EACA,SAAA,EACA,gBAAA,EACA,KACA,YAAA,EACC;AACD,IAAA,IAAA,CAAK,SAAS,MAAA,CAAO,MAAA,CAAO,EAAE,GAAG,QAAQ,CAAA;AACzC,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,MAAA,CAAO,CAAC,GAAG,WAAW,CAAC,CAAA;AACjD,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AACxB,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,IAAA,CAAK,eAAe,MAAA,CAAO,MAAA;AAAA,MAC1B,YAAA,CAAa,GAAA,CAAI,CAAC,EAAA,KAAO,MAAA,CAAO,OAAO,EAAE,GAAG,EAAA,EAAI,CAAC;AAAA,KAClD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,GAAwB;AACvB,IAAA,IAAI,CAAC,KAAK,eAAA,EAAiB;AAC1B,MAAA,IAAA,CAAK,eAAA,GAAkB,KAAK,iBAAA,EAAkB;AAAA,IAC/C;AACA,IAAA,OAAO,IAAI,UAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,IAAA,EAA2B;AAC7C,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACpB,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA;AAGb,IAAA,MAAM,MAAA,GAAwB;AAAA,MAC7B,qBAAA,EAAuB,KAAK,MAAA,EAAQ,CAAA;AAAA,MACpC,yBAAA,EAA2B,KAAK,MAAA,EAAQ,CAAA;AAAA,MACxC,2BAAA,EAA6B,KAAK,MAAA,EAAQ;AAAA,KAC3C;AAGA,IAAA,MAAM,CAAC,iBAAA,EAAmB,UAAU,CAAA,GAAI,qBAAA,CAAsB,MAAM,MAAM,CAAA;AAC1E,IAAA,MAAA,GAAS,UAAA;AAET,IAAA,MAAM,cAA2B,EAAC;AAClC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,iBAAA,EAAmB,CAAA,EAAA,EAAK;AAC3C,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,EAAA,EAAI;AAC9B,QAAA,MAAM,IAAI,gBAAA;AAAA,UAAA,mBAAA;AAAA,UAET,qCAAqC,CAAC,CAAA;AAAA,SACvC;AAAA,MACD;AACA,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,EAAE,CAAA;AAC/C,MAAA,WAAA,CAAY,IAAA,CAAK,SAAA,CAAU,SAAA,CAAU,QAAQ,CAAC,CAAA;AAC9C,MAAA,MAAA,IAAU,EAAA;AAAA,IACX;AAGA,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AACA,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAC,CAAA;AACpD,IAAA,MAAM,YAAY,MAAA,CAAO,OAAA;AAAA,MACxB,EAAA;AAAA,MACA,IAAI,QAAA,CAAS,cAAA,CAAe,MAAM,CAAA,CAAE,YAAA,CAAa,GAAG,IAAI;AAAA,KACzD;AACA,IAAA,MAAA,IAAU,CAAA;AAGV,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AACA,IAAA,MAAM,qBAAA,GAAwB,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,CAAC,CAAA;AAC3D,IAAA,MAAM,mBAAmB,MAAA,CAAO,OAAA;AAAA,MAC/B,EAAA;AAAA,MACA,IAAI,QAAA,CAAS,qBAAA,CAAsB,MAAM,CAAA,CAAE,YAAA,CAAa,GAAG,IAAI;AAAA,KAChE;AACA,IAAA,MAAA,IAAU,CAAA;AAGV,IAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,CAAA,EAAG;AAC7B,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AACA,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,MAAA,EAAQ,CAAA,KAAM,CAAA;AAG/B,IAAA,MAAM,CAAC,kBAAA,EAAoB,UAAU,CAAA,GAAI,qBAAA;AAAA,MACxC,IAAA;AAAA,MACA;AAAA,KACD;AACA,IAAA,MAAA,GAAS,UAAA;AAET,IAAA,MAAM,eAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,kBAAA,EAAoB,CAAA,EAAA,EAAK;AAE5C,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,CAAA,EAAG;AAC7B,QAAA,MAAM,IAAI,gBAAA;AAAA,UAAA,mBAAA;AAAA,UAET,qCAAqC,CAAC,CAAA,cAAA;AAAA,SACvC;AAAA,MACD;AACA,MAAA,MAAM,cAAA,GAAiB,KAAK,MAAA,EAAQ,CAAA;AAGpC,MAAA,MAAM,CAAC,oBAAA,EAAsB,UAAU,CAAA,GAAI,qBAAA;AAAA,QAC1C,IAAA;AAAA,QACA;AAAA,OACD;AACA,MAAA,MAAA,GAAS,UAAA;AAET,MAAA,MAAM,oBAA8B,EAAC;AACrC,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,oBAAA,EAAsB,CAAA,EAAA,EAAK;AAC9C,QAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,CAAA,EAAG;AAC7B,UAAA,MAAM,IAAI,gBAAA;AAAA,YAAA,mBAAA;AAAA,YAET,CAAA,kCAAA,EAAqC,CAAC,CAAA,eAAA,EAAkB,CAAC,CAAA;AAAA,WAC1D;AAAA,QACD;AACA,QAAA,iBAAA,CAAkB,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,CAAC,CAAA;AAAA,MACtC;AAGA,MAAA,MAAM,CAAC,UAAA,EAAY,UAAU,CAAA,GAAI,qBAAA,CAAsB,MAAM,MAAM,CAAA;AACnE,MAAA,MAAA,GAAS,UAAA;AAET,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,UAAA,EAAY;AACtC,QAAA,MAAM,IAAI,gBAAA;AAAA,UAAA,mBAAA;AAAA,UAET,qCAAqC,CAAC,CAAA,KAAA;AAAA,SACvC;AAAA,MACD;AACA,MAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,UAAU,CAAA;AAC9D,MAAA,MAAA,IAAU,UAAA;AAEV,MAAA,YAAA,CAAa,IAAA,CAAK;AAAA,QACjB,cAAA;AAAA,QACA,iBAAA,EAAmB,MAAA,CAAO,MAAA,CAAO,iBAAiB,CAAA;AAAA,QAClD,IAAA,EAAM;AAAA,OACN,CAAA;AAAA,IACF;AAEA,IAAA,OAAO,IAAI,QAAA,CAAQ,MAAA,EAAQ,aAAa,SAAA,EAAW,gBAAA,EAAkB,KAAK,YAAY,CAAA;AAAA,EACvF;AAAA,EAEQ,iBAAA,GAAgC;AACvC,IAAA,MAAM,SAAmB,EAAC;AAG1B,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,qBAAqB,CAAA;AAC7C,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,yBAAyB,CAAA;AACjD,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,2BAA2B,CAAA;AAGnD,IAAA,IAAA,CAAK,sBAAsB,MAAA,EAAQ,IAAA,CAAK,WAAA,EAAa,CAAC,KAAK,GAAA,KAAQ;AAClE,MAAA,GAAA,CAAI,IAAA,CAAK,GAAG,GAAA,CAAI,OAAA,EAAS,CAAA;AAAA,IAC1B,CAAC,CAAA;AAGD,IAAA,MAAM,eAAA,GAAkB,IAAI,WAAA,CAAY,CAAC,CAAA;AACzC,IAAA,IAAI,QAAA,CAAS,eAAe,CAAA,CAAE,YAAA;AAAA,MAC7B,CAAA;AAAA,MACA,IAAA,CAAK,SAAA,IAAa,MAAA,CAAO,CAAC,CAAA;AAAA,MAC1B;AAAA,KACD;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,UAAA,CAAW,eAAe,CAAC,CAAA;AAG9C,IAAA,MAAM,sBAAA,GAAyB,IAAI,WAAA,CAAY,CAAC,CAAA;AAChD,IAAA,IAAI,QAAA,CAAS,sBAAsB,CAAA,CAAE,YAAA;AAAA,MACpC,CAAA;AAAA,MACA,IAAA,CAAK,gBAAA;AAAA,MACL;AAAA,KACD;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,GAAG,IAAI,UAAA,CAAW,sBAAsB,CAAC,CAAA;AAGrD,IAAA,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,GAAA,GAAM,CAAA,GAAI,CAAC,CAAA;AAG5B,IAAA,IAAA,CAAK,sBAAsB,MAAA,EAAQ,IAAA,CAAK,YAAA,EAAc,CAAC,KAAK,EAAA,KAAO;AAElE,MAAA,GAAA,CAAI,IAAA,CAAK,GAAG,cAAc,CAAA;AAG1B,MAAA,IAAA,CAAK,sBAAsB,GAAA,EAAK,EAAA,CAAG,iBAAA,EAAmB,CAAC,GAAG,GAAA,KAAQ;AACjE,QAAA,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,MACX,CAAC,CAAA;AAGD,MAAA,IAAA,CAAK,qBAAA,CAAsB,KAAK,KAAA,CAAM,IAAA,CAAK,GAAG,IAAI,CAAA,EAAG,CAAC,CAAA,EAAG,IAAA,KAAS;AACjE,QAAA,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,MACZ,CAAC,CAAA;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,IAAI,WAAW,MAAM,CAAA;AAAA,EAC7B;AAAA,EAEQ,qBAAA,CACP,MAAA,EACA,KAAA,EACA,aAAA,EACO;AAEP,IAAA,IAAA,CAAK,mBAAA,CAAoB,MAAA,EAAQ,KAAA,CAAM,MAAM,CAAA;AAG7C,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACzB,MAAA,aAAA,CAAc,QAAQ,IAAI,CAAA;AAAA,IAC3B;AAAA,EACD;AAAA,EAEQ,mBAAA,CAAoB,QAAkB,KAAA,EAAqB;AAClE,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA,EAAQ;AAChC,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,KAAK,CAAA,CAAE,CAAA;AAAA,IAC/D;AAGA,IAAA,IAAI,SAAS,GAAA,EAAM;AAClB,MAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,MAAA;AAAA,IACD;AAGA,IAAA,IAAI,SAAS,KAAA,EAAQ;AACpB,MAAA,MAAA,CAAO,IAAA,CAAM,KAAA,GAAQ,GAAA,GAAQ,GAAI,CAAA;AACjC,MAAA,MAAA,CAAO,IAAA,CAAM,KAAA,IAAS,CAAA,GAAK,GAAI,CAAA;AAC/B,MAAA;AAAA,IACD;AAGA,IAAA,MAAA,CAAO,IAAA,CAAM,KAAA,GAAQ,GAAA,GAAQ,GAAI,CAAA;AACjC,IAAA,MAAA,CAAO,IAAA,CAAO,KAAA,IAAS,CAAA,GAAK,GAAA,GAAQ,GAAI,CAAA;AACxC,IAAA,MAAA,CAAO,IAAA,CAAM,KAAA,IAAS,EAAA,GAAM,GAAI,CAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmC;AAClC,IAAA,OAAO,KAAK,WAAA,CAAY,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,OAAO,qBAAqB,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,MAAA,EAA4B;AAC5C,IAAA,OAAO,IAAA,CAAK,YAAW,CAAE,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,eAAe,MAAA,EAA2B;AACzC,IAAA,OAAO,IAAA,CAAK,YAAW,CAAE,SAAA,CAAU,CAAC,MAAA,KAAW,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,EACrE;AACD;AAEA,SAAS,qBAAA,CACR,MACA,aAAA,EACmB;AACnB,EAAA,IAAI,MAAA,GAAS,aAAA;AACb,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,mBAAA;AAAA,MAET;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,EAAQ,CAAA;AAG/B,EAAA,IAAA,CAAK,SAAA,GAAY,SAAU,CAAA,EAAG;AAC7B,IAAA,OAAO,CAAC,WAAW,MAAM,CAAA;AAAA,EAC1B;AAGA,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,mBAAA;AAAA,MAET;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,EAAQ,CAAA;AAGhC,EAAA,IAAA,CAAK,UAAA,GAAa,SAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,CAAE,SAAA,GAAY,GAAA,GAAS,UAAA,IAAc,GAAI,MAAM,CAAA;AAAA,EACvD;AAGA,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,mBAAA;AAAA,MAET;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,EAAQ,CAAA;AAC/B,EAAA,MAAM,QACJ,SAAA,GAAY,GAAA,GAAA,CAAU,UAAA,GAAa,GAAA,KAAS,IAAM,SAAA,IAAa,EAAA;AAEjE,EAAA,OAAO,CAAC,OAAO,MAAM,CAAA;AACtB;;;ACjVO,IAAM,WAAA,GAAN,MAAM,YAAA,CAAY;AAAA;AAAA,EAEP,OAAA;AAAA;AAAA,EAGA,UAAA;AAAA;AAAA,EAGT,WAAA,CAAY,SAAkB,UAAA,EAAmC;AACxE,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAGf,IAAA,IAAA,CAAK,UAAA,GAAa,WAAW,GAAA,CAAI,CAAC,QAAQ,IAAI,UAAA,CAAW,GAAG,CAAC,CAAA;AAG7D,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,OAAA,CAAQ,MAAA,CAAO,qBAAA,EAAuB;AAC/D,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET,oBAAoB,UAAA,CAAW,MAAM,CAAA,kCAAA,EAAqC,OAAA,CAAQ,OAAO,qBAAqB,CAAA,CAAA;AAAA,OAC/G;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,YAAY,OAAA,EAA+B;AACjD,IAAA,MAAM,aAAA,GAAgB,QAAQ,MAAA,CAAO,qBAAA;AACrC,IAAA,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,MACxB,EAAE,QAAQ,aAAA,EAAc;AAAA,MACxB,MAAM,IAAI,UAAA,CAAW,gBAAgB;AAAA,KACtC;AAEA,IAAA,OAAO,IAAI,YAAA,CAAY,OAAA,EAAS,UAAU,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,wBAAA,CACN,OAAA,EACA,UAAA,EACc;AACd,IAAA,OAAO,IAAI,YAAA,CAAY,OAAA,EAAS,UAAU,CAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,YAAY,IAAA,EAA+B;AACjD,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,sBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AAEA,IAAA,IAAI,MAAA,GAAS,CAAA;AAGb,IAAA,MAAM,CAAC,gBAAA,EAAkB,SAAS,CAAA,GAAIC,sBAAAA,CAAsB,MAAM,MAAM,CAAA;AACxE,IAAA,MAAA,GAAS,SAAA;AAET,IAAA,MAAM,aAA2B,EAAC;AAClC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,gBAAA,EAAkB,CAAA,EAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,GAAS,gBAAA,EAAkB;AAC5C,QAAA,MAAM,IAAI,gBAAA;AAAA,UAAA,mBAAA;AAAA,UAET,CAAA,gCAAA,EAAmC,CAAC,CAAA,OAAA,EAAU,gBAAgB,oBAAoB,MAAM,CAAA;AAAA,SACzF;AAAA,MACD;AAEA,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,MAAA,EAAQ,SAAS,gBAAgB,CAAA;AAC9D,MAAA,UAAA,CAAW,KAAK,SAAS,CAAA;AACzB,MAAA,MAAA,IAAU,gBAAA;AAAA,IACX;AAGA,IAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AAEA,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AACtC,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,WAAA,CAAY,YAAY,CAAA;AAEhD,IAAA,OAAO,IAAI,YAAA,CAAY,OAAA,EAAS,UAAU,CAAA;AAAA,EAC3C;AAAA,EAEA,UAAA,GAAsB;AACrB,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,KAAK,OAAA,EAA+B;AACnC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAU;AAC5C,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,CAAK,YAAY,CAAA;AAC3C,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,OAAA,CAAQ,SAAA,EAAW,SAAS,CAAA;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,QAAQ,QAAA,EAAkC;AACzC,IAAA,IAAI,MAAA,GAAsB,IAAA;AAC1B,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC/B,MAAA,MAAA,GAAS,MAAA,CAAO,KAAK,OAAO,CAAA;AAAA,IAC7B;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,SAAS,MAAA,EAAsC;AACpD,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAA,EAAa;AACzC,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAU;AAC5C,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,WAAA,CAAY,YAAY,CAAA;AACvD,IAAA,OAAO,IAAA,CAAK,qBAAA,CAAsB,MAAA,EAAQ,SAAS,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAY,OAAA,EAAyC;AAC1D,IAAA,IAAI,MAAA,GAAsB,IAAA;AAC1B,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC7B,MAAA,MAAA,GAAS,MAAM,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,MAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAAY,OAAA,EAA+B;AAC1C,IAAA,OAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBAAgB,MAAA,EAAsC;AAC3D,IAAA,OAAO,IAAA,CAAK,SAAS,MAAM,CAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,YAAA,CAAa,OAAe,SAAA,EAAgD;AAC3E,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,IAAA,CAAK,WAAW,MAAA,EAAQ;AACjD,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,yBAAA;AAAA,QAET,mBAAmB,KAAK,CAAA,0BAAA,EAA6B,IAAA,CAAK,UAAA,CAAW,SAAS,CAAC,CAAA,CAAA;AAAA,OAChF;AAAA,IACD;AAEA,IAAA,MAAM,QAAA,GACL,SAAA,YAAqB,UAAA,GAAa,SAAA,GAAY,UAAU,OAAA,EAAQ;AAEjE,IAAA,IAAI,QAAA,CAAS,WAAW,gBAAA,EAAkB;AACzC,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET,CAAA,kBAAA,EAAqB,gBAAgB,CAAA,YAAA,EAAe,QAAA,CAAS,MAAM,CAAA;AAAA,OACpE;AAAA,IACD;AAGA,IAAA,MAAM,aAAA,GAAgB,KAAK,UAAA,CAAW,GAAA;AAAA,MAAI,CAAC,GAAA,EAAK,CAAA,KAC/C,CAAA,KAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,QAAQ,CAAA,GAAI,IAAI,UAAA,CAAW,GAAG;AAAA,KAC5D;AAGA,IAAA,OAAO,IAAI,YAAA,CAAY,IAAA,CAAK,OAAA,EAAS,aAAa,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,qBAAA,CACC,QACA,SAAA,EACc;AACd,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA;AAEtD,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACvB,MAAA,MAAM,gBAAA,CAAiB,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,WAAA,EAAa,SAAS,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA,EAKA,QAAA,GAAoB;AACnB,IAAA,OAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,CAAC,GAAA,KAAQ,GAAA,CAAI,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,KAAS,CAAC,CAAC,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB,KAAA,EAAwB;AAC1C,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,IAAA,CAAK,WAAW,MAAA,EAAQ;AACjD,MAAA,OAAO,KAAA;AAAA,IACR;AACA,IAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA,CAAE,KAAK,CAAC,IAAA,KAAS,SAAS,CAAC,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAA,GAAuC;AACtC,IAAA,OAAO,IAAA,CAAK,WAAW,GAAA,CAAI,CAAC,QAAQ,IAAI,UAAA,CAAW,GAAG,CAAC,CAAA;AAAA,EACxD;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,KAAA,EAA2B;AACvC,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,IAAS,IAAA,CAAK,WAAW,MAAA,EAAQ;AACjD,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,yBAAA;AAAA,QAET,mBAAmB,KAAK,CAAA,cAAA;AAAA,OACzB;AAAA,IACD;AACA,IAAA,OAAO,IAAI,UAAA,CAAW,IAAA,CAAK,UAAA,CAAW,KAAK,CAAC,CAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,MAAA,EAA+B;AACpD,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,OAAA,CAAQ,cAAA,CAAe,MAAM,CAAA;AACtD,IAAA,IAAI,gBAAgB,EAAA,EAAI;AACvB,MAAA,MAAM,gBAAA,CAAiB,cAAA,CAAe,MAAA,CAAO,QAAA,EAAU,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,IAAA,CAAK,aAAa,WAAW,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAOA,UAAA,GAAmC;AAClC,IAAA,OAAO,IAAA,CAAK,QAAQ,UAAA,EAAW;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,yBAAA,GAAoC;AACnC,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAA,CAAO,qBAAA;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAAA,GAAqB;AACpB,IAAA,IAAI,CAAC,IAAA,CAAK,QAAA,EAAS,EAAG;AACrB,MAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,UAAA,CAC1B,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,MAAO,EAAE,GAAA,EAAK,CAAA,EAAE,CAAE,CAAA,CAC5B,OAAO,CAAC,EAAE,GAAA,EAAI,KAAM,CAAC,GAAA,CAAI,IAAA,CAAK,CAAC,SAAS,IAAA,KAAS,CAAC,CAAC,CAAA,CACnD,GAAA,CAAI,CAAC,EAAE,CAAA,OAAQ,CAAC,CAAA;AAElB,MAAA,MAAM,OAAA,GAAU,KAAK,UAAA,EAAW;AAChC,MAAA,MAAM,cAAA,GAAiB,eAAe,GAAA,CAAI,CAAC,MAAM,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,EAAU,CAAA;AAEtE,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,mBAAA;AAAA,QAET,CAAA,yDAAA,EAA4D,cAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,QACrF,EAAE,gBAAgB,cAAA;AAAe,OAClC;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,SAAA,GAAwB;AAEvB,IAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,MAAM,CAAA,GAAI,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,cAAA,GAAiB,IAAA,CAAK,UAAA,CAAW,MAAA,GAAS,gBAAA;AAC3D,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,SAAA,EAAU;AAC5C,IAAA,MAAM,SAAA,GAAY,WAAW,YAAA,CAAa,MAAA;AAG1C,IAAA,MAAM,MAAA,GAAS,IAAI,UAAA,CAAW,SAAS,CAAA;AACvC,IAAA,IAAI,MAAA,GAAS,CAAA;AAGb,IAAA,MAAA,GAAS,eAAA,CAAgB,MAAA,EAAQ,MAAA,EAAQ,IAAA,CAAK,WAAW,MAAM,CAAA;AAG/D,IAAA,KAAA,MAAW,GAAA,IAAO,KAAK,UAAA,EAAY;AAClC,MAAA,MAAA,CAAO,GAAA,CAAI,KAAK,MAAM,CAAA;AACtB,MAAA,MAAA,IAAU,gBAAA;AAAA,IACX;AAGA,IAAA,MAAA,CAAO,GAAA,CAAI,cAAc,MAAM,CAAA;AAE/B,IAAA,OAAO,MAAA;AAAA,EACR;AACD;;;AC9VO,IAAM,kBAAA,GAAN,MAAM,mBAAA,CAAmB;AAAA,EACvB,KAAA;AAAA,EACG,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,GAAA,GAAM,KAAA;AAAA,EACA,eAA8B,EAAC;AAAA,EAExC,WAAA,GAAc;AAAA,EAAC;AAAA;AAAA;AAAA;AAAA,EAKvB,OAAO,MAAA,GAA6B;AACnC,IAAA,OAAO,IAAI,mBAAA,EAAmB;AAAA,EAC/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,SAAS,KAAA,EAAwB;AAChC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUG,aAAa,SAAA,EAAyB;AAClC,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,oBAAoB,gBAAA,EAAgC;AAChD,IAAA,IAAA,CAAK,gBAAA,GAAmB,gBAAA;AACxB,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,GAAA,EAAoB;AACvB,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AACX,IAAA,OAAO,IAAA;AAAA,EACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOH,eAAe,WAAA,EAAgC;AAC9C,IAAA,IAAA,CAAK,YAAA,CAAa,KAAK,WAAW,CAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,gBAAgB,YAAA,EAA4C;AAC3D,IAAA,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,GAAG,YAAY,CAAA;AACtC,IAAA,OAAO,IAAA;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,KAAA,GAAqB;AAEpB,IAAA,IAAI,CAAC,KAAK,KAAA,EAAO;AAChB,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,sBAAA;AAAA,QAET;AAAA,OACD;AAAA,IACD;AAEM,IAAA,IAAI,CAAC,KAAK,SAAA,EAAW;AACjB,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,wBAAA;AAAA,QAEN;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,IAAI,IAAA,CAAK,qBAAqB,MAAA,EAAW;AACrC,MAAA,MAAM,IAAI,gBAAA;AAAA,QAAA,wBAAA;AAAA,QAEN;AAAA,OACJ;AAAA,IACJ;AAEN,IAAA,IAAI,IAAA,CAAK,YAAA,CAAa,MAAA,KAAW,CAAA,EAAG;AACnC,MAAA,MAAM,iBAAiB,cAAA,EAAe;AAAA,IACvC;AAGA,IAAA,MAAM,YAAA,GAAe,IAAI,gBAAA,EAAiB;AAG1C,IAAA,YAAA,CAAa,WAAA,CAAY,KAAK,KAAK,CAAA;AAGnC,IAAA,KAAA,MAAW,WAAA,IAAe,KAAK,YAAA,EAAc;AAC5C,MAAA,YAAA,CAAa,MAAA,CAAO,YAAY,QAAQ,CAAA;AAGxC,MAAA,YAAA,CAAa,GAAA,CAAI;AAAA,QAChB,QAAQ,WAAA,CAAY,SAAA;AAAA,QACpB,QAAA,EAAU,KAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACZ,CAAA;AAAA,IACF;AAGA,IAAA,MAAM,WAAA,GAAc,aAAa,aAAA,EAAc;AAC/C,IAAA,MAAM,MAAA,GAAS,aAAa,SAAA,EAAU;AAGtC,IAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,CAAC,WAAA,KAAgB;AACnE,MAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,QAAA,CAAS,WAAA,CAAY,SAAS,CAAA;AAClE,MAAA,IAAI,mBAAmB,EAAA,EAAI;AAC1B,QAAA,MAAM,IAAI,gBAAA;AAAA,UAAA,qBAAA;AAAA,UAET,CAAA,WAAA,EAAc,WAAA,CAAY,SAAA,CAAU,QAAA,EAAU,CAAA,2BAAA;AAAA,SAC/C;AAAA,MACD;AAEA,MAAA,MAAM,iBAAA,GAAoB,WAAA,CAAY,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,KAAS;AAC5D,QAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAA,CAAS,IAAA,CAAK,MAAM,CAAA;AAC/C,QAAA,IAAI,UAAU,EAAA,EAAI;AACjB,UAAA,MAAM,IAAI,gBAAA;AAAA,YAAA,qBAAA;AAAA,YAET,CAAA,QAAA,EAAW,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,2BAAA;AAAA,WAClC;AAAA,QACD;AACA,QAAA,OAAO,KAAA;AAAA,MACR,CAAC,CAAA;AAED,MAAA,MAAM,QAAA,GAAgC;AAAA,QACrC,cAAA;AAAA,QACA,iBAAA,EAAmB,MAAA,CAAO,MAAA,CAAO,iBAAiB,CAAA;AAAA,QAClD,MAAM,WAAA,CAAY;AAAA,OACnB;AAEA,MAAA,OAAO,QAAA;AAAA,IACR,CAAC,CAAA;AAGD,IAAA,MAAM,UAAU,IAAI,OAAA;AAAA,MACnB,MAAA;AAAA,MACA,WAAA;AAAA,MACS,IAAA,CAAK,SAAA;AAAA,MACL,IAAA,CAAK,gBAAA;AAAA,MACL,IAAA,CAAK,GAAA;AAAA,MACd;AAAA,KACD;AAGA,IAAA,OAAO,WAAA,CAAY,YAAY,OAAO,CAAA;AAAA,EACvC;AACD;;;ACnNO,SAAS,mBAAA,CAAoB,QAAkB,KAAA,EAAqB;AAC1E,EAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA,EAAQ;AAChC,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,sBAAA;AAAA,MAET,uCAAuC,KAAK,CAAA;AAAA,KAC7C;AAAA,EACD;AAGA,EAAA,IAAI,SAAS,GAAA,EAAM;AAClB,IAAA,MAAA,CAAO,KAAK,KAAK,CAAA;AACjB,IAAA;AAAA,EACD;AAGA,EAAA,IAAI,SAAS,KAAA,EAAQ;AACpB,IAAA,MAAA,CAAO,IAAA,CAAM,KAAA,GAAQ,GAAA,GAAQ,GAAI,CAAA;AACjC,IAAA,MAAA,CAAO,IAAA,CAAM,KAAA,IAAS,CAAA,GAAK,GAAI,CAAA;AAC/B,IAAA;AAAA,EACD;AAGA,EAAA,MAAA,CAAO,IAAA,CAAM,KAAA,GAAQ,GAAA,GAAQ,GAAI,CAAA;AACjC,EAAA,MAAA,CAAO,IAAA,CAAO,KAAA,IAAS,CAAA,GAAK,GAAA,GAAQ,GAAI,CAAA;AACxC,EAAA,MAAA,CAAO,IAAA,CAAM,KAAA,IAAS,EAAA,GAAM,GAAI,CAAA;AACjC;AAUO,SAASA,sBAAAA,CACf,MACA,aAAA,EACmB;AACnB,EAAA,IAAI,MAAA,GAAS,aAAA;AACb,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,mBAAA;AAAA,MAET;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,EAAQ,CAAA;AAG/B,EAAA,IAAA,CAAK,SAAA,GAAY,SAAU,CAAA,EAAG;AAC7B,IAAA,OAAO,CAAC,WAAW,MAAM,CAAA;AAAA,EAC1B;AAGA,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,mBAAA;AAAA,MAET;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,UAAA,GAAa,KAAK,MAAA,EAAQ,CAAA;AAGhC,EAAA,IAAA,CAAK,UAAA,GAAa,SAAU,CAAA,EAAG;AAC9B,IAAA,OAAO,CAAE,SAAA,GAAY,GAAA,GAAS,UAAA,IAAc,GAAI,MAAM,CAAA;AAAA,EACvD;AAGA,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AAC1B,IAAA,MAAM,IAAI,gBAAA;AAAA,MAAA,mBAAA;AAAA,MAET;AAAA,KACD;AAAA,EACD;AAEA,EAAA,MAAM,SAAA,GAAY,KAAK,MAAA,EAAQ,CAAA;AAC/B,EAAA,MAAM,QACJ,SAAA,GAAY,GAAA,GAAA,CAAU,UAAA,GAAa,GAAA,KAAS,IAAM,SAAA,IAAa,EAAA;AAEjE,EAAA,OAAO,CAAC,OAAO,MAAM,CAAA;AACtB;AAYO,SAAS,eAAA,CACf,MAAA,EACA,MAAA,EACA,KAAA,EACS;AACT,EAAA,IAAI,QAAQ,GAAA,EAAM;AACjB,IAAA,MAAA,CAAO,MAAM,CAAA,GAAI,KAAA;AACjB,IAAA,OAAO,MAAA,GAAS,CAAA;AAAA,EACjB;AACA,EAAA,MAAA,CAAO,MAAM,CAAA,GAAK,KAAA,GAAQ,GAAA,GAAQ,GAAA;AAClC,EAAA,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,GAAI,KAAA,IAAS,CAAA;AAC9B,EAAA,OAAO,MAAA,GAAS,CAAA;AACjB;;;ACrGO,IAAM,gBAAN,MAAsC;AAAA,EAC5C,YAA6B,OAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAAA,EAAmB;AAAA;AAAA;AAAA;AAAA,EAKhD,MAAM,YAAA,GAAmC;AACxC,IAAA,OAAO,KAAK,OAAA,CAAQ,SAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAY,OAAA,EAAyC;AAC1D,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AAAA,EACjC;AACD;;;AC1CO,IAAM,uBAAA,GAA0B;AAGhC,IAAM,oBAAA,GAAuB;AAG7B,IAAM,kBAAA,GAAqB;AAG3B,IAAMC,oBAAAA,GAAsB;AAG5B,IAAM,2BAAA,GAA8B;AAGpC,IAAM,0BAAA,GAA6B;AAGnC,IAAM,+BAAA,GAAkC;AAGxC,IAAM,qBAAA,GAAwB;AAG9B,IAAM,mBAAA,GAAsB;;;ACzBnC,SAAA,EAAA;;;ACGO,IAAK,mBAAA,qBAAAC,oBAAAA,KAAL;AAEN,EAAAA,qBAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,qBAAA,oBAAA,CAAA,GAAqB,oBAAA;AAGrB,EAAAA,qBAAA,gBAAA,CAAA,GAAiB,gBAAA;AACjB,EAAAA,qBAAA,oBAAA,CAAA,GAAqB,oBAAA;AACrB,EAAAA,qBAAA,qBAAA,CAAA,GAAsB,qBAAA;AACtB,EAAAA,qBAAA,WAAA,CAAA,GAAY,WAAA;AACZ,EAAAA,qBAAA,kBAAA,CAAA,GAAmB,kBAAA;AAVR,EAAA,OAAAA,oBAAAA;AAAA,CAAA,EAAA,mBAAA,IAAA,EAAA;AAgBL,IAAM,eAAA,GAAN,MAAM,gBAAA,SAAwB,KAAA,CAAM;AAAA,EAC1C,WAAA,CACiB,IAAA,EAChB,OAAA,EACgB,OAAA,EACf;AACD,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAAA,EACb;AAAA,EAEA,OAAO,gBAAA,GAAoC;AAC1C,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,oBAAA;AAAA,MACA;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,iBAAiB,SAAA,EAAoC;AAC3D,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,oBAAA;AAAA,MACA,yCAAyC,SAAS,CAAA,CAAA,CAAA;AAAA,MAClD,EAAE,SAAA;AAAU,KACb;AAAA,EACD;AAAA,EAEA,OAAO,cAAc,KAAA,EAAgC;AACpD,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,gBAAA;AAAA,MACA,0DAA0D,KAAK,CAAA,EAAA,CAAA;AAAA,MAC/D,EAAE,KAAA;AAAM,KACT;AAAA,EACD;AAAA,EAEA,OAAO,iBAAA,CAAkBC,IAAAA,EAAa,OAAA,EAAoD;AACzF,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,oBAAA;AAAA,MACA,uBAAuBA,IAAG,CAAA,CAAA;AAAA,MAC1B;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,kBAAA,CAAmB,OAAA,EAAiB,OAAA,EAAoD;AAC9F,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,qBAAA;AAAA,MACA,uCAAuC,OAAO,CAAA,CAAA;AAAA,MAC9C;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,QAAA,CAAS,OAAA,EAAiB,OAAA,EAAoD;AACpF,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,WAAA;AAAA,MACA,gCAAgC,OAAO,CAAA,CAAA;AAAA,MACvC;AAAA,KACD;AAAA,EACD;AAAA,EAEA,OAAO,eAAe,UAAA,EAAqC;AAC1D,IAAA,OAAO,IAAI,gBAAA;AAAA,MACV,kBAAA;AAAA,MACA,kCAAkC,UAAU,CAAA,UAAA,CAAA;AAAA,MAC5C,EAAE,UAAA;AAAW,KACd;AAAA,EACD;AAAA,EAEA,MAAA,GAIE;AACD,IAAA,OAAO;AAAA,MACN,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK;AAAA,KACf;AAAA,EACD;AACD;;;ACtFO,IAAK,sBAAA,qBAAAC,uBAAAA,KAAL;AACL,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,WAAQ,CAAA,CAAA,GAAR,OAAA;AACA,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,UAAO,CAAA,CAAA,GAAP,MAAA;AACA,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,sBAAmB,CAAA,CAAA,GAAnB,kBAAA;AACA,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,YAAS,CAAA,CAAA,GAAT,QAAA;AACA,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,aAAU,CAAA,CAAA,GAAV,SAAA;AACA,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,uBAAoB,CAAA,CAAA,GAApB,mBAAA;AACA,EAAAA,uBAAAA,CAAAA,uBAAAA,CAAA,cAAW,CAAA,CAAA,GAAX,UAAA;AAPU,EAAA,OAAAA,uBAAAA;AAAA,CAAA,EAAA,sBAAA,IAAA,EAAA;AAUZ,IAAM,iBAAA,GAAoB,SAAA,CAAU,UAAA,CAAW,uBAAuB,CAAA;AAM/D,SAAS,gBAAA,CACd,cAAA,EACA,SAAA,EACA,MAAA,EACAlF,MAAAA,EACa;AACb,EAAA,MAAM,SAAS,IAAI,aAAA,CAAc,IAAI,CAAA,GAAI,CAAA,GAAIA,OAAM,MAAM,CAAA;AACzD,EAAA,MAAA,CAAO,aAAa,CAAA,aAA4B;AAChD,EAAA,MAAA,CAAO,SAAS,MAAM,CAAA;AACtB,EAAA,MAAA,CAAO,cAAcA,MAAK,CAAA;AAE1B,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,iBAAA;AAAA,IACX,QAAA,EAAU;AAAA,MACR,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,YAAY,IAAA,EAAK;AAAA,MAC5D,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,YAAY,KAAA;AAAM,KACzD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACvB;AACF;AAMO,SAAS,2BAAA,CACd,cAAA,EACA,SAAA,EACA,OAAA,EACA,gBAAA,EACa;AACb,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,CAAC,CAAA;AAClC,EAAA,MAAA,CAAO,aAAa,CAAA,wBAAuC;AAC3D,EAAA,MAAA,CAAO,SAAS,OAAO,CAAA;AAEvB,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,iBAAA;AAAA,IACX,QAAA,EAAU;AAAA,MACR,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,YAAY,IAAA,EAAK;AAAA,MAC5D,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,YAAY,KAAA,EAAM;AAAA,MACvD,EAAE,MAAA,EAAQ,gBAAA,EAAkB,QAAA,EAAU,KAAA,EAAO,YAAY,IAAA;AAAK,KAChE;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACvB;AACF;AAMO,SAAS,iBAAA,CAAkB,gBAA2B,SAAA,EAAmC;AAC9F,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,CAAC,CAAA;AAClC,EAAA,MAAA,CAAO,aAAa,CAAA,cAA6B;AAEjD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,iBAAA;AAAA,IACX,QAAA,EAAU;AAAA,MACR,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,YAAY,IAAA,EAAK;AAAA,MAC5D,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,YAAY,KAAA;AAAM,KACzD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACvB;AACF;AAMO,SAAS,kBAAA,CAAmB,gBAA2B,SAAA,EAAmC;AAC/F,EAAA,MAAM,MAAA,GAAS,IAAI,aAAA,CAAc,CAAC,CAAA;AAClC,EAAA,MAAA,CAAO,aAAa,CAAA,eAA8B;AAElD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,iBAAA;AAAA,IACX,QAAA,EAAU;AAAA,MACR,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAA,EAAU,KAAA,EAAO,YAAY,IAAA,EAAK;AAAA,MAC5D,EAAE,MAAA,EAAQ,SAAA,EAAW,QAAA,EAAU,IAAA,EAAM,YAAY,KAAA;AAAM,KACzD;AAAA,IACA,IAAA,EAAM,OAAO,OAAA;AAAQ,GACvB;AACF;;;AF9DO,SAASmF,iBAAAA,CAAiB,OAAA,EAAiB,WAAA,EAAqB,UAAA,EAA4B;AACjG,EAAA,MAAM,KAAA,GAAQ,cAAc,IAAA,IAAQ,OAAA;AACpC,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,UAAU,CAAA;AACnC;AAWO,IAAM,oBAAN,MAAwB;AAAA,EACZ,WAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,qBAAA;AAAA,EAEjB,YAAY,OAAA,EAAmC;AAC7C,IAAA,IAAI,OAAA,CAAQ,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG;AACpC,MAAA,MAAM,gBAAgB,gBAAA,EAAiB;AAAA,IACzC;AAEA,IAAA,IAAA,CAAK,cAAc,OAAA,CAAQ,WAAA;AAC3B,IAAA,IAAA,CAAK,iBAAiB,OAAA,CAAQ,cAAA;AAE9B,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,EAAQ,SAAA,IAAa,kBAAA;AAC/C,IAAA,IAAI,aAAa,CAAA,EAAG;AAClB,MAAA,MAAM,eAAA,CAAgB,iBAAiB,SAAS,CAAA;AAAA,IAClD;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,OAAA,CAAQ,MAAA,EAAQ,UAAA,IAAcJ,oBAAAA;AAChD,IAAA,IAAA,CAAK,gBAAA,GAAmB,OAAA,CAAQ,MAAA,EAAQ,gBAAA,IAAoB,2BAAA;AAC5D,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,MAAA,EAAQ,eAAA,IAAmB,0BAAA;AAC1D,IAAA,IAAA,CAAK,qBAAA,GACH,OAAA,CAAQ,MAAA,EAAQ,qBAAA,IAAyB,+BAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,MAAA,CAAO,MAAA,EAAqB,YAAA,EAA2C;AAC3E,IAAA,MAAM,aAAA,GAAgB,KAAK,cAAA,CAAe,SAAA;AAC1C,IAAA,MAAM,cAAc,YAAA,CAAa,SAAA;AACjC,IAAA,MAAM,YAAA,GAAe,SAAA,CAAU,UAAA,CAAW,uBAAuB,CAAA;AAGjE,IAAA,MAAM,gBAAA,GAAmB,MAAM,MAAA,CAAO,mBAAA,EAAoB;AAG1D,IAAA,MAAM,UAAA,GAAa,MAAM,MAAA,CAAO,iCAAA;AAAA,MAC9B,MAAA,CAAO,mBAAA,GAAsB,IAAA,CAAK,WAAA,CAAY,MAAM;AAAA,KACtD;AACA,IAAA,MAAM,aAAA,GAAgB,OAAO,IAAA,CAAK,KAAA,CAAM,OAAO,UAAU,CAAA,GAAI,qBAAqB,CAAC,CAAA;AAGnF,IAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AAEnC,IAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,cAAA,CAAe,aAAa,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,KAAe;AAIhF,MAAA,IAAI,aAAa,KAAA,IAAS,CAAA,CAAE,OAAA,CAAQ,UAAA,CAAW,wBAAwB,CAAA,EAAG;AACxE,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAM,CAAA;AAAA,IACR,CAAC,CAAA;AAED,IAAA,IAAI,QAAA,EAAU;AAIZ,MAAA,IAAI,QAAA,CAAS,KAAA,CAAM,QAAA,EAAS,KAAM,uBAAA,EAAyB;AACzD,QAAA,MAAM,eAAA,CAAgB,aAAA,CAAc,QAAA,CAAS,KAAA,CAAM,UAAU,CAAA;AAAA,MAC/D;AAEA,MAAA,MAAM,MAAqB,EAAC;AAG5B,MAAA,IAAI,QAAA,CAAS,SAAS,aAAA,EAAe;AACnC,QAAA,MAAM,OAAA,GAAU,gBAAgB,QAAA,CAAS,MAAA;AACzC,QAAA,GAAA,CAAI,IAAA,CAAK,mBAAA,CAAoB,WAAA,EAAa,aAAA,EAAe,OAAO,CAAC,CAAA;AAAA,MACnE;AAGA,MAAA,IAAI,SAAS,UAAA,EAAY;AACvB,QAAA,GAAA,CAAI,IAAA,CAAK,kBAAA,CAAmB,aAAA,EAAe,WAAW,CAAC,CAAA;AAAA,MACzD;AAGA,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,2BAAA;AAAA,UACE,aAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAK,WAAA,CAAY,MAAA;AAAA,UACjB;AAAA;AACF,OACF;AAEA,MAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,MAAA,EAAO,CACvC,QAAA,CAAS,WAAW,CAAA,CACpB,YAAA,CAAa,SAAS,CAAA,CACtB,mBAAA,CAAoB,gBAAgB,CAAA;AAEvC,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,QAAA,OAAA,CAAQ,eAAe,EAAE,CAAA;AAAA,MAC3B;AAEA,MAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,KAAA,EAAM,CAAE,KAAK,YAAY,CAAA;AAC5C,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,EAAA,CAAG,WAAW,CAAA;AAAA,IAClD,CAAA,MAAO;AAEL,MAAA,MAAM,QAAA,GAAW,aAAA;AAAA,QACf,WAAA;AAAA,QACA,aAAA;AAAA,QACA,aAAA;AAAA,QACA,EAAA;AAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,MAAM,WAAA,GAAc,2BAAA;AAAA,QAClB,aAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAK,WAAA,CAAY,MAAA;AAAA,QACjB;AAAA,OACF;AAEA,MAAA,MAAM,EAAA,GAAK,kBAAA,CAAmB,MAAA,EAAO,CAClC,QAAA,CAAS,WAAW,CAAA,CACpB,YAAA,CAAa,SAAS,CAAA,CACtB,mBAAA,CAAoB,gBAAgB,CAAA,CACpC,eAAe,QAAQ,CAAA,CACvB,cAAA,CAAe,WAAW,CAAA,CAC1B,KAAA,EAAM,CACN,OAAA,CAAQ,CAAC,YAAA,EAAc,IAAA,CAAK,cAAc,CAAC,CAAA;AAE9C,MAAA,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,EAAA,CAAG,WAAW,CAAA;AAAA,IAClD;AAGA,IAAA,MAAM,IAAA,CAAK,kBAAA,CAAmB,MAAA,EAAQ,aAAa,CAAA;AAGnD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,eAAA,CAAgB,IAAA,CAAK,WAAW,CAAA;AACpD,IAAA,MAAM,kBAA4B,EAAC;AAEnC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACtC,MAAA,MAAM,MAAA,GAAS,IAAI,IAAA,CAAK,SAAA;AACxB,MAAA,MAAM,KAAK,gBAAA,CAAiB,aAAA,EAAe,aAAa,MAAA,EAAQ,MAAA,CAAO,CAAC,CAAC,CAAA;AAEzE,MAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AACxC,MAAA,MAAM,KAAK,kBAAA,CAAmB,MAAA,GAC3B,QAAA,CAAS,WAAW,EACpB,YAAA,CAAa,cAAc,EAC3B,mBAAA,CAAoB,gBAAgB,EACpC,cAAA,CAAe,EAAE,EACjB,KAAA,EAAM,CACN,KAAK,YAAY,CAAA;AAEpB,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,MAAM,MAAA,CAAO,eAAA,CAAgB,EAAA,CAAG,WAAW,CAAA;AAAA,MACnD,SAAS,CAAA,EAAY;AACnB,QAAA,MAAM,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAGvC,MAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,MAAA,IAAU,IAAA,CAAK,qBAAA;AACvD,MAAA,MAAM,WAAA,GAAc,CAAA,KAAM,MAAA,CAAO,MAAA,GAAS,CAAA;AAE1C,MAAA,IAAI,mBAAmB,WAAA,EAAa;AAClC,QAAA,MAAM,IAAA,CAAK,YAAA,CAAa,MAAA,EAAQ,eAAe,CAAA;AAC/C,QAAA,eAAA,CAAgB,MAAA,GAAS,CAAA;AAAA,MAC3B;AAAA,IACF;AAGA,IAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,aAAA,EAAe,WAAW,CAAA;AAC7D,IAAA,MAAM,eAAA,GAAkB,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,CAAA;AACzC,IAAA,MAAM,WAAW,kBAAA,CAAmB,MAAA,GACjC,QAAA,CAAS,WAAW,EACpB,YAAA,CAAa,eAAe,EAC5B,mBAAA,CAAoB,gBAAgB,EACpC,cAAA,CAAe,QAAQ,EACvB,KAAA,EAAM,CACN,KAAK,YAAY,CAAA;AAEpB,IAAA,MAAM,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ,QAAA,CAAS,WAAW,CAAA;AAEtD,IAAA,OAAO,aAAA;AAAA,EACT;AAAA,EAEQ,gBAAgB,IAAA,EAAgC;AACtD,IAAA,MAAM,SAAuB,EAAC;AAC9B,IAAA,KAAA,IAAS,SAAS,CAAA,EAAG,MAAA,GAAS,KAAK,MAAA,EAAQ,MAAA,IAAU,KAAK,SAAA,EAAW;AACnE,MAAA,MAAA,CAAO,KAAK,IAAA,CAAK,QAAA,CAAS,QAAQ,MAAA,GAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEA,MAAc,cAAA,CAAe,MAAA,EAAqB,WAAA,EAAwC;AACxF,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,MAAM,MAAA,CAAO,yBAAA,CAA0B,WAAA,EAAa;AAAA,QAC3D,mBAAmB,IAAA,CAAK,UAAA;AAAA,QACxB,qBAAqB,IAAA,CAAK;AAAA,OAC3B,CAAA;AAAA,IACH,SAAS,CAAA,EAAY;AACnB,MAAA,MAAM,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,MAAA,MAAM,eAAA,CAAgB,iBAAA,CAAkB,MAAA,CAAO,GAAA,IAAO,eAAe,CAAA;AAAA,IACvE;AAAA,EACF;AAAA,EAEA,MAAc,YAAA,CAAa,MAAA,EAAqB,UAAA,EAAqC;AACnF,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI;AACF,MAAA,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,QACtB,UAAA,CAAW,GAAA,CAAI,CAAA,GAAA,KAAO,MAAA,CAAO,mBAAmB,GAAA,EAAK;AAAA,UACnD,YAAY,IAAA,CAAK,UAAA;AAAA,UACjB,cAAc,IAAA,CAAK;AAAA,SACpB,CAAC;AAAA,OACJ;AAAA,IACF,SAAS,CAAA,EAAY;AACnB,MAAA,MAAM,IAAA,CAAK,kBAAkB,CAAC,CAAA;AAAA,IAChC;AACA,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,QAAA,MAAM,eAAA,CAAgB,iBAAA,CAAkB,MAAA,CAAO,GAAA,IAAO,eAAA,EAAiB;AAAA,UACrE,WAAW,MAAA,CAAO;AAAA,SACnB,CAAA;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,kBAAkB,CAAA,EAA6B;AACrD,IAAA,IAAI,CAAA,YAAa,iBAAiB,OAAO,CAAA;AACzC,IAAA,IAAI,aAAa,QAAA,EAAU;AACzB,MAAA,MAAM,OAAA,GAAU,EAAE,OAAA,EAAS,CAAA,CAAE,IAAA,EAAM,WAAW,CAAA,CAAE,SAAA,EAAW,GAAG,CAAA,CAAE,OAAA,EAAQ;AACxE,MAAA,QAAQ,EAAE,IAAA;AAAM,QACd,KAAA,kCAAA;AACE,UAAA,OAAO,eAAA,CAAgB,kBAAA,CAAmB,CAAA,CAAE,OAAA,EAAS,OAAO,CAAA;AAAA,QAC9D,KAAA,sBAAA;AAAA,QACA,KAAA,oBAAA;AACE,UAAA,OAAO,eAAA,CAAgB,iBAAA,CAAkB,CAAA,CAAE,OAAA,EAAS,OAAO,CAAA;AAAA,QAC7D;AACE,UAAA,OAAO,eAAA,CAAgB,QAAA,CAAS,CAAA,CAAE,OAAA,EAAS,OAAO,CAAA;AAAA;AACtD,IACF;AACA,IAAA,MAAM,UAAU,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,OAAA,GAAU,OAAO,CAAC,CAAA;AACzD,IAAA,OAAO,eAAA,CAAgB,SAAS,OAAA,EAAS;AAAA,MACvC,KAAA,EAAO,CAAA,YAAa,KAAA,GAAQ,CAAA,CAAE,YAAY,IAAA,GAAO;AAAA,KAClD,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,kBAAA,CAAmB,MAAA,EAAqB,aAAA,EAAyC;AAC7F,IAAA,MAAM,YAAA,GAAe,mBAAA,GAAsB,IAAA,CAAK,WAAA,CAAY,MAAA;AAE5D,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,IAAA,CAAK,YAAY,OAAA,EAAA,EAAW;AAC1D,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,cAAA,CAAe,aAAa,CAAA;AACzD,QAAA,IACE,OAAA,CAAQ,MAAM,QAAA,EAAS,KAAM,2BAC7B,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,YAAY,CAAA,EACpC;AACA,UAAA;AAAA,QACF;AAAA,MACF,SAAS,CAAA,EAAY;AAGnB,QAAA,IAAI,EAAE,CAAA,YAAa,KAAA,IAAS,EAAE,OAAA,CAAQ,UAAA,CAAW,wBAAwB,CAAA,CAAA,EAAI;AAC3E,UAAA,MAAM,CAAA;AAAA,QACR;AAAA,MACF;AAEA,MAAA,MAAM,QAAQI,iBAAAA,CAAiB,OAAA,EAAS,IAAA,CAAK,gBAAA,EAAkB,KAAK,eAAe,CAAA;AACnF,MAAA,MAAM,MAAM,KAAK,CAAA;AAAA,IACnB;AACA,IAAA,MAAM,eAAA,CAAgB,cAAA,CAAe,IAAA,CAAK,UAAU,CAAA;AAAA,EACtD;AACF","file":"index.mjs","sourcesContent":["/*! scure-base - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\nexport interface Coder<F, T> {\n encode(from: F): T;\n decode(to: T): F;\n}\n\nexport interface BytesCoder extends Coder<Uint8Array, string> {\n encode: (data: Uint8Array) => string;\n decode: (str: string) => Uint8Array;\n}\n\nfunction isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b: Uint8Array | undefined): void {\n if (!isBytes(b)) throw new Error('Uint8Array expected');\n}\n\nfunction isArrayOf(isString: boolean, arr: any[]) {\n if (!Array.isArray(arr)) return false;\n if (arr.length === 0) return true;\n if (isString) {\n return arr.every((item) => typeof item === 'string');\n } else {\n return arr.every((item) => Number.isSafeInteger(item));\n }\n}\n\nfunction afn(input: Function): input is Function {\n if (typeof input !== 'function') throw new Error('function expected');\n return true;\n}\n\nfunction astr(label: string, input: unknown): input is string {\n if (typeof input !== 'string') throw new Error(`${label}: string expected`);\n return true;\n}\n\nfunction anumber(n: number): void {\n if (!Number.isSafeInteger(n)) throw new Error(`invalid integer: ${n}`);\n}\n\nfunction aArr(input: any[]) {\n if (!Array.isArray(input)) throw new Error('array expected');\n}\nfunction astrArr(label: string, input: string[]) {\n if (!isArrayOf(true, input)) throw new Error(`${label}: array of strings expected`);\n}\nfunction anumArr(label: string, input: number[]) {\n if (!isArrayOf(false, input)) throw new Error(`${label}: array of numbers expected`);\n}\n\n// TODO: some recusive type inference so it would check correct order of input/output inside rest?\n// like <string, number>, <number, bytes>, <bytes, float>\ntype Chain = [Coder<any, any>, ...Coder<any, any>[]];\n// Extract info from Coder type\ntype Input<F> = F extends Coder<infer T, any> ? T : never;\ntype Output<F> = F extends Coder<any, infer T> ? T : never;\n// Generic function for arrays\ntype First<T> = T extends [infer U, ...any[]] ? U : never;\ntype Last<T> = T extends [...any[], infer U] ? U : never;\ntype Tail<T> = T extends [any, ...infer U] ? U : never;\n\ntype AsChain<C extends Chain, Rest = Tail<C>> = {\n // C[K] = Coder<Input<C[K]>, Input<Rest[k]>>\n [K in keyof C]: Coder<Input<C[K]>, Input<K extends keyof Rest ? Rest[K] : any>>;\n};\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction chain<T extends Chain & AsChain<T>>(...args: T): Coder<Input<First<T>>, Output<Last<T>>> {\n const id = (a: any) => a;\n // Wrap call in closure so JIT can inline calls\n const wrap = (a: any, b: any) => (c: any) => a(b(c));\n // Construct chain of args[-1].encode(args[-2].encode([...]))\n const encode = args.map((x) => x.encode).reduceRight(wrap, id);\n // Construct chain of args[0].decode(args[1].decode(...))\n const decode = args.map((x) => x.decode).reduce(wrap, id);\n return { encode, decode };\n}\n\n/**\n * Encodes integer radix representation to array of strings using alphabet and back.\n * Could also be array of strings.\n * @__NO_SIDE_EFFECTS__\n */\nfunction alphabet(letters: string | string[]): Coder<number[], string[]> {\n // mapping 1 to \"b\"\n const lettersA = typeof letters === 'string' ? letters.split('') : letters;\n const len = lettersA.length;\n astrArr('alphabet', lettersA);\n\n // mapping \"b\" to 1\n const indexes = new Map(lettersA.map((l, i) => [l, i]));\n return {\n encode: (digits: number[]) => {\n aArr(digits);\n return digits.map((i) => {\n if (!Number.isSafeInteger(i) || i < 0 || i >= len)\n throw new Error(\n `alphabet.encode: digit index outside alphabet \"${i}\". Allowed: ${letters}`\n );\n return lettersA[i]!;\n });\n },\n decode: (input: string[]): number[] => {\n aArr(input);\n return input.map((letter) => {\n astr('alphabet.decode', letter);\n const i = indexes.get(letter);\n if (i === undefined) throw new Error(`Unknown letter: \"${letter}\". Allowed: ${letters}`);\n return i;\n });\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction join(separator = ''): Coder<string[], string> {\n astr('join', separator);\n return {\n encode: (from) => {\n astrArr('join.decode', from);\n return from.join(separator);\n },\n decode: (to) => {\n astr('join.decode', to);\n return to.split(separator);\n },\n };\n}\n\n/**\n * Pad strings array so it has integer number of bits\n * @__NO_SIDE_EFFECTS__\n */\nfunction padding(bits: number, chr = '='): Coder<string[], string[]> {\n anumber(bits);\n astr('padding', chr);\n return {\n encode(data: string[]): string[] {\n astrArr('padding.encode', data);\n while ((data.length * bits) % 8) data.push(chr);\n return data;\n },\n decode(input: string[]): string[] {\n astrArr('padding.decode', input);\n let end = input.length;\n if ((end * bits) % 8)\n throw new Error('padding: invalid, string should have whole number of bytes');\n for (; end > 0 && input[end - 1] === chr; end--) {\n const last = end - 1;\n const byte = last * bits;\n if (byte % 8 === 0) throw new Error('padding: invalid, string has too much padding');\n }\n return input.slice(0, end);\n },\n };\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction normalize<T>(fn: (val: T) => T): Coder<T, T> {\n afn(fn);\n return { encode: (from: T) => from, decode: (to: T) => fn(to) };\n}\n\n/**\n * Slow: O(n^2) time complexity\n */\nfunction convertRadix(data: number[], from: number, to: number): number[] {\n // base 1 is impossible\n if (from < 2) throw new Error(`convertRadix: invalid from=${from}, base cannot be less than 2`);\n if (to < 2) throw new Error(`convertRadix: invalid to=${to}, base cannot be less than 2`);\n aArr(data);\n if (!data.length) return [];\n let pos = 0;\n const res = [];\n const digits = Array.from(data, (d) => {\n anumber(d);\n if (d < 0 || d >= from) throw new Error(`invalid integer: ${d}`);\n return d;\n });\n const dlen = digits.length;\n while (true) {\n let carry = 0;\n let done = true;\n for (let i = pos; i < dlen; i++) {\n const digit = digits[i]!;\n const fromCarry = from * carry;\n const digitBase = fromCarry + digit;\n if (\n !Number.isSafeInteger(digitBase) ||\n fromCarry / from !== carry ||\n digitBase - digit !== fromCarry\n ) {\n throw new Error('convertRadix: carry overflow');\n }\n const div = digitBase / to;\n carry = digitBase % to;\n const rounded = Math.floor(div);\n digits[i] = rounded;\n if (!Number.isSafeInteger(rounded) || rounded * to + carry !== digitBase)\n throw new Error('convertRadix: carry overflow');\n if (!done) continue;\n else if (!rounded) pos = i;\n else done = false;\n }\n res.push(carry);\n if (done) break;\n }\n for (let i = 0; i < data.length - 1 && data[i] === 0; i++) res.push(0);\n return res.reverse();\n}\n\nconst gcd = (a: number, b: number): number => (b === 0 ? a : gcd(b, a % b));\nconst radix2carry = /* @__NO_SIDE_EFFECTS__ */ (from: number, to: number) =>\n from + (to - gcd(from, to));\nconst powers: number[] = /* @__PURE__ */ (() => {\n let res = [];\n for (let i = 0; i < 40; i++) res.push(2 ** i);\n return res;\n})();\n/**\n * Implemented with numbers, because BigInt is 5x slower\n */\nfunction convertRadix2(data: number[], from: number, to: number, padding: boolean): number[] {\n aArr(data);\n if (from <= 0 || from > 32) throw new Error(`convertRadix2: wrong from=${from}`);\n if (to <= 0 || to > 32) throw new Error(`convertRadix2: wrong to=${to}`);\n if (radix2carry(from, to) > 32) {\n throw new Error(\n `convertRadix2: carry overflow from=${from} to=${to} carryBits=${radix2carry(from, to)}`\n );\n }\n let carry = 0;\n let pos = 0; // bitwise position in current element\n const max = powers[from]!;\n const mask = powers[to]! - 1;\n const res: number[] = [];\n for (const n of data) {\n anumber(n);\n if (n >= max) throw new Error(`convertRadix2: invalid data word=${n} from=${from}`);\n carry = (carry << from) | n;\n if (pos + from > 32) throw new Error(`convertRadix2: carry overflow pos=${pos} from=${from}`);\n pos += from;\n for (; pos >= to; pos -= to) res.push(((carry >> (pos - to)) & mask) >>> 0);\n const pow = powers[pos];\n if (pow === undefined) throw new Error('invalid carry');\n carry &= pow - 1; // clean carry, otherwise it will cause overflow\n }\n carry = (carry << (to - pos)) & mask;\n if (!padding && pos >= from) throw new Error('Excess padding');\n if (!padding && carry > 0) throw new Error(`Non-zero padding: ${carry}`);\n if (padding && pos > 0) res.push(carry >>> 0);\n return res;\n}\n\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix(num: number): Coder<Uint8Array, number[]> {\n anumber(num);\n const _256 = 2 ** 8;\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix.encode input should be Uint8Array');\n return convertRadix(Array.from(bytes), _256, num);\n },\n decode: (digits: number[]) => {\n anumArr('radix.decode', digits);\n return Uint8Array.from(convertRadix(digits, num, _256));\n },\n };\n}\n\n/**\n * If both bases are power of same number (like `2**8 <-> 2**64`),\n * there is a linear algorithm. For now we have implementation for power-of-two bases only.\n * @__NO_SIDE_EFFECTS__\n */\nfunction radix2(bits: number, revPadding = false): Coder<Uint8Array, number[]> {\n anumber(bits);\n if (bits <= 0 || bits > 32) throw new Error('radix2: bits should be in (0..32]');\n if (radix2carry(8, bits) > 32 || radix2carry(bits, 8) > 32)\n throw new Error('radix2: carry overflow');\n return {\n encode: (bytes: Uint8Array) => {\n if (!isBytes(bytes)) throw new Error('radix2.encode input should be Uint8Array');\n return convertRadix2(Array.from(bytes), 8, bits, !revPadding);\n },\n decode: (digits: number[]) => {\n anumArr('radix2.decode', digits);\n return Uint8Array.from(convertRadix2(digits, bits, 8, revPadding));\n },\n };\n}\n\ntype ArgumentTypes<F extends Function> = F extends (...args: infer A) => any ? A : never;\nfunction unsafeWrapper<T extends (...args: any) => any>(fn: T) {\n afn(fn);\n return function (...args: ArgumentTypes<T>): ReturnType<T> | void {\n try {\n return fn.apply(null, args);\n } catch (e) {}\n };\n}\n\nfunction checksum(\n len: number,\n fn: (data: Uint8Array) => Uint8Array\n): Coder<Uint8Array, Uint8Array> {\n anumber(len);\n afn(fn);\n return {\n encode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.encode: input should be Uint8Array');\n const sum = fn(data).slice(0, len);\n const res = new Uint8Array(data.length + len);\n res.set(data);\n res.set(sum, data.length);\n return res;\n },\n decode(data: Uint8Array) {\n if (!isBytes(data)) throw new Error('checksum.decode: input should be Uint8Array');\n const payload = data.slice(0, -len);\n const oldChecksum = data.slice(-len);\n const newChecksum = fn(payload).slice(0, len);\n for (let i = 0; i < len; i++)\n if (newChecksum[i] !== oldChecksum[i]) throw new Error('Invalid checksum');\n return payload;\n },\n };\n}\n\n// prettier-ignore\nexport const utils: { alphabet: typeof alphabet; chain: typeof chain; checksum: typeof checksum; convertRadix: typeof convertRadix; convertRadix2: typeof convertRadix2; radix: typeof radix; radix2: typeof radix2; join: typeof join; padding: typeof padding; } = {\n alphabet, chain, checksum, convertRadix, convertRadix2, radix, radix2, join, padding,\n};\n\n// RFC 4648 aka RFC 3548\n// ---------------------\n\n/**\n * base16 encoding from RFC 4648.\n * @example\n * ```js\n * base16.encode(Uint8Array.from([0x12, 0xab]));\n * // => '12AB'\n * ```\n */\nexport const base16: BytesCoder = chain(radix2(4), alphabet('0123456789ABCDEF'), join(''));\n\n/**\n * base32 encoding from RFC 4648. Has padding.\n * Use `base32nopad` for unpadded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ===='\n * base32.decode('CKVQ====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding.\n * Use `base32` for padded version.\n * Also check out `base32hex`, `base32hexnopad`, `base32crockford`.\n * @example\n * ```js\n * base32nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'CKVQ'\n * base32nopad.decode('CKVQ');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32nopad: BytesCoder = chain(\n radix2(5),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZ234567'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Padded. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hexnopad` for unpadded version.\n * @example\n * ```js\n * base32hex.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG===='\n * base32hex.decode('2ALG====');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hex: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n padding(5),\n join('')\n);\n\n/**\n * base32 encoding from RFC 4648. No padding. Compared to ordinary `base32`, slightly different alphabet.\n * Use `base32hex` for padded version.\n * @example\n * ```js\n * base32hexnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ALG'\n * base32hexnopad.decode('2ALG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32hexnopad: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUV'),\n join('')\n);\n/**\n * base32 encoding from RFC 4648. Doug Crockford's version.\n * https://www.crockford.com/base32.html\n * @example\n * ```js\n * base32crockford.encode(Uint8Array.from([0x12, 0xab]));\n * // => '2ANG'\n * base32crockford.decode('2ANG');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base32crockford: BytesCoder = chain(\n radix2(5),\n alphabet('0123456789ABCDEFGHJKMNPQRSTVWXYZ'),\n join(''),\n normalize((s: string) => s.toUpperCase().replace(/O/g, '0').replace(/[IL]/g, '1'))\n);\n\n// Built-in base64 conversion https://caniuse.com/mdn-javascript_builtins_uint8array_frombase64\n// prettier-ignore\nconst hasBase64Builtin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toBase64 === 'function' &&\n typeof (Uint8Array as any).fromBase64 === 'function')();\n\nconst decodeBase64Builtin = (s: string, isUrl: boolean) => {\n astr('base64', s);\n const re = isUrl ? /^[A-Za-z0-9=_-]+$/ : /^[A-Za-z0-9=+/]+$/;\n const alphabet = isUrl ? 'base64url' : 'base64';\n if (s.length > 0 && !re.test(s)) throw new Error('invalid base64');\n return (Uint8Array as any).fromBase64(s, { alphabet, lastChunkHandling: 'strict' });\n};\n\n/**\n * base64 from RFC 4648. Padded.\n * Use `base64nopad` for unpadded version.\n * Also check out `base64url`, `base64urlnopad`.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64(); },\n decode(s) { return decodeBase64Builtin(s, false); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n padding(6),\n join('')\n);\n/**\n * base64 from RFC 4648. No padding.\n * Use `base64` for padded version.\n * @example\n * ```js\n * base64nopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64nopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64nopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. Padded.\n * Use `base64urlnopad` for unpadded version.\n * Falls back to built-in function, when available.\n * @example\n * ```js\n * base64url.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs='\n * base64url.decode('Eqs=');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\n// prettier-ignore\nexport const base64url: BytesCoder = hasBase64Builtin ? {\n encode(b) { abytes(b); return (b as any).toBase64({ alphabet: 'base64url' }); },\n decode(s) { return decodeBase64Builtin(s, true); },\n} : chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n padding(6),\n join('')\n);\n\n/**\n * base64 from RFC 4648, using URL-safe alphabet. No padding.\n * Use `base64url` for padded version.\n * @example\n * ```js\n * base64urlnopad.encode(Uint8Array.from([0x12, 0xab]));\n * // => 'Eqs'\n * base64urlnopad.decode('Eqs');\n * // => Uint8Array.from([0x12, 0xab])\n * ```\n */\nexport const base64urlnopad: BytesCoder = chain(\n radix2(6),\n alphabet('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'),\n join('')\n);\n\n// base58 code\n// -----------\nconst genBase58 = /* @__NO_SIDE_EFFECTS__ */ (abc: string) =>\n chain(radix(58), alphabet(abc), join(''));\n\n/**\n * base58: base64 without ambigous characters +, /, 0, O, I, l.\n * Quadratic (O(n^2)) - so, can't be used on large inputs.\n * @example\n * ```js\n * base58.decode('01abcdef');\n * // => '3UhJW'\n * ```\n */\nexport const base58: BytesCoder = genBase58(\n '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n);\n/**\n * base58: flickr version. Check out `base58`.\n */\nexport const base58flickr: BytesCoder = genBase58(\n '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'\n);\n/**\n * base58: XRP version. Check out `base58`.\n */\nexport const base58xrp: BytesCoder = genBase58(\n 'rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz'\n);\n\n// Data len (index) -> encoded block len\nconst XMR_BLOCK_LEN = [0, 2, 3, 5, 6, 7, 9, 10, 11];\n\n/**\n * base58: XMR version. Check out `base58`.\n * Done in 8-byte blocks (which equals 11 chars in decoding). Last (non-full) block padded with '1' to size in XMR_BLOCK_LEN.\n * Block encoding significantly reduces quadratic complexity of base58.\n */\nexport const base58xmr: BytesCoder = {\n encode(data: Uint8Array) {\n let res = '';\n for (let i = 0; i < data.length; i += 8) {\n const block = data.subarray(i, i + 8);\n res += base58.encode(block).padStart(XMR_BLOCK_LEN[block.length]!, '1');\n }\n return res;\n },\n decode(str: string) {\n let res: number[] = [];\n for (let i = 0; i < str.length; i += 11) {\n const slice = str.slice(i, i + 11);\n const blockLen = XMR_BLOCK_LEN.indexOf(slice.length);\n const block = base58.decode(slice);\n for (let j = 0; j < block.length - blockLen; j++) {\n if (block[j] !== 0) throw new Error('base58xmr: wrong padding');\n }\n res = res.concat(Array.from(block.slice(block.length - blockLen)));\n }\n return Uint8Array.from(res);\n },\n};\n\n/**\n * Method, which creates base58check encoder.\n * Requires function, calculating sha256.\n */\nexport const createBase58check = (sha256: (data: Uint8Array) => Uint8Array): BytesCoder =>\n chain(\n checksum(4, (data) => sha256(sha256(data))),\n base58\n );\n\n/**\n * Use `createBase58check` instead.\n * @deprecated\n */\nexport const base58check: (sha256: (data: Uint8Array) => Uint8Array) => BytesCoder =\n createBase58check;\n\n// Bech32 code\n// -----------\nexport interface Bech32Decoded<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n}\nexport interface Bech32DecodedWithArray<Prefix extends string = string> {\n prefix: Prefix;\n words: number[];\n bytes: Uint8Array;\n}\n\nconst BECH_ALPHABET: Coder<number[], string> = chain(\n alphabet('qpzry9x8gf2tvdw0s3jn54khce6mua7l'),\n join('')\n);\n\nconst POLYMOD_GENERATORS = [0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3];\nfunction bech32Polymod(pre: number): number {\n const b = pre >> 25;\n let chk = (pre & 0x1ffffff) << 5;\n for (let i = 0; i < POLYMOD_GENERATORS.length; i++) {\n if (((b >> i) & 1) === 1) chk ^= POLYMOD_GENERATORS[i]!;\n }\n return chk;\n}\n\nfunction bechChecksum(prefix: string, words: number[], encodingConst = 1): string {\n const len = prefix.length;\n let chk = 1;\n for (let i = 0; i < len; i++) {\n const c = prefix.charCodeAt(i);\n if (c < 33 || c > 126) throw new Error(`Invalid prefix (${prefix})`);\n chk = bech32Polymod(chk) ^ (c >> 5);\n }\n chk = bech32Polymod(chk);\n for (let i = 0; i < len; i++) chk = bech32Polymod(chk) ^ (prefix.charCodeAt(i) & 0x1f);\n for (let v of words) chk = bech32Polymod(chk) ^ v;\n for (let i = 0; i < 6; i++) chk = bech32Polymod(chk);\n chk ^= encodingConst;\n return BECH_ALPHABET.encode(convertRadix2([chk % powers[30]!], 30, 5, false));\n}\n\nexport interface Bech32 {\n encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit?: number | false\n ): `${Lowercase<Prefix>}1${string}`;\n decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n encodeFromBytes(prefix: string, bytes: Uint8Array): string;\n decodeToBytes(str: string): Bech32DecodedWithArray;\n decodeUnsafe(str: string, limit?: number | false): void | Bech32Decoded<string>;\n fromWords(to: number[]): Uint8Array;\n fromWordsUnsafe(to: number[]): void | Uint8Array;\n toWords(from: Uint8Array): number[];\n}\n/**\n * @__NO_SIDE_EFFECTS__\n */\nfunction genBech32(encoding: 'bech32' | 'bech32m'): Bech32 {\n const ENCODING_CONST = encoding === 'bech32' ? 1 : 0x2bc830a3;\n const _words = radix2(5);\n const fromWords = _words.decode;\n const toWords = _words.encode;\n const fromWordsUnsafe = unsafeWrapper(fromWords);\n\n function encode<Prefix extends string>(\n prefix: Prefix,\n words: number[] | Uint8Array,\n limit: number | false = 90\n ): `${Lowercase<Prefix>}1${string}` {\n astr('bech32.encode prefix', prefix);\n if (isBytes(words)) words = Array.from(words);\n anumArr('bech32.encode', words);\n const plen = prefix.length;\n if (plen === 0) throw new TypeError(`Invalid prefix length ${plen}`);\n const actualLength = plen + 7 + words.length;\n if (limit !== false && actualLength > limit)\n throw new TypeError(`Length ${actualLength} exceeds limit ${limit}`);\n const lowered = prefix.toLowerCase();\n const sum = bechChecksum(lowered, words, ENCODING_CONST);\n return `${lowered}1${BECH_ALPHABET.encode(words)}${sum}` as `${Lowercase<Prefix>}1${string}`;\n }\n\n function decode<Prefix extends string>(\n str: `${Prefix}1${string}`,\n limit?: number | false\n ): Bech32Decoded<Prefix>;\n function decode(str: string, limit?: number | false): Bech32Decoded;\n function decode(str: string, limit: number | false = 90): Bech32Decoded {\n astr('bech32.decode input', str);\n const slen = str.length;\n if (slen < 8 || (limit !== false && slen > limit))\n throw new TypeError(`invalid string length: ${slen} (${str}). Expected (8..${limit})`);\n // don't allow mixed case\n const lowered = str.toLowerCase();\n if (str !== lowered && str !== str.toUpperCase())\n throw new Error(`String must be lowercase or uppercase`);\n const sepIndex = lowered.lastIndexOf('1');\n if (sepIndex === 0 || sepIndex === -1)\n throw new Error(`Letter \"1\" must be present between prefix and data only`);\n const prefix = lowered.slice(0, sepIndex);\n const data = lowered.slice(sepIndex + 1);\n if (data.length < 6) throw new Error('Data must be at least 6 characters long');\n const words = BECH_ALPHABET.decode(data).slice(0, -6);\n const sum = bechChecksum(prefix, words, ENCODING_CONST);\n if (!data.endsWith(sum)) throw new Error(`Invalid checksum in ${str}: expected \"${sum}\"`);\n return { prefix, words };\n }\n\n const decodeUnsafe = unsafeWrapper(decode);\n\n function decodeToBytes(str: string): Bech32DecodedWithArray {\n const { prefix, words } = decode(str, false);\n return { prefix, words, bytes: fromWords(words) };\n }\n\n function encodeFromBytes(prefix: string, bytes: Uint8Array) {\n return encode(prefix, toWords(bytes));\n }\n\n return {\n encode,\n decode,\n encodeFromBytes,\n decodeToBytes,\n decodeUnsafe,\n fromWords,\n fromWordsUnsafe,\n toWords,\n };\n}\n\n/**\n * bech32 from BIP 173. Operates on words.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32: Bech32 = genBech32('bech32');\n\n/**\n * bech32m from BIP 350. Operates on words.\n * It was to mitigate `bech32` weaknesses.\n * For high-level, check out scure-btc-signer:\n * https://github.com/paulmillr/scure-btc-signer.\n */\nexport const bech32m: Bech32 = genBech32('bech32m');\n\ndeclare const TextEncoder: any;\ndeclare const TextDecoder: any;\n\n/**\n * UTF-8-to-byte decoder. Uses built-in TextDecoder / TextEncoder.\n * @example\n * ```js\n * const b = utf8.decode(\"hey\"); // => new Uint8Array([ 104, 101, 121 ])\n * const str = utf8.encode(b); // \"hey\"\n * ```\n */\nexport const utf8: BytesCoder = {\n encode: (data) => new TextDecoder().decode(data),\n decode: (str) => new TextEncoder().encode(str),\n};\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\n// prettier-ignore\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n typeof (Uint8Array as any).from([]).toHex === 'function' &&\n typeof (Uint8Array as any).fromHex === 'function')();\n// prettier-ignore\nconst hexBuiltin: BytesCoder = {\n encode(data) { abytes(data); return (data as any).toHex(); },\n decode(s) { astr('hex', s); return (Uint8Array as any).fromHex(s); },\n};\n/**\n * hex string decoder. Uses built-in function, when available.\n * @example\n * ```js\n * const b = hex.decode(\"0102ff\"); // => new Uint8Array([ 1, 2, 255 ])\n * const str = hex.encode(b); // \"0102ff\"\n * ```\n */\nexport const hex: BytesCoder = hasHexBuiltin\n ? hexBuiltin\n : chain(\n radix2(4),\n alphabet('0123456789abcdef'),\n join(''),\n normalize((s: string) => {\n if (typeof s !== 'string' || s.length % 2 !== 0)\n throw new TypeError(\n `hex.decode: expected string, got ${typeof s} with length ${s.length}`\n );\n return s.toLowerCase();\n })\n );\n\nexport type SomeCoders = {\n utf8: BytesCoder;\n hex: BytesCoder;\n base16: BytesCoder;\n base32: BytesCoder;\n base64: BytesCoder;\n base64url: BytesCoder;\n base58: BytesCoder;\n base58xmr: BytesCoder;\n};\n// prettier-ignore\nconst CODERS: SomeCoders = {\n utf8, hex, base16, base32, base64, base64url, base58, base58xmr\n};\ntype CoderType = keyof SomeCoders;\nconst coderTypeError =\n 'Invalid encoding type. Available types: utf8, hex, base16, base32, base64, base64url, base58, base58xmr';\n\n/** @deprecated */\nexport const bytesToString = (type: CoderType, bytes: Uint8Array): string => {\n if (typeof type !== 'string' || !CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (!isBytes(bytes)) throw new TypeError('bytesToString() expects Uint8Array');\n return CODERS[type].encode(bytes);\n};\n\n/** @deprecated */\nexport const str: (type: CoderType, bytes: Uint8Array) => string = bytesToString; // as in python, but for bytes only\n\n/** @deprecated */\nexport const stringToBytes = (type: CoderType, str: string): Uint8Array => {\n if (!CODERS.hasOwnProperty(type)) throw new TypeError(coderTypeError);\n if (typeof str !== 'string') throw new TypeError('stringToBytes() expects string');\n return CODERS[type].decode(str);\n};\n/** @deprecated */\nexport const bytes: (type: CoderType, str: string) => Uint8Array = stringToBytes;\n","\"use strict\";\r\n\r\nmodule.exports = factory(factory);\r\n\r\n/**\r\n * Reads / writes floats / doubles from / to buffers.\r\n * @name util.float\r\n * @namespace\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using little endian byte order.\r\n * @name util.float.writeFloatLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 32 bit float to a buffer using big endian byte order.\r\n * @name util.float.writeFloatBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using little endian byte order.\r\n * @name util.float.readFloatLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 32 bit float from a buffer using big endian byte order.\r\n * @name util.float.readFloatBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using little endian byte order.\r\n * @name util.float.writeDoubleLE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Writes a 64 bit double to a buffer using big endian byte order.\r\n * @name util.float.writeDoubleBE\r\n * @function\r\n * @param {number} val Value to write\r\n * @param {Uint8Array} buf Target buffer\r\n * @param {number} pos Target buffer offset\r\n * @returns {undefined}\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using little endian byte order.\r\n * @name util.float.readDoubleLE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n/**\r\n * Reads a 64 bit double from a buffer using big endian byte order.\r\n * @name util.float.readDoubleBE\r\n * @function\r\n * @param {Uint8Array} buf Source buffer\r\n * @param {number} pos Source buffer offset\r\n * @returns {number} Value read\r\n */\r\n\r\n// Factory function for the purpose of node-based testing in modified global environments\r\nfunction factory(exports) {\r\n\r\n // float: typed array\r\n if (typeof Float32Array !== \"undefined\") (function() {\r\n\r\n var f32 = new Float32Array([ -0 ]),\r\n f8b = new Uint8Array(f32.buffer),\r\n le = f8b[3] === 128;\r\n\r\n function writeFloat_f32_cpy(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n }\r\n\r\n function writeFloat_f32_rev(val, buf, pos) {\r\n f32[0] = val;\r\n buf[pos ] = f8b[3];\r\n buf[pos + 1] = f8b[2];\r\n buf[pos + 2] = f8b[1];\r\n buf[pos + 3] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeFloatLE = le ? writeFloat_f32_cpy : writeFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.writeFloatBE = le ? writeFloat_f32_rev : writeFloat_f32_cpy;\r\n\r\n function readFloat_f32_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n function readFloat_f32_rev(buf, pos) {\r\n f8b[3] = buf[pos ];\r\n f8b[2] = buf[pos + 1];\r\n f8b[1] = buf[pos + 2];\r\n f8b[0] = buf[pos + 3];\r\n return f32[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readFloatLE = le ? readFloat_f32_cpy : readFloat_f32_rev;\r\n /* istanbul ignore next */\r\n exports.readFloatBE = le ? readFloat_f32_rev : readFloat_f32_cpy;\r\n\r\n // float: ieee754\r\n })(); else (function() {\r\n\r\n function writeFloat_ieee754(writeUint, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0)\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos);\r\n else if (isNaN(val))\r\n writeUint(2143289344, buf, pos);\r\n else if (val > 3.4028234663852886e+38) // +-Infinity\r\n writeUint((sign << 31 | 2139095040) >>> 0, buf, pos);\r\n else if (val < 1.1754943508222875e-38) // denormal\r\n writeUint((sign << 31 | Math.round(val / 1.401298464324817e-45)) >>> 0, buf, pos);\r\n else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2),\r\n mantissa = Math.round(val * Math.pow(2, -exponent) * 8388608) & 8388607;\r\n writeUint((sign << 31 | exponent + 127 << 23 | mantissa) >>> 0, buf, pos);\r\n }\r\n }\r\n\r\n exports.writeFloatLE = writeFloat_ieee754.bind(null, writeUintLE);\r\n exports.writeFloatBE = writeFloat_ieee754.bind(null, writeUintBE);\r\n\r\n function readFloat_ieee754(readUint, buf, pos) {\r\n var uint = readUint(buf, pos),\r\n sign = (uint >> 31) * 2 + 1,\r\n exponent = uint >>> 23 & 255,\r\n mantissa = uint & 8388607;\r\n return exponent === 255\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 1.401298464324817e-45 * mantissa\r\n : sign * Math.pow(2, exponent - 150) * (mantissa + 8388608);\r\n }\r\n\r\n exports.readFloatLE = readFloat_ieee754.bind(null, readUintLE);\r\n exports.readFloatBE = readFloat_ieee754.bind(null, readUintBE);\r\n\r\n })();\r\n\r\n // double: typed array\r\n if (typeof Float64Array !== \"undefined\") (function() {\r\n\r\n var f64 = new Float64Array([-0]),\r\n f8b = new Uint8Array(f64.buffer),\r\n le = f8b[7] === 128;\r\n\r\n function writeDouble_f64_cpy(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[0];\r\n buf[pos + 1] = f8b[1];\r\n buf[pos + 2] = f8b[2];\r\n buf[pos + 3] = f8b[3];\r\n buf[pos + 4] = f8b[4];\r\n buf[pos + 5] = f8b[5];\r\n buf[pos + 6] = f8b[6];\r\n buf[pos + 7] = f8b[7];\r\n }\r\n\r\n function writeDouble_f64_rev(val, buf, pos) {\r\n f64[0] = val;\r\n buf[pos ] = f8b[7];\r\n buf[pos + 1] = f8b[6];\r\n buf[pos + 2] = f8b[5];\r\n buf[pos + 3] = f8b[4];\r\n buf[pos + 4] = f8b[3];\r\n buf[pos + 5] = f8b[2];\r\n buf[pos + 6] = f8b[1];\r\n buf[pos + 7] = f8b[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.writeDoubleLE = le ? writeDouble_f64_cpy : writeDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.writeDoubleBE = le ? writeDouble_f64_rev : writeDouble_f64_cpy;\r\n\r\n function readDouble_f64_cpy(buf, pos) {\r\n f8b[0] = buf[pos ];\r\n f8b[1] = buf[pos + 1];\r\n f8b[2] = buf[pos + 2];\r\n f8b[3] = buf[pos + 3];\r\n f8b[4] = buf[pos + 4];\r\n f8b[5] = buf[pos + 5];\r\n f8b[6] = buf[pos + 6];\r\n f8b[7] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n function readDouble_f64_rev(buf, pos) {\r\n f8b[7] = buf[pos ];\r\n f8b[6] = buf[pos + 1];\r\n f8b[5] = buf[pos + 2];\r\n f8b[4] = buf[pos + 3];\r\n f8b[3] = buf[pos + 4];\r\n f8b[2] = buf[pos + 5];\r\n f8b[1] = buf[pos + 6];\r\n f8b[0] = buf[pos + 7];\r\n return f64[0];\r\n }\r\n\r\n /* istanbul ignore next */\r\n exports.readDoubleLE = le ? readDouble_f64_cpy : readDouble_f64_rev;\r\n /* istanbul ignore next */\r\n exports.readDoubleBE = le ? readDouble_f64_rev : readDouble_f64_cpy;\r\n\r\n // double: ieee754\r\n })(); else (function() {\r\n\r\n function writeDouble_ieee754(writeUint, off0, off1, val, buf, pos) {\r\n var sign = val < 0 ? 1 : 0;\r\n if (sign)\r\n val = -val;\r\n if (val === 0) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(1 / val > 0 ? /* positive */ 0 : /* negative 0 */ 2147483648, buf, pos + off1);\r\n } else if (isNaN(val)) {\r\n writeUint(0, buf, pos + off0);\r\n writeUint(2146959360, buf, pos + off1);\r\n } else if (val > 1.7976931348623157e+308) { // +-Infinity\r\n writeUint(0, buf, pos + off0);\r\n writeUint((sign << 31 | 2146435072) >>> 0, buf, pos + off1);\r\n } else {\r\n var mantissa;\r\n if (val < 2.2250738585072014e-308) { // denormal\r\n mantissa = val / 5e-324;\r\n writeUint(mantissa >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | mantissa / 4294967296) >>> 0, buf, pos + off1);\r\n } else {\r\n var exponent = Math.floor(Math.log(val) / Math.LN2);\r\n if (exponent === 1024)\r\n exponent = 1023;\r\n mantissa = val * Math.pow(2, -exponent);\r\n writeUint(mantissa * 4503599627370496 >>> 0, buf, pos + off0);\r\n writeUint((sign << 31 | exponent + 1023 << 20 | mantissa * 1048576 & 1048575) >>> 0, buf, pos + off1);\r\n }\r\n }\r\n }\r\n\r\n exports.writeDoubleLE = writeDouble_ieee754.bind(null, writeUintLE, 0, 4);\r\n exports.writeDoubleBE = writeDouble_ieee754.bind(null, writeUintBE, 4, 0);\r\n\r\n function readDouble_ieee754(readUint, off0, off1, buf, pos) {\r\n var lo = readUint(buf, pos + off0),\r\n hi = readUint(buf, pos + off1);\r\n var sign = (hi >> 31) * 2 + 1,\r\n exponent = hi >>> 20 & 2047,\r\n mantissa = 4294967296 * (hi & 1048575) + lo;\r\n return exponent === 2047\r\n ? mantissa\r\n ? NaN\r\n : sign * Infinity\r\n : exponent === 0 // denormal\r\n ? sign * 5e-324 * mantissa\r\n : sign * Math.pow(2, exponent - 1075) * (mantissa + 4503599627370496);\r\n }\r\n\r\n exports.readDoubleLE = readDouble_ieee754.bind(null, readUintLE, 0, 4);\r\n exports.readDoubleBE = readDouble_ieee754.bind(null, readUintBE, 4, 0);\r\n\r\n })();\r\n\r\n return exports;\r\n}\r\n\r\n// uint helpers\r\n\r\nfunction writeUintLE(val, buf, pos) {\r\n buf[pos ] = val & 255;\r\n buf[pos + 1] = val >>> 8 & 255;\r\n buf[pos + 2] = val >>> 16 & 255;\r\n buf[pos + 3] = val >>> 24;\r\n}\r\n\r\nfunction writeUintBE(val, buf, pos) {\r\n buf[pos ] = val >>> 24;\r\n buf[pos + 1] = val >>> 16 & 255;\r\n buf[pos + 2] = val >>> 8 & 255;\r\n buf[pos + 3] = val & 255;\r\n}\r\n\r\nfunction readUintLE(buf, pos) {\r\n return (buf[pos ]\r\n | buf[pos + 1] << 8\r\n | buf[pos + 2] << 16\r\n | buf[pos + 3] << 24) >>> 0;\r\n}\r\n\r\nfunction readUintBE(buf, pos) {\r\n return (buf[pos ] << 24\r\n | buf[pos + 1] << 16\r\n | buf[pos + 2] << 8\r\n | buf[pos + 3]) >>> 0;\r\n}\r\n","\"use strict\";\r\n\r\n/**\r\n * A minimal UTF8 implementation for number arrays.\r\n * @memberof util\r\n * @namespace\r\n */\r\nvar utf8 = exports;\r\n\r\n/**\r\n * Calculates the UTF8 byte length of a string.\r\n * @param {string} string String\r\n * @returns {number} Byte length\r\n */\r\nutf8.length = function utf8_length(string) {\r\n var len = 0,\r\n c = 0;\r\n for (var i = 0; i < string.length; ++i) {\r\n c = string.charCodeAt(i);\r\n if (c < 128)\r\n len += 1;\r\n else if (c < 2048)\r\n len += 2;\r\n else if ((c & 0xFC00) === 0xD800 && (string.charCodeAt(i + 1) & 0xFC00) === 0xDC00) {\r\n ++i;\r\n len += 4;\r\n } else\r\n len += 3;\r\n }\r\n return len;\r\n};\r\n\r\n/**\r\n * Reads UTF8 bytes as a string.\r\n * @param {Uint8Array} buffer Source buffer\r\n * @param {number} start Source start\r\n * @param {number} end Source end\r\n * @returns {string} String read\r\n */\r\nutf8.read = function utf8_read(buffer, start, end) {\r\n var len = end - start;\r\n if (len < 1)\r\n return \"\";\r\n var parts = null,\r\n chunk = [],\r\n i = 0, // char offset\r\n t; // temporary\r\n while (start < end) {\r\n t = buffer[start++];\r\n if (t < 128)\r\n chunk[i++] = t;\r\n else if (t > 191 && t < 224)\r\n chunk[i++] = (t & 31) << 6 | buffer[start++] & 63;\r\n else if (t > 239 && t < 365) {\r\n t = ((t & 7) << 18 | (buffer[start++] & 63) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63) - 0x10000;\r\n chunk[i++] = 0xD800 + (t >> 10);\r\n chunk[i++] = 0xDC00 + (t & 1023);\r\n } else\r\n chunk[i++] = (t & 15) << 12 | (buffer[start++] & 63) << 6 | buffer[start++] & 63;\r\n if (i > 8191) {\r\n (parts || (parts = [])).push(String.fromCharCode.apply(String, chunk));\r\n i = 0;\r\n }\r\n }\r\n if (parts) {\r\n if (i)\r\n parts.push(String.fromCharCode.apply(String, chunk.slice(0, i)));\r\n return parts.join(\"\");\r\n }\r\n return String.fromCharCode.apply(String, chunk.slice(0, i));\r\n};\r\n\r\n/**\r\n * Writes a string as UTF8 bytes.\r\n * @param {string} string Source string\r\n * @param {Uint8Array} buffer Destination buffer\r\n * @param {number} offset Destination offset\r\n * @returns {number} Bytes written\r\n */\r\nutf8.write = function utf8_write(string, buffer, offset) {\r\n var start = offset,\r\n c1, // character 1\r\n c2; // character 2\r\n for (var i = 0; i < string.length; ++i) {\r\n c1 = string.charCodeAt(i);\r\n if (c1 < 128) {\r\n buffer[offset++] = c1;\r\n } else if (c1 < 2048) {\r\n buffer[offset++] = c1 >> 6 | 192;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else if ((c1 & 0xFC00) === 0xD800 && ((c2 = string.charCodeAt(i + 1)) & 0xFC00) === 0xDC00) {\r\n c1 = 0x10000 + ((c1 & 0x03FF) << 10) + (c2 & 0x03FF);\r\n ++i;\r\n buffer[offset++] = c1 >> 18 | 240;\r\n buffer[offset++] = c1 >> 12 & 63 | 128;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n } else {\r\n buffer[offset++] = c1 >> 12 | 224;\r\n buffer[offset++] = c1 >> 6 & 63 | 128;\r\n buffer[offset++] = c1 & 63 | 128;\r\n }\r\n }\r\n return offset - start;\r\n};\r\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { ChainDefinition } from \"./rpc/clients/config\";\n\n/** Default number of accounts to derive in HD wallets */\nexport const DEFAULT_NUM_ACCOUNTS: number = 1;\n\n/** Rialo mainnet RPC URL */\nexport const URL_MAINNET: string = \"https://mainnet.rialo.io:4101\";\n\n/** Rialo testnet RPC URL */\nexport const URL_TESTNET: string = \"https://testnet.rialo.io:4101\";\n\n/** Rialo devnet RPC URL */\nexport const URL_DEVNET: string = \"https://devnet.rialo.io:4101\";\n\n/** Rialo localnet RPC URL */\nexport const URL_LOCALNET: string = \"http://localhost:4104\";\n\nexport const RIALO_MAINNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:mainnet\",\n\tname: \"Mainnet\",\n\trpcUrl: URL_MAINNET,\n};\n\nexport const RIALO_TESTNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:testnet\",\n\tname: \"Testnet\",\n\trpcUrl: URL_TESTNET,\n};\n\nexport const RIALO_DEVNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:devnet\",\n\tname: \"Devnet\",\n\trpcUrl: URL_DEVNET,\n};\n\nexport const RIALO_LOCALNET_CHAIN: ChainDefinition = {\n\tid: \"rialo:localnet\",\n\tname: \"Localhost\",\n\trpcUrl: URL_LOCALNET,\n};\n\n/** System program ID */\nexport const SYSTEM_PROGRAM_ID: string = \"11111111111111111111111111111111\";\n\n/** Base derivation path for Rialo wallets (BIP44 coin type 756) */\n/** Coin type 756 follows the telephone keypad convention: R=7, L=5, O=6 */\nexport const BASE_DERIVATION_PATH: string = \"m/44'/756'/\";\n\nexport const KELVIN_PER_RLO: number = 1_000_000_000;\n\nexport const PUBLIC_KEY_LENGTH: number = 32;\n\nexport const SECRET_KEY_LENGTH: number = 32;\n\nexport const SIGNATURE_LENGTH: number = 64;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for cryptographic operations.\n */\nexport enum CryptoErrorCode {\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tINVALID_PUBLIC_KEY = \"INVALID_PUBLIC_KEY\",\n\tINVALID_BLOCKHASH = \"INVALID_BLOCKHASH\",\n\tINVALID_MNEMONIC = \"INVALID_MNEMONIC\",\n\tKEY_DERIVATION_FAILED = \"KEY_DERIVATION_FAILED\",\n\tKEYPAIR_DISPOSED = \"KEYPAIR_DISPOSED\",\n\tMAX_SEED_LENGTH_EXCEEDED = \"MAX_SEED_LENGTH_EXCEEDED\",\n\tMAX_SEEDS_EXCEEDED = \"MAX_SEEDS_EXCEEDED\",\n\tINVALID_SEEDS_ON_CURVE = \"INVALID_SEEDS_ON_CURVE\",\n\tNO_VIABLE_BUMP_SEED = \"NO_VIABLE_BUMP_SEED\",\n\tINVALID_SEED = \"INVALID_SEED\",\n}\n\n/**\n * Error class for cryptographic operations.\n *\n * Provides structured error information with error codes and contextual details\n * for better debugging and error handling.\n */\nexport class CryptoError extends Error {\n\tpublic readonly code: CryptoErrorCode;\n\tpublic readonly details?: Record<string, unknown>;\n\n\tconstructor(\n\t\tcode: CryptoErrorCode,\n\t\tmessage: string,\n\t\tdetails?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"CryptoError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t}\n\n\tstatic invalidKeyLength(expected: number, actual: number): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid key length: expected ${expected} bytes, got ${actual} bytes`,\n\t\t\t{ expected, actual },\n\t\t);\n\t}\n\n\tstatic invalidMnemonic(reason?: string): CryptoError {\n\t\tconst message = reason\n\t\t\t? `Invalid mnemonic: ${reason}`\n\t\t\t: \"Invalid mnemonic phrase. Check that all words are valid and in the correct order.\";\n\t\treturn new CryptoError(CryptoErrorCode.INVALID_MNEMONIC, message);\n\t}\n\n\tstatic keyDerivationFailed(path: string, cause?: Error): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t`Failed to derive key at path: ${path}`,\n\t\t\t{ path, cause: cause?.message },\n\t\t);\n\t}\n\n\tstatic keypairDisposed(): CryptoError {\n\t\treturn new CryptoError(\n\t\t\tCryptoErrorCode.KEYPAIR_DISPOSED,\n\t\t\t\"Cannot use disposed keypair. The private key has been securely erased from memory.\",\n\t\t);\n\t}\n}\n","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 5KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const secretKey = ed.utils.randomSecretKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(secretKey); // Sync methods are also present\n const signature = await ed.signAsync(message, secretKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d, h } = ed25519_CURVE;\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\nconst captureTrace = (...args) => {\n if ('captureStackTrace' in Error && typeof Error.captureStackTrace === 'function') {\n Error.captureStackTrace(...args);\n }\n};\nconst err = (message = '') => {\n const e = new Error(message);\n captureTrace(e, err);\n throw e;\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** Asserts something is Uint8Array. */\nconst abytes = (value, length, title = '') => {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n err(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n};\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined, consider polyfill');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst assertRange = (n, min, max, msg = 'bad number: out of range') => (isBig(n) && min <= n && n < max ? n : err(msg));\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using euclidean GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = hashes[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst hash = (msg) => callHash('sha512')(msg);\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n X;\n Y;\n Z;\n T;\n constructor(X, Y, Z, T) {\n const max = B256;\n this.X = assertRange(X, 0n, max);\n this.Y = assertRange(Y, 0n, max);\n this.Z = assertRange(Z, 1n, max);\n this.T = assertRange(T, 0n, max);\n Object.freeze(this);\n }\n static CURVE() {\n return ed25519_CURVE;\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n assertRange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(hexToBytes(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n return err('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { X, Y, Z, T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n return err('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n return err('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const { X: X2, Y: Y2, Z: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.X), this.Y, this.Z, M(-this.T));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { X: X1, Y: Y1, Z: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { X: X1, Y: Y1, Z: Z1, T: T1 } = this;\n const { X: X2, Y: Y2, Z: Z2, T: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n subtract(other) {\n return this.add(apoint(other).negate());\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n assertRange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n multiplyUnsafe(scalar) {\n return this.multiply(scalar, false);\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { X, Y, Z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(Z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(Z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n const x = M(X * iz);\n const y = M(Y * iz);\n return { x, y };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n }\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // Multiply by big number N. We can't `mul(N)` because of checks. Instead, we `mul(N/2)*2+1`\n let p = this.multiply(N / 2n, false).double();\n if (N % 2n)\n p = p.add(this);\n return p.is0();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(assertRange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\n/** hashes.sha512 should conform to the interface. */\n// TODO: rename\nconst sha512a = (...m) => hashes.sha512Async(concatBytes(...m)); // Async SHA512\nconst sha512s = (...m) => callHash('sha512')(concatBytes(...m));\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // secret key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (secretKey) => sha512a(abytes(secretKey, L)).then(hash2extK);\nconst getExtendedPublicKey = (secretKey) => hash2extK(sha512s(abytes(secretKey, L)));\n/** Creates 32-byte ed25519 public key from 32-byte secret key. Async. */\nconst getPublicKeyAsync = (secretKey) => getExtendedPublicKeyAsync(secretKey).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte secret key. To use, set `hashes.sha512` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\n// Code, shared between sync & async sign\nconst _sign = (e, rBytes, msg) => {\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message using secret key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (message, secretKey) => {\n const m = abytes(message);\n const e = await getExtendedPublicKeyAsync(secretKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message using secret key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (message, secretKey) => {\n const m = abytes(message);\n const e = getExtendedPublicKey(secretKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst defaultVerifyOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = defaultVerifyOpts) => {\n sig = abytes(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = abytes(msg); // Message hex str/Bytes\n pub = abytes(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromBytes(pub, zip215); // public key A decoded\n R = Point.fromBytes(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishA(_verify(signature, message, publicKey, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (signature, message, publicKey, opts = defaultVerifyOpts) => hashFinishS(_verify(signature, message, publicKey, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\nconst hashes = {\n sha512Async: async (message) => {\n const s = subtle();\n const m = concatBytes(message);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512: undefined,\n};\n// FIPS 186 B.4.1 compliant key generation produces private keys\n// with modulo bias being neglible. takes >N+16 bytes, returns (hash mod n-1)+1\nconst randomSecretKey = (seed = randomBytes(L)) => seed;\nconst keygen = (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = getPublicKey(secretKey);\n return { secretKey, publicKey };\n};\nconst keygenAsync = async (seed) => {\n const secretKey = randomSecretKey(seed);\n const publicKey = await getPublicKeyAsync(secretKey);\n return { secretKey, publicKey };\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomSecretKey: randomSecretKey,\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8, NOT 32 - see wNAF loop\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n // We use negative indexes to reduce size of precomputed table by 2x.\n // Instead of needing precomputes 0..256, we only calculate them for 0..128.\n // If an index > 128 is found, we do (256-index) - where 256 is next window.\n // Naive: index +127 => 127, +224 => 224\n // Optimized: index +127 => 127, +224 => 256-32\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n }\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n if (n !== 0n)\n err('invalid wnaf');\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { etc, getPublicKey, getPublicKeyAsync, hash, hashes, keygen, keygenAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { base58 } from \"@scure/base\";\nimport { PUBLIC_KEY_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport type { Signature } from \"./signature\";\nimport { concatBytes, isOnCurve, seedToBytes } from \"./utils\";\n\n/**\n * A seed for PDA derivation - string (UTF-8) or raw bytes.\n */\nexport type Seed = string | Uint8Array;\n\n/**\n * Bump seed (0-255) that pushes derived address off the Ed25519 curve.\n */\nexport type Bump = number;\n\n/**\n * Result of PDA derivation: [address, bump].\n */\nexport type PDA = readonly [PublicKey, Bump];\n\nconst MAX_SEED_LENGTH = 32;\nconst MAX_SEEDS = 16;\nconst PDA_MARKER = new TextEncoder().encode(\"ProgramDerivedAddress\");\nconst MAX_BUMP_SEED = 255;\n\n/**\n * Represents a 32-byte Ed25519 public key.\n *\n * @example\n * ```typescript\n * // From base58 string\n * const pubkey = PublicKey.fromString(\"5ZqB9U...\");\n *\n * // From bytes\n * const pubkey = PublicKey.fromBytes(new Uint8Array(32));\n *\n * // Comparison\n * if (pubkey1.equals(pubkey2)) {\n * console.log(\"Keys match\");\n * }\n * ```\n */\nexport class PublicKey {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== PUBLIC_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(PUBLIC_KEY_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from raw bytes.\n\t *\n\t * @param bytes - 32-byte Ed25519 public key\n\t * @throws {CryptoError} If bytes length is not 32\n\t */\n\tstatic fromBytes(bytes: Uint8Array): PublicKey {\n\t\treturn new PublicKey(bytes);\n\t}\n\n\t/**\n\t * Creates a PublicKey from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded public key\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): PublicKey {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new PublicKey(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_PUBLIC_KEY,\n\t\t\t\t`Invalid base58 public key: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a program address from seeds and a program ID.\n\t *\n\t * @remarks\n\t * This is the low-level derivation function. It will throw if the resulting\n\t * address falls on the Ed25519 curve. For most use cases, prefer\n\t * {@link findProgramAddress} which automatically finds a valid bump seed.\n\t *\n\t * Use this method when you already know the bump seed (e.g., stored on-chain\n\t * or passed from a previous computation) for better performance.\n\t *\n\t * @param seeds - Array of seeds (strings or byte arrays, max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns The derived public key\n\t * @throws {CryptoError} If seeds exceed limits or result is on curve\n\t *\n\t * @example\n\t * ```typescript\n\t * // With known bump seed (most efficient for verification)\n\t * const pda = PublicKey.createProgramAddress(\n\t * [\"metadata\", mintPubkey.toBytes(), new Uint8Array([254])],\n\t * metadataProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createProgramAddress(seeds: Seed[], programId: PublicKey): PublicKey {\n\t\tif (seeds.length > MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS} seeds, got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tconst seedBytes: Uint8Array[] = [];\n\t\tfor (let i = 0; i < seeds.length; i++) {\n\t\t\tconst bytes = seedToBytes(seeds[i]);\n\t\t\tif (bytes.length > MAX_SEED_LENGTH) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t\t`Seed[${i}] exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tseedBytes.push(bytes);\n\t\t}\n\n\t\tconst hash = sha256(concatBytes(...seedBytes, programId.bytes, PDA_MARKER));\n\n\t\tif (isOnCurve(hash)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEEDS_ON_CURVE,\n\t\t\t\t\"Invalid seeds - derived address is on curve\",\n\t\t\t);\n\t\t}\n\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Finds a valid program derived address by searching for a bump seed.\n\t *\n\t * @remarks\n\t * Iterates from bump 255 down to 0, returning the first combination that\n\t * produces an address off the Ed25519 curve. The bump seed should be stored\n\t * or passed to programs to allow efficient verification via {@link createProgramAddress}.\n\t *\n\t * @param seeds - Array of seeds (max 16 seeds, each max 32 bytes)\n\t * @param programId - The program that will own this PDA\n\t * @returns Tuple of [PublicKey, Bump] where bump is 0-255\n\t * @throws {CryptoError} If no valid bump found (extremely rare) or seeds invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const [vaultPda, vaultBump] = PublicKey.findProgramAddress(\n\t * [\"vault\", userPubkey.toBytes()],\n\t * programId\n\t * );\n\t *\n\t * // Store bump for later use\n\t * console.log(`Vault: ${vaultPda}, Bump: ${vaultBump}`);\n\t * ```\n\t */\n\tstatic findProgramAddress(seeds: Seed[], programId: PublicKey): PDA {\n\t\tif (seeds.length >= MAX_SEEDS) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEEDS_EXCEEDED,\n\t\t\t\t`Expected max ${MAX_SEEDS - 1} user seeds (one slot reserved for bump), got ${seeds.length}`,\n\t\t\t);\n\t\t}\n\n\t\tfor (let bump = MAX_BUMP_SEED; bump >= 0; bump--) {\n\t\t\ttry {\n\t\t\t\tconst address = PublicKey.createProgramAddress(\n\t\t\t\t\t[...seeds, Uint8Array.of(bump)],\n\t\t\t\t\tprogramId,\n\t\t\t\t);\n\t\t\t\treturn [address, bump] as const;\n\t\t\t} catch (e) {\n\t\t\t\tif (\n\t\t\t\t\te instanceof CryptoError &&\n\t\t\t\t\te.code === CryptoErrorCode.INVALID_SEEDS_ON_CURVE\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\tthrow new CryptoError(\n\t\t\tCryptoErrorCode.NO_VIABLE_BUMP_SEED,\n\t\t\t\"Could not find valid bump seed\",\n\t\t);\n\t}\n\n\t/**\n\t * Creates a derived address from a base address, seed string, and program ID.\n\t *\n\t * @remarks\n\t * Unlike PDAs, this derivation CAN produce addresses on the curve.\n\t * This is useful for creating deterministic addresses that a user can sign for,\n\t * where the base address's private key holder can sign transactions.\n\t *\n\t * @param baseAddress - The base public key (signer)\n\t * @param seed - A seed string (max 32 bytes when UTF-8 encoded)\n\t * @param programId - The program that will own the derived account\n\t * @returns The derived address\n\t *\n\t * @example\n\t * ```typescript\n\t * const derivedAddress = PublicKey.createWithSeed(\n\t * userPubkey,\n\t * \"savings-account\",\n\t * systemProgramId\n\t * );\n\t * ```\n\t */\n\tstatic createWithSeed(\n\t\tbaseAddress: PublicKey,\n\t\tseed: string,\n\t\tprogramId: PublicKey,\n\t): PublicKey {\n\t\tconst seedBytes = new TextEncoder().encode(seed);\n\t\tif (seedBytes.length > MAX_SEED_LENGTH) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.MAX_SEED_LENGTH_EXCEEDED,\n\t\t\t\t`Seed exceeds ${MAX_SEED_LENGTH} bytes`,\n\t\t\t);\n\t\t}\n\n\t\tif (seed.length === 0) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SEED,\n\t\t\t\t\"Seed cannot be empty\",\n\t\t\t);\n\t\t}\n\n\t\tconst hash = sha256(\n\t\t\tconcatBytes(baseAddress.bytes, seedBytes, programId.bytes),\n\t\t);\n\t\treturn new PublicKey(hash);\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * Checks equality with another public key using constant-time comparison.\n\t */\n\tequals(other: PublicKey): boolean {\n\t\tif (!other) return false;\n\t\tif (this.bytes.length !== other.bytes.length) return false;\n\t\tfor (let i = 0; i < this.bytes.length; i++) {\n\t\t\tif (this.bytes[i] !== other.bytes[i]) return false;\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * Verifies an Ed25519 signature over a message.\n\t *\n\t * @param message - Message bytes that were signed\n\t * @param signature - Signature to verify\n\t * @returns True if signature is valid, false otherwise\n\t *\n\t * @example\n\t * ```typescript\n\t * const message = new Uint8Array([1, 2, 3]);\n\t * const signature = keypair.sign(message);\n\t * const isValid = keypair.publicKey.verify(message, signature);\n\t * ```\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(signature.toBytes(), message, this.bytes);\n\t}\n\n\t/**\n\t * Checks if the public key is on the Ed25519 curve.\n\t *\n\t * @returns True if the public key is on the curve, false otherwise\n\t */\n\tisOnCurve(): boolean {\n\t\treturn isOnCurve(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Point } from \"@noble/ed25519\";\nimport type { Seed } from \"./public-key\";\n\n/**\n * Checks if a 32-byte array represents a valid point on the Ed25519 curve.\n *\n * This is used for PDA (Program Derived Address) derivation, where valid PDAs\n * must NOT be on the curve to ensure they can only be signed by the program.\n *\n * @param bytes - 32-byte public key or hash to check\n * @returns true if the bytes represent a valid Ed25519 point, false otherwise\n *\n * @example\n * ```typescript\n * const hash = sha256(data);\n * if (!isOnCurve(hash)) {\n * // Valid PDA - not on curve\n * }\n * ```\n */\nexport function isOnCurve(bytes: Uint8Array): boolean {\n\ttry {\n\t\tPoint.fromBytes(bytes);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Converts a seed to a 32-byte array.\n *\n * @param seed - Seed to convert\n * @returns 32-byte array\n */\nexport function seedToBytes(seed: Seed): Uint8Array {\n\treturn typeof seed === \"string\" ? new TextEncoder().encode(seed) : seed;\n}\n\n/**\n * Concatenates multiple byte arrays into a single byte array.\n *\n * @param arrays - Byte arrays to concatenate\n * @returns Concatenated byte array\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n\tconst totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);\n\tconst result = new Uint8Array(totalLength);\n\tlet offset = 0;\n\tfor (const arr of arrays) {\n\t\tresult.set(arr, offset);\n\t\toffset += arr.length;\n\t}\n\treturn result;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\n\n/**\n * Represents a 64-byte Ed25519 signature.\n *\n * @example\n * ```typescript\n * // From bytes\n * const sig = Signature.fromBytes(signatureBytes);\n *\n * // From base58 string\n * const sig = Signature.fromString(\"3Bxs4h...\");\n *\n * // Serialize\n * const base58 = sig.toString();\n * ```\n */\nexport class Signature {\n\tprivate readonly bytes: Uint8Array;\n\n\tprivate constructor(bytes: Uint8Array) {\n\t\tif (bytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SIGNATURE_LENGTH, bytes.length);\n\t\t}\n\t\tthis.bytes = new Uint8Array(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from raw bytes.\n\t *\n\t * @param bytes - 64-byte Ed25519 signature\n\t * @throws {CryptoError} If bytes length is not 64\n\t */\n\tstatic fromBytes(bytes: Uint8Array): Signature {\n\t\treturn new Signature(bytes);\n\t}\n\n\t/**\n\t * Creates a Signature from a base58-encoded string.\n\t *\n\t * @param str - Base58-encoded signature\n\t * @throws {CryptoError} If string is invalid or decodes to wrong length\n\t */\n\tstatic fromString(str: string): Signature {\n\t\ttry {\n\t\t\tconst bytes = base58.decode(str);\n\t\t\treturn new Signature(bytes);\n\t\t} catch (error) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Invalid base58 signature: ${error instanceof Error ? error.message : \"unknown error\"}`,\n\t\t\t\t{ input: str },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Returns a copy of the raw bytes.\n\t */\n\ttoBytes(): Uint8Array {\n\t\treturn new Uint8Array(this.bytes);\n\t}\n\n\t/**\n\t * Returns the base58-encoded string representation.\n\t */\n\ttoString(): string {\n\t\treturn base58.encode(this.bytes);\n\t}\n\n\t/**\n\t * JSON serialization (returns base58 string).\n\t */\n\ttoJSON(): string {\n\t\treturn this.toString();\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport * as ed25519 from \"@noble/ed25519\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport { randomBytes } from \"@noble/hashes/utils\";\nimport { SECRET_KEY_LENGTH } from \"../constants\";\nimport { CryptoError } from \"./errors\";\nimport { PublicKey } from \"./public-key\";\nimport { Signature } from \"./signature\";\n\n// Configure ed25519 to use SHA-512\ned25519.hashes.sha512 = sha512;\n\n/**\n * Represents an Ed25519 keypair for signing transactions.\n *\n * Provides secure key generation, signing, and disposal capabilities.\n * Call {@link dispose} when finished to securely erase the private key from memory.\n *\n * @example\n * ```typescript\n * // Generate random keypair\n * const keypair = Keypair.generate();\n *\n * // Sign a message\n * const message = new TextEncoder().encode(\"Hello\");\n * const signature = keypair.sign(message);\n *\n * // Verify signature\n * const isValid = keypair.verify(message, signature);\n *\n * // Secure cleanup\n * keypair.dispose();\n * ```\n */\nexport class Keypair {\n\tpublic readonly publicKey: PublicKey;\n\tprivate secretKey: Uint8Array | null;\n\tprivate disposed = false;\n\n\tprivate constructor(secretKey: Uint8Array, publicKey?: Uint8Array) {\n\t\tif (secretKey.length !== SECRET_KEY_LENGTH) {\n\t\t\tthrow CryptoError.invalidKeyLength(SECRET_KEY_LENGTH, secretKey.length);\n\t\t}\n\n\t\tthis.secretKey = new Uint8Array(secretKey);\n\n\t\tif (publicKey) {\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKey);\n\t\t} else {\n\t\t\tconst publicKeyBytes = ed25519.getPublicKey(secretKey);\n\t\t\tthis.publicKey = PublicKey.fromBytes(publicKeyBytes);\n\t\t}\n\t}\n\n\t/**\n\t * Generates a random keypair using cryptographically secure randomness.\n\t */\n\tstatic generate(): Keypair {\n\t\tconst secretKey = randomBytes(SECRET_KEY_LENGTH);\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a 32-byte secret key.\n\t * The public key will be derived from the secret key.\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t */\n\tstatic fromSecretKey(secretKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey);\n\t}\n\n\t/**\n\t * Creates a keypair from a secret key and pre-computed public key.\n\t *\n\t * Use this for SLIP-0010/BIP32 derived keys where the public key\n\t * should NOT be re-derived (compatibility with hierarchical derivation).\n\t *\n\t * @param secretKey - 32-byte Ed25519 secret key\n\t * @param publicKey - 32-byte Ed25519 public key (pre-computed)\n\t */\n\tstatic fromKeyPair(secretKey: Uint8Array, publicKey: Uint8Array): Keypair {\n\t\treturn new Keypair(secretKey, publicKey);\n\t}\n\n\t/**\n\t * Signs a message with this keypair.\n\t *\n\t * @param message - Message bytes to sign\n\t * @returns Ed25519 signature\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsign(message: Uint8Array): Signature {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\tconst signatureBytes = ed25519.sign(message, this.secretKey);\n\t\treturn Signature.fromBytes(signatureBytes);\n\t}\n\n\t/**\n\t * Verifies a signature against a message using this keypair's public key.\n\t *\n\t * @param message - Original message that was signed\n\t * @param signature - Signature to verify\n\t * @returns true if signature is valid\n\t */\n\tverify(message: Uint8Array, signature: Signature): boolean {\n\t\treturn ed25519.verify(\n\t\t\tsignature.toBytes(),\n\t\t\tmessage,\n\t\t\tthis.publicKey.toBytes(),\n\t\t);\n\t}\n\n\t/**\n\t * Exports the secret key for storage.\n\t *\n\t * **WARNING**: Keep this secret! Never expose it in logs, APIs, or client-side code.\n\t *\n\t * @returns Copy of the 32-byte secret key\n\t * @throws {CryptoError} If keypair has been disposed\n\t */\n\tsecretKeyBytes(): Uint8Array {\n\t\tthis.ensureNotDisposed();\n\n\t\tif (!this.secretKey) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\n\t\treturn new Uint8Array(this.secretKey);\n\t}\n\n\t/**\n\t * Checks if this keypair has been disposed.\n\t */\n\tisDisposed(): boolean {\n\t\treturn this.disposed;\n\t}\n\n\t/**\n\t * Securely erases the secret key from memory.\n\t *\n\t * After calling this method, the keypair can no longer be used for signing.\n\t * This is important for security when the keypair is no longer needed.\n\t */\n\tdispose(): void {\n\t\tif (this.disposed) return;\n\n\t\tif (this.secretKey) {\n\t\t\tthis.secretKey.fill(0);\n\t\t\tthis.secretKey = null;\n\t\t}\n\t\tthis.disposed = true;\n\t}\n\n\tprivate ensureNotDisposed(): void {\n\t\tif (this.disposed) {\n\t\t\tthrow CryptoError.keypairDisposed();\n\t\t}\n\t}\n}\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a: unknown): a is Uint8Array {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n\n/** Asserts something is positive integer. */\nexport function anumber(n: number, title: string = ''): void {\n if (!Number.isSafeInteger(n) || n < 0) {\n const prefix = title && `\"${title}\" `;\n throw new Error(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n\n/** Asserts something is Uint8Array. */\nexport function abytes(value: Uint8Array, length?: number, title: string = ''): Uint8Array {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n if (!bytes || (needsLen && len !== length)) {\n const prefix = title && `\"${title}\" `;\n const ofLen = needsLen ? ` of length ${length}` : '';\n const got = bytes ? `length=${len}` : `type=${typeof value}`;\n throw new Error(prefix + 'expected Uint8Array' + ofLen + ', got ' + got);\n }\n return value;\n}\n\n/** Asserts something is hash */\nexport function ahash(h: CHash): void {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash must wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n\n/** Asserts a hash instance has not been destroyed / finished */\nexport function aexists(instance: any, checkFinished = true): void {\n if (instance.destroyed) throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished) throw new Error('Hash#digest() has already been called');\n}\n\n/** Asserts output is properly-sized byte array */\nexport function aoutput(out: any, instance: any): void {\n abytes(out, undefined, 'digestInto() output');\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('\"digestInto() output\" expected to be of length >=' + min);\n }\n}\n\n/** Generic type encompassing 8/16/32-byte arrays - but not 64-byte. */\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n/** Cast u8 / u16 / u32 to u8. */\nexport function u8(arr: TypedArray): Uint8Array {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** Cast u8 / u16 / u32 to u32. */\nexport function u32(arr: TypedArray): Uint32Array {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nexport function clean(...arrays: TypedArray[]): void {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr: TypedArray): DataView {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word: number, shift: number): number {\n return (word << (32 - shift)) | (word >>> shift);\n}\n\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word: number, shift: number): number {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE: boolean = /* @__PURE__ */ (() =>\n new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n\n/** The byte swap operation for uint32 */\nexport function byteSwap(word: number): number {\n return (\n ((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff)\n );\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE: (n: number) => number = isLE\n ? (n: number) => n\n : (n: number) => byteSwap(n);\n\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr: Uint32Array): Uint32Array {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\n\nexport const swap32IfBE: (u: Uint32Array) => Uint32Array = isLE\n ? (u: Uint32Array) => u\n : byteSwap32;\n\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin: boolean = /* @__PURE__ */ (() =>\n // @ts-ignore\n typeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n i.toString(16).padStart(2, '0')\n);\n\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin) return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 } as const;\nfunction asciiToBase16(ch: number): number | undefined {\n if (ch >= asciis._0 && ch <= asciis._9) return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F) return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f) return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex: string): Uint8Array {\n if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin) return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2) throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async (): Promise<void> => {};\n\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(\n iters: number,\n tick: number,\n cb: (i: number) => void\n): Promise<void> {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick) continue;\n await nextTick();\n ts += diff;\n }\n}\n\n// Global symbols, but ts doesn't see them: https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n if (typeof str !== 'string') throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n/** KDFs can accept string or Uint8Array for user convenience. */\nexport type KDFInput = string | Uint8Array;\n\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data: KDFInput, errorTitle = ''): Uint8Array {\n if (typeof data === 'string') return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n\ntype EmptyObj = {};\n/** Merges default options and passed options. */\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n defaults: T1,\n opts?: T2\n): T1 & T2 {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged as T1 & T2;\n}\n\n/** Common interface for all hashes. */\nexport interface Hash<T> {\n blockLen: number; // Bytes per block\n outputLen: number; // Bytes in output\n update(buf: Uint8Array): this;\n digestInto(buf: Uint8Array): void;\n digest(): Uint8Array;\n destroy(): void;\n _cloneInto(to?: T): T;\n clone(): T;\n}\n\n/** PseudoRandom (number) Generator */\nexport interface PRG {\n addEntropy(seed: Uint8Array): void;\n randomBytes(length: number): Uint8Array;\n clean(): void;\n}\n\n/**\n * XOF: streaming API to read digest in chunks.\n * Same as 'squeeze' in keccak/k12 and 'seek' in blake3, but more generic name.\n * When hash used in XOF mode it is up to user to call '.destroy' afterwards, since we cannot\n * destroy state, next call can require more bytes.\n */\nexport type HashXOF<T extends Hash<T>> = Hash<T> & {\n xof(bytes: number): Uint8Array; // Read 'bytes' bytes from digest stream\n xofInto(buf: Uint8Array): Uint8Array; // read buf.length bytes from digest stream into buf\n};\n\n/** Hash constructor */\nexport type HasherCons<T, Opts = undefined> = Opts extends undefined ? () => T : (opts?: Opts) => T;\n/** Optional hash params. */\nexport type HashInfo = {\n oid?: Uint8Array; // DER encoded OID in bytes\n};\n/** Hash function */\nexport type CHash<T extends Hash<T> = Hash<any>, Opts = undefined> = {\n outputLen: number;\n blockLen: number;\n} & HashInfo &\n (Opts extends undefined\n ? {\n (msg: Uint8Array): Uint8Array;\n create(): T;\n }\n : {\n (msg: Uint8Array, opts?: Opts): Uint8Array;\n create(opts?: Opts): T;\n });\n/** XOF with output */\nexport type CHashXOF<T extends HashXOF<T> = HashXOF<any>, Opts = undefined> = CHash<T, Opts>;\n\n/** Creates function with outputLen, blockLen, create properties from a class constructor. */\nexport function createHasher<T extends Hash<T>, Opts = undefined>(\n hashCons: HasherCons<T, Opts>,\n info: HashInfo = {}\n): CHash<T, Opts> {\n const hashC: any = (msg: Uint8Array, opts?: Opts) => hashCons(opts).update(msg).digest();\n const tmp = hashCons(undefined);\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts?: Opts) => hashCons(opts);\n Object.assign(hashC, info);\n return Object.freeze(hashC);\n}\n\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n const cr = typeof globalThis === 'object' ? (globalThis as any).crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n\n/** Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02. */\nexport const oidNist = (suffix: number): Required<HashInfo> => ({\n oid: Uint8Array.from([0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, suffix]),\n});\n","/**\n * HMAC: RFC2104 message authentication code.\n * @module\n */\nimport { abytes, aexists, ahash, clean, type CHash, type Hash } from './utils.ts';\n\n/** Internal class for HMAC. */\nexport class _HMAC<T extends Hash<T>> implements Hash<_HMAC<T>> {\n oHash: T;\n iHash: T;\n blockLen: number;\n outputLen: number;\n private finished = false;\n private destroyed = false;\n\n constructor(hash: CHash, key: Uint8Array) {\n ahash(hash);\n abytes(key, undefined, 'key');\n this.iHash = hash.create() as T;\n if (typeof this.iHash.update !== 'function')\n throw new Error('Expected instance of class which extends utils.Hash');\n this.blockLen = this.iHash.blockLen;\n this.outputLen = this.iHash.outputLen;\n const blockLen = this.blockLen;\n const pad = new Uint8Array(blockLen);\n // blockLen can be bigger than outputLen\n pad.set(key.length > blockLen ? hash.create().update(key).digest() : key);\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36;\n this.iHash.update(pad);\n // By doing update (processing of first block) of outer hash here we can re-use it between multiple calls via clone\n this.oHash = hash.create() as T;\n // Undo internal XOR && apply outer XOR\n for (let i = 0; i < pad.length; i++) pad[i] ^= 0x36 ^ 0x5c;\n this.oHash.update(pad);\n clean(pad);\n }\n update(buf: Uint8Array): this {\n aexists(this);\n this.iHash.update(buf);\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n abytes(out, this.outputLen, 'output');\n this.finished = true;\n this.iHash.digestInto(out);\n this.oHash.update(out);\n this.oHash.digestInto(out);\n this.destroy();\n }\n digest(): Uint8Array {\n const out = new Uint8Array(this.oHash.outputLen);\n this.digestInto(out);\n return out;\n }\n _cloneInto(to?: _HMAC<T>): _HMAC<T> {\n // Create new instance without calling constructor since key already in state and we don't know it.\n to ||= Object.create(Object.getPrototypeOf(this), {});\n const { oHash, iHash, finished, destroyed, blockLen, outputLen } = this;\n to = to as this;\n to.finished = finished;\n to.destroyed = destroyed;\n to.blockLen = blockLen;\n to.outputLen = outputLen;\n to.oHash = oHash._cloneInto(to.oHash);\n to.iHash = iHash._cloneInto(to.iHash);\n return to;\n }\n clone(): _HMAC<T> {\n return this._cloneInto();\n }\n destroy(): void {\n this.destroyed = true;\n this.oHash.destroy();\n this.iHash.destroy();\n }\n}\n\n/**\n * HMAC: RFC2104 message authentication code.\n * @param hash - function that would be used e.g. sha256\n * @param key - message key\n * @param message - message data\n * @example\n * import { hmac } from '@noble/hashes/hmac';\n * import { sha256 } from '@noble/hashes/sha2';\n * const mac1 = hmac(sha256, 'key', 'message');\n */\nexport const hmac: {\n (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array;\n create(hash: CHash, key: Uint8Array): _HMAC<any>;\n} = (hash: CHash, key: Uint8Array, message: Uint8Array): Uint8Array =>\n new _HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Uint8Array) => new _HMAC<any>(hash, key);\n","/**\n * PBKDF (RFC 2898). Can be used to create a key from password and salt.\n * @module\n */\nimport { hmac } from './hmac.ts';\n// prettier-ignore\nimport {\n ahash, anumber,\n asyncLoop, checkOpts, clean, createView, kdfInputToBytes,\n type CHash,\n type Hash,\n type KDFInput\n} from './utils.ts';\n\n/**\n * PBKDF2 options:\n * * c: iterations, should probably be higher than 100_000\n * * dkLen: desired length of derived key in bytes\n * * asyncTick: max time in ms for which async function can block execution\n */\nexport type Pbkdf2Opt = {\n c: number;\n dkLen?: number;\n asyncTick?: number;\n};\n// Common start and end for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: KDFInput, _salt: KDFInput, _opts: Pbkdf2Opt) {\n ahash(hash);\n const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n const { c, dkLen, asyncTick } = opts;\n anumber(c, 'c');\n anumber(dkLen, 'dkLen');\n anumber(asyncTick, 'asyncTick');\n if (c < 1) throw new Error('iterations (c) must be >= 1');\n const password = kdfInputToBytes(_password, 'password');\n const salt = kdfInputToBytes(_salt, 'salt');\n // DK = PBKDF2(PRF, Password, Salt, c, dkLen);\n const DK = new Uint8Array(dkLen);\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n const PRF = hmac.create(hash, password);\n const PRFSalt = PRF._cloneInto().update(salt);\n return { c, dkLen, asyncTick, DK, PRF, PRFSalt };\n}\n\nfunction pbkdf2Output<T extends Hash<T>>(\n PRF: Hash<T>,\n PRFSalt: Hash<T>,\n DK: Uint8Array,\n prfW: Hash<T>,\n u: Uint8Array\n) {\n PRF.destroy();\n PRFSalt.destroy();\n if (prfW) prfW.destroy();\n clean(u);\n return DK;\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function\n * @param hash - hash function that would be used e.g. sha256\n * @param password - password from which a derived key is generated\n * @param salt - cryptographic salt\n * @param opts - {c, dkLen} where c is work factor and dkLen is output message size\n * @example\n * const key = pbkdf2(sha256, 'password', 'salt', { dkLen: 32, c: Math.pow(2, 18) });\n */\nexport function pbkdf2(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Uint8Array {\n const { c, dkLen, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n for (let ui = 1; ui < c; ui++) {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n }\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n\n/**\n * PBKDF2-HMAC: RFC 2898 key derivation function. Async version.\n * @example\n * await pbkdf2Async(sha256, 'password', 'salt', { dkLen: 32, c: 500_000 });\n */\nexport async function pbkdf2Async(\n hash: CHash,\n password: KDFInput,\n salt: KDFInput,\n opts: Pbkdf2Opt\n): Promise<Uint8Array> {\n const { c, dkLen, asyncTick, DK, PRF, PRFSalt } = pbkdf2Init(hash, password, salt, opts);\n let prfW: any; // Working copy\n const arr = new Uint8Array(4);\n const view = createView(arr);\n const u = new Uint8Array(PRF.outputLen);\n // DK = T1 + T2 + ⋯ + Tdklen/hlen\n for (let ti = 1, pos = 0; pos < dkLen; ti++, pos += PRF.outputLen) {\n // Ti = F(Password, Salt, c, i)\n const Ti = DK.subarray(pos, pos + PRF.outputLen);\n view.setInt32(0, ti, false);\n // F(Password, Salt, c, i) = U1 ^ U2 ^ ⋯ ^ Uc\n // U1 = PRF(Password, Salt + INT_32_BE(i))\n (prfW = PRFSalt._cloneInto(prfW)).update(arr).digestInto(u);\n Ti.set(u.subarray(0, Ti.length));\n await asyncLoop(c - 1, asyncTick, () => {\n // Uc = PRF(Password, Uc−1)\n PRF._cloneInto(prfW).update(u).digestInto(u);\n for (let i = 0; i < Ti.length; i++) Ti[i] ^= u[i];\n });\n }\n return pbkdf2Output(PRF, PRFSalt, DK, prfW, u);\n}\n","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { abytes, aexists, aoutput, clean, createView, type Hash } from './utils.ts';\n\n/** Choice: a ? b : c */\nexport function Chi(a: number, b: number, c: number): number {\n return (a & b) ^ (~a & c);\n}\n\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a: number, b: number, c: number): number {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport abstract class HashMD<T extends HashMD<T>> implements Hash<T> {\n protected abstract process(buf: DataView, offset: number): void;\n protected abstract get(): number[];\n protected abstract set(...args: number[]): void;\n abstract destroy(): void;\n protected abstract roundClean(): void;\n\n readonly blockLen: number;\n readonly outputLen: number;\n readonly padOffset: number;\n readonly isLE: boolean;\n\n // For partial updates less than block size\n protected buffer: Uint8Array;\n protected view: DataView;\n protected finished = false;\n protected length = 0;\n protected pos = 0;\n protected destroyed = false;\n\n constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean) {\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data: Uint8Array): this {\n aexists(this);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len; ) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen) this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out: Uint8Array): void {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++) buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n view.setBigUint64(blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which must be fused in single op with modulo by JIT\n if (len % 4) throw new Error('_sha2: outputLen must be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length) throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++) oview.setUint32(4 * i, state[i], isLE);\n }\n digest(): Uint8Array {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to?: T): T {\n to ||= new (this.constructor as any)() as T;\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen) to.buffer.set(buffer);\n return to as unknown as any;\n }\n clone(): T {\n return this._cloneInto();\n }\n}\n\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV: Uint32Array = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n","/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\nfunction fromBig(\n n: bigint,\n le = false\n): {\n h: number;\n l: number;\n} {\n if (le) return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\n\nfunction split(lst: bigint[], le = false): Uint32Array[] {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n\nconst toBig = (h: number, l: number): bigint => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number): number => h >>> s;\nconst shrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number): number => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: number): number => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h: number, l: number, s: number): number => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number): number => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number): number => l;\nconst rotr32L = (h: number, _l: number): number => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number): number => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: number): number => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h: number, l: number, s: number): number => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: number): number => (h << (s - 32)) | (l >>> (64 - s));\n\n// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(\n Ah: number,\n Al: number,\n Bh: number,\n Bl: number\n): {\n h: number;\n l: number;\n} {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al: number, Bl: number, Cl: number): number => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number): number =>\n (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number): number =>\n (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: number): number =>\n (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number): number =>\n (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\n add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig\n};\n// prettier-ignore\nconst u64: { fromBig: typeof fromBig; split: typeof split; toBig: (h: number, l: number) => bigint; shrSH: (h: number, _l: number, s: number) => number; shrSL: (h: number, l: number, s: number) => number; rotrSH: (h: number, l: number, s: number) => number; rotrSL: (h: number, l: number, s: number) => number; rotrBH: (h: number, l: number, s: number) => number; rotrBL: (h: number, l: number, s: number) => number; rotr32H: (_h: number, l: number) => number; rotr32L: (h: number, _l: number) => number; rotlSH: (h: number, l: number, s: number) => number; rotlSL: (h: number, l: number, s: number) => number; rotlBH: (h: number, l: number, s: number) => number; rotlBL: (h: number, l: number, s: number) => number; add: typeof add; add3L: (Al: number, Bl: number, Cl: number) => number; add3H: (low: number, Ah: number, Bh: number, Ch: number) => number; add4L: (Al: number, Bl: number, Cl: number, Dl: number) => number; add4H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number) => number; add5H: (low: number, Ah: number, Bh: number, Ch: number, Dh: number, Eh: number) => number; add5L: (Al: number, Bl: number, Cl: number, Dl: number, El: number) => number; } = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://www.rfc-editor.org/rfc/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from './_md.ts';\nimport * as u64 from './_u64.ts';\nimport { type CHash, clean, createHasher, oidNist, rotr } from './utils.ts';\n\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\n\n/** Internal 32-byte base SHA2 hash class. */\nabstract class SHA2_32B<T extends SHA2_32B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected abstract A: number;\n protected abstract B: number;\n protected abstract C: number;\n protected abstract D: number;\n protected abstract E: number;\n protected abstract F: number;\n protected abstract G: number;\n protected abstract H: number;\n\n constructor(outputLen: number) {\n super(64, outputLen, 8, false);\n }\n protected get(): [number, number, number, number, number, number, number, number] {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n protected set(\n A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number\n ): void {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n protected roundClean(): void {\n clean(SHA256_W);\n }\n destroy(): void {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\n\n/** Internal SHA2-256 hash class. */\nexport class _SHA256 extends SHA2_32B<_SHA256> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n protected A: number = SHA256_IV[0] | 0;\n protected B: number = SHA256_IV[1] | 0;\n protected C: number = SHA256_IV[2] | 0;\n protected D: number = SHA256_IV[3] | 0;\n protected E: number = SHA256_IV[4] | 0;\n protected F: number = SHA256_IV[5] | 0;\n protected G: number = SHA256_IV[6] | 0;\n protected H: number = SHA256_IV[7] | 0;\n constructor() {\n super(32);\n }\n}\n\n/** Internal SHA2-224 hash class. */\nexport class _SHA224 extends SHA2_32B<_SHA224> {\n protected A: number = SHA224_IV[0] | 0;\n protected B: number = SHA224_IV[1] | 0;\n protected C: number = SHA224_IV[2] | 0;\n protected D: number = SHA224_IV[3] | 0;\n protected E: number = SHA224_IV[4] | 0;\n protected F: number = SHA224_IV[5] | 0;\n protected G: number = SHA224_IV[6] | 0;\n protected H: number = SHA224_IV[7] | 0;\n constructor() {\n super(28);\n }\n}\n\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\n\n/** Internal 64-byte base SHA2 hash class. */\nabstract class SHA2_64B<T extends SHA2_64B<T>> extends HashMD<T> {\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n protected abstract Ah: number;\n protected abstract Al: number;\n protected abstract Bh: number;\n protected abstract Bl: number;\n protected abstract Ch: number;\n protected abstract Cl: number;\n protected abstract Dh: number;\n protected abstract Dl: number;\n protected abstract Eh: number;\n protected abstract El: number;\n protected abstract Fh: number;\n protected abstract Fl: number;\n protected abstract Gh: number;\n protected abstract Gl: number;\n protected abstract Hh: number;\n protected abstract Hl: number;\n\n constructor(outputLen: number) {\n super(128, outputLen, 16, false);\n }\n // prettier-ignore\n protected get(): [\n number, number, number, number, number, number, number, number,\n number, number, number, number, number, number, number, number\n ] {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n protected set(\n Ah: number, Al: number, Bh: number, Bl: number, Ch: number, Cl: number, Dh: number, Dl: number,\n Eh: number, El: number, Fh: number, Fl: number, Gh: number, Gl: number, Hh: number, Hl: number\n ): void {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n protected process(view: DataView, offset: number): void {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n protected roundClean(): void {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy(): void {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\n\n/** Internal SHA2-512 hash class. */\nexport class _SHA512 extends SHA2_64B<_SHA512> {\n protected Ah: number = SHA512_IV[0] | 0;\n protected Al: number = SHA512_IV[1] | 0;\n protected Bh: number = SHA512_IV[2] | 0;\n protected Bl: number = SHA512_IV[3] | 0;\n protected Ch: number = SHA512_IV[4] | 0;\n protected Cl: number = SHA512_IV[5] | 0;\n protected Dh: number = SHA512_IV[6] | 0;\n protected Dl: number = SHA512_IV[7] | 0;\n protected Eh: number = SHA512_IV[8] | 0;\n protected El: number = SHA512_IV[9] | 0;\n protected Fh: number = SHA512_IV[10] | 0;\n protected Fl: number = SHA512_IV[11] | 0;\n protected Gh: number = SHA512_IV[12] | 0;\n protected Gl: number = SHA512_IV[13] | 0;\n protected Hh: number = SHA512_IV[14] | 0;\n protected Hl: number = SHA512_IV[15] | 0;\n\n constructor() {\n super(64);\n }\n}\n\n/** Internal SHA2-384 hash class. */\nexport class _SHA384 extends SHA2_64B<_SHA384> {\n protected Ah: number = SHA384_IV[0] | 0;\n protected Al: number = SHA384_IV[1] | 0;\n protected Bh: number = SHA384_IV[2] | 0;\n protected Bl: number = SHA384_IV[3] | 0;\n protected Ch: number = SHA384_IV[4] | 0;\n protected Cl: number = SHA384_IV[5] | 0;\n protected Dh: number = SHA384_IV[6] | 0;\n protected Dl: number = SHA384_IV[7] | 0;\n protected Eh: number = SHA384_IV[8] | 0;\n protected El: number = SHA384_IV[9] | 0;\n protected Fh: number = SHA384_IV[10] | 0;\n protected Fl: number = SHA384_IV[11] | 0;\n protected Gh: number = SHA384_IV[12] | 0;\n protected Gl: number = SHA384_IV[13] | 0;\n protected Hh: number = SHA384_IV[14] | 0;\n protected Hl: number = SHA384_IV[15] | 0;\n\n constructor() {\n super(48);\n }\n}\n\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\n\n/** Internal SHA2-512/224 hash class. */\nexport class _SHA512_224 extends SHA2_64B<_SHA512_224> {\n protected Ah: number = T224_IV[0] | 0;\n protected Al: number = T224_IV[1] | 0;\n protected Bh: number = T224_IV[2] | 0;\n protected Bl: number = T224_IV[3] | 0;\n protected Ch: number = T224_IV[4] | 0;\n protected Cl: number = T224_IV[5] | 0;\n protected Dh: number = T224_IV[6] | 0;\n protected Dl: number = T224_IV[7] | 0;\n protected Eh: number = T224_IV[8] | 0;\n protected El: number = T224_IV[9] | 0;\n protected Fh: number = T224_IV[10] | 0;\n protected Fl: number = T224_IV[11] | 0;\n protected Gh: number = T224_IV[12] | 0;\n protected Gl: number = T224_IV[13] | 0;\n protected Hh: number = T224_IV[14] | 0;\n protected Hl: number = T224_IV[15] | 0;\n\n constructor() {\n super(28);\n }\n}\n\n/** Internal SHA2-512/256 hash class. */\nexport class _SHA512_256 extends SHA2_64B<_SHA512_256> {\n protected Ah: number = T256_IV[0] | 0;\n protected Al: number = T256_IV[1] | 0;\n protected Bh: number = T256_IV[2] | 0;\n protected Bl: number = T256_IV[3] | 0;\n protected Ch: number = T256_IV[4] | 0;\n protected Cl: number = T256_IV[5] | 0;\n protected Dh: number = T256_IV[6] | 0;\n protected Dl: number = T256_IV[7] | 0;\n protected Eh: number = T256_IV[8] | 0;\n protected El: number = T256_IV[9] | 0;\n protected Fh: number = T256_IV[10] | 0;\n protected Fl: number = T256_IV[11] | 0;\n protected Gh: number = T256_IV[12] | 0;\n protected Gl: number = T256_IV[13] | 0;\n protected Hh: number = T256_IV[14] | 0;\n protected Hl: number = T256_IV[15] | 0;\n\n constructor() {\n super(32);\n }\n}\n\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n *\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n */\nexport const sha256: CHash<_SHA256> = /* @__PURE__ */ createHasher(\n () => new _SHA256(),\n /* @__PURE__ */ oidNist(0x01)\n);\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224: CHash<_SHA224> = /* @__PURE__ */ createHasher(\n () => new _SHA224(),\n /* @__PURE__ */ oidNist(0x04)\n);\n\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512: CHash<_SHA512> = /* @__PURE__ */ createHasher(\n () => new _SHA512(),\n /* @__PURE__ */ oidNist(0x03)\n);\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384: CHash<_SHA384> = /* @__PURE__ */ createHasher(\n () => new _SHA384(),\n /* @__PURE__ */ oidNist(0x02)\n);\n\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256: CHash<_SHA512_256> = /* @__PURE__ */ createHasher(\n () => new _SHA512_256(),\n /* @__PURE__ */ oidNist(0x06)\n);\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224: CHash<_SHA512_224> = /* @__PURE__ */ createHasher(\n () => new _SHA512_224(),\n /* @__PURE__ */ oidNist(0x05)\n);\n","/*! scure-bip39 - MIT License (c) 2022 Patricio Palladino, Paul Miller (paulmillr.com) */\nimport { pbkdf2, pbkdf2Async } from '@noble/hashes/pbkdf2.js';\nimport { sha256, sha512 } from '@noble/hashes/sha2.js';\nimport { abytes, anumber, randomBytes } from '@noble/hashes/utils.js';\nimport { pbkdf2 as pbkdf2web, sha512 as sha512web } from '@noble/hashes/webcrypto.js';\nimport { utils as baseUtils } from '@scure/base';\n// Japanese wordlist\nconst isJapanese = (wordlist) => wordlist[0] === '\\u3042\\u3044\\u3053\\u304f\\u3057\\u3093';\n// Normalization replaces equivalent sequences of characters\n// so that any two texts that are equivalent will be reduced\n// to the same sequence of code points, called the normal form of the original text.\n// https://tonsky.me/blog/unicode/#why-is-a----\nfunction nfkd(str) {\n if (typeof str !== 'string')\n throw new TypeError('invalid mnemonic type: ' + typeof str);\n return str.normalize('NFKD');\n}\nfunction normalize(str) {\n const norm = nfkd(str);\n const words = norm.split(' ');\n if (![12, 15, 18, 21, 24].includes(words.length))\n throw new Error('Invalid mnemonic');\n return { nfkd: norm, words };\n}\nfunction aentropy(ent) {\n abytes(ent);\n if (![16, 20, 24, 28, 32].includes(ent.length))\n throw new Error('invalid entropy length');\n}\n/**\n * Generate x random words. Uses Cryptographically-Secure Random Number Generator.\n * @param wordlist imported wordlist for specific language\n * @param strength mnemonic strength 128-256 bits\n * @example\n * generateMnemonic(wordlist, 128)\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function generateMnemonic(wordlist, strength = 128) {\n anumber(strength);\n if (strength % 32 !== 0 || strength > 256)\n throw new TypeError('Invalid entropy');\n return entropyToMnemonic(randomBytes(strength / 8), wordlist);\n}\nconst calcChecksum = (entropy) => {\n // Checksum is ent.length/4 bits long\n const bitsLeft = 8 - entropy.length / 4;\n // Zero rightmost \"bitsLeft\" bits in byte\n // For example: bitsLeft=4 val=10111101 -> 10110000\n return new Uint8Array([(sha256(entropy)[0] >> bitsLeft) << bitsLeft]);\n};\nfunction getCoder(wordlist) {\n if (!Array.isArray(wordlist) || wordlist.length !== 2048 || typeof wordlist[0] !== 'string')\n throw new Error('Wordlist: expected array of 2048 strings');\n wordlist.forEach((i) => {\n if (typeof i !== 'string')\n throw new Error('wordlist: non-string element: ' + i);\n });\n return baseUtils.chain(baseUtils.checksum(1, calcChecksum), baseUtils.radix2(11, true), baseUtils.alphabet(wordlist));\n}\n/**\n * Reversible: Converts mnemonic string to raw entropy in form of byte array.\n * @param mnemonic 12-24 words\n * @param wordlist imported wordlist for specific language\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToEntropy(mnem, wordlist)\n * // Produces\n * new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ])\n */\nexport function mnemonicToEntropy(mnemonic, wordlist) {\n const { words } = normalize(mnemonic);\n const entropy = getCoder(wordlist).decode(words);\n aentropy(entropy);\n return entropy;\n}\n/**\n * Reversible: Converts raw entropy in form of byte array to mnemonic string.\n * @param entropy byte array\n * @param wordlist imported wordlist for specific language\n * @returns 12-24 words\n * @example\n * const ent = new Uint8Array([\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,\n * 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f\n * ]);\n * entropyToMnemonic(ent, wordlist);\n * // 'legal winner thank year wave sausage worth useful legal winner thank yellow'\n */\nexport function entropyToMnemonic(entropy, wordlist) {\n aentropy(entropy);\n const words = getCoder(wordlist).encode(entropy);\n return words.join(isJapanese(wordlist) ? '\\u3000' : ' ');\n}\n/**\n * Validates mnemonic for being 12-24 words contained in `wordlist`.\n */\nexport function validateMnemonic(mnemonic, wordlist) {\n try {\n mnemonicToEntropy(mnemonic, wordlist);\n }\n catch (e) {\n return false;\n }\n return true;\n}\nconst psalt = (passphrase) => nfkd('mnemonic' + passphrase);\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * await mnemonicToSeed(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeed(mnemonic, passphrase = '') {\n return pbkdf2Async(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedSync(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedSync(mnemonic, passphrase = '') {\n return pbkdf2(sha512, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n/**\n * Uses native, built-in functionality, provided by globalThis.crypto.\n * Irreversible: Uses KDF to derive 64 bytes of key data from mnemonic + optional password.\n * @param mnemonic 12-24 words\n * @param passphrase string that will additionally protect the key\n * @returns 64 bytes of key data\n * @example\n * const mnem = 'legal winner thank year wave sausage worth useful legal winner thank yellow';\n * mnemonicToSeedWebcrypto(mnem, 'password');\n * // new Uint8Array([...64 bytes])\n */\nexport function mnemonicToSeedWebcrypto(mnemonic, passphrase = '') {\n return pbkdf2web(sha512web, normalize(mnemonic).nfkd, psalt(passphrase), { c: 2048, dkLen: 64 });\n}\n","export const wordlist = `abandon\nability\nable\nabout\nabove\nabsent\nabsorb\nabstract\nabsurd\nabuse\naccess\naccident\naccount\naccuse\nachieve\nacid\nacoustic\nacquire\nacross\nact\naction\nactor\nactress\nactual\nadapt\nadd\naddict\naddress\nadjust\nadmit\nadult\nadvance\nadvice\naerobic\naffair\nafford\nafraid\nagain\nage\nagent\nagree\nahead\naim\nair\nairport\naisle\nalarm\nalbum\nalcohol\nalert\nalien\nall\nalley\nallow\nalmost\nalone\nalpha\nalready\nalso\nalter\nalways\namateur\namazing\namong\namount\namused\nanalyst\nanchor\nancient\nanger\nangle\nangry\nanimal\nankle\nannounce\nannual\nanother\nanswer\nantenna\nantique\nanxiety\nany\napart\napology\nappear\napple\napprove\napril\narch\narctic\narea\narena\nargue\narm\narmed\narmor\narmy\naround\narrange\narrest\narrive\narrow\nart\nartefact\nartist\nartwork\nask\naspect\nassault\nasset\nassist\nassume\nasthma\nathlete\natom\nattack\nattend\nattitude\nattract\nauction\naudit\naugust\naunt\nauthor\nauto\nautumn\naverage\navocado\navoid\nawake\naware\naway\nawesome\nawful\nawkward\naxis\nbaby\nbachelor\nbacon\nbadge\nbag\nbalance\nbalcony\nball\nbamboo\nbanana\nbanner\nbar\nbarely\nbargain\nbarrel\nbase\nbasic\nbasket\nbattle\nbeach\nbean\nbeauty\nbecause\nbecome\nbeef\nbefore\nbegin\nbehave\nbehind\nbelieve\nbelow\nbelt\nbench\nbenefit\nbest\nbetray\nbetter\nbetween\nbeyond\nbicycle\nbid\nbike\nbind\nbiology\nbird\nbirth\nbitter\nblack\nblade\nblame\nblanket\nblast\nbleak\nbless\nblind\nblood\nblossom\nblouse\nblue\nblur\nblush\nboard\nboat\nbody\nboil\nbomb\nbone\nbonus\nbook\nboost\nborder\nboring\nborrow\nboss\nbottom\nbounce\nbox\nboy\nbracket\nbrain\nbrand\nbrass\nbrave\nbread\nbreeze\nbrick\nbridge\nbrief\nbright\nbring\nbrisk\nbroccoli\nbroken\nbronze\nbroom\nbrother\nbrown\nbrush\nbubble\nbuddy\nbudget\nbuffalo\nbuild\nbulb\nbulk\nbullet\nbundle\nbunker\nburden\nburger\nburst\nbus\nbusiness\nbusy\nbutter\nbuyer\nbuzz\ncabbage\ncabin\ncable\ncactus\ncage\ncake\ncall\ncalm\ncamera\ncamp\ncan\ncanal\ncancel\ncandy\ncannon\ncanoe\ncanvas\ncanyon\ncapable\ncapital\ncaptain\ncar\ncarbon\ncard\ncargo\ncarpet\ncarry\ncart\ncase\ncash\ncasino\ncastle\ncasual\ncat\ncatalog\ncatch\ncategory\ncattle\ncaught\ncause\ncaution\ncave\nceiling\ncelery\ncement\ncensus\ncentury\ncereal\ncertain\nchair\nchalk\nchampion\nchange\nchaos\nchapter\ncharge\nchase\nchat\ncheap\ncheck\ncheese\nchef\ncherry\nchest\nchicken\nchief\nchild\nchimney\nchoice\nchoose\nchronic\nchuckle\nchunk\nchurn\ncigar\ncinnamon\ncircle\ncitizen\ncity\ncivil\nclaim\nclap\nclarify\nclaw\nclay\nclean\nclerk\nclever\nclick\nclient\ncliff\nclimb\nclinic\nclip\nclock\nclog\nclose\ncloth\ncloud\nclown\nclub\nclump\ncluster\nclutch\ncoach\ncoast\ncoconut\ncode\ncoffee\ncoil\ncoin\ncollect\ncolor\ncolumn\ncombine\ncome\ncomfort\ncomic\ncommon\ncompany\nconcert\nconduct\nconfirm\ncongress\nconnect\nconsider\ncontrol\nconvince\ncook\ncool\ncopper\ncopy\ncoral\ncore\ncorn\ncorrect\ncost\ncotton\ncouch\ncountry\ncouple\ncourse\ncousin\ncover\ncoyote\ncrack\ncradle\ncraft\ncram\ncrane\ncrash\ncrater\ncrawl\ncrazy\ncream\ncredit\ncreek\ncrew\ncricket\ncrime\ncrisp\ncritic\ncrop\ncross\ncrouch\ncrowd\ncrucial\ncruel\ncruise\ncrumble\ncrunch\ncrush\ncry\ncrystal\ncube\nculture\ncup\ncupboard\ncurious\ncurrent\ncurtain\ncurve\ncushion\ncustom\ncute\ncycle\ndad\ndamage\ndamp\ndance\ndanger\ndaring\ndash\ndaughter\ndawn\nday\ndeal\ndebate\ndebris\ndecade\ndecember\ndecide\ndecline\ndecorate\ndecrease\ndeer\ndefense\ndefine\ndefy\ndegree\ndelay\ndeliver\ndemand\ndemise\ndenial\ndentist\ndeny\ndepart\ndepend\ndeposit\ndepth\ndeputy\nderive\ndescribe\ndesert\ndesign\ndesk\ndespair\ndestroy\ndetail\ndetect\ndevelop\ndevice\ndevote\ndiagram\ndial\ndiamond\ndiary\ndice\ndiesel\ndiet\ndiffer\ndigital\ndignity\ndilemma\ndinner\ndinosaur\ndirect\ndirt\ndisagree\ndiscover\ndisease\ndish\ndismiss\ndisorder\ndisplay\ndistance\ndivert\ndivide\ndivorce\ndizzy\ndoctor\ndocument\ndog\ndoll\ndolphin\ndomain\ndonate\ndonkey\ndonor\ndoor\ndose\ndouble\ndove\ndraft\ndragon\ndrama\ndrastic\ndraw\ndream\ndress\ndrift\ndrill\ndrink\ndrip\ndrive\ndrop\ndrum\ndry\nduck\ndumb\ndune\nduring\ndust\ndutch\nduty\ndwarf\ndynamic\neager\neagle\nearly\nearn\nearth\neasily\neast\neasy\necho\necology\neconomy\nedge\nedit\neducate\neffort\negg\neight\neither\nelbow\nelder\nelectric\nelegant\nelement\nelephant\nelevator\nelite\nelse\nembark\nembody\nembrace\nemerge\nemotion\nemploy\nempower\nempty\nenable\nenact\nend\nendless\nendorse\nenemy\nenergy\nenforce\nengage\nengine\nenhance\nenjoy\nenlist\nenough\nenrich\nenroll\nensure\nenter\nentire\nentry\nenvelope\nepisode\nequal\nequip\nera\nerase\nerode\nerosion\nerror\nerupt\nescape\nessay\nessence\nestate\neternal\nethics\nevidence\nevil\nevoke\nevolve\nexact\nexample\nexcess\nexchange\nexcite\nexclude\nexcuse\nexecute\nexercise\nexhaust\nexhibit\nexile\nexist\nexit\nexotic\nexpand\nexpect\nexpire\nexplain\nexpose\nexpress\nextend\nextra\neye\neyebrow\nfabric\nface\nfaculty\nfade\nfaint\nfaith\nfall\nfalse\nfame\nfamily\nfamous\nfan\nfancy\nfantasy\nfarm\nfashion\nfat\nfatal\nfather\nfatigue\nfault\nfavorite\nfeature\nfebruary\nfederal\nfee\nfeed\nfeel\nfemale\nfence\nfestival\nfetch\nfever\nfew\nfiber\nfiction\nfield\nfigure\nfile\nfilm\nfilter\nfinal\nfind\nfine\nfinger\nfinish\nfire\nfirm\nfirst\nfiscal\nfish\nfit\nfitness\nfix\nflag\nflame\nflash\nflat\nflavor\nflee\nflight\nflip\nfloat\nflock\nfloor\nflower\nfluid\nflush\nfly\nfoam\nfocus\nfog\nfoil\nfold\nfollow\nfood\nfoot\nforce\nforest\nforget\nfork\nfortune\nforum\nforward\nfossil\nfoster\nfound\nfox\nfragile\nframe\nfrequent\nfresh\nfriend\nfringe\nfrog\nfront\nfrost\nfrown\nfrozen\nfruit\nfuel\nfun\nfunny\nfurnace\nfury\nfuture\ngadget\ngain\ngalaxy\ngallery\ngame\ngap\ngarage\ngarbage\ngarden\ngarlic\ngarment\ngas\ngasp\ngate\ngather\ngauge\ngaze\ngeneral\ngenius\ngenre\ngentle\ngenuine\ngesture\nghost\ngiant\ngift\ngiggle\nginger\ngiraffe\ngirl\ngive\nglad\nglance\nglare\nglass\nglide\nglimpse\nglobe\ngloom\nglory\nglove\nglow\nglue\ngoat\ngoddess\ngold\ngood\ngoose\ngorilla\ngospel\ngossip\ngovern\ngown\ngrab\ngrace\ngrain\ngrant\ngrape\ngrass\ngravity\ngreat\ngreen\ngrid\ngrief\ngrit\ngrocery\ngroup\ngrow\ngrunt\nguard\nguess\nguide\nguilt\nguitar\ngun\ngym\nhabit\nhair\nhalf\nhammer\nhamster\nhand\nhappy\nharbor\nhard\nharsh\nharvest\nhat\nhave\nhawk\nhazard\nhead\nhealth\nheart\nheavy\nhedgehog\nheight\nhello\nhelmet\nhelp\nhen\nhero\nhidden\nhigh\nhill\nhint\nhip\nhire\nhistory\nhobby\nhockey\nhold\nhole\nholiday\nhollow\nhome\nhoney\nhood\nhope\nhorn\nhorror\nhorse\nhospital\nhost\nhotel\nhour\nhover\nhub\nhuge\nhuman\nhumble\nhumor\nhundred\nhungry\nhunt\nhurdle\nhurry\nhurt\nhusband\nhybrid\nice\nicon\nidea\nidentify\nidle\nignore\nill\nillegal\nillness\nimage\nimitate\nimmense\nimmune\nimpact\nimpose\nimprove\nimpulse\ninch\ninclude\nincome\nincrease\nindex\nindicate\nindoor\nindustry\ninfant\ninflict\ninform\ninhale\ninherit\ninitial\ninject\ninjury\ninmate\ninner\ninnocent\ninput\ninquiry\ninsane\ninsect\ninside\ninspire\ninstall\nintact\ninterest\ninto\ninvest\ninvite\ninvolve\niron\nisland\nisolate\nissue\nitem\nivory\njacket\njaguar\njar\njazz\njealous\njeans\njelly\njewel\njob\njoin\njoke\njourney\njoy\njudge\njuice\njump\njungle\njunior\njunk\njust\nkangaroo\nkeen\nkeep\nketchup\nkey\nkick\nkid\nkidney\nkind\nkingdom\nkiss\nkit\nkitchen\nkite\nkitten\nkiwi\nknee\nknife\nknock\nknow\nlab\nlabel\nlabor\nladder\nlady\nlake\nlamp\nlanguage\nlaptop\nlarge\nlater\nlatin\nlaugh\nlaundry\nlava\nlaw\nlawn\nlawsuit\nlayer\nlazy\nleader\nleaf\nlearn\nleave\nlecture\nleft\nleg\nlegal\nlegend\nleisure\nlemon\nlend\nlength\nlens\nleopard\nlesson\nletter\nlevel\nliar\nliberty\nlibrary\nlicense\nlife\nlift\nlight\nlike\nlimb\nlimit\nlink\nlion\nliquid\nlist\nlittle\nlive\nlizard\nload\nloan\nlobster\nlocal\nlock\nlogic\nlonely\nlong\nloop\nlottery\nloud\nlounge\nlove\nloyal\nlucky\nluggage\nlumber\nlunar\nlunch\nluxury\nlyrics\nmachine\nmad\nmagic\nmagnet\nmaid\nmail\nmain\nmajor\nmake\nmammal\nman\nmanage\nmandate\nmango\nmansion\nmanual\nmaple\nmarble\nmarch\nmargin\nmarine\nmarket\nmarriage\nmask\nmass\nmaster\nmatch\nmaterial\nmath\nmatrix\nmatter\nmaximum\nmaze\nmeadow\nmean\nmeasure\nmeat\nmechanic\nmedal\nmedia\nmelody\nmelt\nmember\nmemory\nmention\nmenu\nmercy\nmerge\nmerit\nmerry\nmesh\nmessage\nmetal\nmethod\nmiddle\nmidnight\nmilk\nmillion\nmimic\nmind\nminimum\nminor\nminute\nmiracle\nmirror\nmisery\nmiss\nmistake\nmix\nmixed\nmixture\nmobile\nmodel\nmodify\nmom\nmoment\nmonitor\nmonkey\nmonster\nmonth\nmoon\nmoral\nmore\nmorning\nmosquito\nmother\nmotion\nmotor\nmountain\nmouse\nmove\nmovie\nmuch\nmuffin\nmule\nmultiply\nmuscle\nmuseum\nmushroom\nmusic\nmust\nmutual\nmyself\nmystery\nmyth\nnaive\nname\nnapkin\nnarrow\nnasty\nnation\nnature\nnear\nneck\nneed\nnegative\nneglect\nneither\nnephew\nnerve\nnest\nnet\nnetwork\nneutral\nnever\nnews\nnext\nnice\nnight\nnoble\nnoise\nnominee\nnoodle\nnormal\nnorth\nnose\nnotable\nnote\nnothing\nnotice\nnovel\nnow\nnuclear\nnumber\nnurse\nnut\noak\nobey\nobject\noblige\nobscure\nobserve\nobtain\nobvious\noccur\nocean\noctober\nodor\noff\noffer\noffice\noften\noil\nokay\nold\nolive\nolympic\nomit\nonce\none\nonion\nonline\nonly\nopen\nopera\nopinion\noppose\noption\norange\norbit\norchard\norder\nordinary\norgan\norient\noriginal\norphan\nostrich\nother\noutdoor\nouter\noutput\noutside\noval\noven\nover\nown\nowner\noxygen\noyster\nozone\npact\npaddle\npage\npair\npalace\npalm\npanda\npanel\npanic\npanther\npaper\nparade\nparent\npark\nparrot\nparty\npass\npatch\npath\npatient\npatrol\npattern\npause\npave\npayment\npeace\npeanut\npear\npeasant\npelican\npen\npenalty\npencil\npeople\npepper\nperfect\npermit\nperson\npet\nphone\nphoto\nphrase\nphysical\npiano\npicnic\npicture\npiece\npig\npigeon\npill\npilot\npink\npioneer\npipe\npistol\npitch\npizza\nplace\nplanet\nplastic\nplate\nplay\nplease\npledge\npluck\nplug\nplunge\npoem\npoet\npoint\npolar\npole\npolice\npond\npony\npool\npopular\nportion\nposition\npossible\npost\npotato\npottery\npoverty\npowder\npower\npractice\npraise\npredict\nprefer\nprepare\npresent\npretty\nprevent\nprice\npride\nprimary\nprint\npriority\nprison\nprivate\nprize\nproblem\nprocess\nproduce\nprofit\nprogram\nproject\npromote\nproof\nproperty\nprosper\nprotect\nproud\nprovide\npublic\npudding\npull\npulp\npulse\npumpkin\npunch\npupil\npuppy\npurchase\npurity\npurpose\npurse\npush\nput\npuzzle\npyramid\nquality\nquantum\nquarter\nquestion\nquick\nquit\nquiz\nquote\nrabbit\nraccoon\nrace\nrack\nradar\nradio\nrail\nrain\nraise\nrally\nramp\nranch\nrandom\nrange\nrapid\nrare\nrate\nrather\nraven\nraw\nrazor\nready\nreal\nreason\nrebel\nrebuild\nrecall\nreceive\nrecipe\nrecord\nrecycle\nreduce\nreflect\nreform\nrefuse\nregion\nregret\nregular\nreject\nrelax\nrelease\nrelief\nrely\nremain\nremember\nremind\nremove\nrender\nrenew\nrent\nreopen\nrepair\nrepeat\nreplace\nreport\nrequire\nrescue\nresemble\nresist\nresource\nresponse\nresult\nretire\nretreat\nreturn\nreunion\nreveal\nreview\nreward\nrhythm\nrib\nribbon\nrice\nrich\nride\nridge\nrifle\nright\nrigid\nring\nriot\nripple\nrisk\nritual\nrival\nriver\nroad\nroast\nrobot\nrobust\nrocket\nromance\nroof\nrookie\nroom\nrose\nrotate\nrough\nround\nroute\nroyal\nrubber\nrude\nrug\nrule\nrun\nrunway\nrural\nsad\nsaddle\nsadness\nsafe\nsail\nsalad\nsalmon\nsalon\nsalt\nsalute\nsame\nsample\nsand\nsatisfy\nsatoshi\nsauce\nsausage\nsave\nsay\nscale\nscan\nscare\nscatter\nscene\nscheme\nschool\nscience\nscissors\nscorpion\nscout\nscrap\nscreen\nscript\nscrub\nsea\nsearch\nseason\nseat\nsecond\nsecret\nsection\nsecurity\nseed\nseek\nsegment\nselect\nsell\nseminar\nsenior\nsense\nsentence\nseries\nservice\nsession\nsettle\nsetup\nseven\nshadow\nshaft\nshallow\nshare\nshed\nshell\nsheriff\nshield\nshift\nshine\nship\nshiver\nshock\nshoe\nshoot\nshop\nshort\nshoulder\nshove\nshrimp\nshrug\nshuffle\nshy\nsibling\nsick\nside\nsiege\nsight\nsign\nsilent\nsilk\nsilly\nsilver\nsimilar\nsimple\nsince\nsing\nsiren\nsister\nsituate\nsix\nsize\nskate\nsketch\nski\nskill\nskin\nskirt\nskull\nslab\nslam\nsleep\nslender\nslice\nslide\nslight\nslim\nslogan\nslot\nslow\nslush\nsmall\nsmart\nsmile\nsmoke\nsmooth\nsnack\nsnake\nsnap\nsniff\nsnow\nsoap\nsoccer\nsocial\nsock\nsoda\nsoft\nsolar\nsoldier\nsolid\nsolution\nsolve\nsomeone\nsong\nsoon\nsorry\nsort\nsoul\nsound\nsoup\nsource\nsouth\nspace\nspare\nspatial\nspawn\nspeak\nspecial\nspeed\nspell\nspend\nsphere\nspice\nspider\nspike\nspin\nspirit\nsplit\nspoil\nsponsor\nspoon\nsport\nspot\nspray\nspread\nspring\nspy\nsquare\nsqueeze\nsquirrel\nstable\nstadium\nstaff\nstage\nstairs\nstamp\nstand\nstart\nstate\nstay\nsteak\nsteel\nstem\nstep\nstereo\nstick\nstill\nsting\nstock\nstomach\nstone\nstool\nstory\nstove\nstrategy\nstreet\nstrike\nstrong\nstruggle\nstudent\nstuff\nstumble\nstyle\nsubject\nsubmit\nsubway\nsuccess\nsuch\nsudden\nsuffer\nsugar\nsuggest\nsuit\nsummer\nsun\nsunny\nsunset\nsuper\nsupply\nsupreme\nsure\nsurface\nsurge\nsurprise\nsurround\nsurvey\nsuspect\nsustain\nswallow\nswamp\nswap\nswarm\nswear\nsweet\nswift\nswim\nswing\nswitch\nsword\nsymbol\nsymptom\nsyrup\nsystem\ntable\ntackle\ntag\ntail\ntalent\ntalk\ntank\ntape\ntarget\ntask\ntaste\ntattoo\ntaxi\nteach\nteam\ntell\nten\ntenant\ntennis\ntent\nterm\ntest\ntext\nthank\nthat\ntheme\nthen\ntheory\nthere\nthey\nthing\nthis\nthought\nthree\nthrive\nthrow\nthumb\nthunder\nticket\ntide\ntiger\ntilt\ntimber\ntime\ntiny\ntip\ntired\ntissue\ntitle\ntoast\ntobacco\ntoday\ntoddler\ntoe\ntogether\ntoilet\ntoken\ntomato\ntomorrow\ntone\ntongue\ntonight\ntool\ntooth\ntop\ntopic\ntopple\ntorch\ntornado\ntortoise\ntoss\ntotal\ntourist\ntoward\ntower\ntown\ntoy\ntrack\ntrade\ntraffic\ntragic\ntrain\ntransfer\ntrap\ntrash\ntravel\ntray\ntreat\ntree\ntrend\ntrial\ntribe\ntrick\ntrigger\ntrim\ntrip\ntrophy\ntrouble\ntruck\ntrue\ntruly\ntrumpet\ntrust\ntruth\ntry\ntube\ntuition\ntumble\ntuna\ntunnel\nturkey\nturn\nturtle\ntwelve\ntwenty\ntwice\ntwin\ntwist\ntwo\ntype\ntypical\nugly\numbrella\nunable\nunaware\nuncle\nuncover\nunder\nundo\nunfair\nunfold\nunhappy\nuniform\nunique\nunit\nuniverse\nunknown\nunlock\nuntil\nunusual\nunveil\nupdate\nupgrade\nuphold\nupon\nupper\nupset\nurban\nurge\nusage\nuse\nused\nuseful\nuseless\nusual\nutility\nvacant\nvacuum\nvague\nvalid\nvalley\nvalve\nvan\nvanish\nvapor\nvarious\nvast\nvault\nvehicle\nvelvet\nvendor\nventure\nvenue\nverb\nverify\nversion\nvery\nvessel\nveteran\nviable\nvibrant\nvicious\nvictory\nvideo\nview\nvillage\nvintage\nviolin\nvirtual\nvirus\nvisa\nvisit\nvisual\nvital\nvivid\nvocal\nvoice\nvoid\nvolcano\nvolume\nvote\nvoyage\nwage\nwagon\nwait\nwalk\nwall\nwalnut\nwant\nwarfare\nwarm\nwarrior\nwash\nwasp\nwaste\nwater\nwave\nway\nwealth\nweapon\nwear\nweasel\nweather\nweb\nwedding\nweekend\nweird\nwelcome\nwest\nwet\nwhale\nwhat\nwheat\nwheel\nwhen\nwhere\nwhip\nwhisper\nwide\nwidth\nwife\nwild\nwill\nwin\nwindow\nwine\nwing\nwink\nwinner\nwinter\nwire\nwisdom\nwise\nwish\nwitness\nwolf\nwoman\nwonder\nwood\nwool\nword\nwork\nworld\nworry\nworth\nwrap\nwreck\nwrestle\nwrist\nwrite\nwrong\nyard\nyear\nyellow\nyou\nyoung\nyouth\nzebra\nzero\nzone\nzoo`.split('\\n');\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha512 } from \"@noble/hashes/sha2\";\nimport * as bip39 from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\nimport { BASE_DERIVATION_PATH } from \"../constants\";\nimport { CryptoError, CryptoErrorCode } from \"./errors\";\nimport { Keypair } from \"./keypair\";\n\nexport type MnemonicStrength = 128 | 256;\n\ninterface HDKeyNode {\n\tprivateKey: Uint8Array;\n\tchainCode: Uint8Array;\n}\n\n/**\n * Represents a validated BIP39 mnemonic phrase with SLIP-0010 Ed25519 hierarchical key derivation.\n *\n * Implements the SLIP-0010 standard for Ed25519 key derivation, ensuring compatibility\n * with other implementations (e.g., Rust CDK). The default derivation path uses coin type\n * 756 (R=7, L=5, O=6 on telephone keypad).\n *\n * @example\n * ```typescript\n * // Generate new mnemonic (12 or 24 words)\n * const mnemonic = Mnemonic.generate(128); // 12 words\n *\n * // Restore from existing phrase\n * const restored = Mnemonic.fromPhrase(\"word1 word2 ...\");\n *\n * // Derive keypairs at specific account indices\n * const keypair0 = await mnemonic.toKeypair(0); // m/44'/756'/0'/0'\n * const keypair1 = await mnemonic.toKeypair(1); // m/44'/756'/1'/0'\n *\n * // With custom passphrase (BIP39 extension)\n * const secure = await mnemonic.toKeypair(0, {\n * passphrase: \"my-secret\"\n * });\n * ```\n *\n * @see {@link https://github.com/satoshilabs/slips/blob/master/slip-0010.md SLIP-0010 Specification}\n */\nexport class Mnemonic {\n\tprivate readonly phrase: string;\n\n\tprivate constructor(phrase: string) {\n\t\tif (!bip39.validateMnemonic(phrase, wordlist)) {\n\t\t\tthrow CryptoError.invalidMnemonic(\"Invalid BIP39 mnemonic phrase\");\n\t\t}\n\t\tthis.phrase = phrase;\n\t}\n\n\t/**\n\t * Generates a new random BIP39 mnemonic phrase.\n\t *\n\t * @param strength - Entropy strength (128 = 12 words, 256 = 24 words). Default: 128\n\t * @returns Validated Mnemonic instance\n\t */\n\tstatic generate(strength: MnemonicStrength = 128): Mnemonic {\n\t\tconst phrase = bip39.generateMnemonic(wordlist, strength);\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Creates a Mnemonic from an existing phrase.\n\t *\n\t * @param phrase - BIP39 mnemonic phrase (12 or 24 space-separated words)\n\t * @returns Validated Mnemonic instance\n\t * @throws {CryptoError} If phrase is invalid (wrong words or checksum)\n\t */\n\tstatic fromPhrase(phrase: string): Mnemonic {\n\t\treturn new Mnemonic(phrase);\n\t}\n\n\t/**\n\t * Validates a phrase without creating an instance.\n\t *\n\t * Checks both word validity and BIP39 checksum.\n\t *\n\t * @param phrase - Mnemonic phrase to validate\n\t * @returns true if phrase is valid\n\t */\n\tstatic isValid(phrase: string): boolean {\n\t\treturn bip39.validateMnemonic(phrase, wordlist);\n\t}\n\n\tprivate getMasterKeyFromSeed(seed: Uint8Array): HDKeyNode {\n\t\tconst seedKey = new TextEncoder().encode(\"ed25519 seed\");\n\t\tconst digest = hmac(sha512, seedKey, seed);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate deriveChildKey(parentKey: HDKeyNode, index: number): HDKeyNode {\n\t\tconst hardenedIndex = index | 0x80000000;\n\t\tconst data = new Uint8Array(1 + 32 + 4);\n\t\tdata[0] = 0x00;\n\t\tdata.set(parentKey.privateKey, 1);\n\n\t\tconst view = new DataView(data.buffer);\n\t\tview.setUint32(33, hardenedIndex, false);\n\n\t\tconst digest = hmac(sha512, parentKey.chainCode, data);\n\n\t\treturn {\n\t\t\tprivateKey: digest.slice(0, 32),\n\t\t\tchainCode: digest.slice(32, 64),\n\t\t};\n\t}\n\n\tprivate derivePath(path: string, seed: Uint8Array): HDKeyNode {\n\t\tif (!path.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\tlet node = this.getMasterKeyFromSeed(seed);\n\t\tconst segments = path.slice(2).split(\"/\");\n\n\t\tfor (const segment of segments) {\n\t\t\tif (!segment) continue;\n\n\t\t\tconst index = segment.endsWith(\"'\")\n\t\t\t\t? Number.parseInt(segment.slice(0, -1), 10)\n\t\t\t\t: Number.parseInt(segment, 10);\n\n\t\t\tif (Number.isNaN(index) || index < 0) {\n\t\t\t\tthrow new CryptoError(\n\t\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\t`Invalid path segment: ${segment}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tnode = this.deriveChildKey(node, index);\n\t\t}\n\n\t\treturn node;\n\t}\n\n\t/**\n\t * Derives a keypair at a specific account index.\n\t *\n\t * Uses SLIP-0010 Ed25519 derivation with the default path:\n\t * `m/44'/756'/{accountIndex}'/0'`\n\t *\n\t * Coin type 756 follows the telephone keypad convention (R=7, L=5, O=6).\n\t *\n\t * @param accountIndex - Account index to derive (default: 0)\n\t * @param options - Derivation options\n\t * @param options.passphrase - Optional BIP39 passphrase for additional security\n\t * @param options.baseDerivationPath - Base path (default: \"m/44'/756'\")\n\t * @returns Keypair for the derived account\n\t */\n\tasync toKeypair(\n\t\taccountIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair> {\n\t\tif (accountIndex < 0 || !Number.isInteger(accountIndex)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Account index must be a non-negative integer\",\n\t\t\t\t{ accountIndex },\n\t\t\t);\n\t\t}\n\n\t\tconst { passphrase = \"\", baseDerivationPath = BASE_DERIVATION_PATH } =\n\t\t\toptions ?? {};\n\n\t\ttry {\n\t\t\tconst fullPath = this.buildFullPath(baseDerivationPath, accountIndex);\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tbaseDerivationPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives a keypair using an explicit full derivation path.\n\t *\n\t * @param fullPath - Complete derivation path (e.g., \"m/44'/756'/0'/0'\")\n\t * @param passphrase - Optional BIP39 passphrase\n\t */\n\tasync toKeypairWithPath(fullPath: string, passphrase = \"\"): Promise<Keypair> {\n\t\ttry {\n\t\t\tconst seed = await bip39.mnemonicToSeed(this.phrase, passphrase);\n\t\t\tconst derivedNode = this.derivePath(fullPath, seed);\n\t\t\treturn Keypair.fromSecretKey(derivedNode.privateKey);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CryptoError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tthrow CryptoError.keyDerivationFailed(\n\t\t\t\tfullPath,\n\t\t\t\terror instanceof Error ? error : undefined,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Derives multiple keypairs sequentially from this mnemonic.\n\t *\n\t * @param count - Number of keypairs to derive\n\t * @param startIndex - Starting account index (default: 0)\n\t * @param options - Derivation options (passphrase and path)\n\t */\n\tasync deriveKeypairs(\n\t\tcount: number,\n\t\tstartIndex = 0,\n\t\toptions?: {\n\t\t\tpassphrase?: string;\n\t\t\tbaseDerivationPath?: string;\n\t\t},\n\t): Promise<Keypair[]> {\n\t\tif (count <= 0 || !Number.isInteger(count)) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Count must be a positive integer\",\n\t\t\t\t{ count },\n\t\t\t);\n\t\t}\n\n\t\tconst keypairs: Keypair[] = [];\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst keypair = await this.toKeypair(startIndex + i, options);\n\t\t\tkeypairs.push(keypair);\n\t\t}\n\n\t\treturn keypairs;\n\t}\n\n\t/**\n\t * Converts the mnemonic to a BIP39 seed.\n\t *\n\t * @param passphrase - Optional BIP39 passphrase for additional security\n\t * @returns 64-byte seed\n\t */\n\tasync toSeed(passphrase = \"\"): Promise<Uint8Array> {\n\t\treturn bip39.mnemonicToSeed(this.phrase, passphrase);\n\t}\n\n\t/**\n\t * Returns the mnemonic phrase as a string.\n\t */\n\ttoString(): string {\n\t\treturn this.phrase;\n\t}\n\n\t/**\n\t * Returns the individual words of the mnemonic.\n\t */\n\tgetWords(): string[] {\n\t\treturn this.phrase.split(\" \");\n\t}\n\n\t/**\n\t * Returns the word count (12 or 24).\n\t */\n\tgetWordCount(): 12 | 24 {\n\t\tconst count = this.getWords().length;\n\t\treturn count === 24 ? 24 : 12;\n\t}\n\n\t/**\n\t * Returns the entropy strength (128 or 256 bits).\n\t */\n\tgetStrength(): MnemonicStrength {\n\t\treturn this.getWordCount() === 12 ? 128 : 256;\n\t}\n\n\t/**\n\t * Checks equality with another mnemonic using constant-time comparison.\n\t */\n\tequals(other: Mnemonic): boolean {\n\t\tif (this.phrase.length !== other.phrase.length) return false;\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < this.phrase.length; i++) {\n\t\t\tresult |= this.phrase.charCodeAt(i) ^ other.phrase.charCodeAt(i);\n\t\t}\n\t\treturn result === 0;\n\t}\n\n\t/**\n\t * JSON serialization (returns the mnemonic phrase).\n\t */\n\ttoJSON(): string {\n\t\treturn this.phrase;\n\t}\n\n\tprivate buildFullPath(\n\t\tbaseDerivationPath: string,\n\t\taccountIndex: number,\n\t): string {\n\t\tconst cleanBasePath = baseDerivationPath.replace(/\\/$/, \"\");\n\n\t\tif (!cleanBasePath.startsWith(\"m/\")) {\n\t\t\tthrow new CryptoError(\n\t\t\t\tCryptoErrorCode.KEY_DERIVATION_FAILED,\n\t\t\t\t\"Derivation path must start with 'm/'\",\n\t\t\t);\n\t\t}\n\n\t\treturn `${cleanBasePath}/${accountIndex}'/0'`;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error handling for the Rialo CDK.\n *\n * This module defines the common error types used throughout the Rialo CDK.\n * It provides a centralized error handling mechanism for all operations.\n */\n\n/**\n * Structured RPC error information parsed from JSON-RPC error responses.\n */\nexport interface RpcErrorDetails {\n\t/** HTTP status code (e.g., 200, 422, 500) */\n\tstatus?: number;\n\t/** JSON-RPC error code (e.g., -32002) */\n\tcode: number;\n\t/** Human-readable error message */\n\tmessage: string;\n}\n\n/**\n * Error types for different subsystems in the Rialo CDK.\n */\nexport enum RialoErrorType {\n\t/** Errors related to file or system I/O operations */\n\tIO = \"IO\",\n\t/** Errors occurring during RPC communication with blockchain nodes */\n\tRPC = \"RPC\",\n\t/** Errors related to public key parsing or validation */\n\tPARSE_PUBKEY = \"PARSE_PUBKEY\",\n\t/** Errors related to blockhash parsing or validation */\n\tINVALID_BLOCKHASH_FORMAT = \"INVALID_BLOCKHASH_FORMAT\",\n\t/** Errors related to wallet operations such as creation, loading, or signing */\n\tWALLET = \"WALLET\",\n\t/** Errors related to configuration loading, parsing, or validation */\n\tCONFIG = \"CONFIG\",\n\t/** Errors occurring during transaction building, signing, or submission */\n\tTRANSACTION = \"TRANSACTION\",\n\t/** Network-related errors, including HTTP client errors */\n\tNETWORK = \"NETWORK\",\n\t/** Errors related to password handling, validation, or verification */\n\tPASSWORD = \"PASSWORD\",\n\t/** Errors related to encryption or decryption operations */\n\tENCRYPTION = \"ENCRYPTION\",\n\t/** Errors occurring during JSON parsing, serialization, or deserialization */\n\tJSON = \"JSON\",\n\t/** Errors related to BIP32 key derivation */\n\tBIP32 = \"BIP32\",\n\t/** Errors related to invalid input parameters or data */\n\tINVALID_INPUT = \"INVALID_INPUT\",\n\t/** Errors related to serialization/deserialization */\n\tSERIALIZATION = \"SERIALIZATION\",\n}\n\n/**\n * Base error class for all Rialo CDK errors.\n *\n * Provides structured error handling with type categorization and optional\n * cause tracking for error chains. Use the static factory methods for\n * consistent error creation across the SDK.\n *\n * @example\n * ```typescript\n * // Create typed errors using factory methods\n * throw RialoError.invalidInput(\"Amount must be positive\");\n * throw RialoError.network(\"Connection failed\", originalError);\n * throw RialoError.rpc({ code: -32002, message: \"Invalid params\" });\n *\n * // Handle errors with type information\n * try {\n * await client.sendTransaction(tx);\n * } catch (error) {\n * if (error instanceof RialoError && error.type === RialoErrorType.NETWORK) {\n * console.log(\"Network error, retrying...\");\n * }\n * }\n * ```\n */\nexport class RialoError extends Error {\n\tpublic readonly type: RialoErrorType;\n\tpublic readonly cause?: Error;\n\tpublic readonly details?: RpcErrorDetails;\n\n\tpublic constructor(\n\t\ttype: RialoErrorType,\n\t\tmessage: string,\n\t\tcause?: Error,\n\t\tdetails?: RpcErrorDetails,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RialoError\";\n\t\tthis.type = type;\n\t\tthis.cause = cause;\n\t\tthis.details = details;\n\n\t\t// Maintains proper stack trace for where our error was thrown (only available on V8)\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, RialoError);\n\t\t}\n\t}\n\n\t/**\n\t * Creates an IO error.\n\t */\n\tpublic static io(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.IO, `I/O error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates an RPC error.\n\t */\n\tpublic static rpc(details: RpcErrorDetails): RialoError {\n\t\tlet message: string = details.message;\n\t\tif (details.status !== undefined) {\n\t\t\tmessage = `${details.message} [HTTP ${details.status} code ${details.code}]`;\n\t\t} else if (details.code !== 0) {\n\t\t\tmessage = `${details.message} (code ${details.code})`;\n\t\t}\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.RPC,\n\t\t\t`RPC error: ${message}`,\n\t\t\tundefined,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a public key parsing error.\n\t */\n\tpublic static parsePubkey(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PARSE_PUBKEY,\n\t\t\t`Pubkey error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a blockhash format error.\n\t */\n\tpublic static invalidBlockhash(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_BLOCKHASH_FORMAT,\n\t\t\t`Invalid blockhash format: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a wallet error.\n\t */\n\tpublic static wallet(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.WALLET, `Wallet error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a configuration error.\n\t */\n\tpublic static config(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.CONFIG, `Config error: ${message}`);\n\t}\n\n\t/**\n\t * Creates a transaction error.\n\t */\n\tpublic static transaction(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.TRANSACTION,\n\t\t\t`Transaction error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a network error.\n\t */\n\tpublic static network(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.NETWORK,\n\t\t\t`Network error: ${message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a password error.\n\t */\n\tpublic static password(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.PASSWORD,\n\t\t\t`Password error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates an encryption error.\n\t */\n\tpublic static encryption(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.ENCRYPTION,\n\t\t\t`Encryption error: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a JSON error.\n\t */\n\tpublic static json(message: string, cause?: Error): RialoError {\n\t\treturn new RialoError(RialoErrorType.JSON, `JSON error: ${message}`, cause);\n\t}\n\n\t/**\n\t * Creates a BIP32 error.\n\t */\n\tpublic static bip32(message: string): RialoError {\n\t\treturn new RialoError(RialoErrorType.BIP32, `BIP32 error: ${message}`);\n\t}\n\n\t/**\n\t * Creates an invalid input error.\n\t */\n\tpublic static invalidInput(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.INVALID_INPUT,\n\t\t\t`Invalid input: ${message}`,\n\t\t);\n\t}\n\n\t/**\n\t * Creates a serialization error.\n\t */\n\tpublic static serialization(message: string): RialoError {\n\t\treturn new RialoError(\n\t\t\tRialoErrorType.SERIALIZATION,\n\t\t\t`Serialization error: ${message}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for HPKE encryption operations.\n */\nexport enum HpkeErrorCode {\n\t/** Key length does not match expected size */\n\tINVALID_KEY_LENGTH = \"INVALID_KEY_LENGTH\",\n\t/** Ciphertext is shorter than minimum required length */\n\tCIPHERTEXT_TOO_SHORT = \"CIPHERTEXT_TOO_SHORT\",\n\t/** HPKE encryption operation failed */\n\tENCRYPTION_FAILED = \"ENCRYPTION_FAILED\",\n\t/** Failed to deserialize Borsh data */\n\tBORSH_DESERIALIZE_FAILED = \"BORSH_DESERIALIZE_FAILED\",\n\t/** RexValue has invalid variant byte */\n\tINVALID_REX_VALUE = \"INVALID_REX_VALUE\",\n}\n\n/**\n * Error class for HPKE encryption operations.\n *\n * Provides detailed error information for encryption failures,\n * including error codes and contextual details.\n */\nexport class HpkeError extends Error {\n\treadonly code: HpkeErrorCode;\n\treadonly cause?: Error;\n\n\tconstructor(code: HpkeErrorCode, message: string, cause?: Error) {\n\t\tsuper(message);\n\t\tthis.name = \"HpkeError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\n\t\t// Maintain proper stack trace in V8 environments\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, HpkeError);\n\t\t}\n\t}\n\n\t/**\n\t * Create an error for invalid key length.\n\t *\n\t * @param expected - Expected key length in bytes\n\t * @param actual - Actual key length in bytes\n\t * @param keyType - Description of the key type (e.g., \"REX public key\")\n\t */\n\tstatic invalidKeyLength(\n\t\texpected: number,\n\t\tactual: number,\n\t\tkeyType: string,\n\t): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.INVALID_KEY_LENGTH,\n\t\t\t`Invalid ${keyType} length: expected ${expected} bytes, got ${actual}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for ciphertext that is too short.\n\t *\n\t * @param minLength - Minimum required length\n\t * @param actual - Actual length\n\t */\n\tstatic ciphertextTooShort(minLength: number, actual: number): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.CIPHERTEXT_TOO_SHORT,\n\t\t\t`Ciphertext too short: minimum ${minLength} bytes required, got ${actual}`,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for encryption failure.\n\t *\n\t * @param cause - The underlying error\n\t */\n\tstatic encryptionFailed(cause: Error): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.ENCRYPTION_FAILED,\n\t\t\t`HPKE encryption failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for Borsh deserialization failure.\n\t *\n\t * @param cause - The underlying error\n\t */\n\tstatic borshDeserializeFailed(cause: Error): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.BORSH_DESERIALIZE_FAILED,\n\t\t\t`Borsh deserialization failed: ${cause.message}`,\n\t\t\tcause,\n\t\t);\n\t}\n\n\t/**\n\t * Create an error for invalid RexValue variant.\n\t *\n\t * @param variant - The invalid variant byte\n\t */\n\tstatic invalidRexValue(variant: number): HpkeError {\n\t\treturn new HpkeError(\n\t\t\tHpkeErrorCode.INVALID_REX_VALUE,\n\t\t\t`Invalid RexValue variant: ${variant}`,\n\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Constants for REX HPKE encryption.\n *\n * These constants MUST match the Rust implementation exactly:\n * - `crates/tee/secret-sharing/src/constants.rs`\n *\n * @module\n */\n\n/**\n * Additional Authenticated Data (AAD) prefix for user secrets.\n *\n * This 13-byte string is prepended to the sender's public key to form\n * the complete AAD for HPKE encryption. It provides domain separation\n * to prevent cross-protocol attacks.\n *\n * Format: `USER_SECRET_AAD || senderPubkey` = 45 bytes total AAD\n *\n * @remarks\n * Must match Rust: `pub const USER_SECRET_AAD: &[u8] = b\"rex-secret-v1\";`\n */\nexport const USER_SECRET_AAD = new TextEncoder().encode(\"rex-secret-v1\");\n\n/**\n * HPKE info string for secret sharing context.\n *\n * This 32-byte string is used as the `info` parameter in HPKE encryption,\n * providing domain separation for secret sharing operations.\n *\n * @remarks\n * Must match Rust: `pub const SECRET_SHARING_HPKE_INFO: &[u8; 32] = b\"rialo/tee/secret-sharing-hpke/v1\";`\n */\nexport const SECRET_SHARING_HPKE_INFO = new TextEncoder().encode(\n\t\"rialo/tee/secret-sharing-hpke/v1\",\n);\n\n/**\n * Length of an X25519 public key in bytes.\n *\n * Used for the REX encryption public key (secret sharing key).\n */\nexport const X25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of an Ed25519 public key in bytes.\n *\n * Used for sender identity binding in AAD construction.\n */\nexport const ED25519_PUBLIC_KEY_LENGTH = 32;\n\n/**\n * Length of the HPKE encapsulated key (enc) in bytes.\n *\n * For X25519, this is always 32 bytes.\n */\nexport const HPKE_ENC_LENGTH = 32;\n\n/**\n * Length of the ChaCha20-Poly1305 authentication tag in bytes.\n */\nexport const CHACHA20_POLY1305_TAG_LENGTH = 16;\n\n/**\n * Total overhead added by HPKE encryption.\n *\n * This is the additional bytes beyond the plaintext:\n * - enc (32 bytes): Encapsulated ephemeral public key\n * - tag (16 bytes): ChaCha20-Poly1305 authentication tag\n *\n * Ciphertext length = plaintext length + 48 bytes\n */\nexport const HPKE_OVERHEAD_LENGTH = HPKE_ENC_LENGTH + CHACHA20_POLY1305_TAG_LENGTH;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { HpkeError } from \"./errors.js\";\n\n/**\n * Variant discriminator for RexValue Borsh serialization.\n */\nexport enum RexValueVariant {\n\t/** Plain (unencrypted) data variant */\n\tPlain = 0,\n\t/** Encrypted data variant */\n\tEncrypted = 1,\n}\n\n/**\n * Represents an rex value that can be plain or encrypted.\n *\n * This class provides Borsh-compatible serialization that matches\n * the Rust `RexValue` enum:\n *\n * ```rust\n * pub enum RexValue {\n * Plain(Vec<u8>),\n * Encrypted(Vec<u8>),\n * }\n * ```\n *\n * ## Borsh Format\n *\n * - Plain: `[0x00] [length: u32 LE] [data bytes]`\n * - Encrypted: `[0x01] [length: u32 LE] [ciphertext bytes]`\n *\n * @example\n * ```typescript\n * // Plain value (unencrypted)\n * const plain = RexValue.plain(new TextEncoder().encode(\"hello\"));\n *\n * // Encrypted value (via HPKE)\n * const encrypted = RexValue.encrypted(ciphertextBytes);\n *\n * // Serialize to Borsh\n * const borsh = plain.toBorsh();\n *\n * // Deserialize from Borsh\n * const restored = RexValue.fromBorsh(borsh);\n * ```\n */\nexport class RexValue {\n\tprivate readonly variant: RexValueVariant;\n\tprivate readonly data: Uint8Array;\n\n\tprivate constructor(variant: RexValueVariant, data: Uint8Array) {\n\t\tthis.variant = variant;\n\t\tthis.data = data;\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from raw bytes.\n\t *\n\t * @param data - The raw byte data\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plain(data: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Plain, data);\n\t}\n\n\t/**\n\t * Create a plain (unencrypted) RexValue from a UTF-8 string.\n\t *\n\t * @param s - The string to encode\n\t * @returns A new RexValue with Plain variant\n\t */\n\tstatic plainString(s: string): RexValue {\n\t\treturn new RexValue(\n\t\t\tRexValueVariant.Plain,\n\t\t\tnew TextEncoder().encode(s),\n\t\t);\n\t}\n\n\t/**\n\t * Create an encrypted RexValue from HPKE ciphertext.\n\t *\n\t * @param ciphertext - The HPKE-encrypted ciphertext (enc || ct || tag)\n\t * @returns A new RexValue with Encrypted variant\n\t */\n\tstatic encrypted(ciphertext: Uint8Array): RexValue {\n\t\treturn new RexValue(RexValueVariant.Encrypted, ciphertext);\n\t}\n\n\t/**\n\t * Check if this is a plain (unencrypted) value.\n\t */\n\tisPlain(): boolean {\n\t\treturn this.variant === RexValueVariant.Plain;\n\t}\n\n\t/**\n\t * Check if this is an encrypted value.\n\t */\n\tisEncrypted(): boolean {\n\t\treturn this.variant === RexValueVariant.Encrypted;\n\t}\n\n\t/**\n\t * Get the variant type.\n\t */\n\tgetVariant(): RexValueVariant {\n\t\treturn this.variant;\n\t}\n\n\t/**\n\t * Get the raw bytes (plaintext or ciphertext).\n\t *\n\t * For Plain values, returns the plaintext.\n\t * For Encrypted values, returns the ciphertext.\n\t */\n\tasBytes(): Uint8Array {\n\t\treturn this.data;\n\t}\n\n\t/**\n\t * Try to decode the plain value as a UTF-8 string.\n\t *\n\t * @returns The decoded string, or null if encrypted or not valid UTF-8\n\t */\n\tasString(): string | null {\n\t\tif (!this.isPlain()) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn new TextDecoder(\"utf-8\", { fatal: true }).decode(this.data);\n\t\t} catch {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t/**\n\t * Serialize to Borsh format.\n\t *\n\t * Format: `[variant: u8] [length: u32 LE] [data bytes]`\n\t *\n\t * @returns The Borsh-serialized bytes\n\t */\n\ttoBorsh(): Uint8Array {\n\t\t// 1 byte variant + 4 bytes length + data\n\t\tconst result = new Uint8Array(1 + 4 + this.data.length);\n\n\t\t// Write variant (1 byte)\n\t\tresult[0] = this.variant;\n\n\t\t// Write length as u32 LE (4 bytes)\n\t\tconst dataView = new DataView(result.buffer);\n\t\tdataView.setUint32(1, this.data.length, true);\n\n\t\t// Write data\n\t\tresult.set(this.data, 5);\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Deserialize from Borsh format.\n\t *\n\t * @param data - The Borsh-serialized bytes\n\t * @returns A new RexValue\n\t * @throws {HpkeError} If deserialization fails\n\t */\n\tstatic fromBorsh(data: Uint8Array): RexValue {\n\t\tif (data.length < 5) {\n\t\t\tthrow HpkeError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected at least 5 bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst variant = data[0];\n\t\tif (variant !== RexValueVariant.Plain && variant !== RexValueVariant.Encrypted) {\n\t\t\tthrow HpkeError.invalidRexValue(variant);\n\t\t}\n\n\t\tconst dataView = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tconst length = dataView.getUint32(1, true);\n\n\t\tif (data.length < 5 + length) {\n\t\t\tthrow HpkeError.borshDeserializeFailed(\n\t\t\t\tnew Error(`Buffer too short: expected ${5 + length} bytes, got ${data.length}`),\n\t\t\t);\n\t\t}\n\n\t\tconst payload = data.slice(5, 5 + length);\n\n\t\treturn new RexValue(variant as RexValueVariant, payload);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Chacha20Poly1305 } from \"@hpke/chacha20poly1305\";\nimport { CipherSuite, DhkemX25519HkdfSha256, HkdfSha256 } from \"@hpke/core\";\n\nimport {\n\tED25519_PUBLIC_KEY_LENGTH,\n\tHPKE_OVERHEAD_LENGTH,\n\tSECRET_SHARING_HPKE_INFO,\n\tUSER_SECRET_AAD,\n\tX25519_PUBLIC_KEY_LENGTH,\n} from \"./constants\";\nimport { HpkeError } from \"./errors\";\nimport { RexValue } from \"./rex-value\";\n\n/**\n * HPKE cipher suite configuration.\n *\n * Uses the same parameters as the Rust REX implementation:\n * - KEM: DHKEM(X25519, HKDF-SHA256) (RFC 9180 ID: 0x0020)\n * - KDF: HKDF-SHA256 (RFC 9180 ID: 0x0001)\n * - AEAD: ChaCha20-Poly1305 (RFC 9180 ID: 0x0003)\n * - Mode: Base (0x00)\n */\nconst hpkeSuite = new CipherSuite({\n\tkem: new DhkemX25519HkdfSha256(),\n\tkdf: new HkdfSha256(),\n\taead: new Chacha20Poly1305(),\n});\n\n/**\n * Build the AAD (Additional Authenticated Data) for HPKE encryption.\n *\n * The AAD binds the ciphertext to the sender's identity, preventing\n * replay attacks where ciphertext is substituted between users.\n *\n * Format: USER_SECRET_AAD (16 bytes) || senderPubkey (32 bytes) = 48 bytes\n *\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes)\n * @returns The constructed AAD (48 bytes)\n */\nfunction buildAad(senderPubkey: Uint8Array): Uint8Array {\n\tconst aad = new Uint8Array(USER_SECRET_AAD.length + senderPubkey.length);\n\taad.set(USER_SECRET_AAD, 0);\n\taad.set(senderPubkey, USER_SECRET_AAD.length);\n\treturn aad;\n}\n\n/**\n * Encrypt data using HPKE for REX secret sharing.\n *\n * This function performs HPKE encryption using the Base mode with:\n * - X25519 for key encapsulation\n * - HKDF-SHA256 for key derivation\n * - ChaCha20-Poly1305 for authenticated encryption\n *\n * The output format is: `enc (32 bytes) || ciphertext || tag (16 bytes)`\n *\n * @param rexPubkey - The REX X25519 public key (32 bytes)\n * @param data - The plaintext data to encrypt\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes) for AAD construction\n * @returns The encrypted ciphertext including enc and tag\n * @throws {HpkeError} If key lengths are invalid or encryption fails\n *\n * @example\n * ```typescript\n * const rexPubkey = await client.getSecretSharingPubkey();\n * const ciphertext = await hpkeEncrypt(\n * rexPubkey,\n * new TextEncoder().encode(\"secret data\"),\n * keypair.publicKey.toBytes()\n * );\n * ```\n */\nexport async function hpkeEncrypt(\n\trexPubkey: Uint8Array,\n\tdata: Uint8Array,\n\tsenderPubkey: Uint8Array,\n): Promise<Uint8Array> {\n\t// Validate REX public key length (X25519)\n\tif (rexPubkey.length !== X25519_PUBLIC_KEY_LENGTH) {\n\t\tthrow HpkeError.invalidKeyLength(\n\t\t\tX25519_PUBLIC_KEY_LENGTH,\n\t\t\trexPubkey.length,\n\t\t\t\"REX public key\",\n\t\t);\n\t}\n\n\t// Validate sender public key length (Ed25519)\n\tif (senderPubkey.length !== ED25519_PUBLIC_KEY_LENGTH) {\n\t\tthrow HpkeError.invalidKeyLength(\n\t\t\tED25519_PUBLIC_KEY_LENGTH,\n\t\t\tsenderPubkey.length,\n\t\t\t\"sender public key\",\n\t\t);\n\t}\n\n\ttry {\n\t\t// Import the recipient's public key (convert to ArrayBuffer for HPKE library)\n\t\tconst recipientKey = await hpkeSuite.kem.importKey(\n\t\t\t\"raw\",\n\t\t\trexPubkey.buffer.slice(\n\t\t\t\trexPubkey.byteOffset,\n\t\t\t\trexPubkey.byteOffset + rexPubkey.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t);\n\n\t\t// Create sender context with the info string for domain separation\n\t\tconst sender = await hpkeSuite.createSenderContext({\n\t\t\trecipientPublicKey: recipientKey,\n\t\t\tinfo: SECRET_SHARING_HPKE_INFO.buffer.slice(\n\t\t\t\tSECRET_SHARING_HPKE_INFO.byteOffset,\n\t\t\t\tSECRET_SHARING_HPKE_INFO.byteOffset +\n\t\t\t\t\tSECRET_SHARING_HPKE_INFO.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t});\n\n\t\t// Build AAD: USER_SECRET_AAD || senderPubkey\n\t\tconst aad = buildAad(senderPubkey);\n\n\t\t// Encrypt the data (convert to ArrayBuffer for HPKE library)\n\t\tconst ciphertext = await sender.seal(\n\t\t\tdata.buffer.slice(\n\t\t\t\tdata.byteOffset,\n\t\t\t\tdata.byteOffset + data.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t\taad.buffer.slice(\n\t\t\t\taad.byteOffset,\n\t\t\t\taad.byteOffset + aad.byteLength,\n\t\t\t) as ArrayBuffer,\n\t\t);\n\n\t\t// Combine enc || ciphertext into final output\n\t\t// The enc is the encapsulated key from sender context\n\t\tconst enc = new Uint8Array(sender.enc);\n\t\tconst result = new Uint8Array(enc.length + ciphertext.byteLength);\n\t\tresult.set(enc, 0);\n\t\tresult.set(new Uint8Array(ciphertext), enc.length);\n\n\t\treturn result;\n\t} catch (error) {\n\t\tthrow HpkeError.encryptionFailed(\n\t\t\terror instanceof Error ? error : new Error(String(error)),\n\t\t);\n\t}\n}\n\n/**\n * Encrypt data for REX and wrap it in an RexValue.\n *\n * This is a convenience function that combines:\n * 1. HPKE encryption using `hpkeEncrypt`\n * 2. Wrapping the ciphertext in an `RexValue.encrypted`\n *\n * The resulting RexValue can be serialized to Borsh and sent to the network.\n *\n * @param rexPubkey - The REX X25519 public key (32 bytes)\n * @param data - The plaintext data to encrypt\n * @param senderPubkey - The sender's Ed25519 public key (32 bytes)\n * @returns An RexValue containing the encrypted ciphertext\n * @throws {HpkeError} If key lengths are invalid or encryption fails\n *\n * @example\n * ```typescript\n * import { RpcClient, Keypair } from \"@rialo/ts-cdk\";\n * import { encryptForRex, RexValue } from \"@rialo/ts-cdk/rex\";\n *\n * // Get REX public key from the network\n * const client = new RpcClient(\"https://rpc.rialo.xyz\");\n * const rexPubkey = await client.getSecretSharingPubkey();\n *\n * // Create keypair for signing\n * const keypair = Keypair.generate();\n *\n * // Encrypt secret data\n * const rexValue = await encryptForRex(\n * rexPubkey,\n * new TextEncoder().encode(\"my secret API key\"),\n * keypair.publicKey.toBytes()\n * );\n *\n * // The RexValue can now be serialized and used in transactions\n * const borshBytes = rexValue.toBorsh();\n * ```\n */\nexport async function encryptForRex(\n\trexPubkey: Uint8Array,\n\tdata: Uint8Array,\n\tsenderPubkey: Uint8Array,\n): Promise<RexValue> {\n\tconst ciphertext = await hpkeEncrypt(rexPubkey, data, senderPubkey);\n\treturn RexValue.encrypted(ciphertext);\n}\n\n/**\n * Calculate the expected ciphertext length for a given plaintext length.\n *\n * The ciphertext consists of:\n * - enc (32 bytes): Encapsulated ephemeral public key\n * - ciphertext (plaintext.length bytes): Encrypted data\n * - tag (16 bytes): ChaCha20-Poly1305 authentication tag\n *\n * @param plaintextLength - Length of the plaintext in bytes\n * @returns Expected ciphertext length\n *\n * @example\n * ```typescript\n * const ciphertextLen = getCiphertextLength(100);\n * console.log(ciphertextLen); // 148 (32 + 100 + 16)\n * ```\n */\nexport function getCiphertextLength(plaintextLength: number): number {\n\treturn HPKE_OVERHEAD_LENGTH + plaintextLength;\n}\n\n/**\n * Validate that a ciphertext has a valid length.\n *\n * A valid HPKE ciphertext must be at least 48 bytes (32 enc + 16 tag).\n *\n * @param ciphertext - The ciphertext to validate\n * @returns true if the ciphertext length is valid\n *\n * @example\n * ```typescript\n * if (!isValidCiphertextLength(ciphertext)) {\n * throw new Error(\"Ciphertext too short\");\n * }\n * ```\n */\nexport function isValidCiphertextLength(ciphertext: Uint8Array): boolean {\n\treturn ciphertext.length >= HPKE_OVERHEAD_LENGTH;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for RPC operations, categorized by type.\n */\nexport enum RpcErrorCode {\n\t// Network errors (retryable)\n\tREQUEST_TIMEOUT = \"REQUEST_TIMEOUT\",\n\tNETWORK_ERROR = \"NETWORK_ERROR\",\n\tCONNECTION_REFUSED = \"CONNECTION_REFUSED\",\n\tINVALID_NETWORK = \"INVALID_NETWORK\",\n\n\t// RPC protocol errors\n\tINVALID_RESPONSE = \"INVALID_RESPONSE\",\n\tPARSE_ERROR = \"PARSE_ERROR\",\n\tINVALID_REQUEST = \"INVALID_REQUEST\",\n\tMETHOD_NOT_FOUND = \"METHOD_NOT_FOUND\",\n\tINVALID_PARAMS = \"INVALID_PARAMS\",\n\tINTERNAL_ERROR = \"INTERNAL_ERROR\",\n\n\t// Transaction errors\n\tTRANSACTION_REJECTED = \"TRANSACTION_REJECTED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tTRANSACTION_CONFIRMATION_TIMEOUT = \"TRANSACTION_CONFIRMATION_TIMEOUT\",\n\n\t// Resource errors\n\tACCOUNT_NOT_FOUND = \"ACCOUNT_NOT_FOUND\",\n\n\t// Rate limiting (retryable after delay)\n\tRATE_LIMIT_EXCEEDED = \"RATE_LIMIT_EXCEEDED\",\n\n\t// Node health\n\tNODE_UNHEALTHY = \"NODE_UNHEALTHY\",\n}\n\n/**\n * Detailed error context for debugging and error handling.\n */\ninterface RpcErrorDetails {\n\tmethod?: string;\n\tparams?: unknown;\n\trequestId?: number;\n\turl?: string;\n\thttpStatus?: number;\n\trpcCode?: number;\n\ttimeout?: number;\n\tattempts?: number;\n\t[key: string]: unknown;\n}\n\n/**\n * Error class for RPC operations with structured error information.\n *\n * Provides actionable error messages and indicates whether errors are retryable.\n */\nexport class RpcError extends Error {\n\tpublic readonly code: RpcErrorCode;\n\tpublic readonly details: RpcErrorDetails;\n\tpublic readonly retryable: boolean;\n\n\tconstructor(\n\t\tcode: RpcErrorCode,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails = {},\n\t\tretryable = false,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"RpcError\";\n\t\tthis.code = code;\n\t\tthis.details = details;\n\t\tthis.retryable = retryable;\n\t}\n\n\tstatic requestTimeout(timeoutMs: number, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.REQUEST_TIMEOUT,\n\t\t\t`RPC request timed out after ${timeoutMs}ms. The node may be slow or unreachable.`,\n\t\t\t{ ...details, timeout: timeoutMs },\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic networkError(message: string, details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.NETWORK_ERROR,\n\t\t\t`Network error: ${message}. Check your internet connection and node URL.`,\n\t\t\tdetails,\n\t\t\ttrue, // Retryable\n\t\t);\n\t}\n\n\tstatic invalidResponse(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.INVALID_RESPONSE,\n\t\t\t\"Received invalid response from RPC node. The response format is unexpected.\",\n\t\t\tdetails,\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic accountNotFound(pubkey: string): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.ACCOUNT_NOT_FOUND,\n\t\t\t`Account ${pubkey} not found on chain. It may not exist or has zero balance.`,\n\t\t\t{ pubkey },\n\t\t\tfalse,\n\t\t);\n\t}\n\n\tstatic rateLimitExceeded(details: RpcErrorDetails): RpcError {\n\t\treturn new RpcError(\n\t\t\tRpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t\t\"Rate limit exceeded. Too many requests to the RPC endpoint. Try again later or use a different endpoint.\",\n\t\t\tdetails,\n\t\t\ttrue, // Can retry after delay\n\t\t);\n\t}\n\n\tstatic fromRpcCode(\n\t\trpcCode: number,\n\t\tmessage: string,\n\t\tdetails: RpcErrorDetails,\n\t): RpcError {\n\t\t// Map JSON-RPC error codes to our error codes\n\t\tconst codeMap: Record<number, RpcErrorCode> = {\n\t\t\t[-32700]: RpcErrorCode.PARSE_ERROR,\n\t\t\t[-32600]: RpcErrorCode.INVALID_REQUEST,\n\t\t\t[-32601]: RpcErrorCode.METHOD_NOT_FOUND,\n\t\t\t[-32602]: RpcErrorCode.INVALID_PARAMS,\n\t\t\t[-32603]: RpcErrorCode.INTERNAL_ERROR,\n\t\t\t[429]: RpcErrorCode.RATE_LIMIT_EXCEEDED,\n\t\t};\n\n\t\tconst code = codeMap[rpcCode] || RpcErrorCode.INTERNAL_ERROR;\n\t\tconst retryable = rpcCode === 429 || rpcCode === -32603;\n\n\t\treturn new RpcError(code, message, { ...details, rpcCode }, retryable);\n\t}\n\n\ttoJSON(): {\n\t\tcode: RpcErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t\tretryable: boolean;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t\tretryable: this.retryable,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Base RPC client with JSON-RPC 2.0 protocol handling.\n *\n * Provides common functionality for all RPC clients including\n * request/response validation and error handling.\n */\nimport { RpcError } from \"../errors\";\nimport type { HttpTransport } from \"../http-transport\";\n\ninterface JsonRpcRequest {\n jsonrpc: \"2.0\";\n id: number;\n method: string;\n params: unknown[];\n}\n\ninterface JsonRpcResponse<T> {\n jsonrpc: \"2.0\";\n id: number;\n result?: T;\n error?: {\n code: number;\n message: string;\n data?: unknown;\n };\n}\n\n/**\n * Base client with JSON-RPC protocol handling.\n *\n * All specific clients (QueryClient, TransactionClient) extend this.\n */\nexport class BaseRpcClient {\n protected readonly transport: HttpTransport;\n private requestId = 0;\n\n constructor(transport: HttpTransport) {\n this.transport = transport;\n }\n\n /**\n * Makes a JSON-RPC 2.0 method call with type safety.\n *\n * Handles request serialization, response validation, and error mapping.\n */\n async call<T>(method: string, params: unknown[] = []): Promise<T> {\n const requestId = this.nextRequestId();\n\n const request: JsonRpcRequest = {\n jsonrpc: \"2.0\",\n id: requestId,\n method,\n params,\n };\n\n const requestBody = JSON.stringify(request);\n const requestDetails = { method, params, requestId };\n\n // Make HTTP request with retry logic\n const data = await this.transport.request(requestBody, requestDetails);\n\n // Validate response structure\n if (!this.isValidJsonRpcResponse(data)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response: data,\n });\n }\n\n const response = data as JsonRpcResponse<T>;\n\n // Check for RPC error\n if (response.error) {\n throw RpcError.fromRpcCode(response.error.code, response.error.message, {\n ...requestDetails,\n rpcData: response.error.data,\n });\n }\n\n // Check for result\n if (!(\"result\" in response)) {\n throw RpcError.invalidResponse({\n ...requestDetails,\n response,\n });\n }\n\n return response.result as T;\n }\n\n /**\n * Validate JSON-RPC response structure\n */\n private isValidJsonRpcResponse(data: unknown): boolean {\n if (typeof data !== \"object\" || data === null) {\n return false;\n }\n\n const response = data as Record<string, unknown>;\n\n return (\n response.jsonrpc === \"2.0\" &&\n typeof response.id === \"number\" &&\n (\"result\" in response || \"error\" in response)\n );\n }\n\n /**\n * Generates the next request ID with Overflow Protection.\n * @returns The next request ID.\n */\n private nextRequestId(): number {\n this.requestId = (this.requestId + 1) % Number.MAX_SAFE_INTEGER;\n return this.requestId;\n }\n\n /**\n * Returns the configured RPC endpoint URL.\n */\n getUrl(): string {\n return this.transport.getUrl();\n }\n\n /**\n * Call an arbitrary RPC method with a JSON string body.\n *\n * Escape hatch for methods not yet in the typed interface.\n *\n * @param method - The RPC method name\n * @param params - JSON string of parameters\n * @returns JSON string of the result\n */\n async callWithJson(method: string, params: string): Promise<string> {\n const parsedParams = JSON.parse(params);\n const result = await this.call<unknown>(method, parsedParams);\n return JSON.stringify(result);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n// AUTO-GENERATED FROM spec.wit — DO NOT EDIT\n\nimport type { AccountFilter, AccountInfo, AllAccountsEntry, BlockInfo, ClusterNodeInfo, ConfigHashPrefix, ConfirmTransactionOptions, ConfirmedTransaction, ConnectedNode, EpochInfo, FeeResponse, GetAccountsByOwnerConfig, GetAllAccountsConfig, GetBlockConfig, GetSignaturesForAddressConfig, GetTransactionsConfig, GetValidatorAccountsRequest, GetWorkflowLineageRequest, GetWorkflowLineageResponse, Hash, IsBlockhashValidResponse, Kelvin, OptionalAccountInfo, OwnerAccount, PaginationInfo, PublicKey, RexInfoAndDuties, SecretSharingPubkey, SendAndConfirmOptions, SendTransactionOptions, Signature, SignatureInfo, SignatureStatus, StakeAccountInfo, SubmitEpochChangeRequest, SubmitEpochChangeResponse, Subscription, TokenBalance, TransactionInfo, TransactionResponse, TriggeredTransaction, ValidatorAccountInfo, ValidatorHealth } from \"./types.js\";\n\n/**\n * RpcClient interface — generated from spec.wit.\n *\n * Every method corresponds to a function in the `rpc-client` interface.\n */\nexport abstract class RpcClient {\n /**\n * Gets the balance of an account in kelvins.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * The account balance in the smallest denomination of the native token (kelvins).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getBalance(pubkey: PublicKey): Promise<Kelvin>;\n\n /**\n * Gets detailed information about an on-chain account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key (address) of the account to query.\n * \n * # Returns\n * \n * Detailed account information including balance, owner, data, and executable flag.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account does not exist.\n */\n abstract getAccountInfo(pubkey: PublicKey): Promise<AccountInfo>;\n\n /**\n * Gets the current finalized block height from the blockchain.\n * \n * The block height represents the number of blocks produced since genesis.\n * Always returns the finalized block height for consistency.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeight(): Promise<bigint>;\n\n /**\n * Gets the current finalized block height with advanced configuration.\n * \n * Provides access to advanced parameters for block height retrieval,\n * specifically minimum context slot requirements.\n * \n * # Parameters\n * \n * * `min-context-slot` - The minimum context slot that the server must have\n * reached before responding. If absent, no minimum is required.\n * \n * # Returns\n * \n * The current finalized block height.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlockHeightWithConfig(minContextSlot: bigint | undefined): Promise<bigint>;\n\n /**\n * Gets detailed information about a transaction by its signature.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature to look up.\n * \n * # Returns\n * \n * Full transaction details including block height, block hash, timestamp,\n * execution metadata (fee, errors), and the transaction content.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is not found.\n */\n abstract getTransaction(sig: Signature): Promise<TransactionResponse>;\n\n /**\n * Gets the total number of transactions processed since genesis.\n * \n * # Returns\n * \n * The total transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactionCount(): Promise<bigint>;\n\n /**\n * Calculates the minimum balance required for rent exemption.\n * \n * Accounts with at least this balance are exempt from paying rent.\n * \n * # Parameters\n * \n * * `data-size` - The size of the account data in bytes.\n * \n * # Returns\n * \n * The minimum balance (in kelvins) required for rent exemption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint>;\n\n /**\n * Gets the status of multiple transaction signatures.\n * \n * # Parameters\n * \n * * `signatures` - A list of transaction signatures to query.\n * \n * # Returns\n * \n * A list of signature statuses (slot, executed, error) corresponding\n * to the input signatures.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignatureStatuses(signatures: Signature[]): Promise<(SignatureStatus | undefined)[]>;\n\n /**\n * Gets signatures associated with an address, with optional pagination.\n * \n * # Parameters\n * \n * * `address` - The address to query signatures for.\n * * `config` - Optional configuration for pagination (limit, before, until).\n * \n * # Returns\n * \n * A list of signature info records for the given address.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getSignaturesForAddress(address: PublicKey, config: GetSignaturesForAddressConfig | undefined): Promise<SignatureInfo[]>;\n\n /**\n * Gets current epoch information.\n * \n * # Returns\n * \n * Epoch information including epoch number, slot indices, block height,\n * and transaction count.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getEpochInfo(): Promise<EpochInfo>;\n\n /**\n * Gets the fee for a given serialized message.\n * \n * # Parameters\n * \n * * `message` - The base64-encoded serialized message to calculate fees for.\n * \n * # Returns\n * \n * A fee response containing the fee in kelvins, or absent if the message\n * is invalid.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getFeeForMessage(message: string): Promise<FeeResponse>;\n\n /**\n * Gets information for multiple accounts in a single request.\n * \n * # Parameters\n * \n * * `pubkeys` - A list of public keys to query.\n * \n * # Returns\n * \n * A list of optional account info records. Each entry is absent if that\n * account does not exist.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getMultipleAccounts(pubkeys: PublicKey[]): Promise<OptionalAccountInfo[]>;\n\n /**\n * Gets accounts owned by a given program or address.\n * \n * Returns all accounts whose owner matches the specified public key,\n * along with optional pagination metadata.\n * \n * # Parameters\n * \n * * `owner` - The public key of the owner/program to query accounts for.\n * * `filter` - Optional filter to specify account type (program accounts\n * or token accounts). Defaults to program-accounts if absent.\n * * `config` - Optional pagination configuration (limit, after cursor).\n * \n * # Returns\n * \n * A tuple of (accounts list, optional pagination info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAccountsByOwner(owner: PublicKey, filter: AccountFilter | undefined, config: GetAccountsByOwnerConfig | undefined): Promise<[OwnerAccount[], PaginationInfo | undefined]>;\n\n /**\n * Gets a subscription by subscriber public key and nonce.\n * \n * # Parameters\n * \n * * `subscriber` - The public key of the subscriber.\n * * `nonce` - The nonce identifying the specific subscription.\n * \n * # Returns\n * \n * The subscription record (kind, topic, subscriber, event-account).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the subscription is not found.\n */\n abstract getSubscription(subscriber: PublicKey, nonce: string): Promise<Subscription>;\n\n /**\n * Gets transactions triggered by a subscription.\n * \n * Returns transactions that were automatically triggered in response to\n * subscription matches or other programmatic conditions.\n * \n * # Parameters\n * \n * * `subscription-account` - The public key of the subscription account.\n * * `limit` - Optional maximum number of transactions to return.\n * \n * # Returns\n * \n * A list of triggered transaction records (signature, block number).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTriggeredTransactions(subscriptionAccount: PublicKey, limit: number | undefined): Promise<TriggeredTransaction[]>;\n\n /**\n * Gets the workflow lineage tree for a transaction.\n * \n * Traverses the chain of workflow-triggered transactions starting from\n * a root transaction, building a tree of parent-child relationships.\n * \n * # Parameters\n * \n * * `request` - The lineage request including root signature, max depth,\n * and whether to include event details.\n * \n * # Returns\n * \n * The workflow lineage response with nodes, leaves, and truncation info.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the root transaction is not found.\n */\n abstract getWorkflowLineage(request: GetWorkflowLineageRequest): Promise<GetWorkflowLineageResponse>;\n\n /**\n * Gets paginated transactions from the blockchain.\n * \n * Returns a list of transactions, optionally filtered and paginated.\n * Useful for transaction monitoring, analytics, and debugging.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for pagination (limit, before cursor).\n * If absent, defaults apply (limit: 100).\n * \n * # Returns\n * \n * A list of transaction info records with signatures, slots, block times,\n * and error status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getTransactions(config: GetTransactionsConfig | undefined): Promise<TransactionInfo[]>;\n\n /**\n * Checks if a blockhash is still valid for transaction submission.\n * \n * # Parameters\n * \n * * `blockhash` - The blockhash to validate.\n * \n * # Returns\n * \n * `true` if the blockhash is still valid, `false` otherwise.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse>;\n\n /**\n * Gets the health status of the RPC node.\n * \n * # Returns\n * \n * A health status string, typically \"ok\" when the node is healthy.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the node is unhealthy.\n */\n abstract getHealth(): Promise<string>;\n\n /**\n * Gets the health status of the validator.\n * \n * # Returns\n * \n * The validator health status record.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorHealth(): Promise<ValidatorHealth>;\n\n /**\n * Gets the list of full nodes connected to the validator or full node.\n * \n * # Returns\n * \n * A list of connected nodes, each identified by a network public key\n * and connection duration in milliseconds.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedFullNodes(): Promise<ConnectedNode[]>;\n\n /**\n * Gets the TEE's secret sharing public key for HPKE encryption.\n * \n * This public key is used to encrypt secrets that only the TEE cluster\n * can decrypt.\n * \n * # Returns\n * \n * The X25519 public key (hex-encoded) used for HPKE encryption.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails, the TEE Registry state account\n * doesn't exist, or the secret sharing public key has not been registered.\n */\n abstract getSecretSharingPubkey(): Promise<SecretSharingPubkey>;\n\n /**\n * Gets the config hash prefix for protecting against replay attacks.\n * \n * Retrieves the first 64 bits of the config hash, which is used for\n * transaction replay protection across chains.\n * \n * # Returns\n * \n * The config hash prefix as a u64 value.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConfigHashPrefix(): Promise<ConfigHashPrefix>;\n\n /**\n * Gets all accounts in the system.\n * \n * **Warning:** This can be very expensive on large networks. Intended\n * primarily for testing and debugging on local/devnet.\n * \n * # Parameters\n * \n * * `config` - Optional configuration for encoding and data inclusion.\n * \n * # Returns\n * \n * A list of all account entries (pubkey + account info).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getAllAccounts(config: GetAllAccountsConfig | undefined): Promise<AllAccountsEntry[]>;\n\n /**\n * Gets a block by its height.\n * \n * # Parameters\n * \n * * `block-height` - The block height to query.\n * * `config` - Optional configuration for transaction detail level\n * (\"full\", \"signatures\", or \"none\"). Defaults to \"full\".\n * \n * # Returns\n * \n * Block information including blockhash, timestamp, and transactions\n * (detail level depends on config).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the block is not found.\n */\n abstract getBlock(blockHeight: bigint, config: GetBlockConfig | undefined): Promise<BlockInfo>;\n\n /**\n * Gets a list of confirmed block heights in a range (inclusive).\n * \n * # Parameters\n * \n * * `start-height` - The start of the block height range.\n * * `end-height` - The end of the range. If absent, returns up to the\n * latest confirmed block.\n * \n * # Returns\n * \n * A list of confirmed block height numbers.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getBlocks(startHeight: bigint, endHeight: bigint | undefined): Promise<bigint[]>;\n\n /**\n * Gets detailed information about a stake account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the stake account.\n * \n * # Returns\n * \n * The stake account info (state, balances, authorities), or absent if\n * the account is not a valid stake account.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getStakeAccount(pubkey: PublicKey): Promise<StakeAccountInfo | undefined>;\n\n /**\n * Gets all registered validator accounts.\n * \n * # Parameters\n * \n * * `request` - Request parameters specifying whether to use the frozen\n * (last epoch) or pending (current) snapshot.\n * \n * # Returns\n * \n * A list of validator account info records.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getValidatorAccounts(request: GetValidatorAccountsRequest): Promise<ValidatorAccountInfo[]>;\n\n /**\n * Gets the token balance of an SPL Token account.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the SPL Token account.\n * \n * # Returns\n * \n * Token balance information including raw amount, decimals, and\n * human-readable amount string.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the account is not a valid\n * token account.\n */\n abstract getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance>;\n\n /**\n * Gets registered REX requests for a creator.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - Optional nonce to filter for a specific REX request.\n * If absent, returns all requests by the creator.\n * \n * # Returns\n * \n * A list of REX request records with their associated duties.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexRequests(creator: PublicKey, nonce: string | undefined): Promise<RexInfoAndDuties[]>;\n\n /**\n * Gets missed REX duty proposal rounds for a specific REX request.\n * \n * # Parameters\n * \n * * `creator` - The public key of the REX creator.\n * * `nonce` - The nonce identifying the specific REX request.\n * \n * # Returns\n * \n * A list of proposal round numbers where duties were missed.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getRexMissedDuties(creator: PublicKey, nonce: string): Promise<bigint[]>;\n\n /**\n * Gets information about all known cluster nodes.\n * \n * # Returns\n * \n * A list of cluster node info records including stake, addresses,\n * and public keys.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getClusterNodes(): Promise<ClusterNodeInfo[]>;\n\n /**\n * Gets the list of validator indices this node is connected to.\n * \n * # Returns\n * \n * A list of validator indices (u32).\n * \n * # Errors\n * \n * Returns an error if the RPC call fails.\n */\n abstract getConnectedValidators(): Promise<number[]>;\n\n /**\n * Submits a signed transaction to the network.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional send options (skip preflight, max retries).\n * If absent, default options are used.\n * \n * # Returns\n * \n * The transaction signature, which can be used to check its status.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the transaction is rejected.\n */\n abstract sendTransaction(transaction: Uint8Array, options: SendTransactionOptions | undefined): Promise<Signature>;\n\n /**\n * Requests an airdrop of tokens to the specified account.\n * \n * This method is typically only available on test networks (localnet, devnet).\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * The transaction signature of the airdrop transaction.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or airdrops are not supported.\n */\n abstract requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature>;\n\n /**\n * Polls until a transaction is confirmed or times out.\n * \n * This is a CDK compound method (not a single RPC call). It repeatedly\n * calls getSignatureStatuses until the transaction is confirmed or the\n * retry limit is reached.\n * \n * # Parameters\n * \n * * `sig` - The transaction signature (base58) to monitor.\n * * `options` - Optional confirmation options (max retries, retry delay).\n * Defaults: 30 retries, 1000ms delay.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if the transaction fails or confirmation times out.\n */\n abstract confirmTransaction(sig: string, options: ConfirmTransactionOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Sends a transaction and waits for confirmation.\n * \n * This is a CDK compound method that combines send-transaction and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `transaction` - The serialized, signed transaction as a byte array.\n * * `options` - Optional combined send-and-confirm options.\n * \n * # Returns\n * \n * A confirmed transaction record with signature, executed status, and error.\n * \n * # Errors\n * \n * Returns an error if sending fails, the transaction is rejected,\n * or confirmation times out.\n */\n abstract sendAndConfirmTransaction(transaction: Uint8Array, options: SendAndConfirmOptions | undefined): Promise<ConfirmedTransaction>;\n\n /**\n * Requests an airdrop and waits for confirmation.\n * \n * This is a CDK compound method that combines request-airdrop and\n * confirm-transaction into a single call.\n * \n * # Parameters\n * \n * * `pubkey` - The public key of the recipient account.\n * * `amount` - The amount of kelvins to airdrop.\n * \n * # Returns\n * \n * A confirmed transaction record for the airdrop.\n * \n * # Errors\n * \n * Returns an error if the airdrop fails or confirmation times out.\n */\n abstract requestAirdropAndConfirm(pubkey: PublicKey, amount: Kelvin): Promise<ConfirmedTransaction>;\n\n /**\n * Submits an epoch change transaction (admin-only).\n * \n * This is a restricted admin method used for epoch management.\n * Only available to authorized admin accounts.\n * \n * # Parameters\n * \n * * `request` - The epoch change request containing serialized data.\n * \n * # Returns\n * \n * A response indicating whether the submission was accepted.\n * \n * # Errors\n * \n * Returns an error if the RPC call fails or the sender is not authorized.\n */\n abstract sendAdminTransaction(request: SubmitEpochChangeRequest): Promise<SubmitEpochChangeResponse>;\n\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey } from \"../../crypto\";\nimport type {\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConnectedNode,\n\tEpochInfo,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubscription,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport { BaseRpcClient } from \"./base-client\";\n\n/**\n * Filter for what kind of accounts to return from getAccountsByOwner.\n * Uses the serde-compatible discriminated union format expected by the RPC.\n */\nexport type AccountFilterParam =\n\t| { type: \"programAccounts\" }\n\t| { type: \"tokenAccounts\"; mint?: string };\n\n/**\n * Client for querying blockchain state.\n *\n * Handles all read-only operations like getting balances, account info, etc.\n */\nexport class QueryRpcClient extends BaseRpcClient {\n\t/**\n\t * Retrieve the balance of an account in kelvins (smallest unit).\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns The account balance in kelvins\n\t *\n\t * @example\n\t * ```typescript\n\t * const balance = await client.getBalance(publicKey);\n\t * console.log(`Balance: ${balance} kelvins`);\n\t * ```\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<bigint> {\n\t\tconst result = await this.call<{ value: number }>(\"getBalance\", [\n\t\t\t{ address: pubkey.toString() },\n\t\t]);\n\t\treturn BigInt(result.value);\n\t}\n\n\t/**\n\t * Retrieve detailed information about an account.\n\t *\n\t * Returns account data including balance, owner program, stored data,\n\t * executable status, and rent epoch.\n\t *\n\t * @param pubkey - The public key of the account to query\n\t * @returns Account information, or null if the account does not exist\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getAccountInfo(publicKey);\n\t * if (info) {\n\t * console.log(`Owner: ${info.owner}`);\n\t * console.log(`Balance: ${info.balance} kelvins`);\n\t * console.log(`Data length: ${info.data.length} bytes`);\n\t * }\n\t * ```\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string]; // [encoded_data, encoding_type]\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null;\n\t\t}>(\"getAccountInfo\", [{ address: pubkey.toString() }]);\n\n\t\tif (!result.value) {\n\t\t\treturn null; // Account doesn't exist\n\t\t}\n\n\t\treturn {\n\t\t\tkelvin: BigInt(result.value.kelvin),\n\t\t\towner: PublicKey.fromString(result.value.owner),\n\t\t\tdata: result.value.data,\n\t\t\texecutable: result.value.executable,\n\t\t\trentEpoch: BigInt(result.value.rentEpoch),\n\t\t\tspace: BigInt(result.value.space ?? 0),\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve the current block height of the blockchain.\n\t *\n\t * The block height represents the number of blocks that have been\n\t * confirmed on the chain since genesis.\n\t *\n\t * @returns The current block height\n\t *\n\t * @example\n\t * ```typescript\n\t * const height = await client.getBlockHeight();\n\t * console.log(`Current block height: ${height}`);\n\t * ```\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getBlockHeight\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve transaction signatures for a given address.\n\t *\n\t * Returns transaction signatures with metadata associated with the specified\n\t * address, ordered by slot height (most recent first).\n\t *\n\t * @param address - The public key of the address to query\n\t * @param config - Optional configuration options for the query (limit, before, until)\n\t * @returns Response containing context and array of signature info with blockHeight and blockTime\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getSignaturesForAddress(publicKey, { limit: 10 });\n\t * console.log(`Query slot: ${result.context.slot}`);\n\t * result.value.forEach(sig => {\n\t * console.log(`Transaction: ${sig.signature}, block: ${sig.blockHeight}`);\n\t * });\n\t * ```\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig?: GetSignaturesForAddressConfig,\n\t): Promise<SignatureInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: {\n\t\t\t\tslot: number;\n\t\t\t\tapi_version: string;\n\t\t\t};\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getSignaturesForAddress\", [\n\t\t\t{ address: address.toString(), config: config ?? {} },\n\t\t]);\n\t\treturn result.value.map((signature) => ({\n\t\t\tsignature: signature.signature,\n\t\t\tblockHeight: BigInt(signature.blockHeight),\n\t\t\tblockTime: BigInt(signature.blockTime),\n\t\t\terr: signature.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the total number of transactions processed since genesis.\n\t *\n\t * @returns The total transaction count\n\t *\n\t * @example\n\t * ```typescript\n\t * const count = await client.getTransactionCount();\n\t * console.log(`Total transactions: ${count}`);\n\t * ```\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\tconst result = await this.call<number>(\"getTransactionCount\", []);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Retrieve the status of multiple transaction signatures in a single request.\n\t *\n\t * Useful for batch-checking transaction confirmations. Returns null for\n\t * signatures that are not found or have expired from the status cache.\n\t *\n\t * @param signatures - Array of transaction signatures to query\n\t * @returns Array of signature statuses (null if signature not found)\n\t *\n\t * @example\n\t * ```typescript\n\t * const statuses = await client.getSignatureStatuses([sig1, sig2, sig3]);\n\t * statuses.forEach((status, i) => {\n\t * if (status) {\n\t * console.log(`${signatures[i]}: slot ${status.slot}, executed: ${status.executed}`);\n\t * } else {\n\t * console.log(`${signatures[i]}: not found`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: string[],\n\t): Promise<(SignatureStatus | null)[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tslot: number;\n\t\t\t\texecuted: boolean;\n\t\t\t\terr?: string;\n\t\t\t} | null>;\n\t\t}>(\"getSignatureStatuses\", [{ signatures }]);\n\n\t\treturn result.value.map((status) => {\n\t\t\tif (!status) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tslot: BigInt(status.slot),\n\t\t\t\texecuted: status.executed,\n\t\t\t\terr: status.err,\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Retrieve information about the current epoch.\n\t *\n\t * Returns epoch metadata including the current epoch number, slot position\n\t * within the epoch, total slots per epoch, and current block height.\n\t *\n\t * @returns Current epoch information\n\t *\n\t * @example\n\t * ```typescript\n\t * const info = await client.getEpochInfo();\n\t * console.log(`Epoch: ${info.epoch}`);\n\t * console.log(`Slot ${info.slotIndex} of ${info.slotsInEpoch}`);\n\t * console.log(`Block height: ${info.blockHeight}`);\n\t * ```\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\tconst result = await this.call<{\n\t\t\tepoch: number;\n\t\t\tslotIndex: number;\n\t\t\tslotsInEpoch: number;\n\t\t\tabsoluteSlot: number;\n\t\t\tblockHeight: number;\n\t\t\ttransactionCount?: number;\n\t\t}>(\"getEpochInfo\", []);\n\n\t\treturn {\n\t\t\tepoch: BigInt(result.epoch),\n\t\t\tslotIndex: BigInt(result.slotIndex),\n\t\t\tslotsInEpoch: BigInt(result.slotsInEpoch),\n\t\t\tabsoluteSlot: BigInt(result.absoluteSlot),\n\t\t\tblockHeight: BigInt(result.blockHeight),\n\t\t\ttransactionCount: result.transactionCount\n\t\t\t\t? BigInt(result.transactionCount)\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Check the health status of the RPC node.\n\t *\n\t * Returns \"ok\" if the node is healthy. If the node is unhealthy,\n\t * returns an error message describing the issue.\n\t *\n\t * @returns \"ok\" if healthy, otherwise an error message\n\t *\n\t * @example\n\t * ```typescript\n\t * const health = await client.getHealth();\n\t * if (health === \"ok\") {\n\t * console.log(\"Node is healthy\");\n\t * } else {\n\t * console.log(`Node unhealthy: ${health}`);\n\t * }\n\t * ```\n\t */\n\tasync getHealth(): Promise<\"ok\" | string> {\n\t\tconst result = await this.call<string>(\"getHealth\", []);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * Accounts with at least this balance are exempt from paying rent.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t *\n\t * @example\n\t * ```typescript\n\t * const minBalance = await client.getMinimumBalanceForRentExemption(128);\n\t * console.log(`Need at least ${minBalance} kelvins for 128 bytes`);\n\t * ```\n\t */\n\tasync getMinimumBalanceForRentExemption(\n\t\taccountDataSize: number,\n\t): Promise<bigint> {\n\t\tconst result = await this.call<number>(\n\t\t\t\"getMinimumBalanceForRentExemption\",\n\t\t\t[{ data_length: accountDataSize }],\n\t\t);\n\t\treturn BigInt(result);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee in kelvins, or null if message is invalid\n\t *\n\t * @example\n\t * ```typescript\n\t * const fee = await client.getFeeForMessage(base64Message);\n\t * if (fee !== null) {\n\t * console.log(`Fee: ${fee} kelvins`);\n\t * }\n\t * ```\n\t */\n\tasync getFeeForMessage(message: string): Promise<bigint | null> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: number | null;\n\t\t}>(\"getFeeForMessage\", [{ message }]);\n\t\treturn result.value !== null ? BigInt(result.value) : null;\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * Useful for batch operations and reducing RPC calls.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address (null for non-existent accounts)\n\t *\n\t * @example\n\t * ```typescript\n\t * const accounts = await client.getMultipleAccounts([pubkey1, pubkey2]);\n\t * accounts.value.forEach((account, i) => {\n\t * if (account) {\n\t * console.log(`Account ${i}: ${account.balance} kelvins`);\n\t * }\n\t * });\n\t * ```\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<Array<AccountInfo | null>> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: ({\n\t\t\t\tkelvin: number;\n\t\t\t\towner: string;\n\t\t\t\tdata: [string, string];\n\t\t\t\texecutable: boolean;\n\t\t\t\trentEpoch: number;\n\t\t\t\tspace: number;\n\t\t\t} | null)[];\n\t\t}>(\"getMultipleAccounts\", [\n\t\t\t{ addresses: pubkeys.map((p) => p.toString()) },\n\t\t]);\n\n\t\treturn result.value.map((account) => {\n\t\t\tif (account === null) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\tdata: account.data,\n\t\t\t\texecutable: account.executable,\n\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t};\n\t\t});\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * Essential for querying token accounts, program data, and more.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (ProgramAccounts or TokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Accounts owned by the specified owner with pagination info\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getAccountsByOwner(programId);\n\t * console.log(`Found ${result.value.length} accounts`);\n\t * result.value.forEach(({ pubkey, account }) => {\n\t * console.log(`${pubkey}: ${account.balance} kelvins`);\n\t * });\n\t * ```\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilterParam = { type: \"programAccounts\" },\n\t\tconfig?: GetAccountsByOwnerConfig,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number; api_version?: string };\n\t\t\tvalue: {\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}[];\n\t\t\tpagination?: { has_more: boolean; next_cursor?: string };\n\t\t}>(\"getAccountsByOwner\", [\n\t\t\t{\n\t\t\t\towner: owner.toString(),\n\t\t\t\tfilter,\n\t\t\t\tconfig: config\n\t\t\t\t\t? {\n\t\t\t\t\t\t\tlimit: config.limit,\n\t\t\t\t\t\t\tafter: config.after,\n\t\t\t\t\t\t}\n\t\t\t\t\t: undefined,\n\t\t\t},\n\t\t]);\n\n\t\tconst accounts: OwnerAccount[] = result.value.map(\n\t\t\t({ pubkey, account }) => ({\n\t\t\t\tpubkey: PublicKey.fromString(pubkey),\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: BigInt(account.kelvin),\n\t\t\t\t\towner: PublicKey.fromString(account.owner),\n\t\t\t\t\tdata: account.data,\n\t\t\t\t\texecutable: account.executable,\n\t\t\t\t\trentEpoch: BigInt(account.rentEpoch),\n\t\t\t\t\tspace: BigInt(account.space ?? 0),\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tconst pagination: PaginationInfo | undefined = result.pagination\n\t\t\t? {\n\t\t\t\t\thasMore: result.pagination.has_more,\n\t\t\t\t\tnextCursor: result.pagination.next_cursor,\n\t\t\t\t}\n\t\t\t: undefined;\n\t\treturn [accounts, pagination];\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * Returns the tree of transactions spawned from a root transaction\n\t * through subscriptions and triggers.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t *\n\t * @example\n\t * ```typescript\n\t * const lineage = await client.getWorkflowLineage({\n\t * signature: rootTxSignature,\n\t * maxDepth: 5,\n\t * });\n\t * console.log(`Found ${lineage.lineage.workflowNodes.length} nodes`);\n\t * ```\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\tconst result = await this.call<{\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: Array<{\n\t\t\t\t\tid: string;\n\t\t\t\t\tdepth: number;\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: number;\n\t\t\t\t\t\ttimestamp: number;\n\t\t\t\t\t\tsuccess: boolean;\n\t\t\t\t\t\tinstructionCount: number;\n\t\t\t\t\t\tinstructionProgramIds: string[];\n\t\t\t\t\t};\n\t\t\t\t\tsubscriptions: unknown[];\n\t\t\t\t\ttriggeredBy?: {\n\t\t\t\t\t\tevent: { topic: string; attributes: Record<string, unknown> };\n\t\t\t\t\t\tsubscriptionPubkey: string;\n\t\t\t\t\t\ttimestampRange?: { from: number; to: number };\n\t\t\t\t\t\teventAccount?: string;\n\t\t\t\t\t};\n\t\t\t\t\tworkflowChildren: string[];\n\t\t\t\t\thasMoreChildren: boolean;\n\t\t\t\t}>;\n\t\t\t};\n\t\t\tleaves: string[];\n\t\t\ttruncated: boolean;\n\t\t\ttruncationReason: string;\n\t\t\tcontinuationHints: string[];\n\t\t}>(\"getWorkflowLineage\", [\n\t\t\t{\n\t\t\t\tsignature: request.signature,\n\t\t\t\tmax_depth: request.maxDepth,\n\t\t\t\tinclude_events: request.includeEvents,\n\t\t\t},\n\t\t]);\n\n\t\treturn {\n\t\t\tlineage: {\n\t\t\t\tworkflowNodes: result.lineage.workflowNodes.map((node) => ({\n\t\t\t\t\tid: node.id,\n\t\t\t\t\tdepth: node.depth,\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tblockHeight: BigInt(node.data.blockHeight),\n\t\t\t\t\t\ttimestamp: BigInt(node.data.timestamp),\n\t\t\t\t\t\tsuccess: node.data.success,\n\t\t\t\t\t\tinstructionCount: node.data.instructionCount,\n\t\t\t\t\t\tinstructionProgramIds: node.data.instructionProgramIds,\n\t\t\t\t\t},\n\t\t\t\t\tsubscriptions: node.subscriptions as Subscription[],\n\t\t\t\t\ttriggeredBy: node.triggeredBy\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tevent: { topic: node.triggeredBy.event.topic },\n\t\t\t\t\t\t\t\tsubscriptionPubkey: node.triggeredBy.subscriptionPubkey,\n\t\t\t\t\t\t\t\ttimestampRange: node.triggeredBy.timestampRange\n\t\t\t\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t\t\t\tstart: BigInt(node.triggeredBy.timestampRange.from),\n\t\t\t\t\t\t\t\t\t\t\tend: BigInt(node.triggeredBy.timestampRange.to),\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t: undefined,\n\t\t\t\t\t\t\t\teventAccount: node.triggeredBy.eventAccount,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tworkflowChildren: node.workflowChildren,\n\t\t\t\t\thasMoreChildren: node.hasMoreChildren,\n\t\t\t\t})),\n\t\t\t},\n\t\t\tleaves: result.leaves,\n\t\t\ttruncated: result.truncated,\n\t\t\ttruncationReason: result.truncationReason as TruncationReason,\n\t\t\tcontinuationHints: result.continuationHints,\n\t\t};\n\t}\n\n\t/**\n\t * Get subscriptions for a given subscriber address.\n\t *\n\t * Returns subscriptions that will trigger transactions when matching events occur.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t *\n\t * @example\n\t * ```typescript\n\t * const subscription = await client.getSubscription(subscriberPubkey, \"my-nonce\");\n\t * console.log(`Topic: ${subscription.topic}, Kind: ${subscription.kind}`);\n\t * ```\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\tconst result = await this.call<{\n\t\t\tsubscription: {\n\t\t\t\tkind: string;\n\t\t\t\ttopic: string;\n\t\t\t\tinstructions: unknown[];\n\t\t\t\tsubscriber: string;\n\t\t\t\teventAccount?: string;\n\t\t\t\ttimestampRange?: [number, number];\n\t\t\t};\n\t\t}>(\"getSubscription\", [\n\t\t\t{\n\t\t\t\tsubscriber: subscriber.toString(),\n\t\t\t\tnonce,\n\t\t\t},\n\t\t]);\n\n\t\tconst sub = result.subscription;\n\t\treturn {\n\t\t\tkind: sub.kind as SubscriptionKind,\n\t\t\ttopic: sub.topic,\n\t\t\tinstructions: sub.instructions as SubscriptionInstruction[],\n\t\t\tsubscriber: sub.subscriber,\n\t\t\teventAccount: sub.eventAccount,\n\t\t\ttimestampRange: sub.timestampRange\n\t\t\t\t? [BigInt(sub.timestampRange[0]), BigInt(sub.timestampRange[1])]\n\t\t\t\t: undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * Returns the history of transactions that were automatically executed\n\t * in response to subscription matches.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.getTriggeredTransactions(subscriptionPubkey, 10);\n\t * result.transactions.forEach(tx => {\n\t * console.log(`Signature: ${tx.signature}, Block: ${tx.blockNumber}`);\n\t * });\n\t * ```\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit?: number,\n\t): Promise<TriggeredTransaction[]> {\n\t\t// This method uses raw array params (not object params) per Rust impl\n\t\tconst params: unknown[] = [subscriptionAccount.toString()];\n\t\tif (limit !== undefined) {\n\t\t\tparams.push(limit.toString());\n\t\t}\n\n\t\tconst result = await this.call<{\n\t\t\ttransactions: { signature: string; block_number: number }[];\n\t\t}>(\"getTriggeredTransactions\", params);\n\n\t\treturn result.transactions.map((tx) => ({\n\t\t\tsignature: tx.signature,\n\t\t\tblockNumber: BigInt(tx.block_number),\n\t\t}));\n\t}\n\n\t/**\n\t * Retrieve the REX X25519 public key for secret sharing encryption.\n\t *\n\t * This key is used for HPKE encryption when sending encrypted data\n\t * that should only be decryptable within the REX execution environment.\n\t *\n\t * @returns The REX X25519 public key as a 32-byte Uint8Array\n\t *\n\t * @example\n\t * ```typescript\n\t * import { encryptForREX } from \"@rialo/ts-cdk\";\n\t *\n\t * // Get the REX public key\n\t * const rexPubkey = await client.getSecretSharingPubkey();\n\t *\n\t * // Use it for HPKE encryption\n\t * const encrypted = await encryptForRex(\n\t * rexPubkey,\n\t * new TextEncoder().encode(\"secret data\"),\n\t * keypair.publicKey.toBytes()\n\t * );\n\t * ```\n\t */\n\tasync getSecretSharingPubkey(): Promise<Uint8Array> {\n\t\tconst result = await this.call<{ public_key: string }>(\n\t\t\t\"getSecretSharingPubkey\",\n\t\t\t[],\n\t\t);\n\n\t\t// Convert hex string to bytes\n\t\tconst hexString = result.public_key;\n\t\tconst bytes = new Uint8Array(hexString.length / 2);\n\t\tfor (let i = 0; i < bytes.length; i++) {\n\t\t\tbytes[i] = Number.parseInt(hexString.slice(i * 2, i * 2 + 2), 16);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t/**\n\t * Get the config hash prefix for replay protection.\n\t *\n\t * Returns the first 64 bits of the config hash, which is used\n\t * for transaction replay protection across chains.\n\t *\n\t * @returns The config hash prefix as a bigint\n\t *\n\t * @example\n\t * ```typescript\n\t * const configHashPrefix = await client.getConfigHashPrefix();\n\t * const tx = TransactionBuilder.create()\n\t * .setPayer(payer)\n\t * .setValidFrom(validFrom)\n\t * .setConfigHashPrefix(configHashPrefix)\n\t * .addInstruction(instruction)\n\t * .build();\n\t * ```\n\t */\n\tasync getConfigHashPrefix(): Promise<bigint> {\n\t\t// configHashPrefix is a u64 that can exceed Number.MAX_SAFE_INTEGER (2^53).\n\t\t// JSON.parse() silently rounds such values, so we parse the raw response\n\t\t// text to extract the exact digit string before converting to BigInt.\n\t\tconst body = JSON.stringify({\n\t\t\tjsonrpc: \"2.0\",\n\t\t\tid: 1,\n\t\t\tmethod: \"getRecentValidatorConfigHash\",\n\t\t\tparams: [{}],\n\t\t});\n\t\tconst response = await fetch(this.transport.getUrl(), {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody,\n\t\t});\n\t\tconst text = await response.text();\n\t\tconst match = text.match(/\"configHashPrefix\"\\s*:\\s*(\\d+)/);\n\t\tif (!match) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to parse configHashPrefix from RPC response: ${text}`,\n\t\t\t);\n\t\t}\n\t\treturn BigInt(match[1]);\n\t}\n\n\t/**\n\t * Retrieve the current block height with an optional minimum context slot.\n\t *\n\t * When minContextSlot is provided, the RPC will only return a result\n\t * if the node has processed at least that slot.\n\t *\n\t * @param minContextSlot - Minimum slot the node must have processed\n\t * @returns The current block height\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\tif (minContextSlot !== undefined) {\n\t\t\tconst result = await this.call<number>(\"getBlockHeight\", [\n\t\t\t\t{ min_context_slot: Number(minContextSlot) },\n\t\t\t]);\n\t\t\treturn BigInt(result);\n\t\t}\n\t\treturn await this.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieve full transaction details by signature.\n\t *\n\t * Returns the complete transaction including metadata (fee, errors, logs),\n\t * the transaction body (signatures, message, instructions), and block context.\n\t *\n\t * @param sig - Transaction signature (Uint8Array)\n\t * @returns Full transaction response with block height, metadata, and body\n\t */\n\tasync getTransactionDetails(sig: Signature): Promise<TransactionResponse> {\n\t\tconst sigStr = base58.encode(sig);\n\n\t\tconst result = await this.call<{\n\t\t\tblock_height: number | null;\n\t\t\tblock_time?: number | null;\n\t\t\tmeta: {\n\t\t\t\tfee: number;\n\t\t\t\terr?: string | null;\n\t\t\t\tlog_messages?: string[] | null;\n\t\t\t};\n\t\t\ttransaction: {\n\t\t\t\tsignatures: string[];\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnum_required_signatures: number;\n\t\t\t\t\t\tnum_readonly_signed_accounts: number;\n\t\t\t\t\t\tnum_readonly_unsigned_accounts: number;\n\t\t\t\t\t};\n\t\t\t\t\taccount_keys: string[];\n\t\t\t\t\tinstructions: Array<{\n\t\t\t\t\t\tprogram_id_index: number;\n\t\t\t\t\t\taccounts: number[];\n\t\t\t\t\t\tdata: string;\n\t\t\t\t\t}>;\n\t\t\t\t};\n\t\t\t\tvalid_from: number;\n\t\t\t};\n\t\t}>(\"getTransaction\", [{ signature: sigStr }]);\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\tblockTime:\n\t\t\t\tresult.block_time != null ? BigInt(result.block_time) : undefined,\n\t\t\tmeta: {\n\t\t\t\tfee: BigInt(result.meta.fee),\n\t\t\t\terr: result.meta.err ?? undefined,\n\t\t\t\tlogMessages: result.meta.log_messages ?? undefined,\n\t\t\t},\n\t\t\ttransaction: {\n\t\t\t\tsignatures: result.transaction.signatures.map(\n\t\t\t\t\t(s) => base58.decode(s) as Signature,\n\t\t\t\t),\n\t\t\t\tmessage: {\n\t\t\t\t\theader: {\n\t\t\t\t\t\tnumRequiredSignatures:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_required_signatures,\n\t\t\t\t\t\tnumReadonlySignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_signed_accounts,\n\t\t\t\t\t\tnumReadonlyUnsignedAccounts:\n\t\t\t\t\t\t\tresult.transaction.message.header.num_readonly_unsigned_accounts,\n\t\t\t\t\t},\n\t\t\t\t\taccountKeys: result.transaction.message.account_keys.map((k) =>\n\t\t\t\t\t\tPublicKey.fromString(k),\n\t\t\t\t\t),\n\t\t\t\t\tinstructions: result.transaction.message.instructions.map((ix) => ({\n\t\t\t\t\t\tprogramIdIndex: ix.program_id_index,\n\t\t\t\t\t\taccounts: new Uint8Array(ix.accounts),\n\t\t\t\t\t\tdata: ix.data,\n\t\t\t\t\t})),\n\t\t\t\t},\n\t\t\t\tvalidFrom: BigInt(result.transaction.valid_from),\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Retrieve a paginated list of recent transactions.\n\t *\n\t * @param config - Optional pagination config (limit, before cursor)\n\t * @returns Array of transaction summaries with signature, slot, time, and error status\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\tconst params: Record<string, unknown> = {};\n\t\tif (config) {\n\t\t\tif (config.limit !== undefined) params.limit = config.limit;\n\t\t\tif (config.before !== undefined) params.before = config.before;\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tsignature: string;\n\t\t\t\tslot: number;\n\t\t\t\tblockTime?: number;\n\t\t\t\terr?: string;\n\t\t\t}>;\n\t\t}>(\"getTransactions\", [\n\t\t\t{ config: Object.keys(params).length > 0 ? params : undefined },\n\t\t]);\n\n\t\treturn result.value.map((t) => ({\n\t\t\tsignature: t.signature,\n\t\t\tslot: BigInt(t.slot),\n\t\t\tblockTime: t.blockTime !== undefined ? BigInt(t.blockTime) : undefined,\n\t\t\terr: t.err,\n\t\t}));\n\t}\n\n\t/**\n\t * Check whether a blockhash is still valid for transaction submission.\n\t *\n\t * @param blockhash - The blockhash to check (Uint8Array)\n\t * @returns Slot context and validity boolean\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst hashStr = base58.encode(blockhash);\n\t\tconst result = await this.call<{\n\t\t\tcontext: { slot: number };\n\t\t\tvalue: boolean;\n\t\t}>(\"isBlockhashValid\", [{ blockhash: hashStr }]);\n\n\t\treturn {\n\t\t\tslot: BigInt(result.context.slot),\n\t\t\tisValid: result.value,\n\t\t};\n\t}\n\n\t/**\n\t * Get the health status of the validator node.\n\t *\n\t * @returns Validator health details\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.call<ValidatorHealth>(\"getValidatorHealth\", [{}]);\n\t}\n\n\t/**\n\t * Get the list of full nodes connected to the validator or full node.\n\t *\n\t * @returns Array of connected nodes with their public key and connection duration\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\tconst result = await this.call<Array<[string, number]>>(\n\t\t\t\"getConnectedFullNodes\",\n\t\t\t[{}],\n\t\t);\n\t\treturn result.map(([publicKey, connectedMs]) => ({\n\t\t\tpublicKey,\n\t\t\tconnectedMs: BigInt(connectedMs),\n\t\t}));\n\t}\n\n\t/**\n\t * Get all accounts in the system.\n\t *\n\t * @param config - Optional filtering/pagination config\n\t * @returns Array of all account entries with pubkey and account data\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tpubkey: string;\n\t\t\t\taccount: {\n\t\t\t\t\tkelvin: number;\n\t\t\t\t\towner: string;\n\t\t\t\t\tdata: [string, string];\n\t\t\t\t\texecutable: boolean;\n\t\t\t\t\trentEpoch: number;\n\t\t\t\t\tspace: number;\n\t\t\t\t};\n\t\t\t}>;\n\t\t}>(\"getAllAccounts\", [{ config: config ?? undefined }]);\n\n\t\treturn result.value.map((entry) => ({\n\t\t\tpubkey: entry.pubkey,\n\t\t\taccount: {\n\t\t\t\tkelvin: BigInt(entry.account.kelvin),\n\t\t\t\towner: PublicKey.fromString(entry.account.owner),\n\t\t\t\tdata: entry.account.data,\n\t\t\t\texecutable: entry.account.executable,\n\t\t\t\trentEpoch: BigInt(entry.account.rentEpoch),\n\t\t\t\tspace: BigInt(entry.account.space ?? 0),\n\t\t\t},\n\t\t}));\n\t}\n\n\t/**\n\t * Get a block by its height.\n\t *\n\t * @param blockHeight - The height of the block to retrieve\n\t * @param config - Optional config to control transaction detail level\n\t * @returns Block info including hash, height, time, and optional signatures\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\tconst params: Record<string, unknown> = {\n\t\t\tblock_height: Number(blockHeight),\n\t\t};\n\t\tif (config?.transactionDetails) {\n\t\t\tparams.config = { transaction_details: config.transactionDetails };\n\t\t}\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tblockhash: string;\n\t\t\t\tblockHeight: number;\n\t\t\t\tblockTime: number;\n\t\t\t\ttransactions?: unknown[];\n\t\t\t\tsignatures?: string[];\n\t\t\t};\n\t\t\tblockhash?: string;\n\t\t\tblockHeight?: number;\n\t\t\tblockTime?: number;\n\t\t\ttransactions?: unknown[];\n\t\t\tsignatures?: string[];\n\t\t}>(\"getBlock\", [params]);\n\n\t\tconst block = result.value ?? result;\n\t\treturn {\n\t\t\tblockhash: (block.blockhash as string) ?? \"\",\n\t\t\tblockHeight: BigInt((block.blockHeight as number) ?? 0),\n\t\t\tblockTime: BigInt((block.blockTime as number) ?? 0),\n\t\t\tsignatures: block.signatures as string[] | undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Get a list of confirmed block heights in a range.\n\t *\n\t * @param startHeight - Start of the range (inclusive)\n\t * @param endHeight - End of the range (inclusive), or undefined for open-ended\n\t * @returns Array of confirmed block heights\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<number[]>(\"getBlocks\", [\n\t\t\t{\n\t\t\t\tstart_slot: Number(startHeight),\n\t\t\t\tend_slot: endHeight !== undefined ? Number(endHeight) : undefined,\n\t\t\t},\n\t\t]);\n\t\treturn result.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get detailed information about a stake account.\n\t *\n\t * @param pubkey - The public key of the stake account\n\t * @returns Stake account info, or undefined if the account doesn't exist\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\tconst result = await this.call<{\n\t\t\tvalue?: {\n\t\t\t\tstate: string;\n\t\t\t\tkelvins: number;\n\t\t\t\tdelegated_balance: number;\n\t\t\t\tundelegated_balance: number;\n\t\t\t\tactivation_requested?: number;\n\t\t\t\tdeactivation_requested?: number;\n\t\t\t\tvalidator?: string;\n\t\t\t\tadmin_authority: string;\n\t\t\t\twithdraw_authority: string;\n\t\t\t};\n\t\t}>(\"getStakeAccount\", [{ pubkey: pubkey.toString() }]);\n\n\t\tif (!result.value) return undefined;\n\t\tconst s = result.value;\n\t\treturn {\n\t\t\tstate: s.state as StakeAccountInfo[\"state\"],\n\t\t\tkelvins: BigInt(s.kelvins),\n\t\t\tdelegatedBalance: BigInt(s.delegated_balance),\n\t\t\tundelegatedBalance: BigInt(s.undelegated_balance),\n\t\t\tactivationRequested:\n\t\t\t\ts.activation_requested !== undefined\n\t\t\t\t\t? BigInt(s.activation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tdeactivationRequested:\n\t\t\t\ts.deactivation_requested !== undefined\n\t\t\t\t\t? BigInt(s.deactivation_requested)\n\t\t\t\t\t: undefined,\n\t\t\tvalidator: s.validator,\n\t\t\tadminAuthority: s.admin_authority,\n\t\t\twithdrawAuthority: s.withdraw_authority,\n\t\t};\n\t}\n\n\t/**\n\t * Get all registered validator accounts.\n\t *\n\t * @param request - Request config (e.g. whether to use frozen state)\n\t * @returns Array of validator account info\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: Array<{\n\t\t\t\tcommission: number;\n\t\t\t\tpubkey: string;\n\t\t\t\tsigning_key: string;\n\t\t\t\twithdrawal_key: string;\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\tstate_sync_address: string;\n\t\t\t}>;\n\t\t}>(\"getValidatorAccounts\", [{ use_frozen: request.useFrozen }]);\n\n\t\treturn result.value.map((v) => ({\n\t\t\tcommission: BigInt(v.commission),\n\t\t\tpubkey: v.pubkey,\n\t\t\tsigningKey: v.signing_key,\n\t\t\twithdrawalKey: v.withdrawal_key,\n\t\t\tstake: BigInt(v.stake),\n\t\t\taddress: v.address,\n\t\t\tstateSyncAddress: v.state_sync_address,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the token balance of an SPL Token account.\n\t *\n\t * @param pubkey - The public key of the token account\n\t * @returns Token balance with amount, decimals, and UI-formatted string\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\tconst result = await this.call<{\n\t\t\tvalue: {\n\t\t\t\tamount: string;\n\t\t\t\tdecimals: number;\n\t\t\t\tuiAmountString: string;\n\t\t\t};\n\t\t}>(\"getTokenAccountBalance\", [{ address: pubkey.toString() }]);\n\n\t\treturn {\n\t\t\tamount: result.value.amount,\n\t\t\tdecimals: result.value.decimals,\n\t\t\tuiAmountString: result.value.uiAmountString,\n\t\t};\n\t}\n\n\t/**\n\t * Get registered REX requests for a creator.\n\t *\n\t * REX (Remote EXecution) requests are scheduled jobs that validators\n\t * execute on behalf of a creator.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - Optional nonce to filter a specific request\n\t * @returns Array of REX request info with their assigned duties\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\tconst result = await this.call<{\n\t\t\trex_requests: Array<{\n\t\t\t\tcreator: string;\n\t\t\t\tnonce: string;\n\t\t\t\tis_active: boolean;\n\t\t\t\tdescription: string;\n\t\t\t\tupdate_frequency: string;\n\t\t\t\tstarting_timestamp: string;\n\t\t\t\tcreated_at: string;\n\t\t\t\tvalidators_per_duty: number;\n\t\t\t\trex_request_delay_ms: number;\n\t\t\t\tcompute_units_limit?: number;\n\t\t\t\theap_size_limit?: number;\n\t\t\t\tduties: Array<{\n\t\t\t\t\ttarget_timestamp: string;\n\t\t\t\t\tassigned_validators: string[];\n\t\t\t\t}>;\n\t\t\t}>;\n\t\t}>(\"getRexRequests\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.rex_requests.map((r) => ({\n\t\t\tcreator: r.creator,\n\t\t\tnonce: r.nonce,\n\t\t\tisActive: r.is_active,\n\t\t\tdescription: r.description,\n\t\t\tupdateFrequency: r.update_frequency,\n\t\t\tstartingTimestamp: r.starting_timestamp,\n\t\t\tcreatedAt: r.created_at,\n\t\t\tvalidatorsPerDuty: r.validators_per_duty,\n\t\t\trexRequestDelayMs: BigInt(r.rex_request_delay_ms),\n\t\t\tcomputeUnitsLimit: r.compute_units_limit,\n\t\t\theapSizeLimit: r.heap_size_limit,\n\t\t\tduties: r.duties.map((d) => ({\n\t\t\t\ttargetTimestamp: d.target_timestamp,\n\t\t\t\tassignedValidators: d.assigned_validators,\n\t\t\t})),\n\t\t}));\n\t}\n\n\t/**\n\t * Get missed REX duty proposal rounds for a specific REX request.\n\t *\n\t * @param creator - The creator's public key\n\t * @param nonce - The nonce identifying the REX request\n\t * @returns Array of proposal round numbers where duties were missed\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\tconst result = await this.call<{\n\t\t\tmissed_duties_at_proposal_rounds: number[];\n\t\t}>(\"getRexMissedDuties\", [{ creator: creator.toString(), nonce }]);\n\n\t\treturn result.missed_duties_at_proposal_rounds.map((n) => BigInt(n));\n\t}\n\n\t/**\n\t * Get information about all known cluster nodes.\n\t *\n\t * @returns Array of cluster node info with stake, addresses, and keys\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\tconst result = await this.call<{\n\t\t\tnodes: Array<{\n\t\t\t\tstake: number;\n\t\t\t\taddress: string;\n\t\t\t\thostname: string;\n\t\t\t\tauthority_pubkey: string;\n\t\t\t\tprotocol_pubkey: string;\n\t\t\t\tnetwork_pubkey: string;\n\t\t\t\tlast_committed_round?: number;\n\t\t\t}>;\n\t\t}>(\"getClusterNodes\", [null]);\n\n\t\treturn result.nodes.map((n) => ({\n\t\t\tstake: BigInt(n.stake),\n\t\t\taddress: n.address,\n\t\t\thostname: n.hostname,\n\t\t\tauthorityPubkey: n.authority_pubkey,\n\t\t\tprotocolPubkey: n.protocol_pubkey,\n\t\t\tnetworkPubkey: n.network_pubkey,\n\t\t\tlastCommittedRound: n.last_committed_round,\n\t\t}));\n\t}\n\n\t/**\n\t * Get the list of validator indices this node is connected to.\n\t *\n\t * @returns Array of validator indices\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.call<number[]>(\"getConnectedValidators\", [{}]);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tURL_DEVNET,\n\tURL_LOCALNET,\n\tURL_MAINNET,\n\tURL_TESTNET,\n} from \"./constants\";\n\n/**\n * Converts bytes to base64 string.\n *\n * Works in both browser and Node.js environments.\n */\nexport function toBase64(bytes: Uint8Array): string {\n\t// Browser environment\n\tif (typeof btoa !== \"undefined\") {\n\t\t// For large arrays, chunk to avoid call stack size exceeded\n\t\tconst chunkSize = 8192;\n\t\tlet result = \"\";\n\n\t\tfor (let i = 0; i < bytes.length; i += chunkSize) {\n\t\t\tconst chunk = bytes.slice(i, i + chunkSize);\n\t\t\tresult += String.fromCharCode(...chunk);\n\t\t}\n\n\t\treturn btoa(result);\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn Buffer.from(bytes).toString(\"base64\");\n\t}\n\n\tthrow new Error(\"No base64 encoding available in this environment\");\n}\n\n/**\n * Converts base64 string to bytes.\n *\n * Works in both browser and Node.js environments.\n */\nexport function fromBase64(base64: string): Uint8Array {\n\t// Browser environment\n\tif (typeof atob !== \"undefined\") {\n\t\tconst binary = atob(base64);\n\t\tconst bytes = new Uint8Array(binary.length);\n\t\tfor (let i = 0; i < binary.length; i++) {\n\t\t\tbytes[i] = binary.charCodeAt(i);\n\t\t}\n\t\treturn bytes;\n\t}\n\n\t// Node.js environment\n\tif (typeof Buffer !== \"undefined\") {\n\t\treturn new Uint8Array(Buffer.from(base64, \"base64\"));\n\t}\n\n\tthrow new Error(\"No base64 decoding available in this environment\");\n}\n\n/**\n * Sleeps for the specified duration.\n *\n * @param ms - Milliseconds to sleep\n */\nexport function sleep(ms: number): Promise<void> {\n\treturn new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * Calculates exponential backoff delay with jitter.\n *\n * @param attempt - Current retry attempt (0-indexed)\n * @param baseMs - Base delay in milliseconds\n * @param maxMs - Maximum delay in milliseconds\n * @returns Calculated delay with 30% random jitter\n */\nexport function calculateBackoff(\n\tattempt: number,\n\tbaseMs = 1000,\n\tmaxMs = 30000,\n): number {\n\tconst exponentialDelay = baseMs * 2 ** attempt;\n\tconst jitter = Math.random() * 0.3 * exponentialDelay; // 30% jitter\n\treturn Math.min(exponentialDelay + jitter, maxMs);\n}\n\n/**\n * Returns the devnet RPC URL.\n */\nexport function getDevnetUrl(): string {\n\treturn URL_DEVNET;\n}\n\n/**\n * Returns the testnet RPC URL.\n */\nexport function getTestnetUrl(): string {\n\treturn URL_TESTNET;\n}\n\n/**\n * Returns the mainnet RPC URL.\n */\nexport function getMainnetUrl(): string {\n\treturn URL_MAINNET;\n}\n\n/**\n * Returns the localnet RPC URL.\n */\nexport function getLocalnetUrl(): string {\n\treturn URL_LOCALNET;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Query client for read-only RPC operations.\n */\n\nimport type { PublicKey } from \"../../crypto\";\nimport type {\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n} from \"../../generated/types\";\nimport { toBase64 } from \"../../utils\";\nimport { RpcError, RpcErrorCode } from \"../errors\";\nimport { BaseRpcClient } from \"./base-client\";\n\ninterface TransactionPollResult {\n\tblockHeight: bigint;\n\terr?: string;\n}\n\nconst DEFAULT_MAX_RETRIES = 10;\nconst DEFAULT_RETRY_DELAY_MS = 200;\n\n/**\n * Client for sending/simulating transactions and requesting airdrops.\n *\n * Handles all transaction operations like sending transactions, requesting airdrops, etc.\n */\nexport class TransactionRpcClient extends BaseRpcClient {\n\t/**\n\t * Submit a signed transaction to the blockchain.\n\t *\n\t * Sends the transaction to the network for processing. The transaction\n\t * must be fully signed before submission. Returns immediately with the\n\t * transaction signature - use {@link confirmTransaction} or\n\t * {@link sendAndConfirmTransaction} to wait for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature (base58 encoded)\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.sendTransaction(signedTx);\n\t * console.log(`Submitted: ${signature}`);\n\t *\n\t * // With options\n\t * const signature = await client.sendTransaction(signedTx, {\n\t * skipPreflight: true,\n\t * maxRetries: 3,\n\t * });\n\t * ```\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<string> {\n\t\tconst base64Tx = toBase64(transaction);\n\n\t\tconst config = {\n\t\t\tencoding: \"base64\",\n\t\t\tskipPreflight: options?.skipPreflight ?? false,\n\t\t\tmaxRetries: options?.maxRetries ?? 5,\n\t\t};\n\n\t\tconst signature = await this.call<string>(\"sendTransaction\", [\n\t\t\tbase64Tx,\n\t\t\tconfig,\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Wait for a transaction to be confirmed.\n\t *\n\t * A transaction is considered confirmed when:\n\t * - It has been processed in a block (`blockHeight > 0`)\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t */\n\tasync confirmTransaction(\n\t\tsignature: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst maxRetries = options?.maxRetries ?? DEFAULT_MAX_RETRIES;\n\t\tconst retryDelayMs = options?.retryDelayMs ?? DEFAULT_RETRY_DELAY_MS;\n\n\t\t// Poll using getSignatureStatuses which is fast\n\t\tfor (let attempt = 0; attempt < maxRetries; attempt++) {\n\t\t\t// Wait before checking\n\t\t\tif (attempt > 0) {\n\t\t\t\tawait this.sleep(retryDelayMs);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst txInfo = await this.getTransaction(signature);\n\t\t\t\tif (!txInfo) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif (txInfo.err) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: false,\n\t\t\t\t\t\terr: txInfo.err,\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Transaction executed - fully confirmed\n\t\t\t\tif (txInfo.blockHeight && txInfo.blockHeight > 0n) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\texecuted: true,\n\t\t\t\t\t\terr: undefined,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\t// Re-throw transaction failures immediately\n\t\t\t\tif (\n\t\t\t\t\terror instanceof RpcError &&\n\t\t\t\t\terror.code === RpcErrorCode.TRANSACTION_REJECTED\n\t\t\t\t) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthrow new RpcError(\n\t\t\tRpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT,\n\t\t\t\"Transaction confirmation timed out\",\n\t\t\t{\n\t\t\t\tsignature,\n\t\t\t\tmaxRetries,\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Submit a signed transaction and wait for confirmation.\n\t *\n\t * Polls the transaction status until it is confirmed (blockHeight > 0),\n\t * or until the maximum number of retries is reached.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in block ${result.blockHeight}, executed: ${result.executed}`);\n\t *\n\t * // With custom retry settings\n\t * const result = await client.sendAndConfirmTransaction(signedTx, {\n\t * maxRetries: 3,\n\t * confirmMaxRetries: 10,\n\t * confirmRetryDelayMs: 500,\n\t * });\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.sendTransaction(transaction, {\n\t\t\tskipPreflight: options?.skipPreflight,\n\t\t\tmaxRetries: options?.maxRetries,\n\t\t});\n\t\treturn await this.confirmTransaction(signature, {\n\t\t\tmaxRetries: options?.confirmMaxRetries,\n\t\t\tretryDelayMs: options?.confirmRetryDelayMs,\n\t\t});\n\t}\n\n\t/**\n\t * Request an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Returns immediately with the airdrop transaction signature.\n\t * Use {@link requestAirdropAndConfirm} to wait for the airdrop to complete.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @returns Airdrop transaction signature\n\t *\n\t * @example\n\t * ```typescript\n\t * const signature = await client.requestAirdrop(publicKey, 1_000_000_000n);\n\t * console.log(`Airdrop requested: ${signature}`);\n\t * ```\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: bigint): Promise<string> {\n\t\tif (amount > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_PARAMS,\n\t\t\t\t`Airdrop amount ${amount} exceeds maximum safe value`,\n\t\t\t);\n\t\t}\n\t\tconst signature = await this.call<string>(\"requestAirdrop\", [\n\t\t\t{\n\t\t\t\tpubkey: pubkey.toString(),\n\t\t\t\tkelvins: Number(amount),\n\t\t\t},\n\t\t]);\n\t\treturn signature;\n\t}\n\n\t/**\n\t * Request an airdrop of tokens and wait for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet networks.\n\t *\n\t * Combines {@link requestAirdrop} and {@link confirmTransaction} into\n\t * a single call for convenience.\n\t *\n\t * @param pubkey - The public key of the account to receive tokens\n\t * @param amount - Amount to airdrop in kelvins (smallest unit)\n\t * @param options - Confirmation options (max retries, retry delay)\n\t * @returns Confirmed transaction details\n\t * @throws {RpcError} If the airdrop transaction fails or confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.requestAirdropAndConfirm(publicKey, 1_000_000_000n);\n\t * if (result.executed) {\n\t * console.log(\"Airdrop confirmed!\");\n\t * }\n\t * ```\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: bigint,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\tconst signature = await this.requestAirdrop(pubkey, amount);\n\t\treturn await this.confirmTransaction(signature, options);\n\t}\n\n\t/**\n\t * Submit an epoch change transaction (admin-only).\n\t *\n\t * @param request - The epoch change request payload\n\t * @returns Response from the epoch change submission\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.call<SubmitEpochChangeResponse>(\"submitEpochChange\", [\n\t\t\trequest,\n\t\t]);\n\t}\n\n\tprivate async getTransaction(\n\t\tsignature: string,\n\t): Promise<TransactionPollResult | null> {\n\t\tconst result = await this.call<{\n\t\t\tslot: number;\n\t\t\tblock_height?: number;\n\t\t\terr?: string;\n\t\t\tmeta: {\n\t\t\t\terr?: string;\n\t\t\t};\n\t\t} | null>(\"getTransaction\", [{ signature }]);\n\n\t\tif (!result) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tblockHeight: BigInt(result.block_height ?? 0),\n\t\t\terr: result.err ?? result.meta?.err ?? undefined,\n\t\t};\n\t}\n\n\t/**\n\t * Sleeps for a given number of milliseconds.\n\t * @param ms - The number of milliseconds to sleep.\n\t * @returns A promise that resolves when the sleep is complete.\n\t */\n\tprivate sleep(ms: number): Promise<void> {\n\t\treturn new Promise((resolve) => setTimeout(resolve, ms));\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Main Rialo RPC client for blockchain interactions.\n */\nimport type { PublicKey } from \"../../crypto\";\nimport { RpcClient } from \"../../generated/rpc-client\";\nimport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochInfo,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tHash,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignature,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tTokenBalance,\n\tTransactionInfo,\n\tTransactionResponse,\n\tTriggeredTransaction,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n} from \"../../generated/types\";\nimport type { HttpTransport } from \"../http-transport\";\nimport type { ChainDefinition, IdentifierString } from \"./config\";\nimport type { AccountFilterParam } from \"./query-client\";\nimport { QueryRpcClient } from \"./query-client\";\nimport { TransactionRpcClient } from \"./transaction-client\";\n\n/**\n * High-level Rialo RPC client for blockchain interactions.\n *\n * Provides a unified interface for querying blockchain state and\n * sending transactions. Internally delegates to specialized clients\n * (QueryRpcClient, TransactionRpcClient) for modular organization.\n *\n * @example\n * ```typescript\n * import { createRialoClient, RIALO_DEVNET_CHAIN } from '@rialo/ts-cdk';\n *\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // Query operations\n * const balance = await client.getBalance(publicKey);\n * const chainId = client.getChainIdentifier();\n *\n * // Transaction operations\n * const signature = await client.sendTransaction(signedTx);\n * ```\n */\nexport class RialoClient extends RpcClient {\n\tprivate readonly queryClient: QueryRpcClient;\n\tprivate readonly transactionClient: TransactionRpcClient;\n\tprivate readonly transport: HttpTransport;\n\tprivate readonly chain: ChainDefinition;\n\n\tconstructor(transport: HttpTransport, chain: ChainDefinition) {\n\t\tsuper();\n\t\tthis.chain = chain;\n\t\tthis.transport = transport;\n\t\tthis.queryClient = new QueryRpcClient(transport);\n\t\tthis.transactionClient = new TransactionRpcClient(transport);\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.transport.getUrl();\n\t}\n\n\t/**\n\t * Returns the chain identifier.\n\t */\n\tgetChainIdentifier(): IdentifierString {\n\t\treturn this.chain.id;\n\t}\n\n\t/**\n\t * Returns the chain configuration.\n\t */\n\tgetChainConfig(): ChainDefinition {\n\t\treturn this.chain;\n\t}\n\n\t/**\n\t * Retrieves the balance of an account in kelvins (smallest unit).\n\t */\n\tasync getBalance(pubkey: PublicKey): Promise<Kelvin> {\n\t\treturn await this.queryClient.getBalance(pubkey);\n\t}\n\n\t/**\n\t * Retrieves detailed information about an account.\n\t *\n\t * @returns Account info or null if account doesn't exist\n\t */\n\tasync getAccountInfo(pubkey: PublicKey): Promise<AccountInfo> {\n\t\tconst result = await this.queryClient.getAccountInfo(pubkey);\n\t\tif (!result) {\n\t\t\tthrow new Error(`Account does not exist: ${pubkey}`);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Retrieves the current block height.\n\t */\n\tasync getBlockHeight(): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeight();\n\t}\n\n\t/**\n\t * Retrieves the current block height with advanced configuration.\n\t */\n\tasync getBlockHeightWithConfig(\n\t\tminContextSlot: bigint | undefined,\n\t): Promise<bigint> {\n\t\treturn await this.queryClient.getBlockHeightWithConfig(minContextSlot);\n\t}\n\n\t/**\n\t * Retrieves the signatures for an address.\n\t */\n\tasync getSignaturesForAddress(\n\t\taddress: PublicKey,\n\t\tconfig: GetSignaturesForAddressConfig | undefined,\n\t): Promise<SignatureInfo[]> {\n\t\treturn await this.queryClient.getSignaturesForAddress(address, config);\n\t}\n\n\t/**\n\t * Retrieves detailed information about a transaction.\n\t *\n\t * @returns Full transaction response\n\t */\n\tasync getTransaction(sig: Signature): Promise<TransactionResponse> {\n\t\treturn await this.queryClient.getTransactionDetails(sig);\n\t}\n\n\t/**\n\t * Retrieves the total number of transactions processed since genesis.\n\t */\n\tasync getTransactionCount(): Promise<bigint> {\n\t\treturn await this.queryClient.getTransactionCount();\n\t}\n\n\t/**\n\t * Retrieves the status of multiple transaction signatures.\n\t */\n\tasync getSignatureStatuses(\n\t\tsignatures: Signature[],\n\t): Promise<(SignatureStatus | undefined)[]> {\n\t\t// Convert Uint8Array signatures to base58 strings\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\tconst sigStrings = signatures.map((s) => base58.encode(s));\n\t\tconst results = await this.queryClient.getSignatureStatuses(sigStrings);\n\t\t// Filter out null entries (unknown signatures) per spec behaviour\n\t\treturn results.filter((s): s is SignatureStatus => s !== null);\n\t}\n\n\t/**\n\t * Retrieves current epoch information.\n\t */\n\tasync getEpochInfo(): Promise<EpochInfo> {\n\t\treturn await this.queryClient.getEpochInfo();\n\t}\n\n\t/**\n\t * Checks the health status of the RPC node.\n\t *\n\t * @returns \"ok\" if healthy, error message otherwise\n\t */\n\tasync getHealth(): Promise<string> {\n\t\treturn await this.queryClient.getHealth();\n\t}\n\n\t/**\n\t * Submits a signed transaction to the blockchain.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission options\n\t * @returns Transaction signature\n\t */\n\tasync sendTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendTransactionOptions>,\n\t): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.sendTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Requests an airdrop of tokens to an account.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t *\n\t * @param pubkey - Account to receive the airdrop\n\t * @param amount - Amount in kelvins (smallest unit)\n\t * @returns Transaction signature\n\t */\n\tasync requestAirdrop(pubkey: PublicKey, amount: Kelvin): Promise<Signature> {\n\t\tconst sigStr = await this.transactionClient.requestAirdrop(pubkey, amount);\n\t\tconst { base58 } = await import(\"@scure/base\");\n\t\treturn base58.decode(sigStr);\n\t}\n\n\t/**\n\t * Submits a signed transaction and waits for confirmation.\n\t *\n\t * @param transaction - Serialized signed transaction bytes\n\t * @param options - Transaction submission and confirmation options\n\t * @returns Confirmed transaction details\n\t * @throws {TransactionFailedError} If the transaction fails on-chain\n\t * @throws {TransactionConfirmationTimeoutError} If confirmation times out\n\t *\n\t * @example\n\t * ```typescript\n\t * const result = await client.sendAndConfirmTransaction(signedTx);\n\t * console.log(`Confirmed in slot ${result.slot}`);\n\t * ```\n\t */\n\tasync sendAndConfirmTransaction(\n\t\ttransaction: Uint8Array,\n\t\toptions?: Partial<SendAndConfirmOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.sendAndConfirmTransaction(\n\t\t\ttransaction,\n\t\t\toptions,\n\t\t);\n\t}\n\n\t/**\n\t * Waits for a transaction to be confirmed.\n\t *\n\t * @param signature - Transaction signature to monitor\n\t * @param options - Confirmation options\n\t * @returns Confirmed transaction details\n\t */\n\tasync confirmTransaction(\n\t\tsig: string,\n\t\toptions?: Partial<ConfirmTransactionOptions>,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.confirmTransaction(sig, options);\n\t}\n\n\t/**\n\t * Requests an airdrop and waits for confirmation.\n\t *\n\t * **Note**: Only available on devnet and testnet.\n\t */\n\tasync requestAirdropAndConfirm(\n\t\tpubkey: PublicKey,\n\t\tamount: Kelvin,\n\t): Promise<ConfirmedTransaction> {\n\t\treturn await this.transactionClient.requestAirdropAndConfirm(\n\t\t\tpubkey,\n\t\t\tamount,\n\t\t);\n\t}\n\n\t/**\n\t * Calculate the minimum balance required for an account to be rent-exempt.\n\t *\n\t * @param accountDataSize - The size of the account data in bytes\n\t * @returns The minimum balance in kelvins required for rent exemption\n\t */\n\tasync getMinimumBalanceForRentExemption(dataSize: bigint): Promise<bigint> {\n\t\treturn await this.queryClient.getMinimumBalanceForRentExemption(\n\t\t\tNumber(dataSize),\n\t\t);\n\t}\n\n\t/**\n\t * Get the fee required to process a specific message.\n\t *\n\t * @param message - Base64-encoded serialized versioned message\n\t * @returns Fee response with value in kelvins\n\t */\n\tasync getFeeForMessage(message: string): Promise<FeeResponse> {\n\t\tconst value = await this.queryClient.getFeeForMessage(message);\n\t\treturn { value: value ?? undefined };\n\t}\n\n\t/**\n\t * Get information for multiple accounts in a single request.\n\t *\n\t * @param pubkeys - Array of public keys to query (1-100)\n\t * @returns Account information for each address\n\t */\n\tasync getMultipleAccounts(\n\t\tpubkeys: PublicKey[],\n\t): Promise<OptionalAccountInfo[]> {\n\t\tconst results = await this.queryClient.getMultipleAccounts(pubkeys);\n\t\t// Convert null → undefined to match OptionalAccountInfo type\n\t\treturn results.map((r) =>\n\t\t\tr === null ? undefined : r,\n\t\t) as OptionalAccountInfo[];\n\t}\n\n\t/**\n\t * Get all accounts owned by a specific program or address.\n\t *\n\t * @param owner - Program ID or owner public key\n\t * @param filter - Filter type (programAccounts or tokenAccounts)\n\t * @param config - Optional configuration for pagination and encoding\n\t * @returns Tuple of accounts and optional pagination info\n\t */\n\tasync getAccountsByOwner(\n\t\towner: PublicKey,\n\t\tfilter: AccountFilter | undefined,\n\t\tconfig: GetAccountsByOwnerConfig | undefined,\n\t): Promise<[OwnerAccount[], PaginationInfo | undefined]> {\n\t\t// Convert generated string union AccountFilter to the serde-compatible param\n\t\tconst filterParam: AccountFilterParam =\n\t\t\tfilter === \"tokenAccounts\"\n\t\t\t\t? { type: \"tokenAccounts\" }\n\t\t\t\t: { type: \"programAccounts\" };\n\t\treturn await this.queryClient.getAccountsByOwner(\n\t\t\towner,\n\t\t\tfilterParam,\n\t\t\tconfig,\n\t\t);\n\t}\n\n\t/**\n\t * Get workflow lineage information for tracking execution history.\n\t *\n\t * @param request - Workflow lineage request with signature and options\n\t * @returns Workflow lineage tree with nodes and metadata\n\t */\n\tasync getWorkflowLineage(\n\t\trequest: GetWorkflowLineageRequest,\n\t): Promise<GetWorkflowLineageResponse> {\n\t\treturn await this.queryClient.getWorkflowLineage(request);\n\t}\n\n\t/**\n\t * Get subscription for a given subscriber address and nonce.\n\t *\n\t * @param subscriber - The subscriber's public key\n\t * @param nonce - The nonce identifying the subscription\n\t * @returns The subscription for the subscriber and nonce\n\t */\n\tasync getSubscription(\n\t\tsubscriber: PublicKey,\n\t\tnonce: string,\n\t): Promise<Subscription> {\n\t\treturn await this.queryClient.getSubscription(subscriber, nonce);\n\t}\n\n\t/**\n\t * Get transactions triggered by a subscription account.\n\t *\n\t * @param subscriptionAccount - The subscription account public key\n\t * @param limit - Optional limit on transactions returned\n\t * @returns Triggered transactions for the subscription\n\t */\n\tasync getTriggeredTransactions(\n\t\tsubscriptionAccount: PublicKey,\n\t\tlimit: number | undefined,\n\t): Promise<TriggeredTransaction[]> {\n\t\treturn await this.queryClient.getTriggeredTransactions(\n\t\t\tsubscriptionAccount,\n\t\t\tlimit,\n\t\t);\n\t}\n\n\t/**\n\t * Gets paginated transactions from the blockchain.\n\t */\n\tasync getTransactions(\n\t\tconfig: GetTransactionsConfig | undefined,\n\t): Promise<TransactionInfo[]> {\n\t\treturn await this.queryClient.getTransactions(config);\n\t}\n\n\t/**\n\t * Checks if a blockhash is still valid for transaction submission.\n\t */\n\tasync isBlockhashValid(blockhash: Hash): Promise<IsBlockhashValidResponse> {\n\t\treturn await this.queryClient.isBlockhashValid(blockhash);\n\t}\n\n\t/**\n\t * Gets the health status of the validator.\n\t */\n\tasync getValidatorHealth(): Promise<ValidatorHealth> {\n\t\treturn await this.queryClient.getValidatorHealth();\n\t}\n\n\t/**\n\t * Gets the list of full nodes connected to the validator or full node.\n\t */\n\tasync getConnectedFullNodes(): Promise<ConnectedNode[]> {\n\t\treturn await this.queryClient.getConnectedFullNodes();\n\t}\n\n\t/**\n\t * Gets the TEE's secret sharing public key for HPKE encryption.\n\t */\n\tasync getSecretSharingPubkey(): Promise<SecretSharingPubkey> {\n\t\tconst rawBytes = await this.queryClient.getSecretSharingPubkey();\n\t\tconst hex = Array.from(rawBytes)\n\t\t\t.map((b) => b.toString(16).padStart(2, \"0\"))\n\t\t\t.join(\"\");\n\t\treturn { publicKey: hex };\n\t}\n\n\t/**\n\t * Gets the config hash prefix for protecting against replay attacks.\n\t */\n\tasync getConfigHashPrefix(): Promise<ConfigHashPrefix> {\n\t\treturn await this.queryClient.getConfigHashPrefix();\n\t}\n\n\t/**\n\t * Submits an epoch change transaction (admin-only).\n\t */\n\tasync sendAdminTransaction(\n\t\trequest: SubmitEpochChangeRequest,\n\t): Promise<SubmitEpochChangeResponse> {\n\t\treturn await this.transactionClient.sendAdminTransaction(request);\n\t}\n\n\t/**\n\t * Gets all accounts in the system.\n\t */\n\tasync getAllAccounts(\n\t\tconfig: GetAllAccountsConfig | undefined,\n\t): Promise<AllAccountsEntry[]> {\n\t\treturn await this.queryClient.getAllAccounts(config);\n\t}\n\n\t/**\n\t * Gets a block by its height.\n\t */\n\tasync getBlock(\n\t\tblockHeight: bigint,\n\t\tconfig: GetBlockConfig | undefined,\n\t): Promise<BlockInfo> {\n\t\treturn await this.queryClient.getBlock(blockHeight, config);\n\t}\n\n\t/**\n\t * Gets a list of confirmed block heights in a range.\n\t */\n\tasync getBlocks(\n\t\tstartHeight: bigint,\n\t\tendHeight: bigint | undefined,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getBlocks(startHeight, endHeight);\n\t}\n\n\t/**\n\t * Gets detailed information about a stake account.\n\t */\n\tasync getStakeAccount(\n\t\tpubkey: PublicKey,\n\t): Promise<StakeAccountInfo | undefined> {\n\t\treturn await this.queryClient.getStakeAccount(pubkey);\n\t}\n\n\t/**\n\t * Gets all registered validator accounts.\n\t */\n\tasync getValidatorAccounts(\n\t\trequest: GetValidatorAccountsRequest,\n\t): Promise<ValidatorAccountInfo[]> {\n\t\treturn await this.queryClient.getValidatorAccounts(request);\n\t}\n\n\t/**\n\t * Gets the token balance of an SPL Token account.\n\t */\n\tasync getTokenAccountBalance(pubkey: PublicKey): Promise<TokenBalance> {\n\t\treturn await this.queryClient.getTokenAccountBalance(pubkey);\n\t}\n\n\t/**\n\t * Gets registered REX requests for a creator.\n\t */\n\tasync getRexRequests(\n\t\tcreator: PublicKey,\n\t\tnonce: string | undefined,\n\t): Promise<RexInfoAndDuties[]> {\n\t\treturn await this.queryClient.getRexRequests(creator, nonce);\n\t}\n\n\t/**\n\t * Gets missed REX duty proposal rounds for a specific REX request.\n\t */\n\tasync getRexMissedDuties(\n\t\tcreator: PublicKey,\n\t\tnonce: string,\n\t): Promise<bigint[]> {\n\t\treturn await this.queryClient.getRexMissedDuties(creator, nonce);\n\t}\n\n\t/**\n\t * Gets information about all known cluster nodes.\n\t */\n\tasync getClusterNodes(): Promise<ClusterNodeInfo[]> {\n\t\treturn await this.queryClient.getClusterNodes();\n\t}\n\n\t/**\n\t * Gets the list of validator indices this node is connected to.\n\t */\n\tasync getConnectedValidators(): Promise<number[]> {\n\t\treturn await this.queryClient.getConnectedValidators();\n\t}\n\n\t/**\n\t * Calls an arbitrary RPC method with a JSON string body.\n\t * Utility method for methods not yet in the generated interface.\n\t */\n\tasync callWithJson(method: string, params: string): Promise<string> {\n\t\treturn await this.queryClient.callWithJson(method, params);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Low-level HTTP transport with retry logic and timeout handling.\n *\n * Provides robust network communication with automatic retry,\n * exponential backoff, and proper error handling.\n */\nimport { calculateBackoff, sleep } from \"../utils\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\n\nexport interface HttpTransportConfig {\n\t/** Request timeout in milliseconds */\n\ttimeout?: number;\n\t/** Maximum number of retry attempts */\n\tmaxRetries?: number;\n\t/** Base delay for exponential backoff (ms) */\n\tretryBaseDelay?: number;\n\t/** Maximum retry delay (ms) */\n\tretryMaxDelay?: number;\n\t/** Custom headers to include in requests */\n\theaders?: Record<string, string>;\n}\n\ninterface RequestOptions {\n\tmethod: string;\n\theaders: Record<string, string>;\n\tbody: string;\n\tsignal?: AbortSignal;\n}\n\nconst DEFAULT_CONFIG: Required<HttpTransportConfig> = {\n\ttimeout: 30000, // 30 seconds\n\tmaxRetries: 3,\n\tretryBaseDelay: 1000, // 1 second\n\tretryMaxDelay: 30000, // 30 seconds\n\theaders: {},\n};\n\n/**\n * HTTP transport with built-in retry logic and timeout handling.\n *\n * Features:\n * - Automatic retries with exponential backoff\n * - Request timeouts using AbortController\n * - Network error recovery\n * - Rate limit handling\n * - Proper HTTP status code handling\n */\nexport class HttpTransport {\n\tprivate readonly url: string;\n\tprivate readonly config: Required<HttpTransportConfig>;\n\n\tconstructor(url: string, config: HttpTransportConfig = {}) {\n\t\tthis.url = url;\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\t/**\n\t * Makes an HTTP request with automatic retry logic.\n\t *\n\t * Retries are attempted for network errors and server errors (5xx).\n\t * Uses exponential backoff between retry attempts.\n\t */\n\tasync request(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown> = {},\n\t): Promise<unknown> {\n\t\tlet lastError: Error | undefined;\n\n\t\tfor (let attempt = 0; attempt <= this.config.maxRetries; attempt++) {\n\t\t\ttry {\n\t\t\t\treturn await this.makeRequest(body, requestDetails, attempt);\n\t\t\t} catch (error) {\n\t\t\t\tlastError = error as Error;\n\n\t\t\t\t// Don't retry if it's not a retryable error\n\t\t\t\tif (error instanceof RpcError && !error.retryable) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Don't retry on the last attempt\n\t\t\t\tif (attempt === this.config.maxRetries) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\n\t\t\t\t// Calculate backoff delay\n\t\t\t\tconst delay = calculateBackoff(\n\t\t\t\t\tattempt,\n\t\t\t\t\tthis.config.retryBaseDelay,\n\t\t\t\t\tthis.config.retryMaxDelay,\n\t\t\t\t);\n\n\t\t\t\t// Wait before retrying\n\t\t\t\tawait sleep(delay);\n\t\t\t}\n\t\t}\n\n\t\t// Should never reach here, but TypeScript doesn't know that\n\t\tthrow lastError;\n\t}\n\n\t/**\n\t * Make a single HTTP request with timeout\n\t */\n\tprivate async makeRequest(\n\t\tbody: string,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<unknown> {\n\t\tconst controller = new AbortController();\n\t\tconst timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n\t\ttry {\n\t\t\tconst options: RequestOptions = {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"Content-Type\": \"application/json\",\n\t\t\t\t\t...this.config.headers,\n\t\t\t\t},\n\t\t\t\tbody,\n\t\t\t\tsignal: controller.signal,\n\t\t\t};\n\n\t\t\tconst response = await fetch(this.url, options);\n\n\t\t\t// Handle HTTP errors\n\t\t\tif (!response.ok) {\n\t\t\t\tthrow await this.handleHttpError(response, requestDetails, attempt);\n\t\t\t}\n\n\t\t\t// Parse JSON response\n\t\t\tconst data = await response.json();\n\t\t\treturn data;\n\t\t} catch (error) {\n\t\t\t// Handle timeout\n\t\t\tif (error instanceof Error && error.name === \"AbortError\") {\n\t\t\t\tthrow RpcError.requestTimeout(this.config.timeout, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Handle network errors\n\t\t\tif (error instanceof TypeError) {\n\t\t\t\tthrow RpcError.networkError(error.message, {\n\t\t\t\t\t...requestDetails,\n\t\t\t\t\turl: this.url,\n\t\t\t\t\tattempts: attempt + 1,\n\t\t\t\t\tcause: error.message,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Re-throw RpcError\n\t\t\tif (error instanceof RpcError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\n\t\t\t// Unknown error\n\t\t\tthrow RpcError.networkError(\"Unknown network error\", {\n\t\t\t\t...requestDetails,\n\t\t\t\turl: this.url,\n\t\t\t\tattempts: attempt + 1,\n\t\t\t\tcause: error instanceof Error ? error.message : String(error),\n\t\t\t});\n\t\t} finally {\n\t\t\tclearTimeout(timeoutId);\n\t\t}\n\t}\n\n\t/**\n\t * Handle HTTP error responses.\n\t *\n\t * Parses the response body to extract JSON-RPC error details when available,\n\t * regardless of HTTP status code. Falls back to HTTP status-based error handling.\n\t */\n\tprivate async handleHttpError(\n\t\tresponse: Response,\n\t\trequestDetails: Record<string, unknown>,\n\t\tattempt: number,\n\t): Promise<RpcError> {\n\t\tconst status = response.status;\n\t\tconst isRetryable = status >= 500 || status === 429;\n\t\tconst baseDetails = {\n\t\t\t...requestDetails,\n\t\t\thttpStatus: status,\n\t\t\turl: this.url,\n\t\t\tattempts: attempt + 1,\n\t\t};\n\n\t\t// Try to parse response body for error details\n\t\tconst { message, rpcCode, errorData } = await this.parseErrorResponse(\n\t\t\tresponse,\n\t\t\tstatus,\n\t\t);\n\n\t\t// Rate limiting gets special handling\n\t\tif (status === 429) {\n\t\t\treturn RpcError.rateLimitExceeded({\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// If we have a JSON-RPC error code, use proper error mapping\n\t\tif (rpcCode !== undefined) {\n\t\t\treturn RpcError.fromRpcCode(rpcCode, message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Server errors (5xx) are retryable network errors\n\t\tif (status >= 500) {\n\t\t\treturn RpcError.networkError(message, {\n\t\t\t\t...baseDetails,\n\t\t\t\tserverError: errorData,\n\t\t\t});\n\t\t}\n\n\t\t// Client errors (4xx) are not retryable\n\t\treturn new RpcError(RpcErrorCode.NETWORK_ERROR, message, baseDetails, isRetryable);\n\t}\n\n\t/**\n\t * Parse error response body to extract message and RPC error code.\n\t *\n\t * Handles multiple formats:\n\t * - JSON-RPC error: { error: { code, message, data? } }\n\t * - Simple JSON: { message: \"...\" }\n\t * - Non-JSON responses\n\t */\n\tprivate async parseErrorResponse(\n\t\tresponse: Response,\n\t\tstatus: number,\n\t): Promise<{ message: string; rpcCode?: number; errorData?: unknown }> {\n\t\tlet message = `HTTP ${status}: ${response.statusText}`;\n\t\tlet rpcCode: number | undefined;\n\t\tlet errorData: unknown;\n\n\t\ttry {\n\t\t\terrorData = await response.json();\n\n\t\t\tif (errorData && typeof errorData === \"object\") {\n\t\t\t\tconst data = errorData as Record<string, unknown>;\n\n\t\t\t\t// Check for JSON-RPC error format: { error: { code, message } }\n\t\t\t\tif (\n\t\t\t\t\tdata.error &&\n\t\t\t\t\ttypeof data.error === \"object\" &&\n\t\t\t\t\t\"message\" in data.error\n\t\t\t\t) {\n\t\t\t\t\tconst rpcError = data.error as Record<string, unknown>;\n\t\t\t\t\tmessage = String(rpcError.message);\n\t\t\t\t\trpcCode =\n\t\t\t\t\t\ttypeof rpcError.code === \"number\" ? rpcError.code : undefined;\n\t\t\t\t} else if (\"message\" in data) {\n\t\t\t\t\t// Fallback to top-level message\n\t\t\t\t\tmessage = String(data.message);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch {\n\t\t\t// Response might not be JSON, keep default message\n\t\t}\n\n\t\treturn { message, rpcCode, errorData };\n\t}\n\n\t/**\n\t * Returns the configured RPC endpoint URL.\n\t */\n\tgetUrl(): string {\n\t\treturn this.url;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nexport type {\n\tAccountFilter,\n\tAccountInfo,\n\tAllAccountsEntry,\n\tBlockInfo,\n\tClusterNodeInfo,\n\tConfigHashPrefix,\n\tConfirmedTransaction,\n\tConfirmTransactionOptions,\n\tConnectedNode,\n\tEpochConsensusConfigRequest,\n\tEpochInfo,\n\tEventData,\n\tFeeResponse,\n\tGetAccountsByOwnerConfig,\n\tGetAllAccountsConfig,\n\tGetBlockConfig,\n\tGetSignaturesForAddressConfig,\n\tGetTransactionsConfig,\n\tGetValidatorAccountsRequest,\n\tGetWorkflowLineageRequest,\n\tGetWorkflowLineageResponse,\n\tIsBlockhashValidResponse,\n\tKelvin,\n\tOptionalAccountInfo,\n\tOwnerAccount,\n\tPaginationInfo,\n\tRexDuty,\n\tRexInfoAndDuties,\n\tSecretSharingPubkey,\n\tSendAndConfirmOptions,\n\tSendTransactionOptions,\n\tSignatureInfo,\n\tSignatureStatus,\n\tStakeAccountInfo,\n\tStakeState,\n\tSubmitEpochChangeRequest,\n\tSubmitEpochChangeResponse,\n\tSubscription,\n\tSubscriptionAccountMeta,\n\tSubscriptionInstruction,\n\tSubscriptionKind,\n\tTimestampRange,\n\tTokenBalance,\n\tTransactionData,\n\tTransactionInfo,\n\tTransactionMessage,\n\tTransactionNodeData,\n\tTransactionResponse,\n\tTransactionStatusMetadata,\n\tTransactionWithMeta,\n\tTriggeredTransaction,\n\tTriggerInfo,\n\tTruncationReason,\n\tValidatorAccountInfo,\n\tValidatorHealth,\n\tValidatorInfoRequest,\n\tWorkflowLineage,\n\tWorkflowNode,\n} from \"../generated/types\";\nexport * from \"./clients\";\nexport * from \"./errors\";\nexport * from \"./http-transport\";\n\nimport {\n\tRIALO_DEVNET_CHAIN,\n\tRIALO_LOCALNET_CHAIN,\n\tRIALO_MAINNET_CHAIN,\n\tRIALO_TESTNET_CHAIN,\n} from \"../constants\";\nimport {\n\tRialoClient,\n\ttype RialoClientConfig,\n\ttype RialoNetwork,\n} from \"./clients\";\nimport { RpcError, RpcErrorCode } from \"./errors\";\nimport { HttpTransport } from \"./http-transport\";\n\n/**\n * Creates an RPC client with automatic retry and timeout handling.\n *\n * @param config - Client configuration with chain definition and optional transport settings\n * @param config.chain - Chain definition (e.g., RIALO_DEVNET_CHAIN, RIALO_MAINNET_CHAIN) or a custom chain with your own rpcUrl\n * @param config.transport - Optional transport configuration (timeout, retries, headers)\n * @returns Configured RialoClient instance\n *\n * @example\n * ```typescript\n * // Basic usage with preset chain\n * const client = createRialoClient({ chain: RIALO_DEVNET_CHAIN });\n *\n * // With custom transport config\n * const client = createRialoClient({\n * chain: RIALO_MAINNET_CHAIN,\n * transport: { timeout: 30000, maxRetries: 5 }\n * });\n *\n * // With custom RPC URL\n * const client = createRialoClient({\n * chain: {\n * id: 'rialo:mainnet',\n * name: 'Mainnet',\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function createRialoClient(config: RialoClientConfig): RialoClient {\n\tconst { chain, transport } = config;\n\tconst httpTransport = new HttpTransport(chain.rpcUrl, transport);\n\n\treturn new RialoClient(httpTransport, chain);\n}\n\n/**\n * Returns a default RialoClientConfig for a given network.\n *\n * Provides preset chain configurations for standard Rialo networks, making it easy\n * to connect to mainnet, devnet, testnet, or localnet without manual configuration.\n *\n * @param network - Network identifier: \"mainnet\", \"devnet\", \"testnet\", or \"localnet\"\n * @returns Default RialoClientConfig for the specified network\n * @throws {RpcError} With code INVALID_NETWORK if an unknown network is provided\n *\n * @example\n * ```typescript\n * // Get devnet config and create client\n * const config = getDefaultRialoClientConfig('devnet');\n * const client = createRialoClient(config);\n *\n * // Customize the config with transport options\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * transport: { timeout: 60000, maxRetries: 5 }\n * });\n *\n * // Use custom RPC URL while preserving network identity\n * const config = getDefaultRialoClientConfig('mainnet');\n * const client = createRialoClient({\n * ...config,\n * chain: {\n * ...config.chain,\n * rpcUrl: 'https://mainnet.custom-rpc.com:4101'\n * },\n * });\n * ```\n */\nexport function getDefaultRialoClientConfig(\n\tnetwork: RialoNetwork,\n): RialoClientConfig {\n\tswitch (network) {\n\t\tcase \"mainnet\":\n\t\t\treturn { chain: RIALO_MAINNET_CHAIN };\n\t\tcase \"devnet\":\n\t\t\treturn { chain: RIALO_DEVNET_CHAIN };\n\t\tcase \"testnet\":\n\t\t\treturn { chain: RIALO_TESTNET_CHAIN };\n\t\tcase \"localnet\":\n\t\t\treturn { chain: RIALO_LOCALNET_CHAIN };\n\t\tdefault:\n\t\t\tthrow new RpcError(\n\t\t\t\tRpcErrorCode.INVALID_NETWORK,\n\t\t\t\t`Unknown network: ${network}`,\n\t\t\t);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode deserialization reader\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeReader {\n\tprivate view: DataView;\n\tprivate offset: number;\n\tprivate bytes: Uint8Array;\n\n\tconstructor(data: Uint8Array) {\n\t\tthis.bytes = data;\n\t\tthis.view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Position Management ==========\n\n\tgetOffset(): number {\n\t\treturn this.offset;\n\t}\n\n\tremaining(): number {\n\t\treturn this.bytes.length - this.offset;\n\t}\n\n\tisExhausted(): boolean {\n\t\treturn this.offset >= this.bytes.length;\n\t}\n\n\tskip(bytes: number): this {\n\t\tthis.ensureAvailable(bytes);\n\t\tthis.offset += bytes;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Peek at bytes without advancing the offset\n\t */\n\tpeek(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\treturn this.bytes.slice(this.offset, this.offset + length);\n\t}\n\n\t/**\n\t * Reset reader to beginning\n\t */\n\treset(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Seek to specific offset\n\t */\n\tseek(offset: number): this {\n\t\tif (offset < 0 || offset > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Invalid seek offset: ${offset}, buffer length: ${this.bytes.length}`,\n\t\t\t);\n\t\t}\n\t\tthis.offset = offset;\n\t\treturn this;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\treadU8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getUint8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadU16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getUint16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadU32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getUint32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadU64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getUint32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadU128(): bigint {\n\t\tthis.ensureAvailable(16);\n\t\tconst low = this.readU64();\n\t\tconst high = this.readU64();\n\t\treturn low | (high << 64n);\n\t}\n\n\treadI8(): number {\n\t\tthis.ensureAvailable(1);\n\t\tconst value = this.view.getInt8(this.offset);\n\t\tthis.offset += 1;\n\t\treturn value;\n\t}\n\n\treadI16(): number {\n\t\tthis.ensureAvailable(2);\n\t\tconst value = this.view.getInt16(this.offset, true);\n\t\tthis.offset += 2;\n\t\treturn value;\n\t}\n\n\treadI32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getInt32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadI64(): bigint {\n\t\tthis.ensureAvailable(8);\n\t\tconst low = this.view.getUint32(this.offset, true);\n\t\tconst high = this.view.getInt32(this.offset + 4, true);\n\t\tthis.offset += 8;\n\t\t// Use BigInt arithmetic to properly handle sign extension\n\t\treturn BigInt(low) | (BigInt(high) << 32n);\n\t}\n\n\treadI128(): bigint {\n\t\t// Read as unsigned first, then convert to signed\n\t\tconst unsigned = this.readU128();\n\t\t// If sign bit (bit 127) is set, convert to negative\n\t\tconst signBit = 1n << 127n;\n\t\tif ((unsigned & signBit) !== 0n) {\n\t\t\treturn unsigned - (1n << 128n);\n\t\t}\n\t\treturn unsigned;\n\t}\n\n\treadF32(): number {\n\t\tthis.ensureAvailable(4);\n\t\tconst value = this.view.getFloat32(this.offset, true);\n\t\tthis.offset += 4;\n\t\treturn value;\n\t}\n\n\treadF64(): number {\n\t\tthis.ensureAvailable(8);\n\t\tconst value = this.view.getFloat64(this.offset, true);\n\t\tthis.offset += 8;\n\t\treturn value;\n\t}\n\n\treadBool(): boolean {\n\t\tconst value = this.readU8();\n\t\tif (value > 1) {\n\t\t\tthrow new Error(`Invalid boolean value: ${value}`);\n\t\t}\n\t\treturn value === 1;\n\t}\n\n\t// ========== Compound Types ==========\n\n\treadBytes(length: number): Uint8Array {\n\t\tthis.ensureAvailable(length);\n\t\tconst bytes = this.bytes.slice(this.offset, this.offset + length);\n\t\tthis.offset += length;\n\t\treturn bytes;\n\t}\n\n\treadFixedArray(length: number): Uint8Array {\n\t\treturn this.readBytes(length);\n\t}\n\n\treadVecBytes(): Uint8Array {\n\t\tconst length = this.readLength();\n\t\treturn this.readBytes(length);\n\t}\n\n\treadString(): string {\n\t\tconst bytes = this.readVecBytes();\n\t\treturn new TextDecoder().decode(bytes);\n\t}\n\n\treadVariant(): number {\n\t\treturn this.readU32();\n\t}\n\n\treadOption<T>(readValue: () => T): T | null {\n\t\tconst hasValue = this.readU8();\n\t\tif (hasValue === 0) {\n\t\t\treturn null;\n\t\t}\n\t\tif (hasValue !== 1) {\n\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t}\n\t\treturn readValue();\n\t}\n\n\treadVec<T>(readElement: () => T): T[] {\n\t\tconst length = this.readLength();\n\t\tconst result: T[] = [];\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tresult.push(readElement());\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Read a tuple of fixed size with heterogeneous types\n\t */\n\treadTuple<T extends unknown[]>(readers: { [K in keyof T]: () => T[K] }): T {\n\t\treturn readers.map((read) => read()) as T;\n\t}\n\n\treadMap<K, V>(readKey: () => K, readValue: () => V): Map<K, V> {\n\t\tconst length = this.readLength();\n\t\tconst map = new Map<K, V>();\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst key = readKey();\n\t\t\tconst value = readValue();\n\t\t\tmap.set(key, value);\n\t\t}\n\t\treturn map;\n\t}\n\n\t// ========== Helpers ==========\n\n\t/**\n\t * Read length as u64 but validate it's within safe integer range\n\t */\n\tprivate readLength(): number {\n\t\tconst length = this.readU64();\n\t\tif (length > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\tthrow new Error(`Length ${length} exceeds maximum safe integer`);\n\t\t}\n\t\tconst numLength = Number(length);\n\t\t// Additional sanity check: length shouldn't exceed remaining bytes\n\t\tif (numLength > this.remaining()) {\n\t\t\tthrow new Error(\n\t\t\t\t`Length ${numLength} exceeds remaining bytes ${this.remaining()}`,\n\t\t\t);\n\t\t}\n\t\treturn numLength;\n\t}\n\n\tprivate ensureAvailable(bytes: number): void {\n\t\tif (this.offset + bytes > this.bytes.length) {\n\t\t\tthrow new Error(\n\t\t\t\t`Unexpected end of data: need ${bytes} bytes at offset ${this.offset}, ` +\n\t\t\t\t\t`but only ${this.bytes.length - this.offset} available`,\n\t\t\t);\n\t\t}\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Bincode serialization writer\n *\n * Matches Rust's bincode crate with default configuration:\n * - Little-endian byte order\n * - Fixed-size integer encoding (no varint)\n * - u64 length prefixes for dynamic collections\n * - u32 enum variant indices\n */\nexport class BincodeWriter {\n\tprivate buffer: Uint8Array;\n\tprivate offset: number;\n\tprivate view: DataView;\n\n\tconstructor(initialCapacity = 256) {\n\t\tthis.buffer = new Uint8Array(initialCapacity);\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t\tthis.offset = 0;\n\t}\n\n\t// ========== Primitive Types ==========\n\n\twriteU8(value: number): this {\n\t\tif (value < 0 || value > 0xff) {\n\t\t\tthrow new Error(`u8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value;\n\t\treturn this;\n\t}\n\n\twriteU16(value: number): this {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`u16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setUint16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteU32(value: number): this {\n\t\tif (value < 0 || value > 0xffffffff) {\n\t\t\tthrow new Error(`u32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setUint32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteU64(value: bigint | number): this {\n\t\tconst val = BigInt(value);\n\t\tif (val < 0n || val > 0xffff_ffff_ffff_ffffn) {\n\t\t\tthrow new Error(`u64 value out of range: ${val}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// Write as two u32s for better performance\n\t\tthis.view.setUint32(this.offset, Number(val & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((val >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteU128(value: bigint): this {\n\t\tif (value < 0n || value > (1n << 128n) - 1n) {\n\t\t\tthrow new Error(`u128 value out of range: ${value}`);\n\t\t}\n\t\tthis.writeU64(value & ((1n << 64n) - 1n));\n\t\tthis.writeU64(value >> 64n);\n\t\treturn this;\n\t}\n\n\twriteI8(value: number): this {\n\t\tif (value < -128 || value > 127) {\n\t\t\tthrow new Error(`i8 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(1);\n\t\tthis.view.setInt8(this.offset, value);\n\t\tthis.offset += 1;\n\t\treturn this;\n\t}\n\n\twriteI16(value: number): this {\n\t\tif (value < -32768 || value > 32767) {\n\t\t\tthrow new Error(`i16 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(2);\n\t\tthis.view.setInt16(this.offset, value, true);\n\t\tthis.offset += 2;\n\t\treturn this;\n\t}\n\n\twriteI32(value: number): this {\n\t\tif (value < -2147483648 || value > 2147483647) {\n\t\t\tthrow new Error(`i32 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setInt32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteI64(value: bigint): this {\n\t\tconst min = -(1n << 63n);\n\t\tconst max = (1n << 63n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i64 value out of range: ${value}`);\n\t\t}\n\t\tthis.ensureCapacity(8);\n\t\t// For signed integers, we write the bit pattern directly\n\t\t// JavaScript's BigInt handles two's complement correctly\n\t\tconst unsigned = value < 0n ? value + (1n << 64n) : value;\n\t\tthis.view.setUint32(this.offset, Number(unsigned & 0xffff_ffffn), true);\n\t\tthis.view.setUint32(\n\t\t\tthis.offset + 4,\n\t\t\tNumber((unsigned >> 32n) & 0xffff_ffffn),\n\t\t\ttrue,\n\t\t);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteI128(value: bigint): this {\n\t\tconst min = -(1n << 127n);\n\t\tconst max = (1n << 127n) - 1n;\n\t\tif (value < min || value > max) {\n\t\t\tthrow new Error(`i128 value out of range: ${value}`);\n\t\t}\n\t\t// Convert to unsigned representation for writing\n\t\tconst unsigned = value < 0n ? value + (1n << 128n) : value;\n\t\tthis.writeU64(unsigned & ((1n << 64n) - 1n));\n\t\tthis.writeU64(unsigned >> 64n);\n\t\treturn this;\n\t}\n\n\twriteF32(value: number): this {\n\t\tthis.ensureCapacity(4);\n\t\tthis.view.setFloat32(this.offset, value, true);\n\t\tthis.offset += 4;\n\t\treturn this;\n\t}\n\n\twriteF64(value: number): this {\n\t\tthis.ensureCapacity(8);\n\t\tthis.view.setFloat64(this.offset, value, true);\n\t\tthis.offset += 8;\n\t\treturn this;\n\t}\n\n\twriteBool(value: boolean): this {\n\t\tthis.ensureCapacity(1);\n\t\tthis.buffer[this.offset++] = value ? 1 : 0;\n\t\treturn this;\n\t}\n\n\t// ========== Compound Types ==========\n\n\twriteBytes(bytes: Uint8Array): this {\n\t\tthis.ensureCapacity(bytes.length);\n\t\tthis.buffer.set(bytes, this.offset);\n\t\tthis.offset += bytes.length;\n\t\treturn this;\n\t}\n\n\twriteFixedArray(bytes: Uint8Array, expectedLength?: number): this {\n\t\tif (expectedLength !== undefined && bytes.length !== expectedLength) {\n\t\t\tthrow new Error(\n\t\t\t\t`Fixed array length mismatch: expected ${expectedLength}, got ${bytes.length}`,\n\t\t\t);\n\t\t}\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteVecBytes(bytes: Uint8Array): this {\n\t\tthis.writeU64(BigInt(bytes.length));\n\t\treturn this.writeBytes(bytes);\n\t}\n\n\twriteString(str: string): this {\n\t\tconst bytes = new TextEncoder().encode(str);\n\t\treturn this.writeVecBytes(bytes);\n\t}\n\n\twriteVariant(index: number): this {\n\t\treturn this.writeU32(index);\n\t}\n\n\twriteOption<T>(\n\t\tvalue: T | null | undefined,\n\t\twriteValue: (writer: BincodeWriter, val: T) => void,\n\t): this {\n\t\tif (value === null || value === undefined) {\n\t\t\tthis.writeU8(0);\n\t\t} else {\n\t\t\tthis.writeU8(1);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteVec<T>(\n\t\titems: T[],\n\t\twriteItem: (writer: BincodeWriter, item: T) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(items.length));\n\t\tfor (const item of items) {\n\t\t\twriteItem(this, item);\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Write a tuple (fixed-size heterogeneous collection)\n\t */\n\twriteTuple<T extends unknown[]>(\n\t\titems: T,\n\t\twriters: { [K in keyof T]: (writer: BincodeWriter, val: T[K]) => void },\n\t): this {\n\t\tfor (let i = 0; i < items.length; i++) {\n\t\t\t(writers[i] as (writer: BincodeWriter, val: unknown) => void)(\n\t\t\t\tthis,\n\t\t\t\titems[i],\n\t\t\t);\n\t\t}\n\t\treturn this;\n\t}\n\n\twriteMap<K, V>(\n\t\tmap: Map<K, V>,\n\t\twriteKey: (writer: BincodeWriter, key: K) => void,\n\t\twriteValue: (writer: BincodeWriter, value: V) => void,\n\t): this {\n\t\tthis.writeU64(BigInt(map.size));\n\t\tfor (const [key, value] of map) {\n\t\t\twriteKey(this, key);\n\t\t\twriteValue(this, value);\n\t\t}\n\t\treturn this;\n\t}\n\n\t// ========== Output ==========\n\n\ttoBytes(): Uint8Array {\n\t\treturn this.buffer.slice(0, this.offset);\n\t}\n\n\t/**\n\t * Get a view of the written bytes WITHOUT copying.\n\t *\n\t * ⚠️ WARNING: This returns a view into the internal buffer.\n\t * The view becomes INVALID if:\n\t * - The writer continues writing (may trigger resize)\n\t * - The writer is cleared via clear()\n\t *\n\t * Use toBytes() for a safe copy, or use this only for immediate\n\t * read-only access when performance is critical.\n\t */\n\ttoView(): Uint8Array {\n\t\treturn this.buffer.subarray(0, this.offset);\n\t}\n\n\tlength(): number {\n\t\treturn this.offset;\n\t}\n\n\tclear(): this {\n\t\tthis.offset = 0;\n\t\treturn this;\n\t}\n\n\t/**\n\t * Reserve additional capacity\n\t */\n\treserve(additionalBytes: number): this {\n\t\tthis.ensureCapacity(additionalBytes);\n\t\treturn this;\n\t}\n\n\t// ========== Internal ==========\n\n\tprivate ensureCapacity(needed: number): void {\n\t\tconst required = this.offset + needed;\n\t\tif (required <= this.buffer.length) {\n\t\t\treturn;\n\t\t}\n\t\t// Grow by at least 2x or to required size\n\t\tlet newCapacity = this.buffer.length * 2;\n\t\twhile (newCapacity < required) {\n\t\t\tnewCapacity *= 2;\n\t\t}\n\t\tconst newBuffer = new Uint8Array(newCapacity);\n\t\tnewBuffer.set(this.buffer);\n\t\tthis.buffer = newBuffer;\n\t\tthis.view = new DataView(this.buffer.buffer);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { BincodeReader } from \"./reader\";\nimport { BincodeWriter } from \"./writer\";\n\n/**\n * Type definitions for bincode schemas\n *\n * IMPORTANT: For structs and enums, field/variant order MUST match Rust definition order.\n * Use arrays of tuples instead of objects to guarantee order preservation.\n */\nexport type BincodeSchema =\n\t| { type: \"u8\" }\n\t| { type: \"u16\" }\n\t| { type: \"u32\" }\n\t| { type: \"u64\" }\n\t| { type: \"u128\" }\n\t| { type: \"i8\" }\n\t| { type: \"i16\" }\n\t| { type: \"i32\" }\n\t| { type: \"i64\" }\n\t| { type: \"i128\" }\n\t| { type: \"f32\" }\n\t| { type: \"f64\" }\n\t| { type: \"bool\" }\n\t| { type: \"string\" }\n\t| { type: \"bytes\" }\n\t| { type: \"unit\" } // Rust's () type - zero size\n\t| { type: \"fixedArray\"; length: number }\n\t| { type: \"vec\"; element: BincodeSchema }\n\t| { type: \"option\"; inner: BincodeSchema }\n\t| { type: \"tuple\"; elements: BincodeSchema[] }\n\t| { type: \"struct\"; fields: StructField[] } // Ordered array, not object!\n\t| { type: \"enum\"; variants: EnumVariant[] } // Ordered array, not object!\n\t| { type: \"map\"; key: BincodeSchema; value: BincodeSchema }\n\t| { type: \"pubkey\" }; // 32-byte public key (Solana specific)\n\n/**\n * Struct field definition - order matters!\n */\nexport interface StructField {\n\tname: string;\n\tschema: BincodeSchema;\n}\n\n/**\n * Enum variant definition - order matters!\n */\nexport interface EnumVariant {\n\tname: string;\n\tschema: BincodeSchema | null; // null for unit variants\n}\n\n// ========== Schema Builder Helpers ==========\n\nexport const Schema = {\n\tu8: (): BincodeSchema => ({ type: \"u8\" }),\n\tu16: (): BincodeSchema => ({ type: \"u16\" }),\n\tu32: (): BincodeSchema => ({ type: \"u32\" }),\n\tu64: (): BincodeSchema => ({ type: \"u64\" }),\n\tu128: (): BincodeSchema => ({ type: \"u128\" }),\n\ti8: (): BincodeSchema => ({ type: \"i8\" }),\n\ti16: (): BincodeSchema => ({ type: \"i16\" }),\n\ti32: (): BincodeSchema => ({ type: \"i32\" }),\n\ti64: (): BincodeSchema => ({ type: \"i64\" }),\n\ti128: (): BincodeSchema => ({ type: \"i128\" }),\n\tf32: (): BincodeSchema => ({ type: \"f32\" }),\n\tf64: (): BincodeSchema => ({ type: \"f64\" }),\n\tbool: (): BincodeSchema => ({ type: \"bool\" }),\n\tstring: (): BincodeSchema => ({ type: \"string\" }),\n\tbytes: (): BincodeSchema => ({ type: \"bytes\" }),\n\tunit: (): BincodeSchema => ({ type: \"unit\" }),\n\n\tfixedArray: (length: number): BincodeSchema => ({\n\t\ttype: \"fixedArray\",\n\t\tlength,\n\t}),\n\n\tvec: (element: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"vec\",\n\t\telement,\n\t}),\n\n\toption: (inner: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"option\",\n\t\tinner,\n\t}),\n\n\ttuple: (...elements: BincodeSchema[]): BincodeSchema => ({\n\t\ttype: \"tuple\",\n\t\telements,\n\t}),\n\n\t/**\n\t * Define a struct with ordered fields\n\t * @example\n\t * Schema.struct([\n\t * [\"id\", Schema.u64()],\n\t * [\"name\", Schema.string()],\n\t * [\"active\", Schema.bool()],\n\t * ])\n\t */\n\tstruct: (fields: [string, BincodeSchema][]): BincodeSchema => ({\n\t\ttype: \"struct\",\n\t\tfields: fields.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\t/**\n\t * Define an enum with ordered variants\n\t * @example\n\t * Schema.enum([\n\t * [\"None\", null],\n\t * [\"Some\", Schema.u64()],\n\t * [\"Error\", Schema.string()],\n\t * ])\n\t */\n\tenum: (variants: [string, BincodeSchema | null][]): BincodeSchema => ({\n\t\ttype: \"enum\",\n\t\tvariants: variants.map(([name, schema]) => ({ name, schema })),\n\t}),\n\n\tmap: (key: BincodeSchema, value: BincodeSchema): BincodeSchema => ({\n\t\ttype: \"map\",\n\t\tkey,\n\t\tvalue,\n\t}),\n\n\tpubkey: (): BincodeSchema => ({ type: \"pubkey\" }),\n} as const;\n\n// ========== Serialization ==========\n\n/**\n * Serialize a value according to a schema\n */\nexport function serialize(schema: BincodeSchema, value: unknown): Uint8Array {\n\tconst writer = new BincodeWriter();\n\twriteValue(writer, schema, value);\n\treturn writer.toBytes();\n}\n\n/**\n * Deserialize bytes according to a schema\n */\nexport function deserialize<T>(schema: BincodeSchema, data: Uint8Array): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\t// Verify all bytes were consumed (optional strict mode)\n\tif (!reader.isExhausted()) {\n\t\tconsole.warn(\n\t\t\t`Bincode deserialize: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\n/**\n * Deserialize bytes with strict validation\n */\nexport function deserializeStrict<T>(\n\tschema: BincodeSchema,\n\tdata: Uint8Array,\n): T {\n\tconst reader = new BincodeReader(data);\n\tconst result = readValue(reader, schema) as T;\n\n\tif (!reader.isExhausted()) {\n\t\tthrow new Error(\n\t\t\t`Unexpected data: ${reader.remaining()} bytes remaining after parsing`,\n\t\t);\n\t}\n\n\treturn result;\n}\n\nfunction writeValue(\n\twriter: BincodeWriter,\n\tschema: BincodeSchema,\n\tvalue: unknown,\n): void {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\twriter.writeU8(value as number);\n\t\t\tbreak;\n\t\tcase \"u16\":\n\t\t\twriter.writeU16(value as number);\n\t\t\tbreak;\n\t\tcase \"u32\":\n\t\t\twriter.writeU32(value as number);\n\t\t\tbreak;\n\t\tcase \"u64\":\n\t\t\twriter.writeU64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"u128\":\n\t\t\twriter.writeU128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i8\":\n\t\t\twriter.writeI8(value as number);\n\t\t\tbreak;\n\t\tcase \"i16\":\n\t\t\twriter.writeI16(value as number);\n\t\t\tbreak;\n\t\tcase \"i32\":\n\t\t\twriter.writeI32(value as number);\n\t\t\tbreak;\n\t\tcase \"i64\":\n\t\t\twriter.writeI64(value as bigint);\n\t\t\tbreak;\n\t\tcase \"i128\":\n\t\t\twriter.writeI128(value as bigint);\n\t\t\tbreak;\n\t\tcase \"f32\":\n\t\t\twriter.writeF32(value as number);\n\t\t\tbreak;\n\t\tcase \"f64\":\n\t\t\twriter.writeF64(value as number);\n\t\t\tbreak;\n\t\tcase \"bool\":\n\t\t\twriter.writeBool(value as boolean);\n\t\t\tbreak;\n\t\tcase \"string\":\n\t\t\twriter.writeString(value as string);\n\t\t\tbreak;\n\t\tcase \"bytes\":\n\t\t\twriter.writeVecBytes(value as Uint8Array);\n\t\t\tbreak;\n\t\tcase \"unit\":\n\t\t\t// Nothing to write for unit type\n\t\t\tbreak;\n\t\tcase \"fixedArray\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== schema.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Fixed array length mismatch: expected ${schema.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"pubkey\": {\n\t\t\tconst arr = value as Uint8Array;\n\t\t\tif (arr.length !== 32) {\n\t\t\t\tthrow new Error(`Pubkey must be exactly 32 bytes, got ${arr.length}`);\n\t\t\t}\n\t\t\twriter.writeFixedArray(arr);\n\t\t\tbreak;\n\t\t}\n\t\tcase \"vec\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\twriter.writeU64(BigInt(arr.length));\n\t\t\tfor (const item of arr) {\n\t\t\t\twriteValue(writer, schema.element, item);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tif (value === null || value === undefined) {\n\t\t\t\twriter.writeU8(0);\n\t\t\t} else {\n\t\t\t\twriter.writeU8(1);\n\t\t\t\twriteValue(writer, schema.inner, value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst arr = value as unknown[];\n\t\t\tif (arr.length !== schema.elements.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Tuple length mismatch: expected ${schema.elements.length}, got ${arr.length}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tfor (let i = 0; i < schema.elements.length; i++) {\n\t\t\t\twriteValue(writer, schema.elements[i], arr[i]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst obj = value as Record<string, unknown>;\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tif (!(field.name in obj)) {\n\t\t\t\t\tthrow new Error(`Missing struct field: ${field.name}`);\n\t\t\t\t}\n\t\t\t\twriteValue(writer, field.schema, obj[field.name]);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst enumValue = value as { variant: string; value?: unknown };\n\t\t\tconst variantIndex = schema.variants.findIndex(\n\t\t\t\t(v) => v.name === enumValue.variant,\n\t\t\t);\n\t\t\tif (variantIndex === -1) {\n\t\t\t\tconst validVariants = schema.variants.map((v) => v.name).join(\", \");\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Unknown variant: ${enumValue.variant}. Valid variants: ${validVariants}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\twriter.writeVariant(variantIndex);\n\t\t\tconst variantSchema = schema.variants[variantIndex].schema;\n\t\t\tif (variantSchema !== null) {\n\t\t\t\twriteValue(writer, variantSchema, enumValue.value);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst map = value as Map<unknown, unknown>;\n\t\t\twriter.writeU64(BigInt(map.size));\n\t\t\tfor (const [k, v] of map) {\n\t\t\t\twriteValue(writer, schema.key, k);\n\t\t\t\twriteValue(writer, schema.value, v);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault: {\n\t\t\tthrow new Error(`Unknown schema type: ${JSON.stringify(schema)}`);\n\t\t}\n\t}\n}\n\nfunction readValue(reader: BincodeReader, schema: BincodeSchema): unknown {\n\tswitch (schema.type) {\n\t\tcase \"u8\":\n\t\t\treturn reader.readU8();\n\t\tcase \"u16\":\n\t\t\treturn reader.readU16();\n\t\tcase \"u32\":\n\t\t\treturn reader.readU32();\n\t\tcase \"u64\":\n\t\t\treturn reader.readU64();\n\t\tcase \"u128\":\n\t\t\treturn reader.readU128();\n\t\tcase \"i8\":\n\t\t\treturn reader.readI8();\n\t\tcase \"i16\":\n\t\t\treturn reader.readI16();\n\t\tcase \"i32\":\n\t\t\treturn reader.readI32();\n\t\tcase \"i64\":\n\t\t\treturn reader.readI64();\n\t\tcase \"i128\":\n\t\t\treturn reader.readI128();\n\t\tcase \"f32\":\n\t\t\treturn reader.readF32();\n\t\tcase \"f64\":\n\t\t\treturn reader.readF64();\n\t\tcase \"bool\":\n\t\t\treturn reader.readBool();\n\t\tcase \"string\":\n\t\t\treturn reader.readString();\n\t\tcase \"bytes\":\n\t\t\treturn reader.readVecBytes();\n\t\tcase \"unit\":\n\t\t\treturn undefined;\n\t\tcase \"fixedArray\":\n\t\t\treturn reader.readFixedArray(schema.length);\n\t\tcase \"pubkey\":\n\t\t\treturn reader.readFixedArray(32);\n\t\tcase \"vec\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Vec length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tresult.push(readValue(reader, schema.element));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"option\": {\n\t\t\tconst hasValue = reader.readU8();\n\t\t\tif (hasValue === 0) return null;\n\t\t\tif (hasValue !== 1) {\n\t\t\t\tthrow new Error(`Invalid option discriminant: ${hasValue}`);\n\t\t\t}\n\t\t\treturn readValue(reader, schema.inner);\n\t\t}\n\t\tcase \"tuple\": {\n\t\t\tconst result: unknown[] = [];\n\t\t\tfor (const elementSchema of schema.elements) {\n\t\t\t\tresult.push(readValue(reader, elementSchema));\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"struct\": {\n\t\t\tconst result: Record<string, unknown> = {};\n\t\t\tfor (const field of schema.fields) {\n\t\t\t\tresult[field.name] = readValue(reader, field.schema);\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\tcase \"enum\": {\n\t\t\tconst variantIndex = reader.readVariant();\n\t\t\tif (variantIndex >= schema.variants.length) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Invalid variant index: ${variantIndex}, max: ${schema.variants.length - 1}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst variant = schema.variants[variantIndex];\n\t\t\tif (variant.schema === null) {\n\t\t\t\treturn { variant: variant.name };\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tvariant: variant.name,\n\t\t\t\tvalue: readValue(reader, variant.schema),\n\t\t\t};\n\t\t}\n\t\tcase \"map\": {\n\t\t\tconst lengthBigInt = reader.readU64();\n\t\t\tif (lengthBigInt > BigInt(Number.MAX_SAFE_INTEGER)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`Map length ${lengthBigInt} exceeds safe integer range`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst length = Number(lengthBigInt);\n\t\t\tconst map = new Map<unknown, unknown>();\n\t\t\tfor (let i = 0; i < length; i++) {\n\t\t\t\tconst key = readValue(reader, schema.key);\n\t\t\t\tconst value = readValue(reader, schema.value);\n\t\t\t\tmap.set(key, value);\n\t\t\t}\n\t\t\treturn map;\n\t\t}\n\t\tdefault: {\n\t\t\t// Exhaustive check - TypeScript will error if a case is missing\n\t\t\tconst _exhaustive: never = schema;\n\t\t\tthrow new Error(\n\t\t\t\t`Unknown schema type: ${(_exhaustive as BincodeSchema).type}`,\n\t\t\t);\n\t\t}\n\t}\n}\n\n// ========== Type Inference Helpers ==========\n\n/**\n * Infer TypeScript type from schema (for documentation purposes)\n *\n * Usage:\n * const mySchema = Schema.struct([...]);\n * type MyType = InferSchema<typeof mySchema>;\n */\nexport type InferSchema<S extends BincodeSchema> = S extends { type: \"u8\" }\n\t? number\n\t: S extends { type: \"u16\" }\n\t\t? number\n\t\t: S extends { type: \"u32\" }\n\t\t\t? number\n\t\t\t: S extends { type: \"u64\" }\n\t\t\t\t? bigint\n\t\t\t\t: S extends { type: \"u128\" }\n\t\t\t\t\t? bigint\n\t\t\t\t\t: S extends { type: \"i8\" }\n\t\t\t\t\t\t? number\n\t\t\t\t\t\t: S extends { type: \"i16\" }\n\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t: S extends { type: \"i32\" }\n\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t: S extends { type: \"i64\" }\n\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t: S extends { type: \"i128\" }\n\t\t\t\t\t\t\t\t\t\t? bigint\n\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f32\" }\n\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"f64\" }\n\t\t\t\t\t\t\t\t\t\t\t\t? number\n\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bool\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t? boolean\n\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"string\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? string\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"bytes\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"unit\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"fixedArray\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends { type: \"pubkey\" }\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? Uint8Array\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"vec\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\telement: infer E;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? E extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<E>[]\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: S extends {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttype: \"option\";\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tinner: infer I;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? I extends BincodeSchema\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t? InferSchema<I> | null\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: never\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t: unknown;\n",null,null,null,null,null,"// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n\tdeserialize,\n\tfield,\n\tfixedArray,\n\toption,\n\tserialize,\n\tvec,\n} from \"@dao-xyz/borsh\";\n\n/**\n * Serializes data using Borsh (Binary Object Representation Serializer for Hashing) encoding.\n *\n * Borsh is efficient for complex types like enums, Options, vectors, and nested structs.\n * Use the exported decorators (@field, @option, @vec) to define your data structures.\n *\n * @param data - Data object to serialize\n * @returns Serialized bytes\n *\n * @example\n * ```typescript\n * import { serializeBorsh, field, option } from '@rialo/ts-cdk';\n *\n * class SwapInstruction {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amountIn: bigint;\n *\n * @field({ type: option('u64') })\n * minAmountOut?: bigint;\n * }\n *\n * const data = serializeBorsh(new SwapInstruction({\n * instruction: 1,\n * amountIn: 1000n,\n * minAmountOut: 900n,\n * }));\n * ```\n */\nexport function serializeBorsh<T>(data: T): Uint8Array {\n\treturn serialize(data);\n}\n\n/**\n * Deserializes Borsh-encoded data into a typed object.\n *\n * @param data - Borsh-encoded bytes\n * @param type - Class constructor for the target type\n * @returns Deserialized object instance\n */\nexport function deserializeBorsh<T>(data: Uint8Array, type: new () => T): T {\n\treturn deserialize(data, type);\n}\n\n// Re-export Borsh decorators for convenience\nexport { field, fixedArray, option, vec };\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Account metadata table for deduplication and sorting.\n * Avoids: Complex account sorting logic scattered throughout builder\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport type { AccountMeta, MessageHeader } from \"./types\";\n\n/**\n * Internal account entry with aggregated metadata.\n */\ninterface AccountEntry {\n\tpubkey: PublicKey;\n\tisSigner: boolean;\n\tisWritable: boolean;\n}\n\n/**\n * Manages account deduplication and sorting for transaction messages.\n *\n * Accounts are sorted according to these rules:\n * 1. Signer + writable accounts first\n * 2. Then signer + readonly accounts\n * 3. Then non-signer + writable accounts\n * 4. Finally non-signer + readonly accounts\n * 5. Within each group, sort by public key bytes\n *\n * This matches Solana's account sorting rules for compatibility.\n */\nexport class AccountMetaTable {\n\tprivate readonly accounts: Map<string, AccountEntry> = new Map();\n\tprivate readonly accountOrder: string[] = [];\n\tprivate payerKey: string | null = null;\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t * The fee payer is always pinned at index 0 in the sorted account list,\n\t * regardless of lexicographic ordering. This matches Solana's invariant\n\t * that account_keys[0] is always the fee payer.\n\t */\n\tsetFeePayer(pubkey: PublicKey): void {\n\t\tthis.payerKey = pubkey.toString();\n\t\tthis.add({ pubkey, isSigner: true, isWritable: true });\n\t}\n\n\t/**\n\t * Add or update an account in the table.\n\t * If account already exists, merges signer/writable flags (OR operation).\n\t */\n\tadd(meta: AccountMeta): void {\n\t\tconst key = meta.pubkey.toString();\n\n\t\tif (this.accounts.has(key)) {\n\t\t\t// Merge with existing entry (OR flags)\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\t\tconst existing = this.accounts.get(key)!;\n\t\t\texisting.isSigner ||= meta.isSigner;\n\t\t\texisting.isWritable ||= meta.isWritable;\n\t\t} else {\n\t\t\t// New entry\n\t\t\tthis.accounts.set(key, {\n\t\t\t\tpubkey: meta.pubkey,\n\t\t\t\tisSigner: meta.isSigner,\n\t\t\t\tisWritable: meta.isWritable,\n\t\t\t});\n\t\t\tthis.accountOrder.push(key);\n\t\t}\n\t}\n\n\t/**\n\t * Add multiple accounts at once.\n\t */\n\taddAll(metas: readonly AccountMeta[]): void {\n\t\tfor (const meta of metas) {\n\t\t\tthis.add(meta);\n\t\t}\n\t}\n\n\t/**\n\t * Get the index of an account in the sorted order.\n\t * Returns -1 if account not found.\n\t */\n\tgetIndex(pubkey: PublicKey): number {\n\t\tconst sorted = this.getSortedAccounts();\n\t\treturn sorted.findIndex((entry) => entry.pubkey.equals(pubkey));\n\t}\n\n\t/**\n\t * Get sorted accounts according to transaction rules.\n\t */\n\tgetSortedAccounts(): readonly AccountEntry[] {\n\t\t// biome-ignore lint/style/noNonNullAssertion: we know the key is in the map\n\t\tconst entries = this.accountOrder.map((key) => this.accounts.get(key)!);\n\n\t\t// Separate fee payer from the rest so it can be pinned at index 0.\n\t\t// This matches the Rust CDK and Solana's invariant: account_keys[0] == fee_payer.\n\t\tlet payerEntry: AccountEntry | null = null;\n\t\tconst rest: AccountEntry[] = [];\n\t\tfor (const entry of entries) {\n\t\t\tif (this.payerKey !== null && entry.pubkey.toString() === this.payerKey) {\n\t\t\t\tpayerEntry = entry;\n\t\t\t} else {\n\t\t\t\trest.push(entry);\n\t\t\t}\n\t\t}\n\n\t\trest.sort((a, b): number => {\n\t\t\t// Priority 1: Signer + writable\n\t\t\tconst aPriority =\n\t\t\t\ta.isSigner && a.isWritable ? 0 : a.isSigner ? 1 : a.isWritable ? 2 : 3;\n\t\t\tconst bPriority =\n\t\t\t\tb.isSigner && b.isWritable ? 0 : b.isSigner ? 1 : b.isWritable ? 2 : 3;\n\n\t\t\tif (aPriority !== bPriority) {\n\t\t\t\treturn aPriority - bPriority;\n\t\t\t}\n\n\t\t\t// Priority 2: Sort by public key bytes\n\t\t\tconst aBytes = a.pubkey.toBytes();\n\t\t\tconst bBytes = b.pubkey.toBytes();\n\n\t\t\tfor (let i = 0; i < 32; i++) {\n\t\t\t\tif (aBytes[i] !== bBytes[i]) {\n\t\t\t\t\treturn aBytes[i] - bBytes[i];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\n\t\t// Pin fee payer at index 0\n\t\tif (payerEntry !== null) {\n\t\t\treturn [payerEntry, ...rest];\n\t\t}\n\t\treturn rest;\n\t}\n\n\t/**\n\t * Get the message header based on sorted accounts.\n\t */\n\tgetHeader(): MessageHeader {\n\t\tconst sorted = this.getSortedAccounts();\n\n\t\tlet numRequiredSignatures = 0;\n\t\tlet numReadonlySignedAccounts = 0;\n\t\tlet numReadonlyUnsignedAccounts = 0;\n\n\t\tfor (const entry of sorted) {\n\t\t\tif (entry.isSigner) {\n\t\t\t\tnumRequiredSignatures++;\n\t\t\t\tif (!entry.isWritable) {\n\t\t\t\t\tnumReadonlySignedAccounts++;\n\t\t\t\t}\n\t\t\t} else if (!entry.isWritable) {\n\t\t\t\tnumReadonlyUnsignedAccounts++;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tnumRequiredSignatures,\n\t\t\tnumReadonlySignedAccounts,\n\t\t\tnumReadonlyUnsignedAccounts,\n\t\t};\n\t}\n\n\t/**\n\t * Get sorted public keys.\n\t */\n\tgetPublicKeys(): readonly PublicKey[] {\n\t\treturn this.getSortedAccounts().map((entry) => entry.pubkey);\n\t}\n\n\t/**\n\t * Get number of accounts in table.\n\t */\n\tsize(): number {\n\t\treturn this.accounts.size;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for transaction operations.\n */\nexport enum TransactionErrorCode {\n\t// Building errors\n\tINVALID_INSTRUCTION = \"INVALID_INSTRUCTION\",\n\tINVALID_ACCOUNT_META = \"INVALID_ACCOUNT_META\",\n\tNO_INSTRUCTIONS = \"NO_INSTRUCTIONS\",\n\tDUPLICATE_ACCOUNT = \"DUPLICATE_ACCOUNT\",\n\n\t// Signing errors\n\tMISSING_SIGNATURE = \"MISSING_SIGNATURE\",\n\tINVALID_SIGNATURE = \"INVALID_SIGNATURE\",\n\tSIGNATURE_OUT_OF_BOUNDS = \"SIGNATURE_OUT_OF_BOUNDS\",\n\tSIGNER_NOT_FOUND = \"SIGNER_NOT_FOUND\",\n\tALREADY_SIGNED = \"ALREADY_SIGNED\",\n\n\t// Serialization errors\n\tINVALID_MESSAGE_FORMAT = \"INVALID_MESSAGE_FORMAT\",\n\tINSUFFICIENT_DATA = \"INSUFFICIENT_DATA\",\n\tSERIALIZATION_FAILED = \"SERIALIZATION_FAILED\",\n\n\t// Simulation errors\n\tSIMULATION_FAILED = \"SIMULATION_FAILED\",\n\tINSUFFICIENT_FUNDS = \"INSUFFICIENT_FUNDS\",\n\tBLOCKHASH_EXPIRED = \"BLOCKHASH_EXPIRED\",\n}\n\n/**\n * Error class for transaction operations with structured error information.\n */\nexport class TransactionError extends Error {\n\tconstructor(\n\t\tpublic readonly code: TransactionErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"TransactionError\";\n\t}\n\n\tstatic noInstructions(): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.NO_INSTRUCTIONS,\n\t\t\t\"Transaction must contain at least one instruction. Use addInstruction() to add instructions.\",\n\t\t);\n\t}\n\n\tstatic signerNotFound(pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIGNER_NOT_FOUND,\n\t\t\t`Public key ${pubkey} is not a required signer for this transaction. Check that the account is marked as a signer in the instruction.`,\n\t\t\t{ pubkey },\n\t\t);\n\t}\n\n\tstatic missingSignature(index: number, pubkey: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t`Missing signature for signer ${index} (${pubkey}). Transaction requires ${index + 1} signatures.`,\n\t\t\t{ index, pubkey },\n\t\t);\n\t}\n\n\tstatic simulationFailed(logs: string[], error: string): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.SIMULATION_FAILED,\n\t\t\t`Transaction simulation failed: ${error}`,\n\t\t\t{ logs, error },\n\t\t);\n\t}\n\n\tstatic insufficientFunds(\n\t\trequired: bigint,\n\t\tavailable: bigint,\n\t): TransactionError {\n\t\treturn new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_FUNDS,\n\t\t\t`Insufficient funds: need ${required}, have ${available}`,\n\t\t\t{ required: required.toString(), available: available.toString() },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: TransactionErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { PublicKey } from \"../../crypto\";\nimport { serializeBorsh } from \"../../serialization\";\nimport type { AccountMeta, Instruction } from \"../types\";\n\n/**\n * Create an instruction with Borsh-encoded data.\n *\n * @example\n * ```typescript\n * // Define your instruction data class\n * class MyInstructionData {\n * @field({ type: 'u8' })\n * instruction: number;\n *\n * @field({ type: 'u64' })\n * amount: bigint;\n *\n * @field({ type: option('string') })\n * memo?: string;\n * }\n *\n * // Create instruction\n * const instruction = createBorshInstruction({\n * programId: myProgramId,\n * accounts: [\n * { pubkey: account1, isSigner: true, isWritable: true },\n * { pubkey: account2, isSigner: false, isWritable: false },\n * ],\n * data: new MyInstructionData({\n * instruction: 5,\n * amount: 1000n,\n * memo: \"Hello, Rialo!\",\n * }),\n * });\n * ```\n */\nexport function createBorshInstruction<T>(params: {\n\tprogramId: PublicKey;\n\taccounts: AccountMeta[];\n\tdata: T;\n}): Instruction {\n\treturn {\n\t\tprogramId: params.programId,\n\t\taccounts: params.accounts,\n\t\tdata: serializeBorsh(params.data),\n\t};\n}\n\n/**\n * Helper for creating Borsh-serialized instruction data from a plain object.\n *\n * This is useful when you don't want to define a class with decorators.\n *\n * @example\n * ```typescript\n * const data = encodeBorshData({\n * instruction: { type: 'u8', value: 1 },\n * amount: { type: 'u64', value: 1000n },\n * recipient: { type: fixedArray('u8', 32), value: recipientBytes },\n * });\n * ```\n */\nexport function encodeBorshData(\n\t_schema: Record<string, { type: unknown; value: unknown }>,\n): Uint8Array {\n\t// TODO: Implement this\n\tthrow new Error(\"Use class-based Borsh serialization with decorators\");\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SYSTEM_PROGRAM_ID } from \"../../constants\";\nimport { PublicKey } from \"../../crypto\";\nimport { BincodeWriter } from \"../../serialization/bincode\";\nimport type { Instruction } from \"../types\";\n\n/**\n * System program instruction types.\n */\nexport enum SystemInstruction {\n\tCreateAccount = 0,\n\tAssign = 1,\n\tTransfer = 2,\n\tCreateAccountWithSeed = 3,\n\tAdvanceNonceAccount = 4,\n\tWithdrawNonceAccount = 5,\n\tInitializeNonceAccount = 6,\n\tAuthorizeNonceAccount = 7,\n\tAllocate = 8,\n\tAllocateWithSeed = 9,\n\tAssignWithSeed = 10,\n\tTransferWithSeed = 11,\n}\n\n/**\n * Create a transfer instruction.\n *\n * Transfers native tokens from one account to another.\n *\n * @param from - Source account (must be signer)\n * @param to - Destination account\n * @param amount - Amount to transfer in smallest denomination (kelvins)\n *\n * @example\n * ```typescript\n * const instruction = transferInstruction(fromPubkey, toPubkey, 1_000_000n);\n *\n * const tx = TransactionBuilder.create()\n * .setPayer(fromPubkey)\n * .addInstruction(instruction)\n * .build();\n * ```\n */\nexport function transferInstruction(\n\tfrom: PublicKey,\n\tto: PublicKey,\n\tamount: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (2 for Transfer)\n\t// - 8 bytes: amount as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Transfer);\n\twriter.writeU64(amount);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: to, isSigner: false, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an account creation instruction.\n *\n * @param from - Funding account (must be signer)\n * @param newAccount - New account to create (must be signer)\n * @param kelvins - Initial balance for new account\n * @param space - Number of bytes to allocate for account data\n * @param owner - Program that will own the new account\n */\nexport function createAccount(\n\tfrom: PublicKey,\n\tnewAccount: PublicKey,\n\tkelvins: bigint,\n\tspace: bigint,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (0 for CreateAccount)\n\t// - 8 bytes: kelvins as u64 little-endian\n\t// - 8 bytes: space as u64 little-endian\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(52);\n\twriter.writeVariant(SystemInstruction.CreateAccount);\n\twriter.writeU64(kelvins);\n\twriter.writeU64(space);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: from, isSigner: true, isWritable: true },\n\t\t\t{ pubkey: newAccount, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an allocate instruction.\n *\n * Allocates space for an account's data. The account must be owned by\n * the system program and must sign the transaction.\n *\n * @param account - Account to allocate space for (must be signer)\n * @param space - Number of bytes to allocate\n */\nexport function allocateInstruction(\n\taccount: PublicKey,\n\tspace: bigint,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (8 for Allocate)\n\t// - 8 bytes: space as u64 little-endian\n\tconst writer = new BincodeWriter(12);\n\twriter.writeVariant(SystemInstruction.Allocate);\n\twriter.writeU64(space);\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n\n/**\n * Create an assign instruction.\n *\n * Changes the owner of an account. The account must currently be owned\n * by the system program and must sign the transaction.\n *\n * @param account - Account to reassign (must be signer)\n * @param owner - New owner program\n */\nexport function assignInstruction(\n\taccount: PublicKey,\n\towner: PublicKey,\n): Instruction {\n\t// Instruction data: bincode serialization format\n\t// - 4 bytes: variant index as u32 little-endian (1 for Assign)\n\t// - 32 bytes: owner public key\n\tconst writer = new BincodeWriter(36);\n\twriter.writeVariant(SystemInstruction.Assign);\n\twriter.writeBytes(owner.toBytes());\n\n\treturn {\n\t\tprogramId: PublicKey.fromString(SYSTEM_PROGRAM_ID),\n\t\taccounts: [\n\t\t\t{ pubkey: account, isSigner: true, isWritable: true },\n\t\t],\n\t\tdata: writer.toBytes(),\n\t};\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport type { CompiledInstruction, MessageHeader } from \"./types\";\n\n/**\n * An unsigned transaction message ready to be signed.\n *\n * This is the data that gets signed by transaction signers.\n * It's immutable to prevent accidental modification after creation.\n *\n * @example\n * ```typescript\n * const message = MessageBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transferInstruction)\n * .build();\n *\n * // Serialize for signing\n * const messageBytes = message.serialize();\n * ```\n */\nexport class Message {\n\t/** Message header with signature requirements */\n\tpublic readonly header: MessageHeader;\n\n\t/** All account public keys referenced in the transaction */\n\tpublic readonly accountKeys: readonly PublicKey[];\n\n\t/** Transaction valid from (milliseconds since Unix epoch) */\n\tvalidFrom?: bigint;\n\n\t/** Config hash prefix for replay protection across chains */\n\tpublic readonly configHashPrefix: bigint;\n\n\t/** Whether the transaction should use OCC (optimistic concurrency control) scheduling */\n\tpublic readonly occ: boolean;\n\n\t/** Compiled instructions with account indices */\n\tpublic readonly instructions: readonly CompiledInstruction[];\n\n\t/** Cached serialized bytes */\n\tprivate serializedCache?: Uint8Array;\n\n\tconstructor(\n\t\theader: MessageHeader,\n\t\taccountKeys: readonly PublicKey[],\n\t\tvalidFrom: bigint,\n\t\tconfigHashPrefix: bigint,\n\t\tocc: boolean,\n\t\tinstructions: readonly CompiledInstruction[],\n\t) {\n\t\tthis.header = Object.freeze({ ...header });\n\t\tthis.accountKeys = Object.freeze([...accountKeys]);\n\t\tthis.validFrom = validFrom;\n\t\tthis.configHashPrefix = configHashPrefix;\n\t\tthis.occ = occ;\n\t\tthis.instructions = Object.freeze(\n\t\t\tinstructions.map((ix) => Object.freeze({ ...ix })),\n\t\t);\n\t}\n\n\t/**\n\t * Serialize message to bytes for signing.\n\t * Result is cached for performance.\n\t */\n\tserialize(): Uint8Array {\n\t\tif (!this.serializedCache) {\n\t\t\tthis.serializedCache = this.serializeInternal();\n\t\t}\n\t\treturn new Uint8Array(this.serializedCache); // Return copy\n\t}\n\n\t/**\n\t * Deserialize a message from wire format.\n\t *\n\t * @param data - Serialized message bytes\n\t * @returns Deserialized Message\n\t */\n\tstatic deserialize(data: Uint8Array): Message {\n\t\tif (data.length < 3) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for message header\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize header (3 bytes)\n\t\tconst header: MessageHeader = {\n\t\t\tnumRequiredSignatures: data[cursor++],\n\t\t\tnumReadonlySignedAccounts: data[cursor++],\n\t\t\tnumReadonlyUnsignedAccounts: data[cursor++],\n\t\t};\n\n\t\t// Deserialize account keys with compact-u16 length prefix\n\t\tconst [accountKeysLength, newCursor1] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor1;\n\n\t\tconst accountKeys: PublicKey[] = [];\n\t\tfor (let i = 0; i < accountKeysLength; i++) {\n\t\t\tif (data.length < cursor + 32) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for account key ${i}`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst keyBytes = data.slice(cursor, cursor + 32);\n\t\t\taccountKeys.push(PublicKey.fromBytes(keyBytes));\n\t\t\tcursor += 32;\n\t\t}\n\n\t\t// Deserialize recent valid from (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for validFrom\",\n\t\t\t);\n\t\t}\n\t\tconst validFromBytes = data.slice(cursor, cursor + 8);\n\t\tconst validFrom = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(validFromBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize config hash prefix (8 bytes)\n\t\tif (data.length < cursor + 8) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for configHashPrefix\",\n\t\t\t);\n\t\t}\n\t\tconst configHashPrefixBytes = data.slice(cursor, cursor + 8);\n\t\tconst configHashPrefix = BigInt.asUintN(\n\t\t\t64,\n\t\t\tnew DataView(configHashPrefixBytes.buffer).getBigUint64(0, true),\n\t\t);\n\t\tcursor += 8;\n\n\t\t// Deserialize occ flag (1 byte)\n\t\tif (data.length < cursor + 1) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"Insufficient data for occ flag\",\n\t\t\t);\n\t\t}\n\t\tconst occ = data[cursor++] !== 0;\n\n\t\t// Deserialize instructions with compact-u16 length prefix\n\t\tconst [instructionsLength, newCursor2] = deserializeCompactU16(\n\t\t\tdata,\n\t\t\tcursor,\n\t\t);\n\t\tcursor = newCursor2;\n\n\t\tconst instructions: CompiledInstruction[] = [];\n\t\tfor (let i = 0; i < instructionsLength; i++) {\n\t\t\t// Read program ID index\n\t\t\tif (data.length < cursor + 1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} program index`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst programIdIndex = data[cursor++];\n\n\t\t\t// Read account key indexes array\n\t\t\tconst [accountIndexesLength, newCursor3] = deserializeCompactU16(\n\t\t\t\tdata,\n\t\t\t\tcursor,\n\t\t\t);\n\t\t\tcursor = newCursor3;\n\n\t\t\tconst accountKeyIndexes: number[] = [];\n\t\t\tfor (let j = 0; j < accountIndexesLength; j++) {\n\t\t\t\tif (data.length < cursor + 1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t\t`Insufficient data for instruction ${i} account index ${j}`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\taccountKeyIndexes.push(data[cursor++]);\n\t\t\t}\n\n\t\t\t// Read instruction data array\n\t\t\tconst [dataLength, newCursor4] = deserializeCompactU16(data, cursor);\n\t\t\tcursor = newCursor4;\n\n\t\t\tif (data.length < cursor + dataLength) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for instruction ${i} data`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst instructionData = data.slice(cursor, cursor + dataLength);\n\t\t\tcursor += dataLength;\n\n\t\t\tinstructions.push({\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instructionData,\n\t\t\t});\n\t\t}\n\n\t\treturn new Message(header, accountKeys, validFrom, configHashPrefix, occ, instructions);\n\t}\n\n\tprivate serializeInternal(): Uint8Array {\n\t\tconst buffer: number[] = [];\n\n\t\t// Serialize header (3 bytes)\n\t\tbuffer.push(this.header.numRequiredSignatures);\n\t\tbuffer.push(this.header.numReadonlySignedAccounts);\n\t\tbuffer.push(this.header.numReadonlyUnsignedAccounts);\n\n\t\t// Serialize account keys with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.accountKeys, (buf, key) => {\n\t\t\tbuf.push(...key.toBytes());\n\t\t});\n\n\t\t// Serialize recent valid from (8 bytes, little-endian to match Rust's bincode)\n\t\tconst validFromBuffer = new ArrayBuffer(8);\n\t\tnew DataView(validFromBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.validFrom ?? BigInt(0),\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(validFromBuffer));\n\n\t\t// Serialize config hash prefix (8 bytes, little-endian)\n\t\tconst configHashPrefixBuffer = new ArrayBuffer(8);\n\t\tnew DataView(configHashPrefixBuffer).setBigUint64(\n\t\t\t0,\n\t\t\tthis.configHashPrefix,\n\t\t\ttrue,\n\t\t);\n\t\tbuffer.push(...new Uint8Array(configHashPrefixBuffer));\n\n\t\t// Serialize occ flag (1 byte, bincode bool)\n\t\tbuffer.push(this.occ ? 1 : 0);\n\n\t\t// Serialize instructions with compact-u16 length prefix\n\t\tthis.serializeCompactArray(buffer, this.instructions, (buf, ix) => {\n\t\t\t// Program ID index (1 byte)\n\t\t\tbuf.push(ix.programIdIndex);\n\n\t\t\t// Account indexes array\n\t\t\tthis.serializeCompactArray(buf, ix.accountKeyIndexes, (b, idx) => {\n\t\t\t\tb.push(idx);\n\t\t\t});\n\n\t\t\t// Instruction data array\n\t\t\tthis.serializeCompactArray(buf, Array.from(ix.data), (b, byte) => {\n\t\t\t\tb.push(byte);\n\t\t\t});\n\t\t});\n\n\t\treturn new Uint8Array(buffer);\n\t}\n\n\tprivate serializeCompactArray<T>(\n\t\tbuffer: number[],\n\t\titems: readonly T[],\n\t\tserializeItem: (buf: number[], item: T) => void,\n\t): void {\n\t\t// Serialize length as compact-u16\n\t\tthis.serializeCompactU16(buffer, items.length);\n\n\t\t// Serialize each item\n\t\tfor (const item of items) {\n\t\t\tserializeItem(buffer, item);\n\t\t}\n\t}\n\n\tprivate serializeCompactU16(buffer: number[], value: number): void {\n\t\tif (value < 0 || value > 0xffff) {\n\t\t\tthrow new Error(`Value out of range for compact-u16: ${value}`);\n\t\t}\n\n\t\t// Single byte (0-127)\n\t\tif (value <= 0x7f) {\n\t\t\tbuffer.push(value);\n\t\t\treturn;\n\t\t}\n\n\t\t// Two bytes (128-16383)\n\t\tif (value <= 0x3fff) {\n\t\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\t\tbuffer.push((value >> 7) & 0x7f);\n\t\t\treturn;\n\t\t}\n\n\t\t// Three bytes (16384-65535)\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 14) & 0xff);\n\t}\n\n\t/**\n\t * Get all signers required for this message.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.accountKeys.slice(0, this.header.numRequiredSignatures);\n\t}\n\n\t/**\n\t * Check if a public key is a required signer.\n\t */\n\tisSignerRequired(pubkey: PublicKey): boolean {\n\t\treturn this.getSigners().some((signer) => signer.equals(pubkey));\n\t}\n\n\t/**\n\t * Get the index of a signer in the signers array.\n\t * Returns -1 if not a signer.\n\t */\n\tgetSignerIndex(pubkey: PublicKey): number {\n\t\treturn this.getSigners().findIndex((signer) => signer.equals(pubkey));\n\t}\n}\n\nfunction deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n// transaction/transaction.ts\n// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { SIGNATURE_LENGTH } from \"../constants\";\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport { deserializeCompactU16, writeCompactU16 } from \"../serialization\";\nimport type { Signer } from \"../signer\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\n\n/**\n * A transaction with zero or more signatures.\n *\n * Transactions are immutable - signing methods return new instances.\n * This prevents accidental modification and signature tampering.\n *\n * @example\n * ```typescript\n * // Simple signing\n * const tx = builder.build();\n * const signed = tx.sign(keypair);\n *\n * // Method chaining\n * const signed = tx\n * .sign(keypair1)\n * .sign(keypair2)\n * .sign(keypair3);\n *\n * // Multi-sig convenience\n * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n * ```\n */\nexport class Transaction {\n\t/** The unsigned message */\n\tprivate readonly message: Message;\n\n\t/** Signatures (64 bytes each), aligned with message.header.numRequiredSignatures */\n\tprivate readonly signatures: readonly Uint8Array[];\n\n\t// Private constructor - use static factories\n\tprivate constructor(message: Message, signatures: readonly Uint8Array[]) {\n\t\tthis.message = message;\n\n\t\t// Deep copy signatures to prevent external mutation\n\t\tthis.signatures = signatures.map((sig) => new Uint8Array(sig));\n\n\t\t// Validate signature count matches required signers\n\t\tif (signatures.length !== message.header.numRequiredSignatures) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature count (${signatures.length}) doesn't match required signers (${message.header.numRequiredSignatures})`,\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Create an unsigned transaction from a message.\n\t * All signature slots are initialized to zero.\n\t *\n\t * @internal - Users should use TransactionBuilder instead\n\t */\n\tstatic fromMessage(message: Message): Transaction {\n\t\tconst numSignatures = message.header.numRequiredSignatures;\n\t\tconst signatures = Array.from(\n\t\t\t{ length: numSignatures },\n\t\t\t() => new Uint8Array(SIGNATURE_LENGTH),\n\t\t);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Create transaction from message and existing signatures.\n\t * @internal\n\t */\n\tstatic fromMessageAndSignatures(\n\t\tmessage: Message,\n\t\tsignatures: readonly Uint8Array[],\n\t): Transaction {\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\t/**\n\t * Deserialize a transaction from wire format.\n\t */\n\tstatic deserialize(data: Uint8Array): Transaction {\n\t\tif (data.length === 0) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t\t\"Cannot deserialize empty transaction data\",\n\t\t\t);\n\t\t}\n\n\t\tlet cursor = 0;\n\n\t\t// Deserialize signatures with compact-u16 length prefix\n\t\tconst [signaturesLength, newCursor] = deserializeCompactU16(data, cursor);\n\t\tcursor = newCursor;\n\n\t\tconst signatures: Uint8Array[] = [];\n\t\tfor (let i = 0; i < signaturesLength; i++) {\n\t\t\tif (data.length < cursor + SIGNATURE_LENGTH) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\t`Insufficient data for signature ${i}: need ${SIGNATURE_LENGTH} bytes at offset ${cursor}`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst signature = data.slice(cursor, cursor + SIGNATURE_LENGTH);\n\t\t\tsignatures.push(signature);\n\t\t\tcursor += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Remaining data is the message\n\t\tif (cursor >= data.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\t\"No message data found after signatures\",\n\t\t\t);\n\t\t}\n\n\t\tconst messageBytes = data.slice(cursor);\n\t\tconst message = Message.deserialize(messageBytes);\n\n\t\treturn new Transaction(message, signatures);\n\t}\n\n\tgetMessage(): Message {\n\t\treturn this.message;\n\t}\n\n\t/**\n\t * Sign the transaction with a keypair.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @param keypair - Keypair to sign with\n\t * @returns New Transaction instance with signature added\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx.sign(keypair);\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tsign(keypair: Keypair): Transaction {\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = keypair.sign(messageBytes);\n\t\treturn this.addSignatureForPubkey(keypair.publicKey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple keypairs at once.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signed = tx.signAll([keypair1, keypair2, keypair3]);\n\t * ```\n\t */\n\tsignAll(keypairs: Keypair[]): Transaction {\n\t\tlet result: Transaction = this;\n\t\tfor (const keypair of keypairs) {\n\t\t\tresult = result.sign(keypair);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Sign the transaction with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = await tx.signWith(browserWallet);\n\t * ```\n\t */\n\tasync signWith(signer: Signer): Promise<Transaction> {\n\t\tconst pubkey = await signer.getPublicKey();\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst signature = await signer.signMessage(messageBytes);\n\t\treturn this.addSignatureForPubkey(pubkey, signature);\n\t}\n\n\t/**\n\t * Sign with multiple signers.\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync signAllWith(signers: Signer[]): Promise<Transaction> {\n\t\tlet result: Transaction = this;\n\t\tfor (const signer of signers) {\n\t\t\tresult = await result.signWith(signer);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * Partially sign the transaction (for multi-sig transactions).\n\t * Returns a NEW Transaction instance.\n\t *\n\t * @example\n\t * ```typescript\n\t * const signedTx = tx\n\t * .partialSign(signer1)\n\t * .partialSign(signer2);\n\t * ```\n\t */\n\tpartialSign(keypair: Keypair): Transaction {\n\t\treturn this.sign(keypair);\n\t}\n\n\t/**\n\t * Partially sign with a Signer interface (async).\n\t * Returns a NEW Transaction instance.\n\t */\n\tasync partialSignWith(signer: Signer): Promise<Transaction> {\n\t\treturn this.signWith(signer);\n\t}\n\n\t/**\n\t * Add a signature at a specific index.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignature(index: number, signature: Signature | Uint8Array): Transaction {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds (must be 0-${this.signatures.length - 1})`,\n\t\t\t);\n\t\t}\n\n\t\tconst sigBytes =\n\t\t\tsignature instanceof Uint8Array ? signature : signature.toBytes();\n\n\t\tif (sigBytes.length !== SIGNATURE_LENGTH) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_SIGNATURE,\n\t\t\t\t`Signature must be ${SIGNATURE_LENGTH} bytes, got ${sigBytes.length}`,\n\t\t\t);\n\t\t}\n\n\t\t// Create NEW signatures array (immutable update)\n\t\tconst newSignatures = this.signatures.map((sig, i) =>\n\t\t\ti === index ? new Uint8Array(sigBytes) : new Uint8Array(sig),\n\t\t);\n\n\t\t// Return NEW Transaction instance\n\t\treturn new Transaction(this.message, newSignatures);\n\t}\n\n\t/**\n\t * Add a signature for a specific public key.\n\t * Returns a NEW Transaction instance.\n\t *\n\t * Most users should use sign() or signAll() instead.\n\t */\n\taddSignatureForPubkey(\n\t\tpubkey: PublicKey,\n\t\tsignature: Signature | Uint8Array,\n\t): Transaction {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\n\t\treturn this.addSignature(signerIndex, signature);\n\t}\n\n\t/**\n\t * Check if transaction is fully signed (all signatures present).\n\t */\n\tisSigned(): boolean {\n\t\treturn this.signatures.every((sig) => sig.some((byte) => byte !== 0));\n\t}\n\n\t/**\n\t * Check if a specific signature slot is filled.\n\t */\n\tisSignaturePresent(index: number): boolean {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.signatures[index].some((byte) => byte !== 0);\n\t}\n\n\t/**\n\t * Get all signatures (returns copies to prevent mutation).\n\t */\n\tgetSignatures(): readonly Uint8Array[] {\n\t\treturn this.signatures.map((sig) => new Uint8Array(sig));\n\t}\n\n\t/**\n\t * Get a specific signature (returns copy).\n\t */\n\tgetSignature(index: number): Uint8Array {\n\t\tif (index < 0 || index >= this.signatures.length) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.SIGNATURE_OUT_OF_BOUNDS,\n\t\t\t\t`Signature index ${index} out of bounds`,\n\t\t\t);\n\t\t}\n\t\treturn new Uint8Array(this.signatures[index]);\n\t}\n\n\t/**\n\t * Get a specific signature for a public key.\n\t */\n\tgetSignatureForPubkey(pubkey: PublicKey): Uint8Array {\n\t\tconst signerIndex = this.message.getSignerIndex(pubkey);\n\t\tif (signerIndex === -1) {\n\t\t\tthrow TransactionError.signerNotFound(pubkey.toString());\n\t\t}\n\t\treturn this.getSignature(signerIndex);\n\t}\n\n\t\n\n\t/**\n\t * Get required signers for this transaction.\n\t */\n\tgetSigners(): readonly PublicKey[] {\n\t\treturn this.message.getSigners();\n\t}\n\n\t/**\n\t * Get the number of required signatures.\n\t */\n\tgetRequiredSignatureCount(): number {\n\t\treturn this.message.header.numRequiredSignatures;\n\t}\n\n\t/**\n\t * Throw an error if the transaction is not fully signed.\n\t *\n\t * @throws {TransactionError} If transaction is not fully signed\n\t *\n\t * @example\n\t * ```typescript\n\t * signedTx.ensureSigned(); // Throws if not signed\n\t * await client.sendTransaction(signedTx.serialize());\n\t * ```\n\t */\n\tensureSigned(): void {\n\t\tif (!this.isSigned()) {\n\t\t\tconst missingIndices = this.signatures\n\t\t\t\t.map((sig, i) => ({ sig, i }))\n\t\t\t\t.filter(({ sig }) => !sig.some((byte) => byte !== 0))\n\t\t\t\t.map(({ i }) => i);\n\n\t\t\tconst signers = this.getSigners();\n\t\t\tconst missingSigners = missingIndices.map((i) => signers[i].toString());\n\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.MISSING_SIGNATURE,\n\t\t\t\t`Transaction is not fully signed. Missing signatures for: ${missingSigners.join(\", \")}`,\n\t\t\t\t{ missingIndices, missingSigners },\n\t\t\t);\n\t\t}\n\t}\n\n\t/**\n\t * Serialize transaction to wire format.\n\t */\n\tserialize(): Uint8Array {\n\t\t// Calculate exact size\n\t\tconst compactU16Size = this.signatures.length < 128 ? 1 : 2;\n\t\tconst sigsSize = compactU16Size + this.signatures.length * SIGNATURE_LENGTH;\n\t\tconst messageBytes = this.message.serialize();\n\t\tconst totalSize = sigsSize + messageBytes.length;\n\n\t\t// Pre-allocate buffer\n\t\tconst buffer = new Uint8Array(totalSize);\n\t\tlet offset = 0;\n\n\t\t// Write signature count\n\t\toffset = writeCompactU16(buffer, offset, this.signatures.length);\n\n\t\t// Write signatures\n\t\tfor (const sig of this.signatures) {\n\t\t\tbuffer.set(sig, offset);\n\t\t\toffset += SIGNATURE_LENGTH;\n\t\t}\n\n\t\t// Write message\n\t\tbuffer.set(messageBytes, offset);\n\n\t\treturn buffer;\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Fluent API for building transactions.\n * Returns Transaction directly (not Message).\n */\n\nimport type { PublicKey } from \"../crypto\";\nimport { AccountMetaTable } from \"./account-meta-table\";\nimport { TransactionError, TransactionErrorCode } from \"./errors\";\nimport { Message } from \"./message\";\nimport { Transaction } from \"./transaction\";\nimport type { CompiledInstruction, Instruction } from \"./types\";\n\n/**\n * Builder for creating transactions with a fluent API.\n *\n * Provides an intuitive interface for constructing transactions.\n * Call build() to get an unsigned Transaction ready for signing.\n *\n * @example\n * ```typescript\n * // Simple transfer\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .build();\n *\n * const signedTx = tx.sign(keypair);\n * await client.transaction.sendTransaction(signedTx.serialize());\n * ```\n *\n * @example\n * ```typescript\n * // Multi-instruction transaction\n * const tx = TransactionBuilder.create()\n * .setPayer(payer)\n * .setValidFrom(validFrom)\n * .addInstruction(transfer(from, to, 1_000_000n))\n * .addInstruction(memoInstruction(\"Payment for invoice #123\"))\n * .build();\n * ```\n */\nexport class TransactionBuilder {\n\tprivate payer?: PublicKey;\n private validFrom?: bigint;\n private configHashPrefix?: bigint;\n private occ = false;\n\tprivate readonly instructions: Instruction[] = [];\n\n\tprivate constructor() {}\n\n\t/**\n\t * Create a new transaction builder.\n\t */\n\tstatic create(): TransactionBuilder {\n\t\treturn new TransactionBuilder();\n\t}\n\n\t/**\n\t * Set the fee payer for this transaction.\n\t *\n\t * The payer will be the first account and must sign the transaction.\n\t * The payer pays for transaction fees.\n\t *\n\t * @param payer - Public key of the fee payer\n\t */\n\tsetPayer(payer: PublicKey): this {\n\t\tthis.payer = payer;\n\t\treturn this;\n\t}\n\n /**\n * Set the Transaction valid from.\n *\n * This is the time the transaction is valid from, in milliseconds since Unix epoch.\n * It can be used for additional replay protection or auditing.\n *\n * @param validFrom - Transaction valid from in milliseconds since Unix epoch\n */\n setValidFrom(validFrom: bigint): this {\n this.validFrom = validFrom;\n return this;\n }\n\n /**\n * Set the config hash prefix for replay protection.\n *\n * This is the first 64 bits of the config hash, used to ensure\n * transactions cannot be replayed on different chains.\n *\n * @param configHashPrefix - config hash prefix as a u64\n */\n setConfigHashPrefix(configHashPrefix: bigint): this {\n this.configHashPrefix = configHashPrefix;\n return this;\n }\n\n /**\n * Enable OCC (optimistic concurrency control) scheduling for this transaction.\n *\n * @param occ - Whether to use OCC scheduling (default: false)\n */\n setOcc(occ: boolean): this {\n this.occ = occ;\n return this;\n }\n\n\t/**\n\t * Add an instruction to the transaction.\n\t *\n\t * @param instruction - Instruction to add\n\t */\n\taddInstruction(instruction: Instruction): this {\n\t\tthis.instructions.push(instruction);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Add multiple instructions at once.\n\t *\n\t * @param instructions - Array of instructions to add\n\t */\n\taddInstructions(instructions: readonly Instruction[]): this {\n\t\tthis.instructions.push(...instructions);\n\t\treturn this;\n\t}\n\n\t/**\n\t * Build the transaction (unsigned).\n\t *\n\t * Returns an unsigned Transaction that's ready to be signed.\n\t *\n\t * @returns Unsigned Transaction\n\t * @throws {TransactionError} If payer, valid_from, or instructions are missing\n\t *\n\t * @example\n\t * ```typescript\n\t * const tx = builder.build();\n\t * const signedTx = tx.sign(keypair);\n\t * ```\n\t */\n\tbuild(): Transaction {\n\t\t// Validate required fields\n\t\tif (!this.payer) {\n\t\t\tthrow new TransactionError(\n\t\t\t\tTransactionErrorCode.INVALID_ACCOUNT_META,\n\t\t\t\t\"Transaction must have a fee payer. Use setPayer() to set the fee payer.\",\n\t\t\t);\n\t\t}\n\n if (!this.validFrom) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a valid from. Use setValidFrom() to set the valid from.\",\n );\n }\n\n if (this.configHashPrefix === undefined) {\n throw new TransactionError(\n TransactionErrorCode.INVALID_MESSAGE_FORMAT,\n \"Transaction must have a config hash prefix. Use setConfigHashPrefix() to set the config hash prefix.\",\n );\n }\n\n\t\tif (this.instructions.length === 0) {\n\t\t\tthrow TransactionError.noInstructions();\n\t\t}\n\n\t\t// Build account meta table\n\t\tconst accountTable = new AccountMetaTable();\n\n\t\t// Pin payer at index 0 (signer + writable)\n\t\taccountTable.setFeePayer(this.payer);\n\n\t\t// Add all accounts from instructions\n\t\tfor (const instruction of this.instructions) {\n\t\t\taccountTable.addAll(instruction.accounts);\n\n\t\t\t// Add program ID as readonly non-signer\n\t\t\taccountTable.add({\n\t\t\t\tpubkey: instruction.programId,\n\t\t\t\tisSigner: false,\n\t\t\t\tisWritable: false,\n\t\t\t});\n\t\t}\n\n\t\t// Get sorted accounts and header\n\t\tconst accountKeys = accountTable.getPublicKeys();\n\t\tconst header = accountTable.getHeader();\n\n\t\t// Compile instructions (convert pubkeys to indices)\n\t\tconst compiledInstructions = this.instructions.map((instruction) => {\n\t\t\tconst programIdIndex = accountTable.getIndex(instruction.programId);\n\t\t\tif (programIdIndex === -1) {\n\t\t\t\tthrow new TransactionError(\n\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t`Program ID ${instruction.programId.toString()} not found in account table`,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst accountKeyIndexes = instruction.accounts.map((meta) => {\n\t\t\t\tconst index = accountTable.getIndex(meta.pubkey);\n\t\t\t\tif (index === -1) {\n\t\t\t\t\tthrow new TransactionError(\n\t\t\t\t\t\tTransactionErrorCode.INVALID_INSTRUCTION,\n\t\t\t\t\t\t`Account ${meta.pubkey.toString()} not found in account table`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn index;\n\t\t\t});\n\n\t\t\tconst compiled: CompiledInstruction = {\n\t\t\t\tprogramIdIndex,\n\t\t\t\taccountKeyIndexes: Object.freeze(accountKeyIndexes),\n\t\t\t\tdata: instruction.data,\n\t\t\t};\n\n\t\t\treturn compiled;\n\t\t});\n\n\t\t// Create message\n\t\tconst message = new Message(\n\t\t\theader,\n\t\t\taccountKeys,\n this.validFrom,\n this.configHashPrefix,\n this.occ,\n\t\t\tcompiledInstructions,\n\t\t);\n\n\t\t// Return unsigned transaction\n\t\treturn Transaction.fromMessage(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Compact-u16 encoding for efficient variable-length integer serialization.\n *\n * Uses 1-3 bytes depending on value size:\n * - 0-127: 1 byte (7 bits)\n * - 128-16,383: 2 bytes (14 bits)\n * - 16,384-65,535: 3 bytes (16 bits)\n *\n * This encoding saves space for small numbers while supporting the full u16 range.\n */\nimport {\n\tTransactionError,\n\tTransactionErrorCode,\n} from \"../transaction/index.js\";\n\n/**\n * Serializes a u16 value into compact encoding.\n *\n * @param buffer - Output buffer to append bytes to\n * @param value - Value to encode (0-65535)\n * @throws {TransactionError} If value is out of range\n */\nexport function serializeCompactU16(buffer: number[], value: number): void {\n\tif (value < 0 || value > 0xffff) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.SERIALIZATION_FAILED,\n\t\t\t`Value out of range for compact-u16: ${value}`,\n\t\t);\n\t}\n\n\t// Single byte (0-127)\n\tif (value <= 0x7f) {\n\t\tbuffer.push(value);\n\t\treturn;\n\t}\n\n\t// Two bytes (128-16383)\n\tif (value <= 0x3fff) {\n\t\tbuffer.push((value & 0x7f) | 0x80);\n\t\tbuffer.push((value >> 7) & 0x7f);\n\t\treturn;\n\t}\n\n\t// Three bytes (16384-65535)\n\tbuffer.push((value & 0x7f) | 0x80);\n\tbuffer.push(((value >> 7) & 0x7f) | 0x80);\n\tbuffer.push((value >> 14) & 0xff);\n}\n\n/**\n * Deserializes a compact-u16 value from bytes.\n *\n * @param data - Input byte array\n * @param currentCursor - Starting position in the array\n * @returns Tuple of [decoded value, new cursor position]\n * @throws {TransactionError} If data is insufficient or malformed\n */\nexport function deserializeCompactU16(\n\tdata: Uint8Array,\n\tcurrentCursor: number,\n): [number, number] {\n\tlet cursor = currentCursor;\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Insufficient data for compact-u16\",\n\t\t);\n\t}\n\n\tconst firstByte = data[cursor++];\n\n\t// Single byte encoding (0-127)\n\tif ((firstByte & 0x80) === 0) {\n\t\treturn [firstByte, cursor];\n\t}\n\n\t// Multi-byte encoding\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst secondByte = data[cursor++];\n\n\t// Two-byte encoding (128-16383)\n\tif ((secondByte & 0x80) === 0) {\n\t\treturn [(firstByte & 0x7f) | (secondByte << 7), cursor];\n\t}\n\n\t// Three-byte encoding (16384-65535)\n\tif (cursor >= data.length) {\n\t\tthrow new TransactionError(\n\t\t\tTransactionErrorCode.INSUFFICIENT_DATA,\n\t\t\t\"Incomplete compact-u16 encoding\",\n\t\t);\n\t}\n\n\tconst thirdByte = data[cursor++];\n\tconst value =\n\t\t(firstByte & 0x7f) | ((secondByte & 0x7f) << 7) | (thirdByte << 14);\n\n\treturn [value, cursor];\n}\n\n/**\n * Writes a compact-u16 value directly to a buffer (zero-copy).\n *\n * Optimized version for in-place writing without intermediate allocations.\n *\n * @param buffer - Target buffer\n * @param offset - Starting position to write at\n * @param value - Value to encode (0-127 only, uses 1-2 bytes)\n * @returns New offset after writing\n */\nexport function writeCompactU16(\n\tbuffer: Uint8Array,\n\toffset: number,\n\tvalue: number,\n): number {\n\tif (value < 0x80) {\n\t\tbuffer[offset] = value;\n\t\treturn offset + 1;\n\t}\n\tbuffer[offset] = (value & 0x7f) | 0x80;\n\tbuffer[offset + 1] = value >> 7;\n\treturn offset + 2;\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { Keypair, PublicKey, Signature } from \"../crypto\";\nimport type { Signer } from \"./signer\";\n\n/**\n * Signer implementation using a local Ed25519 keypair.\n *\n * Provides synchronous signing without external dependencies.\n * Suitable for server-side applications, CLIs, and testing.\n *\n * @example\n * ```typescript\n * import { Keypair, KeypairSigner } from '@rialo/ts-cdk';\n *\n * // Generate new keypair\n * const keypair = Keypair.generate();\n * const signer = new KeypairSigner(keypair);\n *\n * // Or from mnemonic\n * const mnemonic = Mnemonic.generate();\n * const keypair = await mnemonic.toKeypair(0);\n * const signer = new KeypairSigner(keypair);\n *\n * // Sign messages\n * const publicKey = await signer.getPublicKey();\n * const signature = await signer.signMessage(message);\n * ```\n */\nexport class KeypairSigner implements Signer {\n\tconstructor(private readonly keypair: Keypair) {}\n\n\t/**\n\t * Returns the keypair's public key.\n\t */\n\tasync getPublicKey(): Promise<PublicKey> {\n\t\treturn this.keypair.publicKey;\n\t}\n\n\t/**\n\t * Signs a message using the keypair's private key.\n\t */\n\tasync signMessage(message: Uint8Array): Promise<Signature> {\n\t\treturn this.keypair.sign(message);\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/** RISC-V loader program ID (PolkaVM bytecode). */\nexport const RISCV_LOADER_PROGRAM_ID = \"RiscVLoader11111111111111111111111111111111\";\n\n/** LoaderV4 program ID (eBPF programs). */\nexport const LOADER_V4_PROGRAM_ID = \"LoaderV411111111111111111111111111111111111\";\n\n/** Default chunk size for writing program data (bytes). */\nexport const DEFAULT_CHUNK_SIZE = 3700;\n\n/** Default max retries when polling for confirmation. */\nexport const DEFAULT_MAX_RETRIES = 350;\n\n/** Default base delay between retries (ms). */\nexport const DEFAULT_RETRY_BASE_DELAY_MS = 50;\n\n/** Default max delay between retries (ms). */\nexport const DEFAULT_RETRY_MAX_DELAY_MS = 1000;\n\n/** Number of chunks to confirm per batch. */\nexport const DEFAULT_CONFIRMATION_BATCH_SIZE = 25;\n\n/** Safety factor for rent-exempt balance calculation. */\nexport const BUFFER_BALANCE_FACTOR = 1.2;\n\n/** Byte offset where program data begins in a loader account (size of LoaderState header). */\nexport const PROGRAM_DATA_OFFSET = 48;\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { base58 } from \"@scure/base\";\nimport { PublicKey, type Keypair } from \"../crypto\";\nimport type { RialoClient } from \"../rpc/clients/client\";\nimport { RpcError, RpcErrorCode } from \"../rpc/errors\";\nimport { createAccount, transferInstruction } from \"../transaction/instructions/system\";\nimport { TransactionBuilder } from \"../transaction/transaction-builder\";\nimport type { Instruction } from \"../transaction/types\";\nimport { sleep } from \"../utils\";\nimport {\n BUFFER_BALANCE_FACTOR,\n DEFAULT_CHUNK_SIZE,\n DEFAULT_CONFIRMATION_BATCH_SIZE,\n DEFAULT_MAX_RETRIES,\n DEFAULT_RETRY_BASE_DELAY_MS,\n DEFAULT_RETRY_MAX_DELAY_MS,\n PROGRAM_DATA_OFFSET,\n RISCV_LOADER_PROGRAM_ID,\n} from \"./constants\";\nimport { DeploymentError } from \"./errors\";\nimport {\n deployInstruction,\n retractInstruction,\n setProgramLengthInstruction,\n writeInstruction,\n} from \"./instructions\";\n\nexport interface DeploymentConfig {\n chunkSize?: number;\n maxRetries?: number;\n retryBaseDelayMs?: number;\n retryMaxDelayMs?: number;\n confirmationBatchSize?: number;\n}\n\nexport interface ProgramDeploymentOptions {\n programData: Uint8Array;\n programKeypair: Keypair;\n config?: DeploymentConfig;\n}\n\n/**\n * Calculate exponential backoff delay (matching Rust: base_ms * 1.15^attempt, capped).\n */\nexport function calculateBackoff(attempt: number, baseDelayMs: number, maxDelayMs: number): number {\n const delay = baseDelayMs * 1.15 ** attempt;\n return Math.min(delay, maxDelayMs);\n}\n\n\n/**\n * Deploys PolkaVM programs to Rialo chains.\n *\n * Matches the Rust CDK's ProgramDeployment behavior:\n * 1. Create/prepare program account\n * 2. Write bytecode in chunks with batched confirmation\n * 3. Deploy (make executable)\n */\nexport class ProgramDeployment {\n private readonly programData: Uint8Array;\n private readonly programKeypair: Keypair;\n private readonly chunkSize: number;\n private readonly maxRetries: number;\n private readonly retryBaseDelayMs: number;\n private readonly retryMaxDelayMs: number;\n private readonly confirmationBatchSize: number;\n\n constructor(options: ProgramDeploymentOptions) {\n if (options.programData.length === 0) {\n throw DeploymentError.emptyProgramData();\n }\n\n this.programData = options.programData;\n this.programKeypair = options.programKeypair;\n\n const chunkSize = options.config?.chunkSize ?? DEFAULT_CHUNK_SIZE;\n if (chunkSize <= 0) {\n throw DeploymentError.invalidChunkSize(chunkSize);\n }\n this.chunkSize = chunkSize;\n this.maxRetries = options.config?.maxRetries ?? DEFAULT_MAX_RETRIES;\n this.retryBaseDelayMs = options.config?.retryBaseDelayMs ?? DEFAULT_RETRY_BASE_DELAY_MS;\n this.retryMaxDelayMs = options.config?.retryMaxDelayMs ?? DEFAULT_RETRY_MAX_DELAY_MS;\n this.confirmationBatchSize =\n options.config?.confirmationBatchSize ?? DEFAULT_CONFIRMATION_BATCH_SIZE;\n }\n\n /**\n * Deploy the program to the blockchain.\n *\n * @param client - RPC client\n * @param payerKeypair - Keypair that pays for transactions and becomes the program authority\n * @returns The program's public key (derived from programKeypair)\n */\n async deploy(client: RialoClient, payerKeypair: Keypair): Promise<PublicKey> {\n const programPubkey = this.programKeypair.publicKey;\n const payerPubkey = payerKeypair.publicKey;\n const loaderPubkey = PublicKey.fromString(RISCV_LOADER_PROGRAM_ID);\n\n // Get config hash prefix for replay protection\n const configHashPrefix = await client.getConfigHashPrefix();\n\n // Calculate rent-exempt balance with safety factor\n const rentExempt = await client.getMinimumBalanceForRentExemption(\n BigInt(PROGRAM_DATA_OFFSET + this.programData.length),\n );\n const bufferBalance = BigInt(Math.floor(Number(rentExempt) * BUFFER_BALANCE_FACTOR));\n\n // --- Phase 1: Create or prepare program account ---\n const validFrom = BigInt(Date.now());\n\n const existing = await client.getAccountInfo(programPubkey).catch((e: unknown) => {\n // RialoClient.getAccountInfo throws \"Account does not exist: ...\" for missing accounts.\n // Any other error (network, rate-limit, server) must propagate — not silently\n // route into the account-creation path.\n if (e instanceof Error && e.message.startsWith(\"Account does not exist\")) {\n return null;\n }\n throw e;\n });\n\n if (existing) {\n // --- Redeployment path ---\n\n // Validate owner matches RISC-V loader (same check as Rust CDK)\n if (existing.owner.toString() !== RISCV_LOADER_PROGRAM_ID) {\n throw DeploymentError.ownerMismatch(existing.owner.toString());\n }\n\n const ixs: Instruction[] = [];\n\n // Top up funds if needed\n if (existing.kelvin < bufferBalance) {\n const deficit = bufferBalance - existing.kelvin;\n ixs.push(transferInstruction(payerPubkey, programPubkey, deficit));\n }\n\n // Retract if currently executable\n if (existing.executable) {\n ixs.push(retractInstruction(programPubkey, payerPubkey));\n }\n\n // Resize (always needed for redeployment)\n ixs.push(\n setProgramLengthInstruction(\n programPubkey,\n payerPubkey,\n this.programData.length,\n payerPubkey,\n ),\n );\n\n const builder = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(validFrom)\n .setConfigHashPrefix(configHashPrefix);\n\n for (const ix of ixs) {\n builder.addInstruction(ix);\n }\n\n const tx = builder.build().sign(payerKeypair);\n await this.sendAndConfirm(client, tx.serialize());\n } else {\n // --- Initial deployment path ---\n const createIx = createAccount(\n payerPubkey,\n programPubkey,\n bufferBalance,\n 0n, // space=0, the loader manages sizing via SetProgramLength\n loaderPubkey,\n );\n const setLengthIx = setProgramLengthInstruction(\n programPubkey,\n payerPubkey,\n this.programData.length,\n payerPubkey,\n );\n\n const tx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(validFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(createIx)\n .addInstruction(setLengthIx)\n .build()\n .signAll([payerKeypair, this.programKeypair]);\n\n await this.sendAndConfirm(client, tx.serialize());\n }\n\n // Wait for buffer account to be ready\n await this.waitForBufferReady(client, programPubkey);\n\n // --- Phase 2: Write bytecode in chunks ---\n const chunks = this.splitIntoChunks(this.programData);\n const batchSignatures: string[] = [];\n\n for (let i = 0; i < chunks.length; i++) {\n const offset = i * this.chunkSize;\n const ix = writeInstruction(programPubkey, payerPubkey, offset, chunks[i]);\n\n const chunkValidFrom = BigInt(Date.now());\n const tx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(chunkValidFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(ix)\n .build()\n .sign(payerKeypair);\n\n let sig: Uint8Array;\n try {\n sig = await client.sendTransaction(tx.serialize());\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n batchSignatures.push(base58.encode(sig));\n\n // Confirm batch when full or on last chunk\n const isBatchComplete = batchSignatures.length >= this.confirmationBatchSize;\n const isLastChunk = i === chunks.length - 1;\n\n if (isBatchComplete || isLastChunk) {\n await this.confirmBatch(client, batchSignatures);\n batchSignatures.length = 0;\n }\n }\n\n // --- Phase 3: Deploy ---\n const deployIx = deployInstruction(programPubkey, payerPubkey);\n const deployValidFrom = BigInt(Date.now());\n const deployTx = TransactionBuilder.create()\n .setPayer(payerPubkey)\n .setValidFrom(deployValidFrom)\n .setConfigHashPrefix(configHashPrefix)\n .addInstruction(deployIx)\n .build()\n .sign(payerKeypair);\n\n await this.sendAndConfirm(client, deployTx.serialize());\n\n return programPubkey;\n }\n\n private splitIntoChunks(data: Uint8Array): Uint8Array[] {\n const chunks: Uint8Array[] = [];\n for (let offset = 0; offset < data.length; offset += this.chunkSize) {\n chunks.push(data.subarray(offset, offset + this.chunkSize));\n }\n return chunks;\n }\n\n private async sendAndConfirm(client: RialoClient, transaction: Uint8Array): Promise<void> {\n let result;\n try {\n result = await client.sendAndConfirmTransaction(transaction, {\n confirmMaxRetries: this.maxRetries,\n confirmRetryDelayMs: this.retryBaseDelayMs,\n });\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n if (!result.executed) {\n throw DeploymentError.transactionFailed(result.err ?? \"unknown error\");\n }\n }\n\n private async confirmBatch(client: RialoClient, signatures: string[]): Promise<void> {\n let results;\n try {\n results = await Promise.all(\n signatures.map(sig => client.confirmTransaction(sig, {\n maxRetries: this.maxRetries,\n retryDelayMs: this.retryBaseDelayMs,\n })),\n );\n } catch (e: unknown) {\n throw this.toDeploymentError(e);\n }\n for (const result of results) {\n if (!result.executed) {\n throw DeploymentError.transactionFailed(result.err ?? \"unknown error\", {\n signature: result.signature,\n });\n }\n }\n }\n\n private toDeploymentError(e: unknown): DeploymentError {\n if (e instanceof DeploymentError) return e;\n if (e instanceof RpcError) {\n const details = { rpcCode: e.code, retryable: e.retryable, ...e.details };\n switch (e.code) {\n case RpcErrorCode.TRANSACTION_CONFIRMATION_TIMEOUT:\n return DeploymentError.transactionTimeout(e.message, details);\n case RpcErrorCode.TRANSACTION_REJECTED:\n case RpcErrorCode.INSUFFICIENT_FUNDS:\n return DeploymentError.transactionFailed(e.message, details);\n default:\n return DeploymentError.rpcError(e.message, details);\n }\n }\n const message = e instanceof Error ? e.message : String(e);\n return DeploymentError.rpcError(message, {\n cause: e instanceof Error ? e.constructor.name : undefined,\n });\n }\n\n private async waitForBufferReady(client: RialoClient, programPubkey: PublicKey): Promise<void> {\n const expectedSize = PROGRAM_DATA_OFFSET + this.programData.length;\n\n for (let attempt = 0; attempt < this.maxRetries; attempt++) {\n try {\n const account = await client.getAccountInfo(programPubkey);\n if (\n account.owner.toString() === RISCV_LOADER_PROGRAM_ID &&\n account.space >= BigInt(expectedSize)\n ) {\n return;\n }\n } catch (e: unknown) {\n // \"Account does not exist\" is expected while waiting — keep polling.\n // Any other error (network, server) should propagate.\n if (!(e instanceof Error && e.message.startsWith(\"Account does not exist\"))) {\n throw e;\n }\n }\n\n const delay = calculateBackoff(attempt, this.retryBaseDelayMs, this.retryMaxDelayMs);\n await sleep(delay);\n }\n throw DeploymentError.bufferNotReady(this.maxRetries);\n }\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error codes for program deployment operations.\n */\nexport enum DeploymentErrorCode {\n\t// Validation errors\n\tEMPTY_PROGRAM_DATA = \"EMPTY_PROGRAM_DATA\",\n\tINVALID_CHUNK_SIZE = \"INVALID_CHUNK_SIZE\",\n\n\t// Deployment errors\n\tOWNER_MISMATCH = \"OWNER_MISMATCH\",\n\tTRANSACTION_FAILED = \"TRANSACTION_FAILED\",\n\tTRANSACTION_TIMEOUT = \"TRANSACTION_TIMEOUT\",\n\tRPC_ERROR = \"RPC_ERROR\",\n\tBUFFER_NOT_READY = \"BUFFER_NOT_READY\",\n}\n\n/**\n * Error class for program deployment operations with structured error information.\n */\nexport class DeploymentError extends Error {\n\tconstructor(\n\t\tpublic readonly code: DeploymentErrorCode,\n\t\tmessage: string,\n\t\tpublic readonly details?: Record<string, unknown>,\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"DeploymentError\";\n\t}\n\n\tstatic emptyProgramData(): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.EMPTY_PROGRAM_DATA,\n\t\t\t\"Program data must not be empty.\",\n\t\t);\n\t}\n\n\tstatic invalidChunkSize(chunkSize: number): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.INVALID_CHUNK_SIZE,\n\t\t\t`chunkSize must be greater than 0, got ${chunkSize}.`,\n\t\t\t{ chunkSize },\n\t\t);\n\t}\n\n\tstatic ownerMismatch(owner: string): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.OWNER_MISMATCH,\n\t\t\t`Existing account is not owned by RISC-V Loader (owner: ${owner}).`,\n\t\t\t{ owner },\n\t\t);\n\t}\n\n\tstatic transactionFailed(err: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.TRANSACTION_FAILED,\n\t\t\t`Transaction failed: ${err}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic transactionTimeout(message: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.TRANSACTION_TIMEOUT,\n\t\t\t`Transaction confirmation timed out: ${message}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic rpcError(message: string, details?: Record<string, unknown>): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.RPC_ERROR,\n\t\t\t`RPC error during deployment: ${message}`,\n\t\t\tdetails,\n\t\t);\n\t}\n\n\tstatic bufferNotReady(maxRetries: number): DeploymentError {\n\t\treturn new DeploymentError(\n\t\t\tDeploymentErrorCode.BUFFER_NOT_READY,\n\t\t\t`Buffer account not ready after ${maxRetries} attempts.`,\n\t\t\t{ maxRetries },\n\t\t);\n\t}\n\n\ttoJSON(): {\n\t\tcode: DeploymentErrorCode;\n\t\tmessage: string;\n\t\tdetails?: Record<string, unknown>;\n\t} {\n\t\treturn {\n\t\t\tcode: this.code,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t};\n\t}\n}\n","// Copyright (c) Subzero Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { PublicKey } from \"../crypto\";\nimport { BincodeWriter } from \"../serialization/bincode\";\nimport type { Instruction } from \"../transaction/types\";\nimport { RISCV_LOADER_PROGRAM_ID } from \"./constants\";\n\n/**\n * RISC-V loader instruction variant indices.\n * Must match `RiscVLoaderInstruction` enum order in Rust (bincode u32 encoding).\n */\nexport enum RiscVLoaderInstruction {\n Write = 0,\n Copy = 1,\n SetProgramLength = 2,\n Deploy = 3,\n Retract = 4,\n TransferAuthority = 5,\n Finalize = 6,\n}\n\nconst LOADER_PROGRAM_ID = PublicKey.fromString(RISCV_LOADER_PROGRAM_ID);\n\n/**\n * Create a Write instruction to write bytecode into an undeployed program account.\n * Accounts: [program (writable), authority (signer)]\n */\nexport function writeInstruction(\n programAddress: PublicKey,\n authority: PublicKey,\n offset: number,\n bytes: Uint8Array,\n): Instruction {\n const writer = new BincodeWriter(4 + 4 + 8 + bytes.length);\n writer.writeVariant(RiscVLoaderInstruction.Write);\n writer.writeU32(offset);\n writer.writeVecBytes(bytes);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a SetProgramLength instruction to resize a program account.\n * Accounts: [program (writable), authority (signer), recipient (writable)]\n */\nexport function setProgramLengthInstruction(\n programAddress: PublicKey,\n authority: PublicKey,\n newSize: number,\n recipientAddress: PublicKey,\n): Instruction {\n const writer = new BincodeWriter(8);\n writer.writeVariant(RiscVLoaderInstruction.SetProgramLength);\n writer.writeU32(newSize);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n { pubkey: recipientAddress, isSigner: false, isWritable: true },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a Deploy instruction to make a program executable.\n * Accounts: [program (writable), authority (signer)]\n */\nexport function deployInstruction(programAddress: PublicKey, authority: PublicKey): Instruction {\n const writer = new BincodeWriter(4);\n writer.writeVariant(RiscVLoaderInstruction.Deploy);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n\n/**\n * Create a Retract instruction to undo deployment (enters maintenance mode).\n * Accounts: [program (writable), authority (signer)]\n */\nexport function retractInstruction(programAddress: PublicKey, authority: PublicKey): Instruction {\n const writer = new BincodeWriter(4);\n writer.writeVariant(RiscVLoaderInstruction.Retract);\n\n return {\n programId: LOADER_PROGRAM_ID,\n accounts: [\n { pubkey: programAddress, isSigner: false, isWritable: true },\n { pubkey: authority, isSigner: true, isWritable: false },\n ],\n data: writer.toBytes(),\n };\n}\n"]}
|