{
  "version": 3,
  "sources": ["../../node_modules/ws/lib/stream.js", "../../node_modules/ws/lib/constants.js", "../../node_modules/ws/lib/buffer-util.js", "../../node_modules/ws/lib/limiter.js", "../../node_modules/ws/lib/permessage-deflate.js", "../../node_modules/ws/lib/validation.js", "../../node_modules/ws/lib/receiver.js", "../../node_modules/ws/lib/sender.js", "../../node_modules/ws/lib/event-target.js", "../../node_modules/ws/lib/extension.js", "../../node_modules/ws/lib/websocket.js", "../../node_modules/ws/lib/subprotocol.js", "../../node_modules/ws/lib/websocket-server.js", "../../node_modules/pvtsutils/build/index.js", "../../node_modules/pvutils/build/utils.js", "../../node_modules/asn1js/build/index.js", "../../src/index.ts", "../../node_modules/ethers/src.ts/ethers.ts", "../../node_modules/ethers/src.ts/_version.ts", "../../node_modules/ethers/src.ts/utils/properties.ts", "../../node_modules/ethers/src.ts/utils/errors.ts", "../../node_modules/ethers/src.ts/utils/data.ts", "../../node_modules/ethers/src.ts/utils/maths.ts", "../../node_modules/ethers/src.ts/utils/base58.ts", "../../node_modules/ethers/src.ts/utils/base64.ts", "../../node_modules/ethers/src.ts/utils/events.ts", "../../node_modules/ethers/src.ts/utils/utf8.ts", "../../node_modules/ethers/src.ts/utils/geturl.ts", "../../node_modules/ethers/src.ts/utils/fetch.ts", "../../node_modules/ethers/src.ts/utils/fixednumber.ts", "../../node_modules/ethers/src.ts/utils/rlp-decode.ts", "../../node_modules/ethers/src.ts/utils/rlp-encode.ts", "../../node_modules/ethers/src.ts/utils/units.ts", "../../node_modules/ethers/src.ts/utils/uuid.ts", "../../node_modules/ethers/src.ts/abi/coders/abstract-coder.ts", "../../node_modules/ethers/src.ts/crypto/crypto.ts", "../../node_modules/ethers/src.ts/crypto/hmac.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/_assert.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/_u64.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/cryptoNode.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/utils.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/sha3.ts", "../../node_modules/ethers/src.ts/crypto/keccak.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/_sha2.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/ripemd160.ts", "../../node_modules/ethers/src.ts/crypto/ripemd160.ts", "../../node_modules/ethers/src.ts/crypto/pbkdf2.ts", "../../node_modules/ethers/src.ts/crypto/random.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/sha256.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/hmac.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/pbkdf2.ts", "../../node_modules/ethers/node_modules/@noble/hashes/src/scrypt.ts", "../../node_modules/ethers/src.ts/crypto/scrypt.ts", "../../node_modules/ethers/src.ts/crypto/sha2.ts", "../../node_modules/ethers/node_modules/@noble/curves/src/abstract/utils.ts", "../../node_modules/ethers/node_modules/@noble/curves/src/abstract/modular.ts", "../../node_modules/ethers/node_modules/@noble/curves/src/abstract/curve.ts", "../../node_modules/ethers/node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../node_modules/ethers/node_modules/@noble/curves/src/_shortw_utils.ts", "../../node_modules/ethers/node_modules/@noble/curves/src/secp256k1.ts", "../../node_modules/ethers/src.ts/constants/addresses.ts", "../../node_modules/ethers/src.ts/constants/hashes.ts", "../../node_modules/ethers/src.ts/constants/numbers.ts", "../../node_modules/ethers/src.ts/constants/strings.ts", "../../node_modules/ethers/src.ts/crypto/signature.ts", "../../node_modules/ethers/src.ts/crypto/signing-key.ts", "../../node_modules/ethers/src.ts/crypto/index.ts", "../../node_modules/ethers/src.ts/address/address.ts", "../../node_modules/ethers/src.ts/address/contract-address.ts", "../../node_modules/ethers/src.ts/address/checks.ts", "../../node_modules/ethers/src.ts/abi/typed.ts", "../../node_modules/ethers/src.ts/abi/coders/address.ts", "../../node_modules/ethers/src.ts/abi/coders/anonymous.ts", "../../node_modules/ethers/src.ts/abi/coders/array.ts", "../../node_modules/ethers/src.ts/abi/coders/boolean.ts", "../../node_modules/ethers/src.ts/abi/coders/bytes.ts", "../../node_modules/ethers/src.ts/abi/coders/fixed-bytes.ts", "../../node_modules/ethers/src.ts/abi/coders/null.ts", "../../node_modules/ethers/src.ts/abi/coders/number.ts", "../../node_modules/ethers/src.ts/abi/coders/string.ts", "../../node_modules/ethers/src.ts/abi/coders/tuple.ts", "../../node_modules/ethers/src.ts/hash/id.ts", "../../node_modules/@adraffy/ens-normalize/dist/index.mjs", "../../node_modules/ethers/src.ts/hash/namehash.ts", "../../node_modules/ethers/src.ts/transaction/accesslist.ts", "../../node_modules/ethers/src.ts/transaction/address.ts", "../../node_modules/ethers/src.ts/transaction/transaction.ts", "../../node_modules/ethers/src.ts/hash/message.ts", "../../node_modules/ethers/src.ts/hash/solidity.ts", "../../node_modules/ethers/src.ts/hash/typed-data.ts", "../../node_modules/ethers/src.ts/abi/fragments.ts", "../../node_modules/ethers/src.ts/abi/abi-coder.ts", "../../node_modules/ethers/src.ts/abi/bytes32.ts", "../../node_modules/ethers/src.ts/abi/interface.ts", "../../node_modules/ethers/src.ts/providers/provider.ts", "../../node_modules/ethers/src.ts/contract/wrappers.ts", "../../node_modules/ethers/src.ts/contract/contract.ts", "../../node_modules/ethers/src.ts/contract/factory.ts", "../../node_modules/ethers/src.ts/providers/ens-resolver.ts", "../../node_modules/ethers/src.ts/providers/format.ts", "../../node_modules/ethers/src.ts/providers/plugins-network.ts", "../../node_modules/ethers/src.ts/providers/network.ts", "../../node_modules/ethers/src.ts/providers/subscriber-polling.ts", "../../node_modules/ethers/src.ts/providers/abstract-provider.ts", "../../node_modules/ethers/src.ts/providers/abstract-signer.ts", "../../node_modules/ethers/src.ts/providers/community.ts", "../../node_modules/ethers/src.ts/providers/subscriber-filterid.ts", "../../node_modules/ethers/src.ts/providers/provider-jsonrpc.ts", "../../node_modules/ethers/src.ts/providers/provider-ankr.ts", "../../node_modules/ethers/src.ts/providers/provider-alchemy.ts", "../../node_modules/ethers/src.ts/providers/provider-chainstack.ts", "../../node_modules/ethers/src.ts/providers/provider-cloudflare.ts", "../../node_modules/ethers/src.ts/providers/provider-etherscan.ts", "../../node_modules/ws/wrapper.mjs", "../../node_modules/ethers/src.ts/providers/provider-socket.ts", "../../node_modules/ethers/src.ts/providers/provider-websocket.ts", "../../node_modules/ethers/src.ts/providers/provider-infura.ts", "../../node_modules/ethers/src.ts/providers/provider-quicknode.ts", "../../node_modules/ethers/src.ts/providers/provider-fallback.ts", "../../node_modules/ethers/src.ts/providers/default-provider.ts", "../../node_modules/ethers/src.ts/providers/signer-noncemanager.ts", "../../node_modules/ethers/src.ts/providers/provider-browser.ts", "../../node_modules/ethers/src.ts/providers/provider-pocket.ts", "../../node_modules/ethers/src.ts/providers/provider-ipcsocket.ts", "../../node_modules/ethers/src.ts/wallet/base-wallet.ts", "../../node_modules/ethers/src.ts/wordlists/decode-owl.ts", "../../node_modules/ethers/src.ts/wordlists/wordlist.ts", "../../node_modules/ethers/src.ts/wordlists/wordlist-owl.ts", "../../node_modules/ethers/src.ts/wordlists/lang-en.ts", "../../node_modules/ethers/src.ts/wallet/mnemonic.ts", "../../node_modules/aes-js/src.ts/aes.ts", "../../node_modules/aes-js/src.ts/mode.ts", "../../node_modules/aes-js/src.ts/mode-cbc.ts", "../../node_modules/aes-js/src.ts/mode-ctr.ts", "../../node_modules/aes-js/src.ts/padding.ts", "../../node_modules/ethers/src.ts/wallet/utils.ts", "../../node_modules/ethers/src.ts/wallet/json-keystore.ts", "../../node_modules/ethers/src.ts/wallet/hdwallet.ts", "../../node_modules/ethers/src.ts/wallet/json-crowdsale.ts", "../../node_modules/ethers/src.ts/wallet/wallet.ts", "../../node_modules/ethers/src.ts/wordlists/bit-reader.ts", "../../node_modules/ethers/src.ts/wordlists/decode-owla.ts", "../../node_modules/ethers/src.ts/wordlists/wordlist-owla.ts", "../../node_modules/ethers/src.ts/wordlists/lang-cz.ts", "../../node_modules/ethers/src.ts/wordlists/lang-es.ts", "../../node_modules/ethers/src.ts/wordlists/lang-fr.ts", "../../node_modules/ethers/src.ts/wordlists/lang-ja.ts", "../../node_modules/ethers/src.ts/wordlists/lang-ko.ts", "../../node_modules/ethers/src.ts/wordlists/lang-it.ts", "../../node_modules/ethers/src.ts/wordlists/lang-pt.ts", "../../node_modules/ethers/src.ts/wordlists/lang-zh.ts", "../../node_modules/ethers/src.ts/wordlists/wordlists.ts", "../../node_modules/@noble/hashes/src/_assert.ts", "../../node_modules/@noble/hashes/src/_u64.ts", "../../node_modules/@noble/hashes/src/cryptoNode.ts", "../../node_modules/@noble/hashes/src/utils.ts", "../../node_modules/@noble/hashes/src/sha3.ts", "../../src/ethers-utils.ts", "../../src/crypto/ibe-bn254.ts", "../../node_modules/@noble/hashes/src/_md.ts", "../../node_modules/@noble/hashes/src/sha256.ts", "../../node_modules/@noble/hashes/src/hmac.ts", "../../node_modules/@noble/curves/src/abstract/utils.ts", "../../node_modules/@noble/curves/src/abstract/modular.ts", "../../node_modules/@noble/curves/src/abstract/curve.ts", "../../node_modules/@noble/curves/src/abstract/weierstrass.ts", "../../node_modules/@noble/curves/src/_shortw_utils.ts", "../../node_modules/@noble/curves/src/abstract/hash-to-curve.ts", "../../node_modules/@noble/curves/src/abstract/bls.ts", "../../node_modules/@noble/curves/src/abstract/tower.ts", "../../node_modules/@noble/curves/src/bn254.ts", "../../src/crypto/bn254.ts", "../../src/crypto/utils.ts", "../../src/generated/factories/Base.t.sol/Base__factory.ts", "../../src/generated/factories/Blocklock.t.sol/BlocklockTest__factory.ts", "../../src/generated/factories/DeployAllContracts.s.sol/DeployAllContracts__factory.ts", "../../src/generated/factories/DeployBlocklockReceiver.s.sol/DeployBlocklockReceiver__factory.ts", "../../src/generated/factories/DeployBlocklockSender.s.sol/DeployBlocklockSender__factory.ts", "../../src/generated/factories/DeployBlocklockSignatureScheme.s.sol/DeployBlocklockSignatureScheme__factory.ts", "../../src/generated/factories/DeployDecryptionSender.s.sol/DeployDecryptionSender__factory.ts", "../../src/generated/factories/DeployFactory.s.sol/DeployFactory__factory.ts", "../../src/generated/factories/DeploySignatureSchemeAddressProvider.s.sol/DeploySignatureSchemeAddressProvider__factory.ts", "../../src/generated/factories/Deployment.t.sol/Deployment__factory.ts", "../../src/generated/factories/DirectFunding.t.sol/DirectFundingTest__factory.ts", "../../src/generated/factories/StdError.sol/StdError__factory.ts", "../../src/generated/factories/StdStorage.sol/StdStorageSafe__factory.ts", "../../src/generated/factories/SubscriptionFunding.t.sol/SubscriptionFundingTest__factory.ts", "../../src/generated/factories/Vm.sol/Vm__factory.ts", "../../src/generated/factories/Vm.sol/VmSafe__factory.ts", "../../src/generated/factories/draft-IERC1822.sol/IERC1822Proxiable__factory.ts", "../../src/generated/factories/AbstractBlocklockReceiver__factory.ts", "../../src/generated/factories/AccessControl__factory.ts", "../../src/generated/factories/AccessControlEnumerableUpgradeable__factory.ts", "../../src/generated/factories/AccessControlUpgradeable__factory.ts", "../../src/generated/factories/Address__factory.ts", "../../src/generated/factories/BLS__factory.ts", "../../src/generated/factories/BlocklockFeeCollector__factory.ts", "../../src/generated/factories/BlocklockSender__factory.ts", "../../src/generated/factories/BlocklockSignatureScheme__factory.ts", "../../src/generated/factories/ConfirmedOwner__factory.ts", "../../src/generated/factories/ConfirmedOwnerWithProposal__factory.ts", "../../src/generated/factories/ContextUpgradeable__factory.ts", "../../src/generated/factories/DecryptionReceiverBase__factory.ts", "../../src/generated/factories/DecryptionSender__factory.ts", "../../src/generated/factories/ERC165__factory.ts", "../../src/generated/factories/ERC165Upgradeable__factory.ts", "../../src/generated/factories/ERC1967Proxy__factory.ts", "../../src/generated/factories/ERC1967Utils__factory.ts", "../../src/generated/factories/EnvReader__factory.ts", "../../src/generated/factories/Errors__factory.ts", "../../src/generated/factories/Factory__factory.ts", "../../src/generated/factories/IAccessControl__factory.ts", "../../src/generated/factories/IAccessControlEnumerable__factory.ts", "../../src/generated/factories/IBeacon__factory.ts", "../../src/generated/factories/IBlocklockReceiver__factory.ts", "../../src/generated/factories/IBlocklockSender__factory.ts", "../../src/generated/factories/IDecryptionReceiver__factory.ts", "../../src/generated/factories/IDecryptionSender__factory.ts", "../../src/generated/factories/IERC165__factory.ts", "../../src/generated/factories/IERC1967__factory.ts", "../../src/generated/factories/IMulticall__factory.ts", "../../src/generated/factories/IMulticall3__factory.ts", "../../src/generated/factories/IOwnable__factory.ts", "../../src/generated/factories/ISignatureScheme__factory.ts", "../../src/generated/factories/ISignatureSchemeAddressProvider__factory.ts", "../../src/generated/factories/ISubscription__factory.ts", "../../src/generated/factories/Initializable__factory.ts", "../../src/generated/factories/JsonUtils__factory.ts", "../../src/generated/factories/MockBlocklockReceiver__factory.ts", "../../src/generated/factories/MockBlocklockRevertingReceiver__factory.ts", "../../src/generated/factories/MockBlocklockStringReceiver__factory.ts", "../../src/generated/factories/Multicall__factory.ts", "../../src/generated/factories/Proxy__factory.ts", "../../src/generated/factories/ReentrancyGuard__factory.ts", "../../src/generated/factories/SafeCast__factory.ts", "../../src/generated/factories/Script__factory.ts", "../../src/generated/factories/SignatureSchemeAddressProvider__factory.ts", "../../src/generated/factories/SignatureSchemeBase__factory.ts", "../../src/generated/factories/StdAssertions__factory.ts", "../../src/generated/factories/StdInvariant__factory.ts", "../../src/generated/factories/SubscriptionAPI__factory.ts", "../../src/generated/factories/Test__factory.ts", "../../src/generated/factories/UUPSProxy__factory.ts", "../../src/generated/factories/UUPSUpgradeable__factory.ts", "../../src/blocklock.ts", "../../src/solidity-encoder.ts", "../../src/solidity-decoder.ts"],
  "sourcesContent": ["'use strict';\n\nconst { Duplex } = require('stream');\n\n/**\n * Emits the `'close'` event on a stream.\n *\n * @param {Duplex} stream The stream.\n * @private\n */\nfunction emitClose(stream) {\n  stream.emit('close');\n}\n\n/**\n * The listener of the `'end'` event.\n *\n * @private\n */\nfunction duplexOnEnd() {\n  if (!this.destroyed && this._writableState.finished) {\n    this.destroy();\n  }\n}\n\n/**\n * The listener of the `'error'` event.\n *\n * @param {Error} err The error\n * @private\n */\nfunction duplexOnError(err) {\n  this.removeListener('error', duplexOnError);\n  this.destroy();\n  if (this.listenerCount('error') === 0) {\n    // Do not suppress the throwing behavior.\n    this.emit('error', err);\n  }\n}\n\n/**\n * Wraps a `WebSocket` in a duplex stream.\n *\n * @param {WebSocket} ws The `WebSocket` to wrap\n * @param {Object} [options] The options for the `Duplex` constructor\n * @return {Duplex} The duplex stream\n * @public\n */\nfunction createWebSocketStream(ws, options) {\n  let terminateOnDestroy = true;\n\n  const duplex = new Duplex({\n    ...options,\n    autoDestroy: false,\n    emitClose: false,\n    objectMode: false,\n    writableObjectMode: false\n  });\n\n  ws.on('message', function message(msg, isBinary) {\n    const data =\n      !isBinary && duplex._readableState.objectMode ? msg.toString() : msg;\n\n    if (!duplex.push(data)) ws.pause();\n  });\n\n  ws.once('error', function error(err) {\n    if (duplex.destroyed) return;\n\n    // Prevent `ws.terminate()` from being called by `duplex._destroy()`.\n    //\n    // - If the `'error'` event is emitted before the `'open'` event, then\n    //   `ws.terminate()` is a noop as no socket is assigned.\n    // - Otherwise, the error is re-emitted by the listener of the `'error'`\n    //   event of the `Receiver` object. The listener already closes the\n    //   connection by calling `ws.close()`. This allows a close frame to be\n    //   sent to the other peer. If `ws.terminate()` is called right after this,\n    //   then the close frame might not be sent.\n    terminateOnDestroy = false;\n    duplex.destroy(err);\n  });\n\n  ws.once('close', function close() {\n    if (duplex.destroyed) return;\n\n    duplex.push(null);\n  });\n\n  duplex._destroy = function (err, callback) {\n    if (ws.readyState === ws.CLOSED) {\n      callback(err);\n      process.nextTick(emitClose, duplex);\n      return;\n    }\n\n    let called = false;\n\n    ws.once('error', function error(err) {\n      called = true;\n      callback(err);\n    });\n\n    ws.once('close', function close() {\n      if (!called) callback(err);\n      process.nextTick(emitClose, duplex);\n    });\n\n    if (terminateOnDestroy) ws.terminate();\n  };\n\n  duplex._final = function (callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._final(callback);\n      });\n      return;\n    }\n\n    // If the value of the `_socket` property is `null` it means that `ws` is a\n    // client websocket and the handshake failed. In fact, when this happens, a\n    // socket is never assigned to the websocket. Wait for the `'error'` event\n    // that will be emitted by the websocket.\n    if (ws._socket === null) return;\n\n    if (ws._socket._writableState.finished) {\n      callback();\n      if (duplex._readableState.endEmitted) duplex.destroy();\n    } else {\n      ws._socket.once('finish', function finish() {\n        // `duplex` is not destroyed here because the `'end'` event will be\n        // emitted on `duplex` after this `'finish'` event. The EOF signaling\n        // `null` chunk is, in fact, pushed when the websocket emits `'close'`.\n        callback();\n      });\n      ws.close();\n    }\n  };\n\n  duplex._read = function () {\n    if (ws.isPaused) ws.resume();\n  };\n\n  duplex._write = function (chunk, encoding, callback) {\n    if (ws.readyState === ws.CONNECTING) {\n      ws.once('open', function open() {\n        duplex._write(chunk, encoding, callback);\n      });\n      return;\n    }\n\n    ws.send(chunk, callback);\n  };\n\n  duplex.on('end', duplexOnEnd);\n  duplex.on('error', duplexOnError);\n  return duplex;\n}\n\nmodule.exports = createWebSocketStream;\n", "'use strict';\n\nmodule.exports = {\n  BINARY_TYPES: ['nodebuffer', 'arraybuffer', 'fragments'],\n  EMPTY_BUFFER: Buffer.alloc(0),\n  GUID: '258EAFA5-E914-47DA-95CA-C5AB0DC85B11',\n  kForOnEventAttribute: Symbol('kIsForOnEventAttribute'),\n  kListener: Symbol('kListener'),\n  kStatusCode: Symbol('status-code'),\n  kWebSocket: Symbol('websocket'),\n  NOOP: () => {}\n};\n", "'use strict';\n\nconst { EMPTY_BUFFER } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\n\n/**\n * Merges an array of buffers into a new buffer.\n *\n * @param {Buffer[]} list The array of buffers to concat\n * @param {Number} totalLength The total length of buffers in the list\n * @return {Buffer} The resulting buffer\n * @public\n */\nfunction concat(list, totalLength) {\n  if (list.length === 0) return EMPTY_BUFFER;\n  if (list.length === 1) return list[0];\n\n  const target = Buffer.allocUnsafe(totalLength);\n  let offset = 0;\n\n  for (let i = 0; i < list.length; i++) {\n    const buf = list[i];\n    target.set(buf, offset);\n    offset += buf.length;\n  }\n\n  if (offset < totalLength) {\n    return new FastBuffer(target.buffer, target.byteOffset, offset);\n  }\n\n  return target;\n}\n\n/**\n * Masks a buffer using the given mask.\n *\n * @param {Buffer} source The buffer to mask\n * @param {Buffer} mask The mask to use\n * @param {Buffer} output The buffer where to store the result\n * @param {Number} offset The offset at which to start writing\n * @param {Number} length The number of bytes to mask.\n * @public\n */\nfunction _mask(source, mask, output, offset, length) {\n  for (let i = 0; i < length; i++) {\n    output[offset + i] = source[i] ^ mask[i & 3];\n  }\n}\n\n/**\n * Unmasks a buffer using the given mask.\n *\n * @param {Buffer} buffer The buffer to unmask\n * @param {Buffer} mask The mask to use\n * @public\n */\nfunction _unmask(buffer, mask) {\n  for (let i = 0; i < buffer.length; i++) {\n    buffer[i] ^= mask[i & 3];\n  }\n}\n\n/**\n * Converts a buffer to an `ArrayBuffer`.\n *\n * @param {Buffer} buf The buffer to convert\n * @return {ArrayBuffer} Converted buffer\n * @public\n */\nfunction toArrayBuffer(buf) {\n  if (buf.length === buf.buffer.byteLength) {\n    return buf.buffer;\n  }\n\n  return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length);\n}\n\n/**\n * Converts `data` to a `Buffer`.\n *\n * @param {*} data The data to convert\n * @return {Buffer} The buffer\n * @throws {TypeError}\n * @public\n */\nfunction toBuffer(data) {\n  toBuffer.readOnly = true;\n\n  if (Buffer.isBuffer(data)) return data;\n\n  let buf;\n\n  if (data instanceof ArrayBuffer) {\n    buf = new FastBuffer(data);\n  } else if (ArrayBuffer.isView(data)) {\n    buf = new FastBuffer(data.buffer, data.byteOffset, data.byteLength);\n  } else {\n    buf = Buffer.from(data);\n    toBuffer.readOnly = false;\n  }\n\n  return buf;\n}\n\nmodule.exports = {\n  concat,\n  mask: _mask,\n  toArrayBuffer,\n  toBuffer,\n  unmask: _unmask\n};\n\n/* istanbul ignore else  */\nif (!process.env.WS_NO_BUFFER_UTIL) {\n  try {\n    const bufferUtil = require('bufferutil');\n\n    module.exports.mask = function (source, mask, output, offset, length) {\n      if (length < 48) _mask(source, mask, output, offset, length);\n      else bufferUtil.mask(source, mask, output, offset, length);\n    };\n\n    module.exports.unmask = function (buffer, mask) {\n      if (buffer.length < 32) _unmask(buffer, mask);\n      else bufferUtil.unmask(buffer, mask);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst kDone = Symbol('kDone');\nconst kRun = Symbol('kRun');\n\n/**\n * A very simple job queue with adjustable concurrency. Adapted from\n * https://github.com/STRML/async-limiter\n */\nclass Limiter {\n  /**\n   * Creates a new `Limiter`.\n   *\n   * @param {Number} [concurrency=Infinity] The maximum number of jobs allowed\n   *     to run concurrently\n   */\n  constructor(concurrency) {\n    this[kDone] = () => {\n      this.pending--;\n      this[kRun]();\n    };\n    this.concurrency = concurrency || Infinity;\n    this.jobs = [];\n    this.pending = 0;\n  }\n\n  /**\n   * Adds a job to the queue.\n   *\n   * @param {Function} job The job to run\n   * @public\n   */\n  add(job) {\n    this.jobs.push(job);\n    this[kRun]();\n  }\n\n  /**\n   * Removes a job from the queue and runs it if possible.\n   *\n   * @private\n   */\n  [kRun]() {\n    if (this.pending === this.concurrency) return;\n\n    if (this.jobs.length) {\n      const job = this.jobs.shift();\n\n      this.pending++;\n      job(this[kDone]);\n    }\n  }\n}\n\nmodule.exports = Limiter;\n", "'use strict';\n\nconst zlib = require('zlib');\n\nconst bufferUtil = require('./buffer-util');\nconst Limiter = require('./limiter');\nconst { kStatusCode } = require('./constants');\n\nconst FastBuffer = Buffer[Symbol.species];\nconst TRAILER = Buffer.from([0x00, 0x00, 0xff, 0xff]);\nconst kPerMessageDeflate = Symbol('permessage-deflate');\nconst kTotalLength = Symbol('total-length');\nconst kCallback = Symbol('callback');\nconst kBuffers = Symbol('buffers');\nconst kError = Symbol('error');\n\n//\n// We limit zlib concurrency, which prevents severe memory fragmentation\n// as documented in https://github.com/nodejs/node/issues/8871#issuecomment-250915913\n// and https://github.com/websockets/ws/issues/1202\n//\n// Intentionally global; it's the global thread pool that's an issue.\n//\nlet zlibLimiter;\n\n/**\n * permessage-deflate implementation.\n */\nclass PerMessageDeflate {\n  /**\n   * Creates a PerMessageDeflate instance.\n   *\n   * @param {Object} [options] Configuration options\n   * @param {(Boolean|Number)} [options.clientMaxWindowBits] Advertise support\n   *     for, or request, a custom client window size\n   * @param {Boolean} [options.clientNoContextTakeover=false] Advertise/\n   *     acknowledge disabling of client context takeover\n   * @param {Number} [options.concurrencyLimit=10] The number of concurrent\n   *     calls to zlib\n   * @param {(Boolean|Number)} [options.serverMaxWindowBits] Request/confirm the\n   *     use of a custom server window size\n   * @param {Boolean} [options.serverNoContextTakeover=false] Request/accept\n   *     disabling of server context takeover\n   * @param {Number} [options.threshold=1024] Size (in bytes) below which\n   *     messages should not be compressed if context takeover is disabled\n   * @param {Object} [options.zlibDeflateOptions] Options to pass to zlib on\n   *     deflate\n   * @param {Object} [options.zlibInflateOptions] Options to pass to zlib on\n   *     inflate\n   * @param {Boolean} [isServer=false] Create the instance in either server or\n   *     client mode\n   * @param {Number} [maxPayload=0] The maximum allowed message length\n   */\n  constructor(options, isServer, maxPayload) {\n    this._maxPayload = maxPayload | 0;\n    this._options = options || {};\n    this._threshold =\n      this._options.threshold !== undefined ? this._options.threshold : 1024;\n    this._isServer = !!isServer;\n    this._deflate = null;\n    this._inflate = null;\n\n    this.params = null;\n\n    if (!zlibLimiter) {\n      const concurrency =\n        this._options.concurrencyLimit !== undefined\n          ? this._options.concurrencyLimit\n          : 10;\n      zlibLimiter = new Limiter(concurrency);\n    }\n  }\n\n  /**\n   * @type {String}\n   */\n  static get extensionName() {\n    return 'permessage-deflate';\n  }\n\n  /**\n   * Create an extension negotiation offer.\n   *\n   * @return {Object} Extension parameters\n   * @public\n   */\n  offer() {\n    const params = {};\n\n    if (this._options.serverNoContextTakeover) {\n      params.server_no_context_takeover = true;\n    }\n    if (this._options.clientNoContextTakeover) {\n      params.client_no_context_takeover = true;\n    }\n    if (this._options.serverMaxWindowBits) {\n      params.server_max_window_bits = this._options.serverMaxWindowBits;\n    }\n    if (this._options.clientMaxWindowBits) {\n      params.client_max_window_bits = this._options.clientMaxWindowBits;\n    } else if (this._options.clientMaxWindowBits == null) {\n      params.client_max_window_bits = true;\n    }\n\n    return params;\n  }\n\n  /**\n   * Accept an extension negotiation offer/response.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Object} Accepted configuration\n   * @public\n   */\n  accept(configurations) {\n    configurations = this.normalizeParams(configurations);\n\n    this.params = this._isServer\n      ? this.acceptAsServer(configurations)\n      : this.acceptAsClient(configurations);\n\n    return this.params;\n  }\n\n  /**\n   * Releases all resources used by the extension.\n   *\n   * @public\n   */\n  cleanup() {\n    if (this._inflate) {\n      this._inflate.close();\n      this._inflate = null;\n    }\n\n    if (this._deflate) {\n      const callback = this._deflate[kCallback];\n\n      this._deflate.close();\n      this._deflate = null;\n\n      if (callback) {\n        callback(\n          new Error(\n            'The deflate stream was closed while data was being processed'\n          )\n        );\n      }\n    }\n  }\n\n  /**\n   *  Accept an extension negotiation offer.\n   *\n   * @param {Array} offers The extension negotiation offers\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsServer(offers) {\n    const opts = this._options;\n    const accepted = offers.find((params) => {\n      if (\n        (opts.serverNoContextTakeover === false &&\n          params.server_no_context_takeover) ||\n        (params.server_max_window_bits &&\n          (opts.serverMaxWindowBits === false ||\n            (typeof opts.serverMaxWindowBits === 'number' &&\n              opts.serverMaxWindowBits > params.server_max_window_bits))) ||\n        (typeof opts.clientMaxWindowBits === 'number' &&\n          !params.client_max_window_bits)\n      ) {\n        return false;\n      }\n\n      return true;\n    });\n\n    if (!accepted) {\n      throw new Error('None of the extension offers can be accepted');\n    }\n\n    if (opts.serverNoContextTakeover) {\n      accepted.server_no_context_takeover = true;\n    }\n    if (opts.clientNoContextTakeover) {\n      accepted.client_no_context_takeover = true;\n    }\n    if (typeof opts.serverMaxWindowBits === 'number') {\n      accepted.server_max_window_bits = opts.serverMaxWindowBits;\n    }\n    if (typeof opts.clientMaxWindowBits === 'number') {\n      accepted.client_max_window_bits = opts.clientMaxWindowBits;\n    } else if (\n      accepted.client_max_window_bits === true ||\n      opts.clientMaxWindowBits === false\n    ) {\n      delete accepted.client_max_window_bits;\n    }\n\n    return accepted;\n  }\n\n  /**\n   * Accept the extension negotiation response.\n   *\n   * @param {Array} response The extension negotiation response\n   * @return {Object} Accepted configuration\n   * @private\n   */\n  acceptAsClient(response) {\n    const params = response[0];\n\n    if (\n      this._options.clientNoContextTakeover === false &&\n      params.client_no_context_takeover\n    ) {\n      throw new Error('Unexpected parameter \"client_no_context_takeover\"');\n    }\n\n    if (!params.client_max_window_bits) {\n      if (typeof this._options.clientMaxWindowBits === 'number') {\n        params.client_max_window_bits = this._options.clientMaxWindowBits;\n      }\n    } else if (\n      this._options.clientMaxWindowBits === false ||\n      (typeof this._options.clientMaxWindowBits === 'number' &&\n        params.client_max_window_bits > this._options.clientMaxWindowBits)\n    ) {\n      throw new Error(\n        'Unexpected or invalid parameter \"client_max_window_bits\"'\n      );\n    }\n\n    return params;\n  }\n\n  /**\n   * Normalize parameters.\n   *\n   * @param {Array} configurations The extension negotiation offers/reponse\n   * @return {Array} The offers/response with normalized parameters\n   * @private\n   */\n  normalizeParams(configurations) {\n    configurations.forEach((params) => {\n      Object.keys(params).forEach((key) => {\n        let value = params[key];\n\n        if (value.length > 1) {\n          throw new Error(`Parameter \"${key}\" must have only a single value`);\n        }\n\n        value = value[0];\n\n        if (key === 'client_max_window_bits') {\n          if (value !== true) {\n            const num = +value;\n            if (!Number.isInteger(num) || num < 8 || num > 15) {\n              throw new TypeError(\n                `Invalid value for parameter \"${key}\": ${value}`\n              );\n            }\n            value = num;\n          } else if (!this._isServer) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else if (key === 'server_max_window_bits') {\n          const num = +value;\n          if (!Number.isInteger(num) || num < 8 || num > 15) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n          value = num;\n        } else if (\n          key === 'client_no_context_takeover' ||\n          key === 'server_no_context_takeover'\n        ) {\n          if (value !== true) {\n            throw new TypeError(\n              `Invalid value for parameter \"${key}\": ${value}`\n            );\n          }\n        } else {\n          throw new Error(`Unknown parameter \"${key}\"`);\n        }\n\n        params[key] = value;\n      });\n    });\n\n    return configurations;\n  }\n\n  /**\n   * Decompress data. Concurrency limited.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  decompress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._decompress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Compress data. Concurrency limited.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @public\n   */\n  compress(data, fin, callback) {\n    zlibLimiter.add((done) => {\n      this._compress(data, fin, (err, result) => {\n        done();\n        callback(err, result);\n      });\n    });\n  }\n\n  /**\n   * Decompress data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _decompress(data, fin, callback) {\n    const endpoint = this._isServer ? 'client' : 'server';\n\n    if (!this._inflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._inflate = zlib.createInflateRaw({\n        ...this._options.zlibInflateOptions,\n        windowBits\n      });\n      this._inflate[kPerMessageDeflate] = this;\n      this._inflate[kTotalLength] = 0;\n      this._inflate[kBuffers] = [];\n      this._inflate.on('error', inflateOnError);\n      this._inflate.on('data', inflateOnData);\n    }\n\n    this._inflate[kCallback] = callback;\n\n    this._inflate.write(data);\n    if (fin) this._inflate.write(TRAILER);\n\n    this._inflate.flush(() => {\n      const err = this._inflate[kError];\n\n      if (err) {\n        this._inflate.close();\n        this._inflate = null;\n        callback(err);\n        return;\n      }\n\n      const data = bufferUtil.concat(\n        this._inflate[kBuffers],\n        this._inflate[kTotalLength]\n      );\n\n      if (this._inflate._readableState.endEmitted) {\n        this._inflate.close();\n        this._inflate = null;\n      } else {\n        this._inflate[kTotalLength] = 0;\n        this._inflate[kBuffers] = [];\n\n        if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n          this._inflate.reset();\n        }\n      }\n\n      callback(null, data);\n    });\n  }\n\n  /**\n   * Compress data.\n   *\n   * @param {(Buffer|String)} data Data to compress\n   * @param {Boolean} fin Specifies whether or not this is the last fragment\n   * @param {Function} callback Callback\n   * @private\n   */\n  _compress(data, fin, callback) {\n    const endpoint = this._isServer ? 'server' : 'client';\n\n    if (!this._deflate) {\n      const key = `${endpoint}_max_window_bits`;\n      const windowBits =\n        typeof this.params[key] !== 'number'\n          ? zlib.Z_DEFAULT_WINDOWBITS\n          : this.params[key];\n\n      this._deflate = zlib.createDeflateRaw({\n        ...this._options.zlibDeflateOptions,\n        windowBits\n      });\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      this._deflate.on('data', deflateOnData);\n    }\n\n    this._deflate[kCallback] = callback;\n\n    this._deflate.write(data);\n    this._deflate.flush(zlib.Z_SYNC_FLUSH, () => {\n      if (!this._deflate) {\n        //\n        // The deflate stream was closed while data was being processed.\n        //\n        return;\n      }\n\n      let data = bufferUtil.concat(\n        this._deflate[kBuffers],\n        this._deflate[kTotalLength]\n      );\n\n      if (fin) {\n        data = new FastBuffer(data.buffer, data.byteOffset, data.length - 4);\n      }\n\n      //\n      // Ensure that the callback will not be called again in\n      // `PerMessageDeflate#cleanup()`.\n      //\n      this._deflate[kCallback] = null;\n\n      this._deflate[kTotalLength] = 0;\n      this._deflate[kBuffers] = [];\n\n      if (fin && this.params[`${endpoint}_no_context_takeover`]) {\n        this._deflate.reset();\n      }\n\n      callback(null, data);\n    });\n  }\n}\n\nmodule.exports = PerMessageDeflate;\n\n/**\n * The listener of the `zlib.DeflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction deflateOnData(chunk) {\n  this[kBuffers].push(chunk);\n  this[kTotalLength] += chunk.length;\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction inflateOnData(chunk) {\n  this[kTotalLength] += chunk.length;\n\n  if (\n    this[kPerMessageDeflate]._maxPayload < 1 ||\n    this[kTotalLength] <= this[kPerMessageDeflate]._maxPayload\n  ) {\n    this[kBuffers].push(chunk);\n    return;\n  }\n\n  this[kError] = new RangeError('Max payload size exceeded');\n  this[kError].code = 'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH';\n  this[kError][kStatusCode] = 1009;\n  this.removeListener('data', inflateOnData);\n  this.reset();\n}\n\n/**\n * The listener of the `zlib.InflateRaw` stream `'error'` event.\n *\n * @param {Error} err The emitted error\n * @private\n */\nfunction inflateOnError(err) {\n  //\n  // There is no need to call `Zlib#close()` as the handle is automatically\n  // closed when an error is emitted.\n  //\n  this[kPerMessageDeflate]._inflate = null;\n  err[kStatusCode] = 1007;\n  this[kCallback](err);\n}\n", "'use strict';\n\nconst { isUtf8 } = require('buffer');\n\n//\n// Allowed token characters:\n//\n// '!', '#', '$', '%', '&', ''', '*', '+', '-',\n// '.', 0-9, A-Z, '^', '_', '`', a-z, '|', '~'\n//\n// tokenChars[32] === 0 // ' '\n// tokenChars[33] === 1 // '!'\n// tokenChars[34] === 0 // '\"'\n// ...\n//\n// prettier-ignore\nconst tokenChars = [\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0 - 15\n  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16 - 31\n  0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, // 32 - 47\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, // 48 - 63\n  0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 64 - 79\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, // 80 - 95\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 96 - 111\n  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0 // 112 - 127\n];\n\n/**\n * Checks if a status code is allowed in a close frame.\n *\n * @param {Number} code The status code\n * @return {Boolean} `true` if the status code is valid, else `false`\n * @public\n */\nfunction isValidStatusCode(code) {\n  return (\n    (code >= 1000 &&\n      code <= 1014 &&\n      code !== 1004 &&\n      code !== 1005 &&\n      code !== 1006) ||\n    (code >= 3000 && code <= 4999)\n  );\n}\n\n/**\n * Checks if a given buffer contains only correct UTF-8.\n * Ported from https://www.cl.cam.ac.uk/%7Emgk25/ucs/utf8_check.c by\n * Markus Kuhn.\n *\n * @param {Buffer} buf The buffer to check\n * @return {Boolean} `true` if `buf` contains only correct UTF-8, else `false`\n * @public\n */\nfunction _isValidUTF8(buf) {\n  const len = buf.length;\n  let i = 0;\n\n  while (i < len) {\n    if ((buf[i] & 0x80) === 0) {\n      // 0xxxxxxx\n      i++;\n    } else if ((buf[i] & 0xe0) === 0xc0) {\n      // 110xxxxx 10xxxxxx\n      if (\n        i + 1 === len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i] & 0xfe) === 0xc0 // Overlong\n      ) {\n        return false;\n      }\n\n      i += 2;\n    } else if ((buf[i] & 0xf0) === 0xe0) {\n      // 1110xxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 2 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // Overlong\n        (buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // Surrogate (U+D800 - U+DFFF)\n      ) {\n        return false;\n      }\n\n      i += 3;\n    } else if ((buf[i] & 0xf8) === 0xf0) {\n      // 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx\n      if (\n        i + 3 >= len ||\n        (buf[i + 1] & 0xc0) !== 0x80 ||\n        (buf[i + 2] & 0xc0) !== 0x80 ||\n        (buf[i + 3] & 0xc0) !== 0x80 ||\n        (buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // Overlong\n        (buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||\n        buf[i] > 0xf4 // > U+10FFFF\n      ) {\n        return false;\n      }\n\n      i += 4;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nmodule.exports = {\n  isValidStatusCode,\n  isValidUTF8: _isValidUTF8,\n  tokenChars\n};\n\nif (isUtf8) {\n  module.exports.isValidUTF8 = function (buf) {\n    return buf.length < 24 ? _isValidUTF8(buf) : isUtf8(buf);\n  };\n} /* istanbul ignore else  */ else if (!process.env.WS_NO_UTF_8_VALIDATE) {\n  try {\n    const isValidUTF8 = require('utf-8-validate');\n\n    module.exports.isValidUTF8 = function (buf) {\n      return buf.length < 32 ? _isValidUTF8(buf) : isValidUTF8(buf);\n    };\n  } catch (e) {\n    // Continue regardless of the error.\n  }\n}\n", "'use strict';\n\nconst { Writable } = require('stream');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  kStatusCode,\n  kWebSocket\n} = require('./constants');\nconst { concat, toArrayBuffer, unmask } = require('./buffer-util');\nconst { isValidStatusCode, isValidUTF8 } = require('./validation');\n\nconst FastBuffer = Buffer[Symbol.species];\n\nconst GET_INFO = 0;\nconst GET_PAYLOAD_LENGTH_16 = 1;\nconst GET_PAYLOAD_LENGTH_64 = 2;\nconst GET_MASK = 3;\nconst GET_DATA = 4;\nconst INFLATING = 5;\nconst DEFER_EVENT = 6;\n\n/**\n * HyBi Receiver implementation.\n *\n * @extends Writable\n */\nclass Receiver extends Writable {\n  /**\n   * Creates a Receiver instance.\n   *\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {String} [options.binaryType=nodebuffer] The type for binary data\n   * @param {Object} [options.extensions] An object containing the negotiated\n   *     extensions\n   * @param {Boolean} [options.isServer=false] Specifies whether to operate in\n   *     client or server mode\n   * @param {Number} [options.maxPayload=0] The maximum allowed message length\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   */\n  constructor(options = {}) {\n    super();\n\n    this._allowSynchronousEvents =\n      options.allowSynchronousEvents !== undefined\n        ? options.allowSynchronousEvents\n        : true;\n    this._binaryType = options.binaryType || BINARY_TYPES[0];\n    this._extensions = options.extensions || {};\n    this._isServer = !!options.isServer;\n    this._maxPayload = options.maxPayload | 0;\n    this._skipUTF8Validation = !!options.skipUTF8Validation;\n    this[kWebSocket] = undefined;\n\n    this._bufferedBytes = 0;\n    this._buffers = [];\n\n    this._compressed = false;\n    this._payloadLength = 0;\n    this._mask = undefined;\n    this._fragmented = 0;\n    this._masked = false;\n    this._fin = false;\n    this._opcode = 0;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragments = [];\n\n    this._errored = false;\n    this._loop = false;\n    this._state = GET_INFO;\n  }\n\n  /**\n   * Implements `Writable.prototype._write()`.\n   *\n   * @param {Buffer} chunk The chunk of data to write\n   * @param {String} encoding The character encoding of `chunk`\n   * @param {Function} cb Callback\n   * @private\n   */\n  _write(chunk, encoding, cb) {\n    if (this._opcode === 0x08 && this._state == GET_INFO) return cb();\n\n    this._bufferedBytes += chunk.length;\n    this._buffers.push(chunk);\n    this.startLoop(cb);\n  }\n\n  /**\n   * Consumes `n` bytes from the buffered data.\n   *\n   * @param {Number} n The number of bytes to consume\n   * @return {Buffer} The consumed bytes\n   * @private\n   */\n  consume(n) {\n    this._bufferedBytes -= n;\n\n    if (n === this._buffers[0].length) return this._buffers.shift();\n\n    if (n < this._buffers[0].length) {\n      const buf = this._buffers[0];\n      this._buffers[0] = new FastBuffer(\n        buf.buffer,\n        buf.byteOffset + n,\n        buf.length - n\n      );\n\n      return new FastBuffer(buf.buffer, buf.byteOffset, n);\n    }\n\n    const dst = Buffer.allocUnsafe(n);\n\n    do {\n      const buf = this._buffers[0];\n      const offset = dst.length - n;\n\n      if (n >= buf.length) {\n        dst.set(this._buffers.shift(), offset);\n      } else {\n        dst.set(new Uint8Array(buf.buffer, buf.byteOffset, n), offset);\n        this._buffers[0] = new FastBuffer(\n          buf.buffer,\n          buf.byteOffset + n,\n          buf.length - n\n        );\n      }\n\n      n -= buf.length;\n    } while (n > 0);\n\n    return dst;\n  }\n\n  /**\n   * Starts the parsing loop.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  startLoop(cb) {\n    this._loop = true;\n\n    do {\n      switch (this._state) {\n        case GET_INFO:\n          this.getInfo(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_16:\n          this.getPayloadLength16(cb);\n          break;\n        case GET_PAYLOAD_LENGTH_64:\n          this.getPayloadLength64(cb);\n          break;\n        case GET_MASK:\n          this.getMask();\n          break;\n        case GET_DATA:\n          this.getData(cb);\n          break;\n        case INFLATING:\n        case DEFER_EVENT:\n          this._loop = false;\n          return;\n      }\n    } while (this._loop);\n\n    if (!this._errored) cb();\n  }\n\n  /**\n   * Reads the first two bytes of a frame.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getInfo(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(2);\n\n    if ((buf[0] & 0x30) !== 0x00) {\n      const error = this.createError(\n        RangeError,\n        'RSV2 and RSV3 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_2_3'\n      );\n\n      cb(error);\n      return;\n    }\n\n    const compressed = (buf[0] & 0x40) === 0x40;\n\n    if (compressed && !this._extensions[PerMessageDeflate.extensionName]) {\n      const error = this.createError(\n        RangeError,\n        'RSV1 must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_RSV_1'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._fin = (buf[0] & 0x80) === 0x80;\n    this._opcode = buf[0] & 0x0f;\n    this._payloadLength = buf[1] & 0x7f;\n\n    if (this._opcode === 0x00) {\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (!this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          'invalid opcode 0',\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._opcode = this._fragmented;\n    } else if (this._opcode === 0x01 || this._opcode === 0x02) {\n      if (this._fragmented) {\n        const error = this.createError(\n          RangeError,\n          `invalid opcode ${this._opcode}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_OPCODE'\n        );\n\n        cb(error);\n        return;\n      }\n\n      this._compressed = compressed;\n    } else if (this._opcode > 0x07 && this._opcode < 0x0b) {\n      if (!this._fin) {\n        const error = this.createError(\n          RangeError,\n          'FIN must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_FIN'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (compressed) {\n        const error = this.createError(\n          RangeError,\n          'RSV1 must be clear',\n          true,\n          1002,\n          'WS_ERR_UNEXPECTED_RSV_1'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (\n        this._payloadLength > 0x7d ||\n        (this._opcode === 0x08 && this._payloadLength === 1)\n      ) {\n        const error = this.createError(\n          RangeError,\n          `invalid payload length ${this._payloadLength}`,\n          true,\n          1002,\n          'WS_ERR_INVALID_CONTROL_PAYLOAD_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    } else {\n      const error = this.createError(\n        RangeError,\n        `invalid opcode ${this._opcode}`,\n        true,\n        1002,\n        'WS_ERR_INVALID_OPCODE'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (!this._fin && !this._fragmented) this._fragmented = this._opcode;\n    this._masked = (buf[1] & 0x80) === 0x80;\n\n    if (this._isServer) {\n      if (!this._masked) {\n        const error = this.createError(\n          RangeError,\n          'MASK must be set',\n          true,\n          1002,\n          'WS_ERR_EXPECTED_MASK'\n        );\n\n        cb(error);\n        return;\n      }\n    } else if (this._masked) {\n      const error = this.createError(\n        RangeError,\n        'MASK must be clear',\n        true,\n        1002,\n        'WS_ERR_UNEXPECTED_MASK'\n      );\n\n      cb(error);\n      return;\n    }\n\n    if (this._payloadLength === 126) this._state = GET_PAYLOAD_LENGTH_16;\n    else if (this._payloadLength === 127) this._state = GET_PAYLOAD_LENGTH_64;\n    else this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+16).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength16(cb) {\n    if (this._bufferedBytes < 2) {\n      this._loop = false;\n      return;\n    }\n\n    this._payloadLength = this.consume(2).readUInt16BE(0);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Gets extended payload length (7+64).\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getPayloadLength64(cb) {\n    if (this._bufferedBytes < 8) {\n      this._loop = false;\n      return;\n    }\n\n    const buf = this.consume(8);\n    const num = buf.readUInt32BE(0);\n\n    //\n    // The maximum safe integer in JavaScript is 2^53 - 1. An error is returned\n    // if payload length is greater than this number.\n    //\n    if (num > Math.pow(2, 53 - 32) - 1) {\n      const error = this.createError(\n        RangeError,\n        'Unsupported WebSocket frame: payload length > 2^53 - 1',\n        false,\n        1009,\n        'WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH'\n      );\n\n      cb(error);\n      return;\n    }\n\n    this._payloadLength = num * Math.pow(2, 32) + buf.readUInt32BE(4);\n    this.haveLength(cb);\n  }\n\n  /**\n   * Payload length has been read.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  haveLength(cb) {\n    if (this._payloadLength && this._opcode < 0x08) {\n      this._totalPayloadLength += this._payloadLength;\n      if (this._totalPayloadLength > this._maxPayload && this._maxPayload > 0) {\n        const error = this.createError(\n          RangeError,\n          'Max payload size exceeded',\n          false,\n          1009,\n          'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n        );\n\n        cb(error);\n        return;\n      }\n    }\n\n    if (this._masked) this._state = GET_MASK;\n    else this._state = GET_DATA;\n  }\n\n  /**\n   * Reads mask bytes.\n   *\n   * @private\n   */\n  getMask() {\n    if (this._bufferedBytes < 4) {\n      this._loop = false;\n      return;\n    }\n\n    this._mask = this.consume(4);\n    this._state = GET_DATA;\n  }\n\n  /**\n   * Reads data bytes.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  getData(cb) {\n    let data = EMPTY_BUFFER;\n\n    if (this._payloadLength) {\n      if (this._bufferedBytes < this._payloadLength) {\n        this._loop = false;\n        return;\n      }\n\n      data = this.consume(this._payloadLength);\n\n      if (\n        this._masked &&\n        (this._mask[0] | this._mask[1] | this._mask[2] | this._mask[3]) !== 0\n      ) {\n        unmask(data, this._mask);\n      }\n    }\n\n    if (this._opcode > 0x07) {\n      this.controlMessage(data, cb);\n      return;\n    }\n\n    if (this._compressed) {\n      this._state = INFLATING;\n      this.decompress(data, cb);\n      return;\n    }\n\n    if (data.length) {\n      //\n      // This message is not compressed so its length is the sum of the payload\n      // length of all fragments.\n      //\n      this._messageLength = this._totalPayloadLength;\n      this._fragments.push(data);\n    }\n\n    this.dataMessage(cb);\n  }\n\n  /**\n   * Decompresses data.\n   *\n   * @param {Buffer} data Compressed data\n   * @param {Function} cb Callback\n   * @private\n   */\n  decompress(data, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    perMessageDeflate.decompress(data, this._fin, (err, buf) => {\n      if (err) return cb(err);\n\n      if (buf.length) {\n        this._messageLength += buf.length;\n        if (this._messageLength > this._maxPayload && this._maxPayload > 0) {\n          const error = this.createError(\n            RangeError,\n            'Max payload size exceeded',\n            false,\n            1009,\n            'WS_ERR_UNSUPPORTED_MESSAGE_LENGTH'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._fragments.push(buf);\n      }\n\n      this.dataMessage(cb);\n      if (this._state === GET_INFO) this.startLoop(cb);\n    });\n  }\n\n  /**\n   * Handles a data message.\n   *\n   * @param {Function} cb Callback\n   * @private\n   */\n  dataMessage(cb) {\n    if (!this._fin) {\n      this._state = GET_INFO;\n      return;\n    }\n\n    const messageLength = this._messageLength;\n    const fragments = this._fragments;\n\n    this._totalPayloadLength = 0;\n    this._messageLength = 0;\n    this._fragmented = 0;\n    this._fragments = [];\n\n    if (this._opcode === 2) {\n      let data;\n\n      if (this._binaryType === 'nodebuffer') {\n        data = concat(fragments, messageLength);\n      } else if (this._binaryType === 'arraybuffer') {\n        data = toArrayBuffer(concat(fragments, messageLength));\n      } else {\n        data = fragments;\n      }\n\n      if (this._allowSynchronousEvents) {\n        this.emit('message', data, true);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', data, true);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    } else {\n      const buf = concat(fragments, messageLength);\n\n      if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n        const error = this.createError(\n          Error,\n          'invalid UTF-8 sequence',\n          true,\n          1007,\n          'WS_ERR_INVALID_UTF8'\n        );\n\n        cb(error);\n        return;\n      }\n\n      if (this._state === INFLATING || this._allowSynchronousEvents) {\n        this.emit('message', buf, false);\n        this._state = GET_INFO;\n      } else {\n        this._state = DEFER_EVENT;\n        setImmediate(() => {\n          this.emit('message', buf, false);\n          this._state = GET_INFO;\n          this.startLoop(cb);\n        });\n      }\n    }\n  }\n\n  /**\n   * Handles a control message.\n   *\n   * @param {Buffer} data Data to handle\n   * @return {(Error|RangeError|undefined)} A possible error\n   * @private\n   */\n  controlMessage(data, cb) {\n    if (this._opcode === 0x08) {\n      if (data.length === 0) {\n        this._loop = false;\n        this.emit('conclude', 1005, EMPTY_BUFFER);\n        this.end();\n      } else {\n        const code = data.readUInt16BE(0);\n\n        if (!isValidStatusCode(code)) {\n          const error = this.createError(\n            RangeError,\n            `invalid status code ${code}`,\n            true,\n            1002,\n            'WS_ERR_INVALID_CLOSE_CODE'\n          );\n\n          cb(error);\n          return;\n        }\n\n        const buf = new FastBuffer(\n          data.buffer,\n          data.byteOffset + 2,\n          data.length - 2\n        );\n\n        if (!this._skipUTF8Validation && !isValidUTF8(buf)) {\n          const error = this.createError(\n            Error,\n            'invalid UTF-8 sequence',\n            true,\n            1007,\n            'WS_ERR_INVALID_UTF8'\n          );\n\n          cb(error);\n          return;\n        }\n\n        this._loop = false;\n        this.emit('conclude', code, buf);\n        this.end();\n      }\n\n      this._state = GET_INFO;\n      return;\n    }\n\n    if (this._allowSynchronousEvents) {\n      this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n      this._state = GET_INFO;\n    } else {\n      this._state = DEFER_EVENT;\n      setImmediate(() => {\n        this.emit(this._opcode === 0x09 ? 'ping' : 'pong', data);\n        this._state = GET_INFO;\n        this.startLoop(cb);\n      });\n    }\n  }\n\n  /**\n   * Builds an error object.\n   *\n   * @param {function(new:Error|RangeError)} ErrorCtor The error constructor\n   * @param {String} message The error message\n   * @param {Boolean} prefix Specifies whether or not to add a default prefix to\n   *     `message`\n   * @param {Number} statusCode The status code\n   * @param {String} errorCode The exposed error code\n   * @return {(Error|RangeError)} The error\n   * @private\n   */\n  createError(ErrorCtor, message, prefix, statusCode, errorCode) {\n    this._loop = false;\n    this._errored = true;\n\n    const err = new ErrorCtor(\n      prefix ? `Invalid WebSocket frame: ${message}` : message\n    );\n\n    Error.captureStackTrace(err, this.createError);\n    err.code = errorCode;\n    err[kStatusCode] = statusCode;\n    return err;\n  }\n}\n\nmodule.exports = Receiver;\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex\" }] */\n\n'use strict';\n\nconst { Duplex } = require('stream');\nconst { randomFillSync } = require('crypto');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst { EMPTY_BUFFER } = require('./constants');\nconst { isValidStatusCode } = require('./validation');\nconst { mask: applyMask, toBuffer } = require('./buffer-util');\n\nconst kByteLength = Symbol('kByteLength');\nconst maskBuffer = Buffer.alloc(4);\nconst RANDOM_POOL_SIZE = 8 * 1024;\nlet randomPool;\nlet randomPoolPointer = RANDOM_POOL_SIZE;\n\n/**\n * HyBi Sender implementation.\n */\nclass Sender {\n  /**\n   * Creates a Sender instance.\n   *\n   * @param {Duplex} socket The connection socket\n   * @param {Object} [extensions] An object containing the negotiated extensions\n   * @param {Function} [generateMask] The function used to generate the masking\n   *     key\n   */\n  constructor(socket, extensions, generateMask) {\n    this._extensions = extensions || {};\n\n    if (generateMask) {\n      this._generateMask = generateMask;\n      this._maskBuffer = Buffer.alloc(4);\n    }\n\n    this._socket = socket;\n\n    this._firstFragment = true;\n    this._compress = false;\n\n    this._bufferedBytes = 0;\n    this._deflating = false;\n    this._queue = [];\n  }\n\n  /**\n   * Frames a piece of data according to the HyBi WebSocket protocol.\n   *\n   * @param {(Buffer|String)} data The data to frame\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @return {(Buffer|String)[]} The framed data\n   * @public\n   */\n  static frame(data, options) {\n    let mask;\n    let merge = false;\n    let offset = 2;\n    let skipMasking = false;\n\n    if (options.mask) {\n      mask = options.maskBuffer || maskBuffer;\n\n      if (options.generateMask) {\n        options.generateMask(mask);\n      } else {\n        if (randomPoolPointer === RANDOM_POOL_SIZE) {\n          /* istanbul ignore else  */\n          if (randomPool === undefined) {\n            //\n            // This is lazily initialized because server-sent frames must not\n            // be masked so it may never be used.\n            //\n            randomPool = Buffer.alloc(RANDOM_POOL_SIZE);\n          }\n\n          randomFillSync(randomPool, 0, RANDOM_POOL_SIZE);\n          randomPoolPointer = 0;\n        }\n\n        mask[0] = randomPool[randomPoolPointer++];\n        mask[1] = randomPool[randomPoolPointer++];\n        mask[2] = randomPool[randomPoolPointer++];\n        mask[3] = randomPool[randomPoolPointer++];\n      }\n\n      skipMasking = (mask[0] | mask[1] | mask[2] | mask[3]) === 0;\n      offset = 6;\n    }\n\n    let dataLength;\n\n    if (typeof data === 'string') {\n      if (\n        (!options.mask || skipMasking) &&\n        options[kByteLength] !== undefined\n      ) {\n        dataLength = options[kByteLength];\n      } else {\n        data = Buffer.from(data);\n        dataLength = data.length;\n      }\n    } else {\n      dataLength = data.length;\n      merge = options.mask && options.readOnly && !skipMasking;\n    }\n\n    let payloadLength = dataLength;\n\n    if (dataLength >= 65536) {\n      offset += 8;\n      payloadLength = 127;\n    } else if (dataLength > 125) {\n      offset += 2;\n      payloadLength = 126;\n    }\n\n    const target = Buffer.allocUnsafe(merge ? dataLength + offset : offset);\n\n    target[0] = options.fin ? options.opcode | 0x80 : options.opcode;\n    if (options.rsv1) target[0] |= 0x40;\n\n    target[1] = payloadLength;\n\n    if (payloadLength === 126) {\n      target.writeUInt16BE(dataLength, 2);\n    } else if (payloadLength === 127) {\n      target[2] = target[3] = 0;\n      target.writeUIntBE(dataLength, 4, 6);\n    }\n\n    if (!options.mask) return [target, data];\n\n    target[1] |= 0x80;\n    target[offset - 4] = mask[0];\n    target[offset - 3] = mask[1];\n    target[offset - 2] = mask[2];\n    target[offset - 1] = mask[3];\n\n    if (skipMasking) return [target, data];\n\n    if (merge) {\n      applyMask(data, mask, target, offset, dataLength);\n      return [target];\n    }\n\n    applyMask(data, mask, data, 0, dataLength);\n    return [target, data];\n  }\n\n  /**\n   * Sends a close message to the other peer.\n   *\n   * @param {Number} [code] The status code component of the body\n   * @param {(String|Buffer)} [data] The message component of the body\n   * @param {Boolean} [mask=false] Specifies whether or not to mask the message\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  close(code, data, mask, cb) {\n    let buf;\n\n    if (code === undefined) {\n      buf = EMPTY_BUFFER;\n    } else if (typeof code !== 'number' || !isValidStatusCode(code)) {\n      throw new TypeError('First argument must be a valid error code number');\n    } else if (data === undefined || !data.length) {\n      buf = Buffer.allocUnsafe(2);\n      buf.writeUInt16BE(code, 0);\n    } else {\n      const length = Buffer.byteLength(data);\n\n      if (length > 123) {\n        throw new RangeError('The message must not be greater than 123 bytes');\n      }\n\n      buf = Buffer.allocUnsafe(2 + length);\n      buf.writeUInt16BE(code, 0);\n\n      if (typeof data === 'string') {\n        buf.write(data, 2);\n      } else {\n        buf.set(data, 2);\n      }\n    }\n\n    const options = {\n      [kByteLength]: buf.length,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x08,\n      readOnly: false,\n      rsv1: false\n    };\n\n    if (this._deflating) {\n      this.enqueue([this.dispatch, buf, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(buf, options), cb);\n    }\n  }\n\n  /**\n   * Sends a ping message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  ping(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x09,\n      readOnly,\n      rsv1: false\n    };\n\n    if (this._deflating) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a pong message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Boolean} [mask=false] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  pong(data, mask, cb) {\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (byteLength > 125) {\n      throw new RangeError('The data size must not be greater than 125 bytes');\n    }\n\n    const options = {\n      [kByteLength]: byteLength,\n      fin: true,\n      generateMask: this._generateMask,\n      mask,\n      maskBuffer: this._maskBuffer,\n      opcode: 0x0a,\n      readOnly,\n      rsv1: false\n    };\n\n    if (this._deflating) {\n      this.enqueue([this.dispatch, data, false, options, cb]);\n    } else {\n      this.sendFrame(Sender.frame(data, options), cb);\n    }\n  }\n\n  /**\n   * Sends a data message to the other peer.\n   *\n   * @param {*} data The message to send\n   * @param {Object} options Options object\n   * @param {Boolean} [options.binary=false] Specifies whether `data` is binary\n   *     or text\n   * @param {Boolean} [options.compress=false] Specifies whether or not to\n   *     compress `data`\n   * @param {Boolean} [options.fin=false] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Function} [cb] Callback\n   * @public\n   */\n  send(data, options, cb) {\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n    let opcode = options.binary ? 2 : 1;\n    let rsv1 = options.compress;\n\n    let byteLength;\n    let readOnly;\n\n    if (typeof data === 'string') {\n      byteLength = Buffer.byteLength(data);\n      readOnly = false;\n    } else {\n      data = toBuffer(data);\n      byteLength = data.length;\n      readOnly = toBuffer.readOnly;\n    }\n\n    if (this._firstFragment) {\n      this._firstFragment = false;\n      if (\n        rsv1 &&\n        perMessageDeflate &&\n        perMessageDeflate.params[\n          perMessageDeflate._isServer\n            ? 'server_no_context_takeover'\n            : 'client_no_context_takeover'\n        ]\n      ) {\n        rsv1 = byteLength >= perMessageDeflate._threshold;\n      }\n      this._compress = rsv1;\n    } else {\n      rsv1 = false;\n      opcode = 0;\n    }\n\n    if (options.fin) this._firstFragment = true;\n\n    if (perMessageDeflate) {\n      const opts = {\n        [kByteLength]: byteLength,\n        fin: options.fin,\n        generateMask: this._generateMask,\n        mask: options.mask,\n        maskBuffer: this._maskBuffer,\n        opcode,\n        readOnly,\n        rsv1\n      };\n\n      if (this._deflating) {\n        this.enqueue([this.dispatch, data, this._compress, opts, cb]);\n      } else {\n        this.dispatch(data, this._compress, opts, cb);\n      }\n    } else {\n      this.sendFrame(\n        Sender.frame(data, {\n          [kByteLength]: byteLength,\n          fin: options.fin,\n          generateMask: this._generateMask,\n          mask: options.mask,\n          maskBuffer: this._maskBuffer,\n          opcode,\n          readOnly,\n          rsv1: false\n        }),\n        cb\n      );\n    }\n  }\n\n  /**\n   * Dispatches a message.\n   *\n   * @param {(Buffer|String)} data The message to send\n   * @param {Boolean} [compress=false] Specifies whether or not to compress\n   *     `data`\n   * @param {Object} options Options object\n   * @param {Boolean} [options.fin=false] Specifies whether or not to set the\n   *     FIN bit\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Boolean} [options.mask=false] Specifies whether or not to mask\n   *     `data`\n   * @param {Buffer} [options.maskBuffer] The buffer used to store the masking\n   *     key\n   * @param {Number} options.opcode The opcode\n   * @param {Boolean} [options.readOnly=false] Specifies whether `data` can be\n   *     modified\n   * @param {Boolean} [options.rsv1=false] Specifies whether or not to set the\n   *     RSV1 bit\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  dispatch(data, compress, options, cb) {\n    if (!compress) {\n      this.sendFrame(Sender.frame(data, options), cb);\n      return;\n    }\n\n    const perMessageDeflate = this._extensions[PerMessageDeflate.extensionName];\n\n    this._bufferedBytes += options[kByteLength];\n    this._deflating = true;\n    perMessageDeflate.compress(data, options.fin, (_, buf) => {\n      if (this._socket.destroyed) {\n        const err = new Error(\n          'The socket was closed while data was being compressed'\n        );\n\n        if (typeof cb === 'function') cb(err);\n\n        for (let i = 0; i < this._queue.length; i++) {\n          const params = this._queue[i];\n          const callback = params[params.length - 1];\n\n          if (typeof callback === 'function') callback(err);\n        }\n\n        return;\n      }\n\n      this._bufferedBytes -= options[kByteLength];\n      this._deflating = false;\n      options.readOnly = false;\n      this.sendFrame(Sender.frame(buf, options), cb);\n      this.dequeue();\n    });\n  }\n\n  /**\n   * Executes queued send operations.\n   *\n   * @private\n   */\n  dequeue() {\n    while (!this._deflating && this._queue.length) {\n      const params = this._queue.shift();\n\n      this._bufferedBytes -= params[3][kByteLength];\n      Reflect.apply(params[0], this, params.slice(1));\n    }\n  }\n\n  /**\n   * Enqueues a send operation.\n   *\n   * @param {Array} params Send operation parameters.\n   * @private\n   */\n  enqueue(params) {\n    this._bufferedBytes += params[3][kByteLength];\n    this._queue.push(params);\n  }\n\n  /**\n   * Sends a frame.\n   *\n   * @param {Buffer[]} list The frame to send\n   * @param {Function} [cb] Callback\n   * @private\n   */\n  sendFrame(list, cb) {\n    if (list.length === 2) {\n      this._socket.cork();\n      this._socket.write(list[0]);\n      this._socket.write(list[1], cb);\n      this._socket.uncork();\n    } else {\n      this._socket.write(list[0], cb);\n    }\n  }\n}\n\nmodule.exports = Sender;\n", "'use strict';\n\nconst { kForOnEventAttribute, kListener } = require('./constants');\n\nconst kCode = Symbol('kCode');\nconst kData = Symbol('kData');\nconst kError = Symbol('kError');\nconst kMessage = Symbol('kMessage');\nconst kReason = Symbol('kReason');\nconst kTarget = Symbol('kTarget');\nconst kType = Symbol('kType');\nconst kWasClean = Symbol('kWasClean');\n\n/**\n * Class representing an event.\n */\nclass Event {\n  /**\n   * Create a new `Event`.\n   *\n   * @param {String} type The name of the event\n   * @throws {TypeError} If the `type` argument is not specified\n   */\n  constructor(type) {\n    this[kTarget] = null;\n    this[kType] = type;\n  }\n\n  /**\n   * @type {*}\n   */\n  get target() {\n    return this[kTarget];\n  }\n\n  /**\n   * @type {String}\n   */\n  get type() {\n    return this[kType];\n  }\n}\n\nObject.defineProperty(Event.prototype, 'target', { enumerable: true });\nObject.defineProperty(Event.prototype, 'type', { enumerable: true });\n\n/**\n * Class representing a close event.\n *\n * @extends Event\n */\nclass CloseEvent extends Event {\n  /**\n   * Create a new `CloseEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {Number} [options.code=0] The status code explaining why the\n   *     connection was closed\n   * @param {String} [options.reason=''] A human-readable string explaining why\n   *     the connection was closed\n   * @param {Boolean} [options.wasClean=false] Indicates whether or not the\n   *     connection was cleanly closed\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kCode] = options.code === undefined ? 0 : options.code;\n    this[kReason] = options.reason === undefined ? '' : options.reason;\n    this[kWasClean] = options.wasClean === undefined ? false : options.wasClean;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get code() {\n    return this[kCode];\n  }\n\n  /**\n   * @type {String}\n   */\n  get reason() {\n    return this[kReason];\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get wasClean() {\n    return this[kWasClean];\n  }\n}\n\nObject.defineProperty(CloseEvent.prototype, 'code', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'reason', { enumerable: true });\nObject.defineProperty(CloseEvent.prototype, 'wasClean', { enumerable: true });\n\n/**\n * Class representing an error event.\n *\n * @extends Event\n */\nclass ErrorEvent extends Event {\n  /**\n   * Create a new `ErrorEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.error=null] The error that generated this event\n   * @param {String} [options.message=''] The error message\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kError] = options.error === undefined ? null : options.error;\n    this[kMessage] = options.message === undefined ? '' : options.message;\n  }\n\n  /**\n   * @type {*}\n   */\n  get error() {\n    return this[kError];\n  }\n\n  /**\n   * @type {String}\n   */\n  get message() {\n    return this[kMessage];\n  }\n}\n\nObject.defineProperty(ErrorEvent.prototype, 'error', { enumerable: true });\nObject.defineProperty(ErrorEvent.prototype, 'message', { enumerable: true });\n\n/**\n * Class representing a message event.\n *\n * @extends Event\n */\nclass MessageEvent extends Event {\n  /**\n   * Create a new `MessageEvent`.\n   *\n   * @param {String} type The name of the event\n   * @param {Object} [options] A dictionary object that allows for setting\n   *     attributes via object members of the same name\n   * @param {*} [options.data=null] The message content\n   */\n  constructor(type, options = {}) {\n    super(type);\n\n    this[kData] = options.data === undefined ? null : options.data;\n  }\n\n  /**\n   * @type {*}\n   */\n  get data() {\n    return this[kData];\n  }\n}\n\nObject.defineProperty(MessageEvent.prototype, 'data', { enumerable: true });\n\n/**\n * This provides methods for emulating the `EventTarget` interface. It's not\n * meant to be used directly.\n *\n * @mixin\n */\nconst EventTarget = {\n  /**\n   * Register an event listener.\n   *\n   * @param {String} type A string representing the event type to listen for\n   * @param {(Function|Object)} handler The listener to add\n   * @param {Object} [options] An options object specifies characteristics about\n   *     the event listener\n   * @param {Boolean} [options.once=false] A `Boolean` indicating that the\n   *     listener should be invoked at most once after being added. If `true`,\n   *     the listener would be automatically removed when invoked.\n   * @public\n   */\n  addEventListener(type, handler, options = {}) {\n    for (const listener of this.listeners(type)) {\n      if (\n        !options[kForOnEventAttribute] &&\n        listener[kListener] === handler &&\n        !listener[kForOnEventAttribute]\n      ) {\n        return;\n      }\n    }\n\n    let wrapper;\n\n    if (type === 'message') {\n      wrapper = function onMessage(data, isBinary) {\n        const event = new MessageEvent('message', {\n          data: isBinary ? data : data.toString()\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'close') {\n      wrapper = function onClose(code, message) {\n        const event = new CloseEvent('close', {\n          code,\n          reason: message.toString(),\n          wasClean: this._closeFrameReceived && this._closeFrameSent\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'error') {\n      wrapper = function onError(error) {\n        const event = new ErrorEvent('error', {\n          error,\n          message: error.message\n        });\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else if (type === 'open') {\n      wrapper = function onOpen() {\n        const event = new Event('open');\n\n        event[kTarget] = this;\n        callListener(handler, this, event);\n      };\n    } else {\n      return;\n    }\n\n    wrapper[kForOnEventAttribute] = !!options[kForOnEventAttribute];\n    wrapper[kListener] = handler;\n\n    if (options.once) {\n      this.once(type, wrapper);\n    } else {\n      this.on(type, wrapper);\n    }\n  },\n\n  /**\n   * Remove an event listener.\n   *\n   * @param {String} type A string representing the event type to remove\n   * @param {(Function|Object)} handler The listener to remove\n   * @public\n   */\n  removeEventListener(type, handler) {\n    for (const listener of this.listeners(type)) {\n      if (listener[kListener] === handler && !listener[kForOnEventAttribute]) {\n        this.removeListener(type, listener);\n        break;\n      }\n    }\n  }\n};\n\nmodule.exports = {\n  CloseEvent,\n  ErrorEvent,\n  Event,\n  EventTarget,\n  MessageEvent\n};\n\n/**\n * Call an event listener\n *\n * @param {(Function|Object)} listener The listener to call\n * @param {*} thisArg The value to use as `this`` when calling the listener\n * @param {Event} event The event to pass to the listener\n * @private\n */\nfunction callListener(listener, thisArg, event) {\n  if (typeof listener === 'object' && listener.handleEvent) {\n    listener.handleEvent.call(listener, event);\n  } else {\n    listener.call(thisArg, event);\n  }\n}\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Adds an offer to the map of extension offers or a parameter to the map of\n * parameters.\n *\n * @param {Object} dest The map of extension offers or parameters\n * @param {String} name The extension or parameter name\n * @param {(Object|Boolean|String)} elem The extension parameters or the\n *     parameter value\n * @private\n */\nfunction push(dest, name, elem) {\n  if (dest[name] === undefined) dest[name] = [elem];\n  else dest[name].push(elem);\n}\n\n/**\n * Parses the `Sec-WebSocket-Extensions` header into an object.\n *\n * @param {String} header The field value of the header\n * @return {Object} The parsed object\n * @public\n */\nfunction parse(header) {\n  const offers = Object.create(null);\n  let params = Object.create(null);\n  let mustUnescape = false;\n  let isEscaping = false;\n  let inQuotes = false;\n  let extensionName;\n  let paramName;\n  let start = -1;\n  let code = -1;\n  let end = -1;\n  let i = 0;\n\n  for (; i < header.length; i++) {\n    code = header.charCodeAt(i);\n\n    if (extensionName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (\n        i !== 0 &&\n        (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n      ) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b /* ';' */ || code === 0x2c /* ',' */) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        const name = header.slice(start, end);\n        if (code === 0x2c) {\n          push(offers, name, params);\n          params = Object.create(null);\n        } else {\n          extensionName = name;\n        }\n\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else if (paramName === undefined) {\n      if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (code === 0x20 || code === 0x09) {\n        if (end === -1 && start !== -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        push(params, header.slice(start, end), true);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        start = end = -1;\n      } else if (code === 0x3d /* '=' */ && start !== -1 && end === -1) {\n        paramName = header.slice(start, i);\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    } else {\n      //\n      // The value of a quoted-string after unescaping must conform to the\n      // token ABNF, so only token characters are valid.\n      // Ref: https://tools.ietf.org/html/rfc6455#section-9.1\n      //\n      if (isEscaping) {\n        if (tokenChars[code] !== 1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n        if (start === -1) start = i;\n        else if (!mustUnescape) mustUnescape = true;\n        isEscaping = false;\n      } else if (inQuotes) {\n        if (tokenChars[code] === 1) {\n          if (start === -1) start = i;\n        } else if (code === 0x22 /* '\"' */ && start !== -1) {\n          inQuotes = false;\n          end = i;\n        } else if (code === 0x5c /* '\\' */) {\n          isEscaping = true;\n        } else {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n      } else if (code === 0x22 && header.charCodeAt(i - 1) === 0x3d) {\n        inQuotes = true;\n      } else if (end === -1 && tokenChars[code] === 1) {\n        if (start === -1) start = i;\n      } else if (start !== -1 && (code === 0x20 || code === 0x09)) {\n        if (end === -1) end = i;\n      } else if (code === 0x3b || code === 0x2c) {\n        if (start === -1) {\n          throw new SyntaxError(`Unexpected character at index ${i}`);\n        }\n\n        if (end === -1) end = i;\n        let value = header.slice(start, end);\n        if (mustUnescape) {\n          value = value.replace(/\\\\/g, '');\n          mustUnescape = false;\n        }\n        push(params, paramName, value);\n        if (code === 0x2c) {\n          push(offers, extensionName, params);\n          params = Object.create(null);\n          extensionName = undefined;\n        }\n\n        paramName = undefined;\n        start = end = -1;\n      } else {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n    }\n  }\n\n  if (start === -1 || inQuotes || code === 0x20 || code === 0x09) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  if (end === -1) end = i;\n  const token = header.slice(start, end);\n  if (extensionName === undefined) {\n    push(offers, token, params);\n  } else {\n    if (paramName === undefined) {\n      push(params, token, true);\n    } else if (mustUnescape) {\n      push(params, paramName, token.replace(/\\\\/g, ''));\n    } else {\n      push(params, paramName, token);\n    }\n    push(offers, extensionName, params);\n  }\n\n  return offers;\n}\n\n/**\n * Builds the `Sec-WebSocket-Extensions` header field value.\n *\n * @param {Object} extensions The map of extensions and parameters to format\n * @return {String} A string representing the given object\n * @public\n */\nfunction format(extensions) {\n  return Object.keys(extensions)\n    .map((extension) => {\n      let configurations = extensions[extension];\n      if (!Array.isArray(configurations)) configurations = [configurations];\n      return configurations\n        .map((params) => {\n          return [extension]\n            .concat(\n              Object.keys(params).map((k) => {\n                let values = params[k];\n                if (!Array.isArray(values)) values = [values];\n                return values\n                  .map((v) => (v === true ? k : `${k}=${v}`))\n                  .join('; ');\n              })\n            )\n            .join('; ');\n        })\n        .join(', ');\n    })\n    .join(', ');\n}\n\nmodule.exports = { format, parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex|Readable$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst https = require('https');\nconst http = require('http');\nconst net = require('net');\nconst tls = require('tls');\nconst { randomBytes, createHash } = require('crypto');\nconst { Duplex, Readable } = require('stream');\nconst { URL } = require('url');\n\nconst PerMessageDeflate = require('./permessage-deflate');\nconst Receiver = require('./receiver');\nconst Sender = require('./sender');\nconst {\n  BINARY_TYPES,\n  EMPTY_BUFFER,\n  GUID,\n  kForOnEventAttribute,\n  kListener,\n  kStatusCode,\n  kWebSocket,\n  NOOP\n} = require('./constants');\nconst {\n  EventTarget: { addEventListener, removeEventListener }\n} = require('./event-target');\nconst { format, parse } = require('./extension');\nconst { toBuffer } = require('./buffer-util');\n\nconst closeTimeout = 30 * 1000;\nconst kAborted = Symbol('kAborted');\nconst protocolVersions = [8, 13];\nconst readyStates = ['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'];\nconst subprotocolRegex = /^[!#$%&'*+\\-.0-9A-Z^_`|a-z~]+$/;\n\n/**\n * Class representing a WebSocket.\n *\n * @extends EventEmitter\n */\nclass WebSocket extends EventEmitter {\n  /**\n   * Create a new `WebSocket`.\n   *\n   * @param {(String|URL)} address The URL to which to connect\n   * @param {(String|String[])} [protocols] The subprotocols\n   * @param {Object} [options] Connection options\n   */\n  constructor(address, protocols, options) {\n    super();\n\n    this._binaryType = BINARY_TYPES[0];\n    this._closeCode = 1006;\n    this._closeFrameReceived = false;\n    this._closeFrameSent = false;\n    this._closeMessage = EMPTY_BUFFER;\n    this._closeTimer = null;\n    this._extensions = {};\n    this._paused = false;\n    this._protocol = '';\n    this._readyState = WebSocket.CONNECTING;\n    this._receiver = null;\n    this._sender = null;\n    this._socket = null;\n\n    if (address !== null) {\n      this._bufferedAmount = 0;\n      this._isServer = false;\n      this._redirects = 0;\n\n      if (protocols === undefined) {\n        protocols = [];\n      } else if (!Array.isArray(protocols)) {\n        if (typeof protocols === 'object' && protocols !== null) {\n          options = protocols;\n          protocols = [];\n        } else {\n          protocols = [protocols];\n        }\n      }\n\n      initAsClient(this, address, protocols, options);\n    } else {\n      this._autoPong = options.autoPong;\n      this._isServer = true;\n    }\n  }\n\n  /**\n   * This deviates from the WHATWG interface since ws doesn't support the\n   * required default \"blob\" type (instead we define a custom \"nodebuffer\"\n   * type).\n   *\n   * @type {String}\n   */\n  get binaryType() {\n    return this._binaryType;\n  }\n\n  set binaryType(type) {\n    if (!BINARY_TYPES.includes(type)) return;\n\n    this._binaryType = type;\n\n    //\n    // Allow to change `binaryType` on the fly.\n    //\n    if (this._receiver) this._receiver._binaryType = type;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get bufferedAmount() {\n    if (!this._socket) return this._bufferedAmount;\n\n    return this._socket._writableState.length + this._sender._bufferedBytes;\n  }\n\n  /**\n   * @type {String}\n   */\n  get extensions() {\n    return Object.keys(this._extensions).join();\n  }\n\n  /**\n   * @type {Boolean}\n   */\n  get isPaused() {\n    return this._paused;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onclose() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onerror() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onopen() {\n    return null;\n  }\n\n  /**\n   * @type {Function}\n   */\n  /* istanbul ignore next */\n  get onmessage() {\n    return null;\n  }\n\n  /**\n   * @type {String}\n   */\n  get protocol() {\n    return this._protocol;\n  }\n\n  /**\n   * @type {Number}\n   */\n  get readyState() {\n    return this._readyState;\n  }\n\n  /**\n   * @type {String}\n   */\n  get url() {\n    return this._url;\n  }\n\n  /**\n   * Set up the socket and the internal resources.\n   *\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Object} options Options object\n   * @param {Boolean} [options.allowSynchronousEvents=false] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Function} [options.generateMask] The function used to generate the\n   *     masking key\n   * @param {Number} [options.maxPayload=0] The maximum allowed message size\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @private\n   */\n  setSocket(socket, head, options) {\n    const receiver = new Receiver({\n      allowSynchronousEvents: options.allowSynchronousEvents,\n      binaryType: this.binaryType,\n      extensions: this._extensions,\n      isServer: this._isServer,\n      maxPayload: options.maxPayload,\n      skipUTF8Validation: options.skipUTF8Validation\n    });\n\n    this._sender = new Sender(socket, this._extensions, options.generateMask);\n    this._receiver = receiver;\n    this._socket = socket;\n\n    receiver[kWebSocket] = this;\n    socket[kWebSocket] = this;\n\n    receiver.on('conclude', receiverOnConclude);\n    receiver.on('drain', receiverOnDrain);\n    receiver.on('error', receiverOnError);\n    receiver.on('message', receiverOnMessage);\n    receiver.on('ping', receiverOnPing);\n    receiver.on('pong', receiverOnPong);\n\n    //\n    // These methods may not be available if `socket` is just a `Duplex`.\n    //\n    if (socket.setTimeout) socket.setTimeout(0);\n    if (socket.setNoDelay) socket.setNoDelay();\n\n    if (head.length > 0) socket.unshift(head);\n\n    socket.on('close', socketOnClose);\n    socket.on('data', socketOnData);\n    socket.on('end', socketOnEnd);\n    socket.on('error', socketOnError);\n\n    this._readyState = WebSocket.OPEN;\n    this.emit('open');\n  }\n\n  /**\n   * Emit the `'close'` event.\n   *\n   * @private\n   */\n  emitClose() {\n    if (!this._socket) {\n      this._readyState = WebSocket.CLOSED;\n      this.emit('close', this._closeCode, this._closeMessage);\n      return;\n    }\n\n    if (this._extensions[PerMessageDeflate.extensionName]) {\n      this._extensions[PerMessageDeflate.extensionName].cleanup();\n    }\n\n    this._receiver.removeAllListeners();\n    this._readyState = WebSocket.CLOSED;\n    this.emit('close', this._closeCode, this._closeMessage);\n  }\n\n  /**\n   * Start a closing handshake.\n   *\n   *          +----------+   +-----------+   +----------+\n   *     - - -|ws.close()|-->|close frame|-->|ws.close()|- - -\n   *    |     +----------+   +-----------+   +----------+     |\n   *          +----------+   +-----------+         |\n   * CLOSING  |ws.close()|<--|close frame|<--+-----+       CLOSING\n   *          +----------+   +-----------+   |\n   *    |           |                        |   +---+        |\n   *                +------------------------+-->|fin| - - - -\n   *    |         +---+                      |   +---+\n   *     - - - - -|fin|<---------------------+\n   *              +---+\n   *\n   * @param {Number} [code] Status code explaining why the connection is closing\n   * @param {(String|Buffer)} [data] The reason why the connection is\n   *     closing\n   * @public\n   */\n  close(code, data) {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this.readyState === WebSocket.CLOSING) {\n      if (\n        this._closeFrameSent &&\n        (this._closeFrameReceived || this._receiver._writableState.errorEmitted)\n      ) {\n        this._socket.end();\n      }\n\n      return;\n    }\n\n    this._readyState = WebSocket.CLOSING;\n    this._sender.close(code, data, !this._isServer, (err) => {\n      //\n      // This error is handled by the `'error'` listener on the socket. We only\n      // want to know if the close frame has been sent here.\n      //\n      if (err) return;\n\n      this._closeFrameSent = true;\n\n      if (\n        this._closeFrameReceived ||\n        this._receiver._writableState.errorEmitted\n      ) {\n        this._socket.end();\n      }\n    });\n\n    //\n    // Specify a timeout for the closing handshake to complete.\n    //\n    this._closeTimer = setTimeout(\n      this._socket.destroy.bind(this._socket),\n      closeTimeout\n    );\n  }\n\n  /**\n   * Pause the socket.\n   *\n   * @public\n   */\n  pause() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = true;\n    this._socket.pause();\n  }\n\n  /**\n   * Send a ping.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the ping is sent\n   * @public\n   */\n  ping(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.ping(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Send a pong.\n   *\n   * @param {*} [data] The data to send\n   * @param {Boolean} [mask] Indicates whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when the pong is sent\n   * @public\n   */\n  pong(data, mask, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof data === 'function') {\n      cb = data;\n      data = mask = undefined;\n    } else if (typeof mask === 'function') {\n      cb = mask;\n      mask = undefined;\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    if (mask === undefined) mask = !this._isServer;\n    this._sender.pong(data || EMPTY_BUFFER, mask, cb);\n  }\n\n  /**\n   * Resume the socket.\n   *\n   * @public\n   */\n  resume() {\n    if (\n      this.readyState === WebSocket.CONNECTING ||\n      this.readyState === WebSocket.CLOSED\n    ) {\n      return;\n    }\n\n    this._paused = false;\n    if (!this._receiver._writableState.needDrain) this._socket.resume();\n  }\n\n  /**\n   * Send a data message.\n   *\n   * @param {*} data The message to send\n   * @param {Object} [options] Options object\n   * @param {Boolean} [options.binary] Specifies whether `data` is binary or\n   *     text\n   * @param {Boolean} [options.compress] Specifies whether or not to compress\n   *     `data`\n   * @param {Boolean} [options.fin=true] Specifies whether the fragment is the\n   *     last one\n   * @param {Boolean} [options.mask] Specifies whether or not to mask `data`\n   * @param {Function} [cb] Callback which is executed when data is written out\n   * @public\n   */\n  send(data, options, cb) {\n    if (this.readyState === WebSocket.CONNECTING) {\n      throw new Error('WebSocket is not open: readyState 0 (CONNECTING)');\n    }\n\n    if (typeof options === 'function') {\n      cb = options;\n      options = {};\n    }\n\n    if (typeof data === 'number') data = data.toString();\n\n    if (this.readyState !== WebSocket.OPEN) {\n      sendAfterClose(this, data, cb);\n      return;\n    }\n\n    const opts = {\n      binary: typeof data !== 'string',\n      mask: !this._isServer,\n      compress: true,\n      fin: true,\n      ...options\n    };\n\n    if (!this._extensions[PerMessageDeflate.extensionName]) {\n      opts.compress = false;\n    }\n\n    this._sender.send(data || EMPTY_BUFFER, opts, cb);\n  }\n\n  /**\n   * Forcibly close the connection.\n   *\n   * @public\n   */\n  terminate() {\n    if (this.readyState === WebSocket.CLOSED) return;\n    if (this.readyState === WebSocket.CONNECTING) {\n      const msg = 'WebSocket was closed before the connection was established';\n      abortHandshake(this, this._req, msg);\n      return;\n    }\n\n    if (this._socket) {\n      this._readyState = WebSocket.CLOSING;\n      this._socket.destroy();\n    }\n  }\n}\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} CONNECTING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CONNECTING', {\n  enumerable: true,\n  value: readyStates.indexOf('CONNECTING')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} OPEN\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'OPEN', {\n  enumerable: true,\n  value: readyStates.indexOf('OPEN')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSING\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSING', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSING')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket\n */\nObject.defineProperty(WebSocket, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n/**\n * @constant {Number} CLOSED\n * @memberof WebSocket.prototype\n */\nObject.defineProperty(WebSocket.prototype, 'CLOSED', {\n  enumerable: true,\n  value: readyStates.indexOf('CLOSED')\n});\n\n[\n  'binaryType',\n  'bufferedAmount',\n  'extensions',\n  'isPaused',\n  'protocol',\n  'readyState',\n  'url'\n].forEach((property) => {\n  Object.defineProperty(WebSocket.prototype, property, { enumerable: true });\n});\n\n//\n// Add the `onopen`, `onerror`, `onclose`, and `onmessage` attributes.\n// See https://html.spec.whatwg.org/multipage/comms.html#the-websocket-interface\n//\n['open', 'error', 'close', 'message'].forEach((method) => {\n  Object.defineProperty(WebSocket.prototype, `on${method}`, {\n    enumerable: true,\n    get() {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) return listener[kListener];\n      }\n\n      return null;\n    },\n    set(handler) {\n      for (const listener of this.listeners(method)) {\n        if (listener[kForOnEventAttribute]) {\n          this.removeListener(method, listener);\n          break;\n        }\n      }\n\n      if (typeof handler !== 'function') return;\n\n      this.addEventListener(method, handler, {\n        [kForOnEventAttribute]: true\n      });\n    }\n  });\n});\n\nWebSocket.prototype.addEventListener = addEventListener;\nWebSocket.prototype.removeEventListener = removeEventListener;\n\nmodule.exports = WebSocket;\n\n/**\n * Initialize a WebSocket client.\n *\n * @param {WebSocket} websocket The client to initialize\n * @param {(String|URL)} address The URL to which to connect\n * @param {Array} protocols The subprotocols\n * @param {Object} [options] Connection options\n * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether any\n *     of the `'message'`, `'ping'`, and `'pong'` events can be emitted multiple\n *     times in the same tick\n * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n *     automatically send a pong in response to a ping\n * @param {Function} [options.finishRequest] A function which can be used to\n *     customize the headers of each http request before it is sent\n * @param {Boolean} [options.followRedirects=false] Whether or not to follow\n *     redirects\n * @param {Function} [options.generateMask] The function used to generate the\n *     masking key\n * @param {Number} [options.handshakeTimeout] Timeout in milliseconds for the\n *     handshake request\n * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n *     size\n * @param {Number} [options.maxRedirects=10] The maximum number of redirects\n *     allowed\n * @param {String} [options.origin] Value of the `Origin` or\n *     `Sec-WebSocket-Origin` header\n * @param {(Boolean|Object)} [options.perMessageDeflate=true] Enable/disable\n *     permessage-deflate\n * @param {Number} [options.protocolVersion=13] Value of the\n *     `Sec-WebSocket-Version` header\n * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n *     not to skip UTF-8 validation for text and close messages\n * @private\n */\nfunction initAsClient(websocket, address, protocols, options) {\n  const opts = {\n    allowSynchronousEvents: true,\n    autoPong: true,\n    protocolVersion: protocolVersions[1],\n    maxPayload: 100 * 1024 * 1024,\n    skipUTF8Validation: false,\n    perMessageDeflate: true,\n    followRedirects: false,\n    maxRedirects: 10,\n    ...options,\n    socketPath: undefined,\n    hostname: undefined,\n    protocol: undefined,\n    timeout: undefined,\n    method: 'GET',\n    host: undefined,\n    path: undefined,\n    port: undefined\n  };\n\n  websocket._autoPong = opts.autoPong;\n\n  if (!protocolVersions.includes(opts.protocolVersion)) {\n    throw new RangeError(\n      `Unsupported protocol version: ${opts.protocolVersion} ` +\n        `(supported versions: ${protocolVersions.join(', ')})`\n    );\n  }\n\n  let parsedUrl;\n\n  if (address instanceof URL) {\n    parsedUrl = address;\n  } else {\n    try {\n      parsedUrl = new URL(address);\n    } catch (e) {\n      throw new SyntaxError(`Invalid URL: ${address}`);\n    }\n  }\n\n  if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  } else if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  }\n\n  websocket._url = parsedUrl.href;\n\n  const isSecure = parsedUrl.protocol === 'wss:';\n  const isIpcUrl = parsedUrl.protocol === 'ws+unix:';\n  let invalidUrlMessage;\n\n  if (parsedUrl.protocol !== 'ws:' && !isSecure && !isIpcUrl) {\n    invalidUrlMessage =\n      'The URL\\'s protocol must be one of \"ws:\", \"wss:\", ' +\n      '\"http:\", \"https\", or \"ws+unix:\"';\n  } else if (isIpcUrl && !parsedUrl.pathname) {\n    invalidUrlMessage = \"The URL's pathname is empty\";\n  } else if (parsedUrl.hash) {\n    invalidUrlMessage = 'The URL contains a fragment identifier';\n  }\n\n  if (invalidUrlMessage) {\n    const err = new SyntaxError(invalidUrlMessage);\n\n    if (websocket._redirects === 0) {\n      throw err;\n    } else {\n      emitErrorAndClose(websocket, err);\n      return;\n    }\n  }\n\n  const defaultPort = isSecure ? 443 : 80;\n  const key = randomBytes(16).toString('base64');\n  const request = isSecure ? https.request : http.request;\n  const protocolSet = new Set();\n  let perMessageDeflate;\n\n  opts.createConnection =\n    opts.createConnection || (isSecure ? tlsConnect : netConnect);\n  opts.defaultPort = opts.defaultPort || defaultPort;\n  opts.port = parsedUrl.port || defaultPort;\n  opts.host = parsedUrl.hostname.startsWith('[')\n    ? parsedUrl.hostname.slice(1, -1)\n    : parsedUrl.hostname;\n  opts.headers = {\n    ...opts.headers,\n    'Sec-WebSocket-Version': opts.protocolVersion,\n    'Sec-WebSocket-Key': key,\n    Connection: 'Upgrade',\n    Upgrade: 'websocket'\n  };\n  opts.path = parsedUrl.pathname + parsedUrl.search;\n  opts.timeout = opts.handshakeTimeout;\n\n  if (opts.perMessageDeflate) {\n    perMessageDeflate = new PerMessageDeflate(\n      opts.perMessageDeflate !== true ? opts.perMessageDeflate : {},\n      false,\n      opts.maxPayload\n    );\n    opts.headers['Sec-WebSocket-Extensions'] = format({\n      [PerMessageDeflate.extensionName]: perMessageDeflate.offer()\n    });\n  }\n  if (protocols.length) {\n    for (const protocol of protocols) {\n      if (\n        typeof protocol !== 'string' ||\n        !subprotocolRegex.test(protocol) ||\n        protocolSet.has(protocol)\n      ) {\n        throw new SyntaxError(\n          'An invalid or duplicated subprotocol was specified'\n        );\n      }\n\n      protocolSet.add(protocol);\n    }\n\n    opts.headers['Sec-WebSocket-Protocol'] = protocols.join(',');\n  }\n  if (opts.origin) {\n    if (opts.protocolVersion < 13) {\n      opts.headers['Sec-WebSocket-Origin'] = opts.origin;\n    } else {\n      opts.headers.Origin = opts.origin;\n    }\n  }\n  if (parsedUrl.username || parsedUrl.password) {\n    opts.auth = `${parsedUrl.username}:${parsedUrl.password}`;\n  }\n\n  if (isIpcUrl) {\n    const parts = opts.path.split(':');\n\n    opts.socketPath = parts[0];\n    opts.path = parts[1];\n  }\n\n  let req;\n\n  if (opts.followRedirects) {\n    if (websocket._redirects === 0) {\n      websocket._originalIpc = isIpcUrl;\n      websocket._originalSecure = isSecure;\n      websocket._originalHostOrSocketPath = isIpcUrl\n        ? opts.socketPath\n        : parsedUrl.host;\n\n      const headers = options && options.headers;\n\n      //\n      // Shallow copy the user provided options so that headers can be changed\n      // without mutating the original object.\n      //\n      options = { ...options, headers: {} };\n\n      if (headers) {\n        for (const [key, value] of Object.entries(headers)) {\n          options.headers[key.toLowerCase()] = value;\n        }\n      }\n    } else if (websocket.listenerCount('redirect') === 0) {\n      const isSameHost = isIpcUrl\n        ? websocket._originalIpc\n          ? opts.socketPath === websocket._originalHostOrSocketPath\n          : false\n        : websocket._originalIpc\n          ? false\n          : parsedUrl.host === websocket._originalHostOrSocketPath;\n\n      if (!isSameHost || (websocket._originalSecure && !isSecure)) {\n        //\n        // Match curl 7.77.0 behavior and drop the following headers. These\n        // headers are also dropped when following a redirect to a subdomain.\n        //\n        delete opts.headers.authorization;\n        delete opts.headers.cookie;\n\n        if (!isSameHost) delete opts.headers.host;\n\n        opts.auth = undefined;\n      }\n    }\n\n    //\n    // Match curl 7.77.0 behavior and make the first `Authorization` header win.\n    // If the `Authorization` header is set, then there is nothing to do as it\n    // will take precedence.\n    //\n    if (opts.auth && !options.headers.authorization) {\n      options.headers.authorization =\n        'Basic ' + Buffer.from(opts.auth).toString('base64');\n    }\n\n    req = websocket._req = request(opts);\n\n    if (websocket._redirects) {\n      //\n      // Unlike what is done for the `'upgrade'` event, no early exit is\n      // triggered here if the user calls `websocket.close()` or\n      // `websocket.terminate()` from a listener of the `'redirect'` event. This\n      // is because the user can also call `request.destroy()` with an error\n      // before calling `websocket.close()` or `websocket.terminate()` and this\n      // would result in an error being emitted on the `request` object with no\n      // `'error'` event listeners attached.\n      //\n      websocket.emit('redirect', websocket.url, req);\n    }\n  } else {\n    req = websocket._req = request(opts);\n  }\n\n  if (opts.timeout) {\n    req.on('timeout', () => {\n      abortHandshake(websocket, req, 'Opening handshake has timed out');\n    });\n  }\n\n  req.on('error', (err) => {\n    if (req === null || req[kAborted]) return;\n\n    req = websocket._req = null;\n    emitErrorAndClose(websocket, err);\n  });\n\n  req.on('response', (res) => {\n    const location = res.headers.location;\n    const statusCode = res.statusCode;\n\n    if (\n      location &&\n      opts.followRedirects &&\n      statusCode >= 300 &&\n      statusCode < 400\n    ) {\n      if (++websocket._redirects > opts.maxRedirects) {\n        abortHandshake(websocket, req, 'Maximum redirects exceeded');\n        return;\n      }\n\n      req.abort();\n\n      let addr;\n\n      try {\n        addr = new URL(location, address);\n      } catch (e) {\n        const err = new SyntaxError(`Invalid URL: ${location}`);\n        emitErrorAndClose(websocket, err);\n        return;\n      }\n\n      initAsClient(websocket, addr, protocols, options);\n    } else if (!websocket.emit('unexpected-response', req, res)) {\n      abortHandshake(\n        websocket,\n        req,\n        `Unexpected server response: ${res.statusCode}`\n      );\n    }\n  });\n\n  req.on('upgrade', (res, socket, head) => {\n    websocket.emit('upgrade', res);\n\n    //\n    // The user may have closed the connection from a listener of the\n    // `'upgrade'` event.\n    //\n    if (websocket.readyState !== WebSocket.CONNECTING) return;\n\n    req = websocket._req = null;\n\n    const upgrade = res.headers.upgrade;\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      abortHandshake(websocket, socket, 'Invalid Upgrade header');\n      return;\n    }\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    if (res.headers['sec-websocket-accept'] !== digest) {\n      abortHandshake(websocket, socket, 'Invalid Sec-WebSocket-Accept header');\n      return;\n    }\n\n    const serverProt = res.headers['sec-websocket-protocol'];\n    let protError;\n\n    if (serverProt !== undefined) {\n      if (!protocolSet.size) {\n        protError = 'Server sent a subprotocol but none was requested';\n      } else if (!protocolSet.has(serverProt)) {\n        protError = 'Server sent an invalid subprotocol';\n      }\n    } else if (protocolSet.size) {\n      protError = 'Server sent no subprotocol';\n    }\n\n    if (protError) {\n      abortHandshake(websocket, socket, protError);\n      return;\n    }\n\n    if (serverProt) websocket._protocol = serverProt;\n\n    const secWebSocketExtensions = res.headers['sec-websocket-extensions'];\n\n    if (secWebSocketExtensions !== undefined) {\n      if (!perMessageDeflate) {\n        const message =\n          'Server sent a Sec-WebSocket-Extensions header but no extension ' +\n          'was requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      let extensions;\n\n      try {\n        extensions = parse(secWebSocketExtensions);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      const extensionNames = Object.keys(extensions);\n\n      if (\n        extensionNames.length !== 1 ||\n        extensionNames[0] !== PerMessageDeflate.extensionName\n      ) {\n        const message = 'Server indicated an extension that was not requested';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      try {\n        perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Extensions header';\n        abortHandshake(websocket, socket, message);\n        return;\n      }\n\n      websocket._extensions[PerMessageDeflate.extensionName] =\n        perMessageDeflate;\n    }\n\n    websocket.setSocket(socket, head, {\n      allowSynchronousEvents: opts.allowSynchronousEvents,\n      generateMask: opts.generateMask,\n      maxPayload: opts.maxPayload,\n      skipUTF8Validation: opts.skipUTF8Validation\n    });\n  });\n\n  if (opts.finishRequest) {\n    opts.finishRequest(req, websocket);\n  } else {\n    req.end();\n  }\n}\n\n/**\n * Emit the `'error'` and `'close'` events.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {Error} The error to emit\n * @private\n */\nfunction emitErrorAndClose(websocket, err) {\n  websocket._readyState = WebSocket.CLOSING;\n  websocket.emit('error', err);\n  websocket.emitClose();\n}\n\n/**\n * Create a `net.Socket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {net.Socket} The newly created socket used to start the connection\n * @private\n */\nfunction netConnect(options) {\n  options.path = options.socketPath;\n  return net.connect(options);\n}\n\n/**\n * Create a `tls.TLSSocket` and initiate a connection.\n *\n * @param {Object} options Connection options\n * @return {tls.TLSSocket} The newly created socket used to start the connection\n * @private\n */\nfunction tlsConnect(options) {\n  options.path = undefined;\n\n  if (!options.servername && options.servername !== '') {\n    options.servername = net.isIP(options.host) ? '' : options.host;\n  }\n\n  return tls.connect(options);\n}\n\n/**\n * Abort the handshake and emit an error.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {(http.ClientRequest|net.Socket|tls.Socket)} stream The request to\n *     abort or the socket to destroy\n * @param {String} message The error message\n * @private\n */\nfunction abortHandshake(websocket, stream, message) {\n  websocket._readyState = WebSocket.CLOSING;\n\n  const err = new Error(message);\n  Error.captureStackTrace(err, abortHandshake);\n\n  if (stream.setHeader) {\n    stream[kAborted] = true;\n    stream.abort();\n\n    if (stream.socket && !stream.socket.destroyed) {\n      //\n      // On Node.js >= 14.3.0 `request.abort()` does not destroy the socket if\n      // called after the request completed. See\n      // https://github.com/websockets/ws/issues/1869.\n      //\n      stream.socket.destroy();\n    }\n\n    process.nextTick(emitErrorAndClose, websocket, err);\n  } else {\n    stream.destroy(err);\n    stream.once('error', websocket.emit.bind(websocket, 'error'));\n    stream.once('close', websocket.emitClose.bind(websocket));\n  }\n}\n\n/**\n * Handle cases where the `ping()`, `pong()`, or `send()` methods are called\n * when the `readyState` attribute is `CLOSING` or `CLOSED`.\n *\n * @param {WebSocket} websocket The WebSocket instance\n * @param {*} [data] The data to send\n * @param {Function} [cb] Callback\n * @private\n */\nfunction sendAfterClose(websocket, data, cb) {\n  if (data) {\n    const length = toBuffer(data).length;\n\n    //\n    // The `_bufferedAmount` property is used only when the peer is a client and\n    // the opening handshake fails. Under these circumstances, in fact, the\n    // `setSocket()` method is not called, so the `_socket` and `_sender`\n    // properties are set to `null`.\n    //\n    if (websocket._socket) websocket._sender._bufferedBytes += length;\n    else websocket._bufferedAmount += length;\n  }\n\n  if (cb) {\n    const err = new Error(\n      `WebSocket is not open: readyState ${websocket.readyState} ` +\n        `(${readyStates[websocket.readyState]})`\n    );\n    process.nextTick(cb, err);\n  }\n}\n\n/**\n * The listener of the `Receiver` `'conclude'` event.\n *\n * @param {Number} code The status code\n * @param {Buffer} reason The reason for closing\n * @private\n */\nfunction receiverOnConclude(code, reason) {\n  const websocket = this[kWebSocket];\n\n  websocket._closeFrameReceived = true;\n  websocket._closeMessage = reason;\n  websocket._closeCode = code;\n\n  if (websocket._socket[kWebSocket] === undefined) return;\n\n  websocket._socket.removeListener('data', socketOnData);\n  process.nextTick(resume, websocket._socket);\n\n  if (code === 1005) websocket.close();\n  else websocket.close(code, reason);\n}\n\n/**\n * The listener of the `Receiver` `'drain'` event.\n *\n * @private\n */\nfunction receiverOnDrain() {\n  const websocket = this[kWebSocket];\n\n  if (!websocket.isPaused) websocket._socket.resume();\n}\n\n/**\n * The listener of the `Receiver` `'error'` event.\n *\n * @param {(RangeError|Error)} err The emitted error\n * @private\n */\nfunction receiverOnError(err) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._socket[kWebSocket] !== undefined) {\n    websocket._socket.removeListener('data', socketOnData);\n\n    //\n    // On Node.js < 14.0.0 the `'error'` event is emitted synchronously. See\n    // https://github.com/websockets/ws/issues/1940.\n    //\n    process.nextTick(resume, websocket._socket);\n\n    websocket.close(err[kStatusCode]);\n  }\n\n  websocket.emit('error', err);\n}\n\n/**\n * The listener of the `Receiver` `'finish'` event.\n *\n * @private\n */\nfunction receiverOnFinish() {\n  this[kWebSocket].emitClose();\n}\n\n/**\n * The listener of the `Receiver` `'message'` event.\n *\n * @param {Buffer|ArrayBuffer|Buffer[])} data The message\n * @param {Boolean} isBinary Specifies whether the message is binary or not\n * @private\n */\nfunction receiverOnMessage(data, isBinary) {\n  this[kWebSocket].emit('message', data, isBinary);\n}\n\n/**\n * The listener of the `Receiver` `'ping'` event.\n *\n * @param {Buffer} data The data included in the ping frame\n * @private\n */\nfunction receiverOnPing(data) {\n  const websocket = this[kWebSocket];\n\n  if (websocket._autoPong) websocket.pong(data, !this._isServer, NOOP);\n  websocket.emit('ping', data);\n}\n\n/**\n * The listener of the `Receiver` `'pong'` event.\n *\n * @param {Buffer} data The data included in the pong frame\n * @private\n */\nfunction receiverOnPong(data) {\n  this[kWebSocket].emit('pong', data);\n}\n\n/**\n * Resume a readable stream\n *\n * @param {Readable} stream The readable stream\n * @private\n */\nfunction resume(stream) {\n  stream.resume();\n}\n\n/**\n * The listener of the socket `'close'` event.\n *\n * @private\n */\nfunction socketOnClose() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('close', socketOnClose);\n  this.removeListener('data', socketOnData);\n  this.removeListener('end', socketOnEnd);\n\n  websocket._readyState = WebSocket.CLOSING;\n\n  let chunk;\n\n  //\n  // The close frame might not have been received or the `'end'` event emitted,\n  // for example, if the socket was destroyed due to an error. Ensure that the\n  // `receiver` stream is closed after writing any remaining buffered data to\n  // it. If the readable side of the socket is in flowing mode then there is no\n  // buffered data as everything has been already written and `readable.read()`\n  // will return `null`. If instead, the socket is paused, any possible buffered\n  // data will be read as a single chunk.\n  //\n  if (\n    !this._readableState.endEmitted &&\n    !websocket._closeFrameReceived &&\n    !websocket._receiver._writableState.errorEmitted &&\n    (chunk = websocket._socket.read()) !== null\n  ) {\n    websocket._receiver.write(chunk);\n  }\n\n  websocket._receiver.end();\n\n  this[kWebSocket] = undefined;\n\n  clearTimeout(websocket._closeTimer);\n\n  if (\n    websocket._receiver._writableState.finished ||\n    websocket._receiver._writableState.errorEmitted\n  ) {\n    websocket.emitClose();\n  } else {\n    websocket._receiver.on('error', receiverOnFinish);\n    websocket._receiver.on('finish', receiverOnFinish);\n  }\n}\n\n/**\n * The listener of the socket `'data'` event.\n *\n * @param {Buffer} chunk A chunk of data\n * @private\n */\nfunction socketOnData(chunk) {\n  if (!this[kWebSocket]._receiver.write(chunk)) {\n    this.pause();\n  }\n}\n\n/**\n * The listener of the socket `'end'` event.\n *\n * @private\n */\nfunction socketOnEnd() {\n  const websocket = this[kWebSocket];\n\n  websocket._readyState = WebSocket.CLOSING;\n  websocket._receiver.end();\n  this.end();\n}\n\n/**\n * The listener of the socket `'error'` event.\n *\n * @private\n */\nfunction socketOnError() {\n  const websocket = this[kWebSocket];\n\n  this.removeListener('error', socketOnError);\n  this.on('error', NOOP);\n\n  if (websocket) {\n    websocket._readyState = WebSocket.CLOSING;\n    this.destroy();\n  }\n}\n", "'use strict';\n\nconst { tokenChars } = require('./validation');\n\n/**\n * Parses the `Sec-WebSocket-Protocol` header into a set of subprotocol names.\n *\n * @param {String} header The field value of the header\n * @return {Set} The subprotocol names\n * @public\n */\nfunction parse(header) {\n  const protocols = new Set();\n  let start = -1;\n  let end = -1;\n  let i = 0;\n\n  for (i; i < header.length; i++) {\n    const code = header.charCodeAt(i);\n\n    if (end === -1 && tokenChars[code] === 1) {\n      if (start === -1) start = i;\n    } else if (\n      i !== 0 &&\n      (code === 0x20 /* ' ' */ || code === 0x09) /* '\\t' */\n    ) {\n      if (end === -1 && start !== -1) end = i;\n    } else if (code === 0x2c /* ',' */) {\n      if (start === -1) {\n        throw new SyntaxError(`Unexpected character at index ${i}`);\n      }\n\n      if (end === -1) end = i;\n\n      const protocol = header.slice(start, end);\n\n      if (protocols.has(protocol)) {\n        throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n      }\n\n      protocols.add(protocol);\n      start = end = -1;\n    } else {\n      throw new SyntaxError(`Unexpected character at index ${i}`);\n    }\n  }\n\n  if (start === -1 || end !== -1) {\n    throw new SyntaxError('Unexpected end of input');\n  }\n\n  const protocol = header.slice(start, i);\n\n  if (protocols.has(protocol)) {\n    throw new SyntaxError(`The \"${protocol}\" subprotocol is duplicated`);\n  }\n\n  protocols.add(protocol);\n  return protocols;\n}\n\nmodule.exports = { parse };\n", "/* eslint no-unused-vars: [\"error\", { \"varsIgnorePattern\": \"^Duplex$\", \"caughtErrors\": \"none\" }] */\n\n'use strict';\n\nconst EventEmitter = require('events');\nconst http = require('http');\nconst { Duplex } = require('stream');\nconst { createHash } = require('crypto');\n\nconst extension = require('./extension');\nconst PerMessageDeflate = require('./permessage-deflate');\nconst subprotocol = require('./subprotocol');\nconst WebSocket = require('./websocket');\nconst { GUID, kWebSocket } = require('./constants');\n\nconst keyRegex = /^[+/0-9A-Za-z]{22}==$/;\n\nconst RUNNING = 0;\nconst CLOSING = 1;\nconst CLOSED = 2;\n\n/**\n * Class representing a WebSocket server.\n *\n * @extends EventEmitter\n */\nclass WebSocketServer extends EventEmitter {\n  /**\n   * Create a `WebSocketServer` instance.\n   *\n   * @param {Object} options Configuration options\n   * @param {Boolean} [options.allowSynchronousEvents=true] Specifies whether\n   *     any of the `'message'`, `'ping'`, and `'pong'` events can be emitted\n   *     multiple times in the same tick\n   * @param {Boolean} [options.autoPong=true] Specifies whether or not to\n   *     automatically send a pong in response to a ping\n   * @param {Number} [options.backlog=511] The maximum length of the queue of\n   *     pending connections\n   * @param {Boolean} [options.clientTracking=true] Specifies whether or not to\n   *     track clients\n   * @param {Function} [options.handleProtocols] A hook to handle protocols\n   * @param {String} [options.host] The hostname where to bind the server\n   * @param {Number} [options.maxPayload=104857600] The maximum allowed message\n   *     size\n   * @param {Boolean} [options.noServer=false] Enable no server mode\n   * @param {String} [options.path] Accept only connections matching this path\n   * @param {(Boolean|Object)} [options.perMessageDeflate=false] Enable/disable\n   *     permessage-deflate\n   * @param {Number} [options.port] The port where to bind the server\n   * @param {(http.Server|https.Server)} [options.server] A pre-created HTTP/S\n   *     server to use\n   * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or\n   *     not to skip UTF-8 validation for text and close messages\n   * @param {Function} [options.verifyClient] A hook to reject connections\n   * @param {Function} [options.WebSocket=WebSocket] Specifies the `WebSocket`\n   *     class to use. It must be the `WebSocket` class or class that extends it\n   * @param {Function} [callback] A listener for the `listening` event\n   */\n  constructor(options, callback) {\n    super();\n\n    options = {\n      allowSynchronousEvents: true,\n      autoPong: true,\n      maxPayload: 100 * 1024 * 1024,\n      skipUTF8Validation: false,\n      perMessageDeflate: false,\n      handleProtocols: null,\n      clientTracking: true,\n      verifyClient: null,\n      noServer: false,\n      backlog: null, // use default (511 as implemented in net.js)\n      server: null,\n      host: null,\n      path: null,\n      port: null,\n      WebSocket,\n      ...options\n    };\n\n    if (\n      (options.port == null && !options.server && !options.noServer) ||\n      (options.port != null && (options.server || options.noServer)) ||\n      (options.server && options.noServer)\n    ) {\n      throw new TypeError(\n        'One and only one of the \"port\", \"server\", or \"noServer\" options ' +\n          'must be specified'\n      );\n    }\n\n    if (options.port != null) {\n      this._server = http.createServer((req, res) => {\n        const body = http.STATUS_CODES[426];\n\n        res.writeHead(426, {\n          'Content-Length': body.length,\n          'Content-Type': 'text/plain'\n        });\n        res.end(body);\n      });\n      this._server.listen(\n        options.port,\n        options.host,\n        options.backlog,\n        callback\n      );\n    } else if (options.server) {\n      this._server = options.server;\n    }\n\n    if (this._server) {\n      const emitConnection = this.emit.bind(this, 'connection');\n\n      this._removeListeners = addListeners(this._server, {\n        listening: this.emit.bind(this, 'listening'),\n        error: this.emit.bind(this, 'error'),\n        upgrade: (req, socket, head) => {\n          this.handleUpgrade(req, socket, head, emitConnection);\n        }\n      });\n    }\n\n    if (options.perMessageDeflate === true) options.perMessageDeflate = {};\n    if (options.clientTracking) {\n      this.clients = new Set();\n      this._shouldEmitClose = false;\n    }\n\n    this.options = options;\n    this._state = RUNNING;\n  }\n\n  /**\n   * Returns the bound address, the address family name, and port of the server\n   * as reported by the operating system if listening on an IP socket.\n   * If the server is listening on a pipe or UNIX domain socket, the name is\n   * returned as a string.\n   *\n   * @return {(Object|String|null)} The address of the server\n   * @public\n   */\n  address() {\n    if (this.options.noServer) {\n      throw new Error('The server is operating in \"noServer\" mode');\n    }\n\n    if (!this._server) return null;\n    return this._server.address();\n  }\n\n  /**\n   * Stop the server from accepting new connections and emit the `'close'` event\n   * when all existing connections are closed.\n   *\n   * @param {Function} [cb] A one-time listener for the `'close'` event\n   * @public\n   */\n  close(cb) {\n    if (this._state === CLOSED) {\n      if (cb) {\n        this.once('close', () => {\n          cb(new Error('The server is not running'));\n        });\n      }\n\n      process.nextTick(emitClose, this);\n      return;\n    }\n\n    if (cb) this.once('close', cb);\n\n    if (this._state === CLOSING) return;\n    this._state = CLOSING;\n\n    if (this.options.noServer || this.options.server) {\n      if (this._server) {\n        this._removeListeners();\n        this._removeListeners = this._server = null;\n      }\n\n      if (this.clients) {\n        if (!this.clients.size) {\n          process.nextTick(emitClose, this);\n        } else {\n          this._shouldEmitClose = true;\n        }\n      } else {\n        process.nextTick(emitClose, this);\n      }\n    } else {\n      const server = this._server;\n\n      this._removeListeners();\n      this._removeListeners = this._server = null;\n\n      //\n      // The HTTP/S server was created internally. Close it, and rely on its\n      // `'close'` event.\n      //\n      server.close(() => {\n        emitClose(this);\n      });\n    }\n  }\n\n  /**\n   * See if a given request should be handled by this server instance.\n   *\n   * @param {http.IncomingMessage} req Request object to inspect\n   * @return {Boolean} `true` if the request is valid, else `false`\n   * @public\n   */\n  shouldHandle(req) {\n    if (this.options.path) {\n      const index = req.url.indexOf('?');\n      const pathname = index !== -1 ? req.url.slice(0, index) : req.url;\n\n      if (pathname !== this.options.path) return false;\n    }\n\n    return true;\n  }\n\n  /**\n   * Handle a HTTP Upgrade request.\n   *\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @public\n   */\n  handleUpgrade(req, socket, head, cb) {\n    socket.on('error', socketOnError);\n\n    const key = req.headers['sec-websocket-key'];\n    const upgrade = req.headers.upgrade;\n    const version = +req.headers['sec-websocket-version'];\n\n    if (req.method !== 'GET') {\n      const message = 'Invalid HTTP method';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 405, message);\n      return;\n    }\n\n    if (upgrade === undefined || upgrade.toLowerCase() !== 'websocket') {\n      const message = 'Invalid Upgrade header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (key === undefined || !keyRegex.test(key)) {\n      const message = 'Missing or invalid Sec-WebSocket-Key header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (version !== 8 && version !== 13) {\n      const message = 'Missing or invalid Sec-WebSocket-Version header';\n      abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n      return;\n    }\n\n    if (!this.shouldHandle(req)) {\n      abortHandshake(socket, 400);\n      return;\n    }\n\n    const secWebSocketProtocol = req.headers['sec-websocket-protocol'];\n    let protocols = new Set();\n\n    if (secWebSocketProtocol !== undefined) {\n      try {\n        protocols = subprotocol.parse(secWebSocketProtocol);\n      } catch (err) {\n        const message = 'Invalid Sec-WebSocket-Protocol header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    const secWebSocketExtensions = req.headers['sec-websocket-extensions'];\n    const extensions = {};\n\n    if (\n      this.options.perMessageDeflate &&\n      secWebSocketExtensions !== undefined\n    ) {\n      const perMessageDeflate = new PerMessageDeflate(\n        this.options.perMessageDeflate,\n        true,\n        this.options.maxPayload\n      );\n\n      try {\n        const offers = extension.parse(secWebSocketExtensions);\n\n        if (offers[PerMessageDeflate.extensionName]) {\n          perMessageDeflate.accept(offers[PerMessageDeflate.extensionName]);\n          extensions[PerMessageDeflate.extensionName] = perMessageDeflate;\n        }\n      } catch (err) {\n        const message =\n          'Invalid or unacceptable Sec-WebSocket-Extensions header';\n        abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);\n        return;\n      }\n    }\n\n    //\n    // Optionally call external client verification handler.\n    //\n    if (this.options.verifyClient) {\n      const info = {\n        origin:\n          req.headers[`${version === 8 ? 'sec-websocket-origin' : 'origin'}`],\n        secure: !!(req.socket.authorized || req.socket.encrypted),\n        req\n      };\n\n      if (this.options.verifyClient.length === 2) {\n        this.options.verifyClient(info, (verified, code, message, headers) => {\n          if (!verified) {\n            return abortHandshake(socket, code || 401, message, headers);\n          }\n\n          this.completeUpgrade(\n            extensions,\n            key,\n            protocols,\n            req,\n            socket,\n            head,\n            cb\n          );\n        });\n        return;\n      }\n\n      if (!this.options.verifyClient(info)) return abortHandshake(socket, 401);\n    }\n\n    this.completeUpgrade(extensions, key, protocols, req, socket, head, cb);\n  }\n\n  /**\n   * Upgrade the connection to WebSocket.\n   *\n   * @param {Object} extensions The accepted extensions\n   * @param {String} key The value of the `Sec-WebSocket-Key` header\n   * @param {Set} protocols The subprotocols\n   * @param {http.IncomingMessage} req The request object\n   * @param {Duplex} socket The network socket between the server and client\n   * @param {Buffer} head The first packet of the upgraded stream\n   * @param {Function} cb Callback\n   * @throws {Error} If called more than once with the same socket\n   * @private\n   */\n  completeUpgrade(extensions, key, protocols, req, socket, head, cb) {\n    //\n    // Destroy the socket if the client has already sent a FIN packet.\n    //\n    if (!socket.readable || !socket.writable) return socket.destroy();\n\n    if (socket[kWebSocket]) {\n      throw new Error(\n        'server.handleUpgrade() was called more than once with the same ' +\n          'socket, possibly due to a misconfiguration'\n      );\n    }\n\n    if (this._state > RUNNING) return abortHandshake(socket, 503);\n\n    const digest = createHash('sha1')\n      .update(key + GUID)\n      .digest('base64');\n\n    const headers = [\n      'HTTP/1.1 101 Switching Protocols',\n      'Upgrade: websocket',\n      'Connection: Upgrade',\n      `Sec-WebSocket-Accept: ${digest}`\n    ];\n\n    const ws = new this.options.WebSocket(null, undefined, this.options);\n\n    if (protocols.size) {\n      //\n      // Optionally call external protocol selection handler.\n      //\n      const protocol = this.options.handleProtocols\n        ? this.options.handleProtocols(protocols, req)\n        : protocols.values().next().value;\n\n      if (protocol) {\n        headers.push(`Sec-WebSocket-Protocol: ${protocol}`);\n        ws._protocol = protocol;\n      }\n    }\n\n    if (extensions[PerMessageDeflate.extensionName]) {\n      const params = extensions[PerMessageDeflate.extensionName].params;\n      const value = extension.format({\n        [PerMessageDeflate.extensionName]: [params]\n      });\n      headers.push(`Sec-WebSocket-Extensions: ${value}`);\n      ws._extensions = extensions;\n    }\n\n    //\n    // Allow external modification/inspection of handshake headers.\n    //\n    this.emit('headers', headers, req);\n\n    socket.write(headers.concat('\\r\\n').join('\\r\\n'));\n    socket.removeListener('error', socketOnError);\n\n    ws.setSocket(socket, head, {\n      allowSynchronousEvents: this.options.allowSynchronousEvents,\n      maxPayload: this.options.maxPayload,\n      skipUTF8Validation: this.options.skipUTF8Validation\n    });\n\n    if (this.clients) {\n      this.clients.add(ws);\n      ws.on('close', () => {\n        this.clients.delete(ws);\n\n        if (this._shouldEmitClose && !this.clients.size) {\n          process.nextTick(emitClose, this);\n        }\n      });\n    }\n\n    cb(ws, req);\n  }\n}\n\nmodule.exports = WebSocketServer;\n\n/**\n * Add event listeners on an `EventEmitter` using a map of <event, listener>\n * pairs.\n *\n * @param {EventEmitter} server The event emitter\n * @param {Object.<String, Function>} map The listeners to add\n * @return {Function} A function that will remove the added listeners when\n *     called\n * @private\n */\nfunction addListeners(server, map) {\n  for (const event of Object.keys(map)) server.on(event, map[event]);\n\n  return function removeListeners() {\n    for (const event of Object.keys(map)) {\n      server.removeListener(event, map[event]);\n    }\n  };\n}\n\n/**\n * Emit a `'close'` event on an `EventEmitter`.\n *\n * @param {EventEmitter} server The event emitter\n * @private\n */\nfunction emitClose(server) {\n  server._state = CLOSED;\n  server.emit('close');\n}\n\n/**\n * Handle socket errors.\n *\n * @private\n */\nfunction socketOnError() {\n  this.destroy();\n}\n\n/**\n * Close the connection when preconditions are not fulfilled.\n *\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} [message] The HTTP response body\n * @param {Object} [headers] Additional HTTP response headers\n * @private\n */\nfunction abortHandshake(socket, code, message, headers) {\n  //\n  // The socket is writable unless the user destroyed or ended it before calling\n  // `server.handleUpgrade()` or in the `verifyClient` function, which is a user\n  // error. Handling this does not make much sense as the worst that can happen\n  // is that some of the data written by the user might be discarded due to the\n  // call to `socket.end()` below, which triggers an `'error'` event that in\n  // turn causes the socket to be destroyed.\n  //\n  message = message || http.STATUS_CODES[code];\n  headers = {\n    Connection: 'close',\n    'Content-Type': 'text/html',\n    'Content-Length': Buffer.byteLength(message),\n    ...headers\n  };\n\n  socket.once('finish', socket.destroy);\n\n  socket.end(\n    `HTTP/1.1 ${code} ${http.STATUS_CODES[code]}\\r\\n` +\n      Object.keys(headers)\n        .map((h) => `${h}: ${headers[h]}`)\n        .join('\\r\\n') +\n      '\\r\\n\\r\\n' +\n      message\n  );\n}\n\n/**\n * Emit a `'wsClientError'` event on a `WebSocketServer` if there is at least\n * one listener for it, otherwise call `abortHandshake()`.\n *\n * @param {WebSocketServer} server The WebSocket server\n * @param {http.IncomingMessage} req The request object\n * @param {Duplex} socket The socket of the upgrade request\n * @param {Number} code The HTTP response status code\n * @param {String} message The HTTP response body\n * @private\n */\nfunction abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {\n  if (server.listenerCount('wsClientError')) {\n    const err = new Error(message);\n    Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);\n\n    server.emit('wsClientError', err, socket, req);\n  } else {\n    abortHandshake(socket, code, message);\n  }\n}\n", "/*!\n * MIT License\n * \n * Copyright (c) 2017-2022 Peculiar Ventures, LLC\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n * \n */\n\n'use strict';\n\nconst ARRAY_BUFFER_NAME = \"[object ArrayBuffer]\";\nclass BufferSourceConverter {\n    static isArrayBuffer(data) {\n        return Object.prototype.toString.call(data) === ARRAY_BUFFER_NAME;\n    }\n    static toArrayBuffer(data) {\n        if (this.isArrayBuffer(data)) {\n            return data;\n        }\n        if (data.byteLength === data.buffer.byteLength) {\n            return data.buffer;\n        }\n        if (data.byteOffset === 0 && data.byteLength === data.buffer.byteLength) {\n            return data.buffer;\n        }\n        return this.toUint8Array(data.buffer)\n            .slice(data.byteOffset, data.byteOffset + data.byteLength)\n            .buffer;\n    }\n    static toUint8Array(data) {\n        return this.toView(data, Uint8Array);\n    }\n    static toView(data, type) {\n        if (data.constructor === type) {\n            return data;\n        }\n        if (this.isArrayBuffer(data)) {\n            return new type(data);\n        }\n        if (this.isArrayBufferView(data)) {\n            return new type(data.buffer, data.byteOffset, data.byteLength);\n        }\n        throw new TypeError(\"The provided value is not of type '(ArrayBuffer or ArrayBufferView)'\");\n    }\n    static isBufferSource(data) {\n        return this.isArrayBufferView(data)\n            || this.isArrayBuffer(data);\n    }\n    static isArrayBufferView(data) {\n        return ArrayBuffer.isView(data)\n            || (data && this.isArrayBuffer(data.buffer));\n    }\n    static isEqual(a, b) {\n        const aView = BufferSourceConverter.toUint8Array(a);\n        const bView = BufferSourceConverter.toUint8Array(b);\n        if (aView.length !== bView.byteLength) {\n            return false;\n        }\n        for (let i = 0; i < aView.length; i++) {\n            if (aView[i] !== bView[i]) {\n                return false;\n            }\n        }\n        return true;\n    }\n    static concat(...args) {\n        let buffers;\n        if (Array.isArray(args[0]) && !(args[1] instanceof Function)) {\n            buffers = args[0];\n        }\n        else if (Array.isArray(args[0]) && args[1] instanceof Function) {\n            buffers = args[0];\n        }\n        else {\n            if (args[args.length - 1] instanceof Function) {\n                buffers = args.slice(0, args.length - 1);\n            }\n            else {\n                buffers = args;\n            }\n        }\n        let size = 0;\n        for (const buffer of buffers) {\n            size += buffer.byteLength;\n        }\n        const res = new Uint8Array(size);\n        let offset = 0;\n        for (const buffer of buffers) {\n            const view = this.toUint8Array(buffer);\n            res.set(view, offset);\n            offset += view.length;\n        }\n        if (args[args.length - 1] instanceof Function) {\n            return this.toView(res, args[args.length - 1]);\n        }\n        return res.buffer;\n    }\n}\n\nconst STRING_TYPE = \"string\";\nconst HEX_REGEX = /^[0-9a-f]+$/i;\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[a-zA-Z0-9-_]+$/;\nclass Utf8Converter {\n    static fromString(text) {\n        const s = unescape(encodeURIComponent(text));\n        const uintArray = new Uint8Array(s.length);\n        for (let i = 0; i < s.length; i++) {\n            uintArray[i] = s.charCodeAt(i);\n        }\n        return uintArray.buffer;\n    }\n    static toString(buffer) {\n        const buf = BufferSourceConverter.toUint8Array(buffer);\n        let encodedString = \"\";\n        for (let i = 0; i < buf.length; i++) {\n            encodedString += String.fromCharCode(buf[i]);\n        }\n        const decodedString = decodeURIComponent(escape(encodedString));\n        return decodedString;\n    }\n}\nclass Utf16Converter {\n    static toString(buffer, littleEndian = false) {\n        const arrayBuffer = BufferSourceConverter.toArrayBuffer(buffer);\n        const dataView = new DataView(arrayBuffer);\n        let res = \"\";\n        for (let i = 0; i < arrayBuffer.byteLength; i += 2) {\n            const code = dataView.getUint16(i, littleEndian);\n            res += String.fromCharCode(code);\n        }\n        return res;\n    }\n    static fromString(text, littleEndian = false) {\n        const res = new ArrayBuffer(text.length * 2);\n        const dataView = new DataView(res);\n        for (let i = 0; i < text.length; i++) {\n            dataView.setUint16(i * 2, text.charCodeAt(i), littleEndian);\n        }\n        return res;\n    }\n}\nclass Convert {\n    static isHex(data) {\n        return typeof data === STRING_TYPE\n            && HEX_REGEX.test(data);\n    }\n    static isBase64(data) {\n        return typeof data === STRING_TYPE\n            && BASE64_REGEX.test(data);\n    }\n    static isBase64Url(data) {\n        return typeof data === STRING_TYPE\n            && BASE64URL_REGEX.test(data);\n    }\n    static ToString(buffer, enc = \"utf8\") {\n        const buf = BufferSourceConverter.toUint8Array(buffer);\n        switch (enc.toLowerCase()) {\n            case \"utf8\":\n                return this.ToUtf8String(buf);\n            case \"binary\":\n                return this.ToBinary(buf);\n            case \"hex\":\n                return this.ToHex(buf);\n            case \"base64\":\n                return this.ToBase64(buf);\n            case \"base64url\":\n                return this.ToBase64Url(buf);\n            case \"utf16le\":\n                return Utf16Converter.toString(buf, true);\n            case \"utf16\":\n            case \"utf16be\":\n                return Utf16Converter.toString(buf);\n            default:\n                throw new Error(`Unknown type of encoding '${enc}'`);\n        }\n    }\n    static FromString(str, enc = \"utf8\") {\n        if (!str) {\n            return new ArrayBuffer(0);\n        }\n        switch (enc.toLowerCase()) {\n            case \"utf8\":\n                return this.FromUtf8String(str);\n            case \"binary\":\n                return this.FromBinary(str);\n            case \"hex\":\n                return this.FromHex(str);\n            case \"base64\":\n                return this.FromBase64(str);\n            case \"base64url\":\n                return this.FromBase64Url(str);\n            case \"utf16le\":\n                return Utf16Converter.fromString(str, true);\n            case \"utf16\":\n            case \"utf16be\":\n                return Utf16Converter.fromString(str);\n            default:\n                throw new Error(`Unknown type of encoding '${enc}'`);\n        }\n    }\n    static ToBase64(buffer) {\n        const buf = BufferSourceConverter.toUint8Array(buffer);\n        if (typeof btoa !== \"undefined\") {\n            const binary = this.ToString(buf, \"binary\");\n            return btoa(binary);\n        }\n        else {\n            return Buffer.from(buf).toString(\"base64\");\n        }\n    }\n    static FromBase64(base64) {\n        const formatted = this.formatString(base64);\n        if (!formatted) {\n            return new ArrayBuffer(0);\n        }\n        if (!Convert.isBase64(formatted)) {\n            throw new TypeError(\"Argument 'base64Text' is not Base64 encoded\");\n        }\n        if (typeof atob !== \"undefined\") {\n            return this.FromBinary(atob(formatted));\n        }\n        else {\n            return new Uint8Array(Buffer.from(formatted, \"base64\")).buffer;\n        }\n    }\n    static FromBase64Url(base64url) {\n        const formatted = this.formatString(base64url);\n        if (!formatted) {\n            return new ArrayBuffer(0);\n        }\n        if (!Convert.isBase64Url(formatted)) {\n            throw new TypeError(\"Argument 'base64url' is not Base64Url encoded\");\n        }\n        return this.FromBase64(this.Base64Padding(formatted.replace(/\\-/g, \"+\").replace(/\\_/g, \"/\")));\n    }\n    static ToBase64Url(data) {\n        return this.ToBase64(data).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/\\=/g, \"\");\n    }\n    static FromUtf8String(text, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n        switch (encoding) {\n            case \"ascii\":\n                return this.FromBinary(text);\n            case \"utf8\":\n                return Utf8Converter.fromString(text);\n            case \"utf16\":\n            case \"utf16be\":\n                return Utf16Converter.fromString(text);\n            case \"utf16le\":\n            case \"usc2\":\n                return Utf16Converter.fromString(text, true);\n            default:\n                throw new Error(`Unknown type of encoding '${encoding}'`);\n        }\n    }\n    static ToUtf8String(buffer, encoding = Convert.DEFAULT_UTF8_ENCODING) {\n        switch (encoding) {\n            case \"ascii\":\n                return this.ToBinary(buffer);\n            case \"utf8\":\n                return Utf8Converter.toString(buffer);\n            case \"utf16\":\n            case \"utf16be\":\n                return Utf16Converter.toString(buffer);\n            case \"utf16le\":\n            case \"usc2\":\n                return Utf16Converter.toString(buffer, true);\n            default:\n                throw new Error(`Unknown type of encoding '${encoding}'`);\n        }\n    }\n    static FromBinary(text) {\n        const stringLength = text.length;\n        const resultView = new Uint8Array(stringLength);\n        for (let i = 0; i < stringLength; i++) {\n            resultView[i] = text.charCodeAt(i);\n        }\n        return resultView.buffer;\n    }\n    static ToBinary(buffer) {\n        const buf = BufferSourceConverter.toUint8Array(buffer);\n        let res = \"\";\n        for (let i = 0; i < buf.length; i++) {\n            res += String.fromCharCode(buf[i]);\n        }\n        return res;\n    }\n    static ToHex(buffer) {\n        const buf = BufferSourceConverter.toUint8Array(buffer);\n        let result = \"\";\n        const len = buf.length;\n        for (let i = 0; i < len; i++) {\n            const byte = buf[i];\n            if (byte < 16) {\n                result += \"0\";\n            }\n            result += byte.toString(16);\n        }\n        return result;\n    }\n    static FromHex(hexString) {\n        let formatted = this.formatString(hexString);\n        if (!formatted) {\n            return new ArrayBuffer(0);\n        }\n        if (!Convert.isHex(formatted)) {\n            throw new TypeError(\"Argument 'hexString' is not HEX encoded\");\n        }\n        if (formatted.length % 2) {\n            formatted = `0${formatted}`;\n        }\n        const res = new Uint8Array(formatted.length / 2);\n        for (let i = 0; i < formatted.length; i = i + 2) {\n            const c = formatted.slice(i, i + 2);\n            res[i / 2] = parseInt(c, 16);\n        }\n        return res.buffer;\n    }\n    static ToUtf16String(buffer, littleEndian = false) {\n        return Utf16Converter.toString(buffer, littleEndian);\n    }\n    static FromUtf16String(text, littleEndian = false) {\n        return Utf16Converter.fromString(text, littleEndian);\n    }\n    static Base64Padding(base64) {\n        const padCount = 4 - (base64.length % 4);\n        if (padCount < 4) {\n            for (let i = 0; i < padCount; i++) {\n                base64 += \"=\";\n            }\n        }\n        return base64;\n    }\n    static formatString(data) {\n        return (data === null || data === void 0 ? void 0 : data.replace(/[\\n\\r\\t ]/g, \"\")) || \"\";\n    }\n}\nConvert.DEFAULT_UTF8_ENCODING = \"utf8\";\n\nfunction assign(target, ...sources) {\n    const res = arguments[0];\n    for (let i = 1; i < arguments.length; i++) {\n        const obj = arguments[i];\n        for (const prop in obj) {\n            res[prop] = obj[prop];\n        }\n    }\n    return res;\n}\nfunction combine(...buf) {\n    const totalByteLength = buf.map((item) => item.byteLength).reduce((prev, cur) => prev + cur);\n    const res = new Uint8Array(totalByteLength);\n    let currentPos = 0;\n    buf.map((item) => new Uint8Array(item)).forEach((arr) => {\n        for (const item2 of arr) {\n            res[currentPos++] = item2;\n        }\n    });\n    return res.buffer;\n}\nfunction isEqual(bytes1, bytes2) {\n    if (!(bytes1 && bytes2)) {\n        return false;\n    }\n    if (bytes1.byteLength !== bytes2.byteLength) {\n        return false;\n    }\n    const b1 = new Uint8Array(bytes1);\n    const b2 = new Uint8Array(bytes2);\n    for (let i = 0; i < bytes1.byteLength; i++) {\n        if (b1[i] !== b2[i]) {\n            return false;\n        }\n    }\n    return true;\n}\n\nexports.BufferSourceConverter = BufferSourceConverter;\nexports.Convert = Convert;\nexports.assign = assign;\nexports.combine = combine;\nexports.isEqual = isEqual;\n", "/*!\n Copyright (c) Peculiar Ventures, LLC\n*/\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction getUTCDate(date) {\r\n    return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));\r\n}\r\nfunction getParametersValue(parameters, name, defaultValue) {\r\n    var _a;\r\n    if ((parameters instanceof Object) === false) {\r\n        return defaultValue;\r\n    }\r\n    return (_a = parameters[name]) !== null && _a !== void 0 ? _a : defaultValue;\r\n}\r\nfunction bufferToHexCodes(inputBuffer, inputOffset = 0, inputLength = (inputBuffer.byteLength - inputOffset), insertSpace = false) {\r\n    let result = \"\";\r\n    for (const item of (new Uint8Array(inputBuffer, inputOffset, inputLength))) {\r\n        const str = item.toString(16).toUpperCase();\r\n        if (str.length === 1) {\r\n            result += \"0\";\r\n        }\r\n        result += str;\r\n        if (insertSpace) {\r\n            result += \" \";\r\n        }\r\n    }\r\n    return result.trim();\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n    if (!(inputBuffer instanceof ArrayBuffer)) {\r\n        baseBlock.error = \"Wrong parameter: inputBuffer must be \\\"ArrayBuffer\\\"\";\r\n        return false;\r\n    }\r\n    if (!inputBuffer.byteLength) {\r\n        baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n        return false;\r\n    }\r\n    if (inputOffset < 0) {\r\n        baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n        return false;\r\n    }\r\n    if (inputLength < 0) {\r\n        baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n        return false;\r\n    }\r\n    if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n        baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n        return false;\r\n    }\r\n    return true;\r\n}\r\nfunction utilFromBase(inputBuffer, inputBase) {\r\n    let result = 0;\r\n    if (inputBuffer.length === 1) {\r\n        return inputBuffer[0];\r\n    }\r\n    for (let i = (inputBuffer.length - 1); i >= 0; i--) {\r\n        result += inputBuffer[(inputBuffer.length - 1) - i] * Math.pow(2, inputBase * i);\r\n    }\r\n    return result;\r\n}\r\nfunction utilToBase(value, base, reserved = (-1)) {\r\n    const internalReserved = reserved;\r\n    let internalValue = value;\r\n    let result = 0;\r\n    let biggest = Math.pow(2, base);\r\n    for (let i = 1; i < 8; i++) {\r\n        if (value < biggest) {\r\n            let retBuf;\r\n            if (internalReserved < 0) {\r\n                retBuf = new ArrayBuffer(i);\r\n                result = i;\r\n            }\r\n            else {\r\n                if (internalReserved < i) {\r\n                    return (new ArrayBuffer(0));\r\n                }\r\n                retBuf = new ArrayBuffer(internalReserved);\r\n                result = internalReserved;\r\n            }\r\n            const retView = new Uint8Array(retBuf);\r\n            for (let j = (i - 1); j >= 0; j--) {\r\n                const basis = Math.pow(2, j * base);\r\n                retView[result - j - 1] = Math.floor(internalValue / basis);\r\n                internalValue -= (retView[result - j - 1]) * basis;\r\n            }\r\n            return retBuf;\r\n        }\r\n        biggest *= Math.pow(2, base);\r\n    }\r\n    return new ArrayBuffer(0);\r\n}\r\nfunction utilConcatBuf(...buffers) {\r\n    let outputLength = 0;\r\n    let prevLength = 0;\r\n    for (const buffer of buffers) {\r\n        outputLength += buffer.byteLength;\r\n    }\r\n    const retBuf = new ArrayBuffer(outputLength);\r\n    const retView = new Uint8Array(retBuf);\r\n    for (const buffer of buffers) {\r\n        retView.set(new Uint8Array(buffer), prevLength);\r\n        prevLength += buffer.byteLength;\r\n    }\r\n    return retBuf;\r\n}\r\nfunction utilConcatView(...views) {\r\n    let outputLength = 0;\r\n    let prevLength = 0;\r\n    for (const view of views) {\r\n        outputLength += view.length;\r\n    }\r\n    const retBuf = new ArrayBuffer(outputLength);\r\n    const retView = new Uint8Array(retBuf);\r\n    for (const view of views) {\r\n        retView.set(view, prevLength);\r\n        prevLength += view.length;\r\n    }\r\n    return retView;\r\n}\r\nfunction utilDecodeTC() {\r\n    const buf = new Uint8Array(this.valueHex);\r\n    if (this.valueHex.byteLength >= 2) {\r\n        const condition1 = (buf[0] === 0xFF) && (buf[1] & 0x80);\r\n        const condition2 = (buf[0] === 0x00) && ((buf[1] & 0x80) === 0x00);\r\n        if (condition1 || condition2) {\r\n            this.warnings.push(\"Needlessly long format\");\r\n        }\r\n    }\r\n    const bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n    const bigIntView = new Uint8Array(bigIntBuffer);\r\n    for (let i = 0; i < this.valueHex.byteLength; i++) {\r\n        bigIntView[i] = 0;\r\n    }\r\n    bigIntView[0] = (buf[0] & 0x80);\r\n    const bigInt = utilFromBase(bigIntView, 8);\r\n    const smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength);\r\n    const smallIntView = new Uint8Array(smallIntBuffer);\r\n    for (let j = 0; j < this.valueHex.byteLength; j++) {\r\n        smallIntView[j] = buf[j];\r\n    }\r\n    smallIntView[0] &= 0x7F;\r\n    const smallInt = utilFromBase(smallIntView, 8);\r\n    return (smallInt - bigInt);\r\n}\r\nfunction utilEncodeTC(value) {\r\n    const modValue = (value < 0) ? (value * (-1)) : value;\r\n    let bigInt = 128;\r\n    for (let i = 1; i < 8; i++) {\r\n        if (modValue <= bigInt) {\r\n            if (value < 0) {\r\n                const smallInt = bigInt - modValue;\r\n                const retBuf = utilToBase(smallInt, 8, i);\r\n                const retView = new Uint8Array(retBuf);\r\n                retView[0] |= 0x80;\r\n                return retBuf;\r\n            }\r\n            let retBuf = utilToBase(modValue, 8, i);\r\n            let retView = new Uint8Array(retBuf);\r\n            if (retView[0] & 0x80) {\r\n                const tempBuf = retBuf.slice(0);\r\n                const tempView = new Uint8Array(tempBuf);\r\n                retBuf = new ArrayBuffer(retBuf.byteLength + 1);\r\n                retView = new Uint8Array(retBuf);\r\n                for (let k = 0; k < tempBuf.byteLength; k++) {\r\n                    retView[k + 1] = tempView[k];\r\n                }\r\n                retView[0] = 0x00;\r\n            }\r\n            return retBuf;\r\n        }\r\n        bigInt *= Math.pow(2, 8);\r\n    }\r\n    return (new ArrayBuffer(0));\r\n}\r\nfunction isEqualBuffer(inputBuffer1, inputBuffer2) {\r\n    if (inputBuffer1.byteLength !== inputBuffer2.byteLength) {\r\n        return false;\r\n    }\r\n    const view1 = new Uint8Array(inputBuffer1);\r\n    const view2 = new Uint8Array(inputBuffer2);\r\n    for (let i = 0; i < view1.length; i++) {\r\n        if (view1[i] !== view2[i]) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction padNumber(inputNumber, fullLength) {\r\n    const str = inputNumber.toString(10);\r\n    if (fullLength < str.length) {\r\n        return \"\";\r\n    }\r\n    const dif = fullLength - str.length;\r\n    const padding = new Array(dif);\r\n    for (let i = 0; i < dif; i++) {\r\n        padding[i] = \"0\";\r\n    }\r\n    const paddingString = padding.join(\"\");\r\n    return paddingString.concat(str);\r\n}\r\nconst base64Template = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\r\nconst base64UrlTemplate = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_=\";\r\nfunction toBase64(input, useUrlTemplate = false, skipPadding = false, skipLeadingZeros = false) {\r\n    let i = 0;\r\n    let flag1 = 0;\r\n    let flag2 = 0;\r\n    let output = \"\";\r\n    const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n    if (skipLeadingZeros) {\r\n        let nonZeroPosition = 0;\r\n        for (let i = 0; i < input.length; i++) {\r\n            if (input.charCodeAt(i) !== 0) {\r\n                nonZeroPosition = i;\r\n                break;\r\n            }\r\n        }\r\n        input = input.slice(nonZeroPosition);\r\n    }\r\n    while (i < input.length) {\r\n        const chr1 = input.charCodeAt(i++);\r\n        if (i >= input.length) {\r\n            flag1 = 1;\r\n        }\r\n        const chr2 = input.charCodeAt(i++);\r\n        if (i >= input.length) {\r\n            flag2 = 1;\r\n        }\r\n        const chr3 = input.charCodeAt(i++);\r\n        const enc1 = chr1 >> 2;\r\n        const enc2 = ((chr1 & 0x03) << 4) | (chr2 >> 4);\r\n        let enc3 = ((chr2 & 0x0F) << 2) | (chr3 >> 6);\r\n        let enc4 = chr3 & 0x3F;\r\n        if (flag1 === 1) {\r\n            enc3 = enc4 = 64;\r\n        }\r\n        else {\r\n            if (flag2 === 1) {\r\n                enc4 = 64;\r\n            }\r\n        }\r\n        if (skipPadding) {\r\n            if (enc3 === 64) {\r\n                output += `${template.charAt(enc1)}${template.charAt(enc2)}`;\r\n            }\r\n            else {\r\n                if (enc4 === 64) {\r\n                    output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}`;\r\n                }\r\n                else {\r\n                    output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            output += `${template.charAt(enc1)}${template.charAt(enc2)}${template.charAt(enc3)}${template.charAt(enc4)}`;\r\n        }\r\n    }\r\n    return output;\r\n}\r\nfunction fromBase64(input, useUrlTemplate = false, cutTailZeros = false) {\r\n    const template = (useUrlTemplate) ? base64UrlTemplate : base64Template;\r\n    function indexOf(toSearch) {\r\n        for (let i = 0; i < 64; i++) {\r\n            if (template.charAt(i) === toSearch)\r\n                return i;\r\n        }\r\n        return 64;\r\n    }\r\n    function test(incoming) {\r\n        return ((incoming === 64) ? 0x00 : incoming);\r\n    }\r\n    let i = 0;\r\n    let output = \"\";\r\n    while (i < input.length) {\r\n        const enc1 = indexOf(input.charAt(i++));\r\n        const enc2 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n        const enc3 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n        const enc4 = (i >= input.length) ? 0x00 : indexOf(input.charAt(i++));\r\n        const chr1 = (test(enc1) << 2) | (test(enc2) >> 4);\r\n        const chr2 = ((test(enc2) & 0x0F) << 4) | (test(enc3) >> 2);\r\n        const chr3 = ((test(enc3) & 0x03) << 6) | test(enc4);\r\n        output += String.fromCharCode(chr1);\r\n        if (enc3 !== 64) {\r\n            output += String.fromCharCode(chr2);\r\n        }\r\n        if (enc4 !== 64) {\r\n            output += String.fromCharCode(chr3);\r\n        }\r\n    }\r\n    if (cutTailZeros) {\r\n        const outputLength = output.length;\r\n        let nonZeroStart = (-1);\r\n        for (let i = (outputLength - 1); i >= 0; i--) {\r\n            if (output.charCodeAt(i) !== 0) {\r\n                nonZeroStart = i;\r\n                break;\r\n            }\r\n        }\r\n        if (nonZeroStart !== (-1)) {\r\n            output = output.slice(0, nonZeroStart + 1);\r\n        }\r\n        else {\r\n            output = \"\";\r\n        }\r\n    }\r\n    return output;\r\n}\r\nfunction arrayBufferToString(buffer) {\r\n    let resultString = \"\";\r\n    const view = new Uint8Array(buffer);\r\n    for (const element of view) {\r\n        resultString += String.fromCharCode(element);\r\n    }\r\n    return resultString;\r\n}\r\nfunction stringToArrayBuffer(str) {\r\n    const stringLength = str.length;\r\n    const resultBuffer = new ArrayBuffer(stringLength);\r\n    const resultView = new Uint8Array(resultBuffer);\r\n    for (let i = 0; i < stringLength; i++) {\r\n        resultView[i] = str.charCodeAt(i);\r\n    }\r\n    return resultBuffer;\r\n}\r\nconst log2 = Math.log(2);\r\nfunction nearestPowerOf2(length) {\r\n    const base = (Math.log(length) / log2);\r\n    const floor = Math.floor(base);\r\n    const round = Math.round(base);\r\n    return ((floor === round) ? floor : round);\r\n}\r\nfunction clearProps(object, propsArray) {\r\n    for (const prop of propsArray) {\r\n        delete object[prop];\r\n    }\r\n}\n\nexports.arrayBufferToString = arrayBufferToString;\nexports.bufferToHexCodes = bufferToHexCodes;\nexports.checkBufferParams = checkBufferParams;\nexports.clearProps = clearProps;\nexports.fromBase64 = fromBase64;\nexports.getParametersValue = getParametersValue;\nexports.getUTCDate = getUTCDate;\nexports.isEqualBuffer = isEqualBuffer;\nexports.nearestPowerOf2 = nearestPowerOf2;\nexports.padNumber = padNumber;\nexports.stringToArrayBuffer = stringToArrayBuffer;\nexports.toBase64 = toBase64;\nexports.utilConcatBuf = utilConcatBuf;\nexports.utilConcatView = utilConcatView;\nexports.utilDecodeTC = utilDecodeTC;\nexports.utilEncodeTC = utilEncodeTC;\nexports.utilFromBase = utilFromBase;\nexports.utilToBase = utilToBase;\n", "/*!\n * Copyright (c) 2014, GMO GlobalSign\n * Copyright (c) 2015-2022, Peculiar Ventures\n * All rights reserved.\n * \n * Author 2014-2019, Yury Strozhevsky\n * \n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * \n * * Redistributions of source code must retain the above copyright notice, this\n *   list of conditions and the following disclaimer.\n * \n * * Redistributions in binary form must reproduce the above copyright notice, this\n *   list of conditions and the following disclaimer in the documentation and/or\n *   other materials provided with the distribution.\n * \n * * Neither the name of the copyright holder nor the names of its\n *   contributors may be used to endorse or promote products derived from\n *   this software without specific prior written permission.\n * \n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\n * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\n * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n * \n */\n\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar pvtsutils = require('pvtsutils');\nvar pvutils = require('pvutils');\n\nfunction _interopNamespace(e) {\n  if (e && e.__esModule) return e;\n  var n = Object.create(null);\n  if (e) {\n    Object.keys(e).forEach(function (k) {\n      if (k !== 'default') {\n        var d = Object.getOwnPropertyDescriptor(e, k);\n        Object.defineProperty(n, k, d.get ? d : {\n          enumerable: true,\n          get: function () { return e[k]; }\n        });\n      }\n    });\n  }\n  n[\"default\"] = e;\n  return Object.freeze(n);\n}\n\nvar pvtsutils__namespace = /*#__PURE__*/_interopNamespace(pvtsutils);\nvar pvutils__namespace = /*#__PURE__*/_interopNamespace(pvutils);\n\nfunction assertBigInt() {\r\n    if (typeof BigInt === \"undefined\") {\r\n        throw new Error(\"BigInt is not defined. Your environment doesn't implement BigInt.\");\r\n    }\r\n}\r\nfunction concat(buffers) {\r\n    let outputLength = 0;\r\n    let prevLength = 0;\r\n    for (let i = 0; i < buffers.length; i++) {\r\n        const buffer = buffers[i];\r\n        outputLength += buffer.byteLength;\r\n    }\r\n    const retView = new Uint8Array(outputLength);\r\n    for (let i = 0; i < buffers.length; i++) {\r\n        const buffer = buffers[i];\r\n        retView.set(new Uint8Array(buffer), prevLength);\r\n        prevLength += buffer.byteLength;\r\n    }\r\n    return retView.buffer;\r\n}\r\nfunction checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) {\r\n    if (!(inputBuffer instanceof Uint8Array)) {\r\n        baseBlock.error = \"Wrong parameter: inputBuffer must be 'Uint8Array'\";\r\n        return false;\r\n    }\r\n    if (!inputBuffer.byteLength) {\r\n        baseBlock.error = \"Wrong parameter: inputBuffer has zero length\";\r\n        return false;\r\n    }\r\n    if (inputOffset < 0) {\r\n        baseBlock.error = \"Wrong parameter: inputOffset less than zero\";\r\n        return false;\r\n    }\r\n    if (inputLength < 0) {\r\n        baseBlock.error = \"Wrong parameter: inputLength less than zero\";\r\n        return false;\r\n    }\r\n    if ((inputBuffer.byteLength - inputOffset - inputLength) < 0) {\r\n        baseBlock.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n        return false;\r\n    }\r\n    return true;\r\n}\n\nclass ViewWriter {\r\n    constructor() {\r\n        this.items = [];\r\n    }\r\n    write(buf) {\r\n        this.items.push(buf);\r\n    }\r\n    final() {\r\n        return concat(this.items);\r\n    }\r\n}\n\nconst powers2 = [new Uint8Array([1])];\r\nconst digitsString = \"0123456789\";\r\nconst NAME = \"name\";\r\nconst VALUE_HEX_VIEW = \"valueHexView\";\r\nconst IS_HEX_ONLY = \"isHexOnly\";\r\nconst ID_BLOCK = \"idBlock\";\r\nconst TAG_CLASS = \"tagClass\";\r\nconst TAG_NUMBER = \"tagNumber\";\r\nconst IS_CONSTRUCTED = \"isConstructed\";\r\nconst FROM_BER = \"fromBER\";\r\nconst TO_BER = \"toBER\";\r\nconst LOCAL = \"local\";\r\nconst EMPTY_STRING = \"\";\r\nconst EMPTY_BUFFER = new ArrayBuffer(0);\r\nconst EMPTY_VIEW = new Uint8Array(0);\r\nconst END_OF_CONTENT_NAME = \"EndOfContent\";\r\nconst OCTET_STRING_NAME = \"OCTET STRING\";\r\nconst BIT_STRING_NAME = \"BIT STRING\";\n\nfunction HexBlock(BaseClass) {\r\n    var _a;\r\n    return _a = class Some extends BaseClass {\r\n            constructor(...args) {\r\n                var _a;\r\n                super(...args);\r\n                const params = args[0] || {};\r\n                this.isHexOnly = (_a = params.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n                this.valueHexView = params.valueHex ? pvtsutils__namespace.BufferSourceConverter.toUint8Array(params.valueHex) : EMPTY_VIEW;\r\n            }\r\n            get valueHex() {\r\n                return this.valueHexView.slice().buffer;\r\n            }\r\n            set valueHex(value) {\r\n                this.valueHexView = new Uint8Array(value);\r\n            }\r\n            fromBER(inputBuffer, inputOffset, inputLength) {\r\n                const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n                if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n                    return -1;\r\n                }\r\n                const endLength = inputOffset + inputLength;\r\n                this.valueHexView = view.subarray(inputOffset, endLength);\r\n                if (!this.valueHexView.length) {\r\n                    this.warnings.push(\"Zero buffer length\");\r\n                    return inputOffset;\r\n                }\r\n                this.blockLength = inputLength;\r\n                return endLength;\r\n            }\r\n            toBER(sizeOnly = false) {\r\n                if (!this.isHexOnly) {\r\n                    this.error = \"Flag 'isHexOnly' is not set, abort\";\r\n                    return EMPTY_BUFFER;\r\n                }\r\n                if (sizeOnly) {\r\n                    return new ArrayBuffer(this.valueHexView.byteLength);\r\n                }\r\n                return (this.valueHexView.byteLength === this.valueHexView.buffer.byteLength)\r\n                    ? this.valueHexView.buffer\r\n                    : this.valueHexView.slice().buffer;\r\n            }\r\n            toJSON() {\r\n                return {\r\n                    ...super.toJSON(),\r\n                    isHexOnly: this.isHexOnly,\r\n                    valueHex: pvtsutils__namespace.Convert.ToHex(this.valueHexView),\r\n                };\r\n            }\r\n        },\r\n        _a.NAME = \"hexBlock\",\r\n        _a;\r\n}\n\nclass LocalBaseBlock {\r\n    constructor({ blockLength = 0, error = EMPTY_STRING, warnings = [], valueBeforeDecode = EMPTY_VIEW, } = {}) {\r\n        this.blockLength = blockLength;\r\n        this.error = error;\r\n        this.warnings = warnings;\r\n        this.valueBeforeDecodeView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(valueBeforeDecode);\r\n    }\r\n    static blockName() {\r\n        return this.NAME;\r\n    }\r\n    get valueBeforeDecode() {\r\n        return this.valueBeforeDecodeView.slice().buffer;\r\n    }\r\n    set valueBeforeDecode(value) {\r\n        this.valueBeforeDecodeView = new Uint8Array(value);\r\n    }\r\n    toJSON() {\r\n        return {\r\n            blockName: this.constructor.NAME,\r\n            blockLength: this.blockLength,\r\n            error: this.error,\r\n            warnings: this.warnings,\r\n            valueBeforeDecode: pvtsutils__namespace.Convert.ToHex(this.valueBeforeDecodeView),\r\n        };\r\n    }\r\n}\r\nLocalBaseBlock.NAME = \"baseBlock\";\n\nclass ValueBlock extends LocalBaseBlock {\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        throw TypeError(\"User need to make a specific function in a class which extends 'ValueBlock'\");\r\n    }\r\n}\r\nValueBlock.NAME = \"valueBlock\";\n\nclass LocalIdentificationBlock extends HexBlock(LocalBaseBlock) {\r\n    constructor({ idBlock = {}, } = {}) {\r\n        var _a, _b, _c, _d;\r\n        super();\r\n        if (idBlock) {\r\n            this.isHexOnly = (_a = idBlock.isHexOnly) !== null && _a !== void 0 ? _a : false;\r\n            this.valueHexView = idBlock.valueHex ? pvtsutils__namespace.BufferSourceConverter.toUint8Array(idBlock.valueHex) : EMPTY_VIEW;\r\n            this.tagClass = (_b = idBlock.tagClass) !== null && _b !== void 0 ? _b : -1;\r\n            this.tagNumber = (_c = idBlock.tagNumber) !== null && _c !== void 0 ? _c : -1;\r\n            this.isConstructed = (_d = idBlock.isConstructed) !== null && _d !== void 0 ? _d : false;\r\n        }\r\n        else {\r\n            this.tagClass = -1;\r\n            this.tagNumber = -1;\r\n            this.isConstructed = false;\r\n        }\r\n    }\r\n    toBER(sizeOnly = false) {\r\n        let firstOctet = 0;\r\n        switch (this.tagClass) {\r\n            case 1:\r\n                firstOctet |= 0x00;\r\n                break;\r\n            case 2:\r\n                firstOctet |= 0x40;\r\n                break;\r\n            case 3:\r\n                firstOctet |= 0x80;\r\n                break;\r\n            case 4:\r\n                firstOctet |= 0xC0;\r\n                break;\r\n            default:\r\n                this.error = \"Unknown tag class\";\r\n                return EMPTY_BUFFER;\r\n        }\r\n        if (this.isConstructed)\r\n            firstOctet |= 0x20;\r\n        if (this.tagNumber < 31 && !this.isHexOnly) {\r\n            const retView = new Uint8Array(1);\r\n            if (!sizeOnly) {\r\n                let number = this.tagNumber;\r\n                number &= 0x1F;\r\n                firstOctet |= number;\r\n                retView[0] = firstOctet;\r\n            }\r\n            return retView.buffer;\r\n        }\r\n        if (!this.isHexOnly) {\r\n            const encodedBuf = pvutils__namespace.utilToBase(this.tagNumber, 7);\r\n            const encodedView = new Uint8Array(encodedBuf);\r\n            const size = encodedBuf.byteLength;\r\n            const retView = new Uint8Array(size + 1);\r\n            retView[0] = (firstOctet | 0x1F);\r\n            if (!sizeOnly) {\r\n                for (let i = 0; i < (size - 1); i++)\r\n                    retView[i + 1] = encodedView[i] | 0x80;\r\n                retView[size] = encodedView[size - 1];\r\n            }\r\n            return retView.buffer;\r\n        }\r\n        const retView = new Uint8Array(this.valueHexView.byteLength + 1);\r\n        retView[0] = (firstOctet | 0x1F);\r\n        if (!sizeOnly) {\r\n            const curView = this.valueHexView;\r\n            for (let i = 0; i < (curView.length - 1); i++)\r\n                retView[i + 1] = curView[i] | 0x80;\r\n            retView[this.valueHexView.byteLength] = curView[curView.length - 1];\r\n        }\r\n        return retView.buffer;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const inputView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n            return -1;\r\n        }\r\n        const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n        if (intBuffer.length === 0) {\r\n            this.error = \"Zero buffer length\";\r\n            return -1;\r\n        }\r\n        const tagClassMask = intBuffer[0] & 0xC0;\r\n        switch (tagClassMask) {\r\n            case 0x00:\r\n                this.tagClass = (1);\r\n                break;\r\n            case 0x40:\r\n                this.tagClass = (2);\r\n                break;\r\n            case 0x80:\r\n                this.tagClass = (3);\r\n                break;\r\n            case 0xC0:\r\n                this.tagClass = (4);\r\n                break;\r\n            default:\r\n                this.error = \"Unknown tag class\";\r\n                return -1;\r\n        }\r\n        this.isConstructed = (intBuffer[0] & 0x20) === 0x20;\r\n        this.isHexOnly = false;\r\n        const tagNumberMask = intBuffer[0] & 0x1F;\r\n        if (tagNumberMask !== 0x1F) {\r\n            this.tagNumber = (tagNumberMask);\r\n            this.blockLength = 1;\r\n        }\r\n        else {\r\n            let count = 1;\r\n            let intTagNumberBuffer = this.valueHexView = new Uint8Array(255);\r\n            let tagNumberBufferMaxLength = 255;\r\n            while (intBuffer[count] & 0x80) {\r\n                intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n                count++;\r\n                if (count >= intBuffer.length) {\r\n                    this.error = \"End of input reached before message was fully decoded\";\r\n                    return -1;\r\n                }\r\n                if (count === tagNumberBufferMaxLength) {\r\n                    tagNumberBufferMaxLength += 255;\r\n                    const tempBufferView = new Uint8Array(tagNumberBufferMaxLength);\r\n                    for (let i = 0; i < intTagNumberBuffer.length; i++)\r\n                        tempBufferView[i] = intTagNumberBuffer[i];\r\n                    intTagNumberBuffer = this.valueHexView = new Uint8Array(tagNumberBufferMaxLength);\r\n                }\r\n            }\r\n            this.blockLength = (count + 1);\r\n            intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F;\r\n            const tempBufferView = new Uint8Array(count);\r\n            for (let i = 0; i < count; i++)\r\n                tempBufferView[i] = intTagNumberBuffer[i];\r\n            intTagNumberBuffer = this.valueHexView = new Uint8Array(count);\r\n            intTagNumberBuffer.set(tempBufferView);\r\n            if (this.blockLength <= 9)\r\n                this.tagNumber = pvutils__namespace.utilFromBase(intTagNumberBuffer, 7);\r\n            else {\r\n                this.isHexOnly = true;\r\n                this.warnings.push(\"Tag too long, represented as hex-coded\");\r\n            }\r\n        }\r\n        if (((this.tagClass === 1)) &&\r\n            (this.isConstructed)) {\r\n            switch (this.tagNumber) {\r\n                case 1:\r\n                case 2:\r\n                case 5:\r\n                case 6:\r\n                case 9:\r\n                case 13:\r\n                case 14:\r\n                case 23:\r\n                case 24:\r\n                case 31:\r\n                case 32:\r\n                case 33:\r\n                case 34:\r\n                    this.error = \"Constructed encoding used for primitive type\";\r\n                    return -1;\r\n            }\r\n        }\r\n        return (inputOffset + this.blockLength);\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            tagClass: this.tagClass,\r\n            tagNumber: this.tagNumber,\r\n            isConstructed: this.isConstructed,\r\n        };\r\n    }\r\n}\r\nLocalIdentificationBlock.NAME = \"identificationBlock\";\n\nclass LocalLengthBlock extends LocalBaseBlock {\r\n    constructor({ lenBlock = {}, } = {}) {\r\n        var _a, _b, _c;\r\n        super();\r\n        this.isIndefiniteForm = (_a = lenBlock.isIndefiniteForm) !== null && _a !== void 0 ? _a : false;\r\n        this.longFormUsed = (_b = lenBlock.longFormUsed) !== null && _b !== void 0 ? _b : false;\r\n        this.length = (_c = lenBlock.length) !== null && _c !== void 0 ? _c : 0;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const view = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n            return -1;\r\n        }\r\n        const intBuffer = view.subarray(inputOffset, inputOffset + inputLength);\r\n        if (intBuffer.length === 0) {\r\n            this.error = \"Zero buffer length\";\r\n            return -1;\r\n        }\r\n        if (intBuffer[0] === 0xFF) {\r\n            this.error = \"Length block 0xFF is reserved by standard\";\r\n            return -1;\r\n        }\r\n        this.isIndefiniteForm = intBuffer[0] === 0x80;\r\n        if (this.isIndefiniteForm) {\r\n            this.blockLength = 1;\r\n            return (inputOffset + this.blockLength);\r\n        }\r\n        this.longFormUsed = !!(intBuffer[0] & 0x80);\r\n        if (this.longFormUsed === false) {\r\n            this.length = (intBuffer[0]);\r\n            this.blockLength = 1;\r\n            return (inputOffset + this.blockLength);\r\n        }\r\n        const count = intBuffer[0] & 0x7F;\r\n        if (count > 8) {\r\n            this.error = \"Too big integer\";\r\n            return -1;\r\n        }\r\n        if ((count + 1) > intBuffer.length) {\r\n            this.error = \"End of input reached before message was fully decoded\";\r\n            return -1;\r\n        }\r\n        const lenOffset = inputOffset + 1;\r\n        const lengthBufferView = view.subarray(lenOffset, lenOffset + count);\r\n        if (lengthBufferView[count - 1] === 0x00)\r\n            this.warnings.push(\"Needlessly long encoded length\");\r\n        this.length = pvutils__namespace.utilFromBase(lengthBufferView, 8);\r\n        if (this.longFormUsed && (this.length <= 127))\r\n            this.warnings.push(\"Unnecessary usage of long length form\");\r\n        this.blockLength = count + 1;\r\n        return (inputOffset + this.blockLength);\r\n    }\r\n    toBER(sizeOnly = false) {\r\n        let retBuf;\r\n        let retView;\r\n        if (this.length > 127)\r\n            this.longFormUsed = true;\r\n        if (this.isIndefiniteForm) {\r\n            retBuf = new ArrayBuffer(1);\r\n            if (sizeOnly === false) {\r\n                retView = new Uint8Array(retBuf);\r\n                retView[0] = 0x80;\r\n            }\r\n            return retBuf;\r\n        }\r\n        if (this.longFormUsed) {\r\n            const encodedBuf = pvutils__namespace.utilToBase(this.length, 8);\r\n            if (encodedBuf.byteLength > 127) {\r\n                this.error = \"Too big length\";\r\n                return (EMPTY_BUFFER);\r\n            }\r\n            retBuf = new ArrayBuffer(encodedBuf.byteLength + 1);\r\n            if (sizeOnly)\r\n                return retBuf;\r\n            const encodedView = new Uint8Array(encodedBuf);\r\n            retView = new Uint8Array(retBuf);\r\n            retView[0] = encodedBuf.byteLength | 0x80;\r\n            for (let i = 0; i < encodedBuf.byteLength; i++)\r\n                retView[i + 1] = encodedView[i];\r\n            return retBuf;\r\n        }\r\n        retBuf = new ArrayBuffer(1);\r\n        if (sizeOnly === false) {\r\n            retView = new Uint8Array(retBuf);\r\n            retView[0] = this.length;\r\n        }\r\n        return retBuf;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            isIndefiniteForm: this.isIndefiniteForm,\r\n            longFormUsed: this.longFormUsed,\r\n            length: this.length,\r\n        };\r\n    }\r\n}\r\nLocalLengthBlock.NAME = \"lengthBlock\";\n\nconst typeStore = {};\n\nclass BaseBlock extends LocalBaseBlock {\r\n    constructor({ name = EMPTY_STRING, optional = false, primitiveSchema, ...parameters } = {}, valueBlockType) {\r\n        super(parameters);\r\n        this.name = name;\r\n        this.optional = optional;\r\n        if (primitiveSchema) {\r\n            this.primitiveSchema = primitiveSchema;\r\n        }\r\n        this.idBlock = new LocalIdentificationBlock(parameters);\r\n        this.lenBlock = new LocalLengthBlock(parameters);\r\n        this.valueBlock = valueBlockType ? new valueBlockType(parameters) : new ValueBlock(parameters);\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n        if (resultOffset === -1) {\r\n            this.error = this.valueBlock.error;\r\n            return resultOffset;\r\n        }\r\n        if (!this.idBlock.error.length)\r\n            this.blockLength += this.idBlock.blockLength;\r\n        if (!this.lenBlock.error.length)\r\n            this.blockLength += this.lenBlock.blockLength;\r\n        if (!this.valueBlock.error.length)\r\n            this.blockLength += this.valueBlock.blockLength;\r\n        return resultOffset;\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        const _writer = writer || new ViewWriter();\r\n        if (!writer) {\r\n            prepareIndefiniteForm(this);\r\n        }\r\n        const idBlockBuf = this.idBlock.toBER(sizeOnly);\r\n        _writer.write(idBlockBuf);\r\n        if (this.lenBlock.isIndefiniteForm) {\r\n            _writer.write(new Uint8Array([0x80]).buffer);\r\n            this.valueBlock.toBER(sizeOnly, _writer);\r\n            _writer.write(new ArrayBuffer(2));\r\n        }\r\n        else {\r\n            const valueBlockBuf = this.valueBlock.toBER(sizeOnly);\r\n            this.lenBlock.length = valueBlockBuf.byteLength;\r\n            const lenBlockBuf = this.lenBlock.toBER(sizeOnly);\r\n            _writer.write(lenBlockBuf);\r\n            _writer.write(valueBlockBuf);\r\n        }\r\n        if (!writer) {\r\n            return _writer.final();\r\n        }\r\n        return EMPTY_BUFFER;\r\n    }\r\n    toJSON() {\r\n        const object = {\r\n            ...super.toJSON(),\r\n            idBlock: this.idBlock.toJSON(),\r\n            lenBlock: this.lenBlock.toJSON(),\r\n            valueBlock: this.valueBlock.toJSON(),\r\n            name: this.name,\r\n            optional: this.optional,\r\n        };\r\n        if (this.primitiveSchema)\r\n            object.primitiveSchema = this.primitiveSchema.toJSON();\r\n        return object;\r\n    }\r\n    toString(encoding = \"ascii\") {\r\n        if (encoding === \"ascii\") {\r\n            return this.onAsciiEncoding();\r\n        }\r\n        return pvtsutils__namespace.Convert.ToHex(this.toBER());\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : ${pvtsutils__namespace.Convert.ToHex(this.valueBlock.valueBeforeDecodeView)}`;\r\n    }\r\n    isEqual(other) {\r\n        if (this === other) {\r\n            return true;\r\n        }\r\n        if (!(other instanceof this.constructor)) {\r\n            return false;\r\n        }\r\n        const thisRaw = this.toBER();\r\n        const otherRaw = other.toBER();\r\n        return pvutils__namespace.isEqualBuffer(thisRaw, otherRaw);\r\n    }\r\n}\r\nBaseBlock.NAME = \"BaseBlock\";\r\nfunction prepareIndefiniteForm(baseBlock) {\r\n    if (baseBlock instanceof typeStore.Constructed) {\r\n        for (const value of baseBlock.valueBlock.value) {\r\n            if (prepareIndefiniteForm(value)) {\r\n                baseBlock.lenBlock.isIndefiniteForm = true;\r\n            }\r\n        }\r\n    }\r\n    return !!baseBlock.lenBlock.isIndefiniteForm;\r\n}\n\nclass BaseStringBlock extends BaseBlock {\r\n    constructor({ value = EMPTY_STRING, ...parameters } = {}, stringValueBlockType) {\r\n        super(parameters, stringValueBlockType);\r\n        if (value) {\r\n            this.fromString(value);\r\n        }\r\n    }\r\n    getValue() {\r\n        return this.valueBlock.value;\r\n    }\r\n    setValue(value) {\r\n        this.valueBlock.value = value;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n        if (resultOffset === -1) {\r\n            this.error = this.valueBlock.error;\r\n            return resultOffset;\r\n        }\r\n        this.fromBuffer(this.valueBlock.valueHexView);\r\n        if (!this.idBlock.error.length)\r\n            this.blockLength += this.idBlock.blockLength;\r\n        if (!this.lenBlock.error.length)\r\n            this.blockLength += this.lenBlock.blockLength;\r\n        if (!this.valueBlock.error.length)\r\n            this.blockLength += this.valueBlock.blockLength;\r\n        return resultOffset;\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : '${this.valueBlock.value}'`;\r\n    }\r\n}\r\nBaseStringBlock.NAME = \"BaseStringBlock\";\n\nclass LocalPrimitiveValueBlock extends HexBlock(ValueBlock) {\r\n    constructor({ isHexOnly = true, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.isHexOnly = isHexOnly;\r\n    }\r\n}\r\nLocalPrimitiveValueBlock.NAME = \"PrimitiveValueBlock\";\n\nvar _a$w;\r\nclass Primitive extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalPrimitiveValueBlock);\r\n        this.idBlock.isConstructed = false;\r\n    }\r\n}\r\n_a$w = Primitive;\r\n(() => {\r\n    typeStore.Primitive = _a$w;\r\n})();\r\nPrimitive.NAME = \"PRIMITIVE\";\n\nfunction localChangeType(inputObject, newType) {\r\n    if (inputObject instanceof newType) {\r\n        return inputObject;\r\n    }\r\n    const newObject = new newType();\r\n    newObject.idBlock = inputObject.idBlock;\r\n    newObject.lenBlock = inputObject.lenBlock;\r\n    newObject.warnings = inputObject.warnings;\r\n    newObject.valueBeforeDecodeView = inputObject.valueBeforeDecodeView;\r\n    return newObject;\r\n}\r\nfunction localFromBER(inputBuffer, inputOffset = 0, inputLength = inputBuffer.length) {\r\n    const incomingOffset = inputOffset;\r\n    let returnObject = new BaseBlock({}, ValueBlock);\r\n    const baseBlock = new LocalBaseBlock();\r\n    if (!checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength)) {\r\n        returnObject.error = baseBlock.error;\r\n        return {\r\n            offset: -1,\r\n            result: returnObject\r\n        };\r\n    }\r\n    const intBuffer = inputBuffer.subarray(inputOffset, inputOffset + inputLength);\r\n    if (!intBuffer.length) {\r\n        returnObject.error = \"Zero buffer length\";\r\n        return {\r\n            offset: -1,\r\n            result: returnObject\r\n        };\r\n    }\r\n    let resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n    if (returnObject.idBlock.warnings.length) {\r\n        returnObject.warnings.concat(returnObject.idBlock.warnings);\r\n    }\r\n    if (resultOffset === -1) {\r\n        returnObject.error = returnObject.idBlock.error;\r\n        return {\r\n            offset: -1,\r\n            result: returnObject\r\n        };\r\n    }\r\n    inputOffset = resultOffset;\r\n    inputLength -= returnObject.idBlock.blockLength;\r\n    resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength);\r\n    if (returnObject.lenBlock.warnings.length) {\r\n        returnObject.warnings.concat(returnObject.lenBlock.warnings);\r\n    }\r\n    if (resultOffset === -1) {\r\n        returnObject.error = returnObject.lenBlock.error;\r\n        return {\r\n            offset: -1,\r\n            result: returnObject\r\n        };\r\n    }\r\n    inputOffset = resultOffset;\r\n    inputLength -= returnObject.lenBlock.blockLength;\r\n    if (!returnObject.idBlock.isConstructed &&\r\n        returnObject.lenBlock.isIndefiniteForm) {\r\n        returnObject.error = \"Indefinite length form used for primitive encoding form\";\r\n        return {\r\n            offset: -1,\r\n            result: returnObject\r\n        };\r\n    }\r\n    let newASN1Type = BaseBlock;\r\n    switch (returnObject.idBlock.tagClass) {\r\n        case 1:\r\n            if ((returnObject.idBlock.tagNumber >= 37) &&\r\n                (returnObject.idBlock.isHexOnly === false)) {\r\n                returnObject.error = \"UNIVERSAL 37 and upper tags are reserved by ASN.1 standard\";\r\n                return {\r\n                    offset: -1,\r\n                    result: returnObject\r\n                };\r\n            }\r\n            switch (returnObject.idBlock.tagNumber) {\r\n                case 0:\r\n                    if ((returnObject.idBlock.isConstructed) &&\r\n                        (returnObject.lenBlock.length > 0)) {\r\n                        returnObject.error = \"Type [UNIVERSAL 0] is reserved\";\r\n                        return {\r\n                            offset: -1,\r\n                            result: returnObject\r\n                        };\r\n                    }\r\n                    newASN1Type = typeStore.EndOfContent;\r\n                    break;\r\n                case 1:\r\n                    newASN1Type = typeStore.Boolean;\r\n                    break;\r\n                case 2:\r\n                    newASN1Type = typeStore.Integer;\r\n                    break;\r\n                case 3:\r\n                    newASN1Type = typeStore.BitString;\r\n                    break;\r\n                case 4:\r\n                    newASN1Type = typeStore.OctetString;\r\n                    break;\r\n                case 5:\r\n                    newASN1Type = typeStore.Null;\r\n                    break;\r\n                case 6:\r\n                    newASN1Type = typeStore.ObjectIdentifier;\r\n                    break;\r\n                case 10:\r\n                    newASN1Type = typeStore.Enumerated;\r\n                    break;\r\n                case 12:\r\n                    newASN1Type = typeStore.Utf8String;\r\n                    break;\r\n                case 13:\r\n                    newASN1Type = typeStore.RelativeObjectIdentifier;\r\n                    break;\r\n                case 14:\r\n                    newASN1Type = typeStore.TIME;\r\n                    break;\r\n                case 15:\r\n                    returnObject.error = \"[UNIVERSAL 15] is reserved by ASN.1 standard\";\r\n                    return {\r\n                        offset: -1,\r\n                        result: returnObject\r\n                    };\r\n                case 16:\r\n                    newASN1Type = typeStore.Sequence;\r\n                    break;\r\n                case 17:\r\n                    newASN1Type = typeStore.Set;\r\n                    break;\r\n                case 18:\r\n                    newASN1Type = typeStore.NumericString;\r\n                    break;\r\n                case 19:\r\n                    newASN1Type = typeStore.PrintableString;\r\n                    break;\r\n                case 20:\r\n                    newASN1Type = typeStore.TeletexString;\r\n                    break;\r\n                case 21:\r\n                    newASN1Type = typeStore.VideotexString;\r\n                    break;\r\n                case 22:\r\n                    newASN1Type = typeStore.IA5String;\r\n                    break;\r\n                case 23:\r\n                    newASN1Type = typeStore.UTCTime;\r\n                    break;\r\n                case 24:\r\n                    newASN1Type = typeStore.GeneralizedTime;\r\n                    break;\r\n                case 25:\r\n                    newASN1Type = typeStore.GraphicString;\r\n                    break;\r\n                case 26:\r\n                    newASN1Type = typeStore.VisibleString;\r\n                    break;\r\n                case 27:\r\n                    newASN1Type = typeStore.GeneralString;\r\n                    break;\r\n                case 28:\r\n                    newASN1Type = typeStore.UniversalString;\r\n                    break;\r\n                case 29:\r\n                    newASN1Type = typeStore.CharacterString;\r\n                    break;\r\n                case 30:\r\n                    newASN1Type = typeStore.BmpString;\r\n                    break;\r\n                case 31:\r\n                    newASN1Type = typeStore.DATE;\r\n                    break;\r\n                case 32:\r\n                    newASN1Type = typeStore.TimeOfDay;\r\n                    break;\r\n                case 33:\r\n                    newASN1Type = typeStore.DateTime;\r\n                    break;\r\n                case 34:\r\n                    newASN1Type = typeStore.Duration;\r\n                    break;\r\n                default: {\r\n                    const newObject = returnObject.idBlock.isConstructed\r\n                        ? new typeStore.Constructed()\r\n                        : new typeStore.Primitive();\r\n                    newObject.idBlock = returnObject.idBlock;\r\n                    newObject.lenBlock = returnObject.lenBlock;\r\n                    newObject.warnings = returnObject.warnings;\r\n                    returnObject = newObject;\r\n                }\r\n            }\r\n            break;\r\n        case 2:\r\n        case 3:\r\n        case 4:\r\n        default: {\r\n            newASN1Type = returnObject.idBlock.isConstructed\r\n                ? typeStore.Constructed\r\n                : typeStore.Primitive;\r\n        }\r\n    }\r\n    returnObject = localChangeType(returnObject, newASN1Type);\r\n    resultOffset = returnObject.fromBER(inputBuffer, inputOffset, returnObject.lenBlock.isIndefiniteForm ? inputLength : returnObject.lenBlock.length);\r\n    returnObject.valueBeforeDecodeView = inputBuffer.subarray(incomingOffset, incomingOffset + returnObject.blockLength);\r\n    return {\r\n        offset: resultOffset,\r\n        result: returnObject\r\n    };\r\n}\r\nfunction fromBER(inputBuffer) {\r\n    if (!inputBuffer.byteLength) {\r\n        const result = new BaseBlock({}, ValueBlock);\r\n        result.error = \"Input buffer has zero length\";\r\n        return {\r\n            offset: -1,\r\n            result\r\n        };\r\n    }\r\n    return localFromBER(pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer).slice(), 0, inputBuffer.byteLength);\r\n}\n\nfunction checkLen(indefiniteLength, length) {\r\n    if (indefiniteLength) {\r\n        return 1;\r\n    }\r\n    return length;\r\n}\r\nclass LocalConstructedValueBlock extends ValueBlock {\r\n    constructor({ value = [], isIndefiniteForm = false, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.value = value;\r\n        this.isIndefiniteForm = isIndefiniteForm;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const view = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, view, inputOffset, inputLength)) {\r\n            return -1;\r\n        }\r\n        this.valueBeforeDecodeView = view.subarray(inputOffset, inputOffset + inputLength);\r\n        if (this.valueBeforeDecodeView.length === 0) {\r\n            this.warnings.push(\"Zero buffer length\");\r\n            return inputOffset;\r\n        }\r\n        let currentOffset = inputOffset;\r\n        while (checkLen(this.isIndefiniteForm, inputLength) > 0) {\r\n            const returnObject = localFromBER(view, currentOffset, inputLength);\r\n            if (returnObject.offset === -1) {\r\n                this.error = returnObject.result.error;\r\n                this.warnings.concat(returnObject.result.warnings);\r\n                return -1;\r\n            }\r\n            currentOffset = returnObject.offset;\r\n            this.blockLength += returnObject.result.blockLength;\r\n            inputLength -= returnObject.result.blockLength;\r\n            this.value.push(returnObject.result);\r\n            if (this.isIndefiniteForm && returnObject.result.constructor.NAME === END_OF_CONTENT_NAME) {\r\n                break;\r\n            }\r\n        }\r\n        if (this.isIndefiniteForm) {\r\n            if (this.value[this.value.length - 1].constructor.NAME === END_OF_CONTENT_NAME) {\r\n                this.value.pop();\r\n            }\r\n            else {\r\n                this.warnings.push(\"No EndOfContent block encoded\");\r\n            }\r\n        }\r\n        return currentOffset;\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        const _writer = writer || new ViewWriter();\r\n        for (let i = 0; i < this.value.length; i++) {\r\n            this.value[i].toBER(sizeOnly, _writer);\r\n        }\r\n        if (!writer) {\r\n            return _writer.final();\r\n        }\r\n        return EMPTY_BUFFER;\r\n    }\r\n    toJSON() {\r\n        const object = {\r\n            ...super.toJSON(),\r\n            isIndefiniteForm: this.isIndefiniteForm,\r\n            value: [],\r\n        };\r\n        for (const value of this.value) {\r\n            object.value.push(value.toJSON());\r\n        }\r\n        return object;\r\n    }\r\n}\r\nLocalConstructedValueBlock.NAME = \"ConstructedValueBlock\";\n\nvar _a$v;\r\nclass Constructed extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalConstructedValueBlock);\r\n        this.idBlock.isConstructed = true;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n        const resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, (this.lenBlock.isIndefiniteForm) ? inputLength : this.lenBlock.length);\r\n        if (resultOffset === -1) {\r\n            this.error = this.valueBlock.error;\r\n            return resultOffset;\r\n        }\r\n        if (!this.idBlock.error.length)\r\n            this.blockLength += this.idBlock.blockLength;\r\n        if (!this.lenBlock.error.length)\r\n            this.blockLength += this.lenBlock.blockLength;\r\n        if (!this.valueBlock.error.length)\r\n            this.blockLength += this.valueBlock.blockLength;\r\n        return resultOffset;\r\n    }\r\n    onAsciiEncoding() {\r\n        const values = [];\r\n        for (const value of this.valueBlock.value) {\r\n            values.push(value.toString(\"ascii\").split(\"\\n\").map(o => `  ${o}`).join(\"\\n\"));\r\n        }\r\n        const blockName = this.idBlock.tagClass === 3\r\n            ? `[${this.idBlock.tagNumber}]`\r\n            : this.constructor.NAME;\r\n        return values.length\r\n            ? `${blockName} :\\n${values.join(\"\\n\")}`\r\n            : `${blockName} :`;\r\n    }\r\n}\r\n_a$v = Constructed;\r\n(() => {\r\n    typeStore.Constructed = _a$v;\r\n})();\r\nConstructed.NAME = \"CONSTRUCTED\";\n\nclass LocalEndOfContentValueBlock extends ValueBlock {\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        return inputOffset;\r\n    }\r\n    toBER(sizeOnly) {\r\n        return EMPTY_BUFFER;\r\n    }\r\n}\r\nLocalEndOfContentValueBlock.override = \"EndOfContentValueBlock\";\n\nvar _a$u;\r\nclass EndOfContent extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalEndOfContentValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 0;\r\n    }\r\n}\r\n_a$u = EndOfContent;\r\n(() => {\r\n    typeStore.EndOfContent = _a$u;\r\n})();\r\nEndOfContent.NAME = END_OF_CONTENT_NAME;\n\nvar _a$t;\r\nclass Null extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, ValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 5;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        if (this.lenBlock.length > 0)\r\n            this.warnings.push(\"Non-zero length of value block for Null type\");\r\n        if (!this.idBlock.error.length)\r\n            this.blockLength += this.idBlock.blockLength;\r\n        if (!this.lenBlock.error.length)\r\n            this.blockLength += this.lenBlock.blockLength;\r\n        this.blockLength += inputLength;\r\n        if ((inputOffset + inputLength) > inputBuffer.byteLength) {\r\n            this.error = \"End of input reached before message was fully decoded (inconsistent offset and length values)\";\r\n            return -1;\r\n        }\r\n        return (inputOffset + inputLength);\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        const retBuf = new ArrayBuffer(2);\r\n        if (!sizeOnly) {\r\n            const retView = new Uint8Array(retBuf);\r\n            retView[0] = 0x05;\r\n            retView[1] = 0x00;\r\n        }\r\n        if (writer) {\r\n            writer.write(retBuf);\r\n        }\r\n        return retBuf;\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME}`;\r\n    }\r\n}\r\n_a$t = Null;\r\n(() => {\r\n    typeStore.Null = _a$t;\r\n})();\r\nNull.NAME = \"NULL\";\n\nclass LocalBooleanValueBlock extends HexBlock(ValueBlock) {\r\n    constructor({ value, ...parameters } = {}) {\r\n        super(parameters);\r\n        if (parameters.valueHex) {\r\n            this.valueHexView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(parameters.valueHex);\r\n        }\r\n        else {\r\n            this.valueHexView = new Uint8Array(1);\r\n        }\r\n        if (value) {\r\n            this.value = value;\r\n        }\r\n    }\r\n    get value() {\r\n        for (const octet of this.valueHexView) {\r\n            if (octet > 0) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    }\r\n    set value(value) {\r\n        this.valueHexView[0] = value ? 0xFF : 0x00;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const inputView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n            return -1;\r\n        }\r\n        this.valueHexView = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n        if (inputLength > 1)\r\n            this.warnings.push(\"Boolean value encoded in more then 1 octet\");\r\n        this.isHexOnly = true;\r\n        pvutils__namespace.utilDecodeTC.call(this);\r\n        this.blockLength = inputLength;\r\n        return (inputOffset + inputLength);\r\n    }\r\n    toBER() {\r\n        return this.valueHexView.slice();\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            value: this.value,\r\n        };\r\n    }\r\n}\r\nLocalBooleanValueBlock.NAME = \"BooleanValueBlock\";\n\nvar _a$s;\r\nclass Boolean extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalBooleanValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 1;\r\n    }\r\n    getValue() {\r\n        return this.valueBlock.value;\r\n    }\r\n    setValue(value) {\r\n        this.valueBlock.value = value;\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : ${this.getValue}`;\r\n    }\r\n}\r\n_a$s = Boolean;\r\n(() => {\r\n    typeStore.Boolean = _a$s;\r\n})();\r\nBoolean.NAME = \"BOOLEAN\";\n\nclass LocalOctetStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n    constructor({ isConstructed = false, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.isConstructed = isConstructed;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        let resultOffset = 0;\r\n        if (this.isConstructed) {\r\n            this.isHexOnly = false;\r\n            resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n            if (resultOffset === -1)\r\n                return resultOffset;\r\n            for (let i = 0; i < this.value.length; i++) {\r\n                const currentBlockName = this.value[i].constructor.NAME;\r\n                if (currentBlockName === END_OF_CONTENT_NAME) {\r\n                    if (this.isIndefiniteForm)\r\n                        break;\r\n                    else {\r\n                        this.error = \"EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only\";\r\n                        return -1;\r\n                    }\r\n                }\r\n                if (currentBlockName !== OCTET_STRING_NAME) {\r\n                    this.error = \"OCTET STRING may consists of OCTET STRINGs only\";\r\n                    return -1;\r\n                }\r\n            }\r\n        }\r\n        else {\r\n            this.isHexOnly = true;\r\n            resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n            this.blockLength = inputLength;\r\n        }\r\n        return resultOffset;\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        if (this.isConstructed)\r\n            return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n        return sizeOnly\r\n            ? new ArrayBuffer(this.valueHexView.byteLength)\r\n            : this.valueHexView.slice().buffer;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            isConstructed: this.isConstructed,\r\n        };\r\n    }\r\n}\r\nLocalOctetStringValueBlock.NAME = \"OctetStringValueBlock\";\n\nvar _a$r;\r\nclass OctetString extends BaseBlock {\r\n    constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n        var _b, _c;\r\n        (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n        super({\r\n            idBlock: {\r\n                isConstructed: parameters.isConstructed,\r\n                ...idBlock,\r\n            },\r\n            lenBlock: {\r\n                ...lenBlock,\r\n                isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n            },\r\n            ...parameters,\r\n        }, LocalOctetStringValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 4;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n        this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n        if (inputLength === 0) {\r\n            if (this.idBlock.error.length === 0)\r\n                this.blockLength += this.idBlock.blockLength;\r\n            if (this.lenBlock.error.length === 0)\r\n                this.blockLength += this.lenBlock.blockLength;\r\n            return inputOffset;\r\n        }\r\n        if (!this.valueBlock.isConstructed) {\r\n            const view = inputBuffer instanceof ArrayBuffer ? new Uint8Array(inputBuffer) : inputBuffer;\r\n            const buf = view.subarray(inputOffset, inputOffset + inputLength);\r\n            try {\r\n                if (buf.byteLength) {\r\n                    const asn = localFromBER(buf, 0, buf.byteLength);\r\n                    if (asn.offset !== -1 && asn.offset === inputLength) {\r\n                        this.valueBlock.value = [asn.result];\r\n                    }\r\n                }\r\n            }\r\n            catch (e) {\r\n            }\r\n        }\r\n        return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n    }\r\n    onAsciiEncoding() {\r\n        if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n            return Constructed.prototype.onAsciiEncoding.call(this);\r\n        }\r\n        return `${this.constructor.NAME} : ${pvtsutils__namespace.Convert.ToHex(this.valueBlock.valueHexView)}`;\r\n    }\r\n    getValue() {\r\n        if (!this.idBlock.isConstructed) {\r\n            return this.valueBlock.valueHexView.slice().buffer;\r\n        }\r\n        const array = [];\r\n        for (const content of this.valueBlock.value) {\r\n            if (content instanceof OctetString) {\r\n                array.push(content.valueBlock.valueHexView);\r\n            }\r\n        }\r\n        return pvtsutils__namespace.BufferSourceConverter.concat(array);\r\n    }\r\n}\r\n_a$r = OctetString;\r\n(() => {\r\n    typeStore.OctetString = _a$r;\r\n})();\r\nOctetString.NAME = OCTET_STRING_NAME;\n\nclass LocalBitStringValueBlock extends HexBlock(LocalConstructedValueBlock) {\r\n    constructor({ unusedBits = 0, isConstructed = false, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.unusedBits = unusedBits;\r\n        this.isConstructed = isConstructed;\r\n        this.blockLength = this.valueHexView.byteLength;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        if (!inputLength) {\r\n            return inputOffset;\r\n        }\r\n        let resultOffset = -1;\r\n        if (this.isConstructed) {\r\n            resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength);\r\n            if (resultOffset === -1)\r\n                return resultOffset;\r\n            for (const value of this.value) {\r\n                const currentBlockName = value.constructor.NAME;\r\n                if (currentBlockName === END_OF_CONTENT_NAME) {\r\n                    if (this.isIndefiniteForm)\r\n                        break;\r\n                    else {\r\n                        this.error = \"EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only\";\r\n                        return -1;\r\n                    }\r\n                }\r\n                if (currentBlockName !== BIT_STRING_NAME) {\r\n                    this.error = \"BIT STRING may consists of BIT STRINGs only\";\r\n                    return -1;\r\n                }\r\n                const valueBlock = value.valueBlock;\r\n                if ((this.unusedBits > 0) && (valueBlock.unusedBits > 0)) {\r\n                    this.error = \"Using of \\\"unused bits\\\" inside constructive BIT STRING allowed for least one only\";\r\n                    return -1;\r\n                }\r\n                this.unusedBits = valueBlock.unusedBits;\r\n            }\r\n            return resultOffset;\r\n        }\r\n        const inputView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n            return -1;\r\n        }\r\n        const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n        this.unusedBits = intBuffer[0];\r\n        if (this.unusedBits > 7) {\r\n            this.error = \"Unused bits for BitString must be in range 0-7\";\r\n            return -1;\r\n        }\r\n        if (!this.unusedBits) {\r\n            const buf = intBuffer.subarray(1);\r\n            try {\r\n                if (buf.byteLength) {\r\n                    const asn = localFromBER(buf, 0, buf.byteLength);\r\n                    if (asn.offset !== -1 && asn.offset === (inputLength - 1)) {\r\n                        this.value = [asn.result];\r\n                    }\r\n                }\r\n            }\r\n            catch (e) {\r\n            }\r\n        }\r\n        this.valueHexView = intBuffer.subarray(1);\r\n        this.blockLength = intBuffer.length;\r\n        return (inputOffset + inputLength);\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        if (this.isConstructed) {\r\n            return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly, writer);\r\n        }\r\n        if (sizeOnly) {\r\n            return new ArrayBuffer(this.valueHexView.byteLength + 1);\r\n        }\r\n        if (!this.valueHexView.byteLength) {\r\n            return EMPTY_BUFFER;\r\n        }\r\n        const retView = new Uint8Array(this.valueHexView.length + 1);\r\n        retView[0] = this.unusedBits;\r\n        retView.set(this.valueHexView, 1);\r\n        return retView.buffer;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            unusedBits: this.unusedBits,\r\n            isConstructed: this.isConstructed,\r\n        };\r\n    }\r\n}\r\nLocalBitStringValueBlock.NAME = \"BitStringValueBlock\";\n\nvar _a$q;\r\nclass BitString extends BaseBlock {\r\n    constructor({ idBlock = {}, lenBlock = {}, ...parameters } = {}) {\r\n        var _b, _c;\r\n        (_b = parameters.isConstructed) !== null && _b !== void 0 ? _b : (parameters.isConstructed = !!((_c = parameters.value) === null || _c === void 0 ? void 0 : _c.length));\r\n        super({\r\n            idBlock: {\r\n                isConstructed: parameters.isConstructed,\r\n                ...idBlock,\r\n            },\r\n            lenBlock: {\r\n                ...lenBlock,\r\n                isIndefiniteForm: !!parameters.isIndefiniteForm,\r\n            },\r\n            ...parameters,\r\n        }, LocalBitStringValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 3;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        this.valueBlock.isConstructed = this.idBlock.isConstructed;\r\n        this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm;\r\n        return super.fromBER(inputBuffer, inputOffset, inputLength);\r\n    }\r\n    onAsciiEncoding() {\r\n        if (this.valueBlock.isConstructed || (this.valueBlock.value && this.valueBlock.value.length)) {\r\n            return Constructed.prototype.onAsciiEncoding.call(this);\r\n        }\r\n        else {\r\n            const bits = [];\r\n            const valueHex = this.valueBlock.valueHexView;\r\n            for (const byte of valueHex) {\r\n                bits.push(byte.toString(2).padStart(8, \"0\"));\r\n            }\r\n            const bitsStr = bits.join(\"\");\r\n            return `${this.constructor.NAME} : ${bitsStr.substring(0, bitsStr.length - this.valueBlock.unusedBits)}`;\r\n        }\r\n    }\r\n}\r\n_a$q = BitString;\r\n(() => {\r\n    typeStore.BitString = _a$q;\r\n})();\r\nBitString.NAME = BIT_STRING_NAME;\n\nvar _a$p;\r\nfunction viewAdd(first, second) {\r\n    const c = new Uint8Array([0]);\r\n    const firstView = new Uint8Array(first);\r\n    const secondView = new Uint8Array(second);\r\n    let firstViewCopy = firstView.slice(0);\r\n    const firstViewCopyLength = firstViewCopy.length - 1;\r\n    const secondViewCopy = secondView.slice(0);\r\n    const secondViewCopyLength = secondViewCopy.length - 1;\r\n    let value = 0;\r\n    const max = (secondViewCopyLength < firstViewCopyLength) ? firstViewCopyLength : secondViewCopyLength;\r\n    let counter = 0;\r\n    for (let i = max; i >= 0; i--, counter++) {\r\n        switch (true) {\r\n            case (counter < secondViewCopy.length):\r\n                value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0];\r\n                break;\r\n            default:\r\n                value = firstViewCopy[firstViewCopyLength - counter] + c[0];\r\n        }\r\n        c[0] = value / 10;\r\n        switch (true) {\r\n            case (counter >= firstViewCopy.length):\r\n                firstViewCopy = pvutils__namespace.utilConcatView(new Uint8Array([value % 10]), firstViewCopy);\r\n                break;\r\n            default:\r\n                firstViewCopy[firstViewCopyLength - counter] = value % 10;\r\n        }\r\n    }\r\n    if (c[0] > 0)\r\n        firstViewCopy = pvutils__namespace.utilConcatView(c, firstViewCopy);\r\n    return firstViewCopy;\r\n}\r\nfunction power2(n) {\r\n    if (n >= powers2.length) {\r\n        for (let p = powers2.length; p <= n; p++) {\r\n            const c = new Uint8Array([0]);\r\n            let digits = (powers2[p - 1]).slice(0);\r\n            for (let i = (digits.length - 1); i >= 0; i--) {\r\n                const newValue = new Uint8Array([(digits[i] << 1) + c[0]]);\r\n                c[0] = newValue[0] / 10;\r\n                digits[i] = newValue[0] % 10;\r\n            }\r\n            if (c[0] > 0)\r\n                digits = pvutils__namespace.utilConcatView(c, digits);\r\n            powers2.push(digits);\r\n        }\r\n    }\r\n    return powers2[n];\r\n}\r\nfunction viewSub(first, second) {\r\n    let b = 0;\r\n    const firstView = new Uint8Array(first);\r\n    const secondView = new Uint8Array(second);\r\n    const firstViewCopy = firstView.slice(0);\r\n    const firstViewCopyLength = firstViewCopy.length - 1;\r\n    const secondViewCopy = secondView.slice(0);\r\n    const secondViewCopyLength = secondViewCopy.length - 1;\r\n    let value;\r\n    let counter = 0;\r\n    for (let i = secondViewCopyLength; i >= 0; i--, counter++) {\r\n        value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b;\r\n        switch (true) {\r\n            case (value < 0):\r\n                b = 1;\r\n                firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n                break;\r\n            default:\r\n                b = 0;\r\n                firstViewCopy[firstViewCopyLength - counter] = value;\r\n        }\r\n    }\r\n    if (b > 0) {\r\n        for (let i = (firstViewCopyLength - secondViewCopyLength + 1); i >= 0; i--, counter++) {\r\n            value = firstViewCopy[firstViewCopyLength - counter] - b;\r\n            if (value < 0) {\r\n                b = 1;\r\n                firstViewCopy[firstViewCopyLength - counter] = value + 10;\r\n            }\r\n            else {\r\n                b = 0;\r\n                firstViewCopy[firstViewCopyLength - counter] = value;\r\n                break;\r\n            }\r\n        }\r\n    }\r\n    return firstViewCopy.slice();\r\n}\r\nclass LocalIntegerValueBlock extends HexBlock(ValueBlock) {\r\n    constructor({ value, ...parameters } = {}) {\r\n        super(parameters);\r\n        this._valueDec = 0;\r\n        if (parameters.valueHex) {\r\n            this.setValueHex();\r\n        }\r\n        if (value !== undefined) {\r\n            this.valueDec = value;\r\n        }\r\n    }\r\n    setValueHex() {\r\n        if (this.valueHexView.length >= 4) {\r\n            this.warnings.push(\"Too big Integer for decoding, hex only\");\r\n            this.isHexOnly = true;\r\n            this._valueDec = 0;\r\n        }\r\n        else {\r\n            this.isHexOnly = false;\r\n            if (this.valueHexView.length > 0) {\r\n                this._valueDec = pvutils__namespace.utilDecodeTC.call(this);\r\n            }\r\n        }\r\n    }\r\n    set valueDec(v) {\r\n        this._valueDec = v;\r\n        this.isHexOnly = false;\r\n        this.valueHexView = new Uint8Array(pvutils__namespace.utilEncodeTC(v));\r\n    }\r\n    get valueDec() {\r\n        return this._valueDec;\r\n    }\r\n    fromDER(inputBuffer, inputOffset, inputLength, expectedLength = 0) {\r\n        const offset = this.fromBER(inputBuffer, inputOffset, inputLength);\r\n        if (offset === -1)\r\n            return offset;\r\n        const view = this.valueHexView;\r\n        if ((view[0] === 0x00) && ((view[1] & 0x80) !== 0)) {\r\n            this.valueHexView = view.subarray(1);\r\n        }\r\n        else {\r\n            if (expectedLength !== 0) {\r\n                if (view.length < expectedLength) {\r\n                    if ((expectedLength - view.length) > 1)\r\n                        expectedLength = view.length + 1;\r\n                    this.valueHexView = view.subarray(expectedLength - view.length);\r\n                }\r\n            }\r\n        }\r\n        return offset;\r\n    }\r\n    toDER(sizeOnly = false) {\r\n        const view = this.valueHexView;\r\n        switch (true) {\r\n            case ((view[0] & 0x80) !== 0):\r\n                {\r\n                    const updatedView = new Uint8Array(this.valueHexView.length + 1);\r\n                    updatedView[0] = 0x00;\r\n                    updatedView.set(view, 1);\r\n                    this.valueHexView = updatedView;\r\n                }\r\n                break;\r\n            case ((view[0] === 0x00) && ((view[1] & 0x80) === 0)):\r\n                {\r\n                    this.valueHexView = this.valueHexView.subarray(1);\r\n                }\r\n                break;\r\n        }\r\n        return this.toBER(sizeOnly);\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const resultOffset = super.fromBER(inputBuffer, inputOffset, inputLength);\r\n        if (resultOffset === -1) {\r\n            return resultOffset;\r\n        }\r\n        this.setValueHex();\r\n        return resultOffset;\r\n    }\r\n    toBER(sizeOnly) {\r\n        return sizeOnly\r\n            ? new ArrayBuffer(this.valueHexView.length)\r\n            : this.valueHexView.slice().buffer;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            valueDec: this.valueDec,\r\n        };\r\n    }\r\n    toString() {\r\n        const firstBit = (this.valueHexView.length * 8) - 1;\r\n        let digits = new Uint8Array((this.valueHexView.length * 8) / 3);\r\n        let bitNumber = 0;\r\n        let currentByte;\r\n        const asn1View = this.valueHexView;\r\n        let result = \"\";\r\n        let flag = false;\r\n        for (let byteNumber = (asn1View.byteLength - 1); byteNumber >= 0; byteNumber--) {\r\n            currentByte = asn1View[byteNumber];\r\n            for (let i = 0; i < 8; i++) {\r\n                if ((currentByte & 1) === 1) {\r\n                    switch (bitNumber) {\r\n                        case firstBit:\r\n                            digits = viewSub(power2(bitNumber), digits);\r\n                            result = \"-\";\r\n                            break;\r\n                        default:\r\n                            digits = viewAdd(digits, power2(bitNumber));\r\n                    }\r\n                }\r\n                bitNumber++;\r\n                currentByte >>= 1;\r\n            }\r\n        }\r\n        for (let i = 0; i < digits.length; i++) {\r\n            if (digits[i])\r\n                flag = true;\r\n            if (flag)\r\n                result += digitsString.charAt(digits[i]);\r\n        }\r\n        if (flag === false)\r\n            result += digitsString.charAt(0);\r\n        return result;\r\n    }\r\n}\r\n_a$p = LocalIntegerValueBlock;\r\nLocalIntegerValueBlock.NAME = \"IntegerValueBlock\";\r\n(() => {\r\n    Object.defineProperty(_a$p.prototype, \"valueHex\", {\r\n        set: function (v) {\r\n            this.valueHexView = new Uint8Array(v);\r\n            this.setValueHex();\r\n        },\r\n        get: function () {\r\n            return this.valueHexView.slice().buffer;\r\n        },\r\n    });\r\n})();\n\nvar _a$o;\r\nclass Integer extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalIntegerValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 2;\r\n    }\r\n    toBigInt() {\r\n        assertBigInt();\r\n        return BigInt(this.valueBlock.toString());\r\n    }\r\n    static fromBigInt(value) {\r\n        assertBigInt();\r\n        const bigIntValue = BigInt(value);\r\n        const writer = new ViewWriter();\r\n        const hex = bigIntValue.toString(16).replace(/^-/, \"\");\r\n        const view = new Uint8Array(pvtsutils__namespace.Convert.FromHex(hex));\r\n        if (bigIntValue < 0) {\r\n            const first = new Uint8Array(view.length + (view[0] & 0x80 ? 1 : 0));\r\n            first[0] |= 0x80;\r\n            const firstInt = BigInt(`0x${pvtsutils__namespace.Convert.ToHex(first)}`);\r\n            const secondInt = firstInt + bigIntValue;\r\n            const second = pvtsutils__namespace.BufferSourceConverter.toUint8Array(pvtsutils__namespace.Convert.FromHex(secondInt.toString(16)));\r\n            second[0] |= 0x80;\r\n            writer.write(second);\r\n        }\r\n        else {\r\n            if (view[0] & 0x80) {\r\n                writer.write(new Uint8Array([0]));\r\n            }\r\n            writer.write(view);\r\n        }\r\n        const res = new Integer({\r\n            valueHex: writer.final(),\r\n        });\r\n        return res;\r\n    }\r\n    convertToDER() {\r\n        const integer = new Integer({ valueHex: this.valueBlock.valueHexView });\r\n        integer.valueBlock.toDER();\r\n        return integer;\r\n    }\r\n    convertFromDER() {\r\n        return new Integer({\r\n            valueHex: this.valueBlock.valueHexView[0] === 0\r\n                ? this.valueBlock.valueHexView.subarray(1)\r\n                : this.valueBlock.valueHexView,\r\n        });\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : ${this.valueBlock.toString()}`;\r\n    }\r\n}\r\n_a$o = Integer;\r\n(() => {\r\n    typeStore.Integer = _a$o;\r\n})();\r\nInteger.NAME = \"INTEGER\";\n\nvar _a$n;\r\nclass Enumerated extends Integer {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 10;\r\n    }\r\n}\r\n_a$n = Enumerated;\r\n(() => {\r\n    typeStore.Enumerated = _a$n;\r\n})();\r\nEnumerated.NAME = \"ENUMERATED\";\n\nclass LocalSidValueBlock extends HexBlock(ValueBlock) {\r\n    constructor({ valueDec = -1, isFirstSid = false, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.valueDec = valueDec;\r\n        this.isFirstSid = isFirstSid;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        if (!inputLength) {\r\n            return inputOffset;\r\n        }\r\n        const inputView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, inputView, inputOffset, inputLength)) {\r\n            return -1;\r\n        }\r\n        const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n        this.valueHexView = new Uint8Array(inputLength);\r\n        for (let i = 0; i < inputLength; i++) {\r\n            this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n            this.blockLength++;\r\n            if ((intBuffer[i] & 0x80) === 0x00)\r\n                break;\r\n        }\r\n        const tempView = new Uint8Array(this.blockLength);\r\n        for (let i = 0; i < this.blockLength; i++) {\r\n            tempView[i] = this.valueHexView[i];\r\n        }\r\n        this.valueHexView = tempView;\r\n        if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n            this.error = \"End of input reached before message was fully decoded\";\r\n            return -1;\r\n        }\r\n        if (this.valueHexView[0] === 0x00)\r\n            this.warnings.push(\"Needlessly long format of SID encoding\");\r\n        if (this.blockLength <= 8)\r\n            this.valueDec = pvutils__namespace.utilFromBase(this.valueHexView, 7);\r\n        else {\r\n            this.isHexOnly = true;\r\n            this.warnings.push(\"Too big SID for decoding, hex only\");\r\n        }\r\n        return (inputOffset + this.blockLength);\r\n    }\r\n    set valueBigInt(value) {\r\n        assertBigInt();\r\n        let bits = BigInt(value).toString(2);\r\n        while (bits.length % 7) {\r\n            bits = \"0\" + bits;\r\n        }\r\n        const bytes = new Uint8Array(bits.length / 7);\r\n        for (let i = 0; i < bytes.length; i++) {\r\n            bytes[i] = parseInt(bits.slice(i * 7, i * 7 + 7), 2) + (i + 1 < bytes.length ? 0x80 : 0);\r\n        }\r\n        this.fromBER(bytes.buffer, 0, bytes.length);\r\n    }\r\n    toBER(sizeOnly) {\r\n        if (this.isHexOnly) {\r\n            if (sizeOnly)\r\n                return (new ArrayBuffer(this.valueHexView.byteLength));\r\n            const curView = this.valueHexView;\r\n            const retView = new Uint8Array(this.blockLength);\r\n            for (let i = 0; i < (this.blockLength - 1); i++)\r\n                retView[i] = curView[i] | 0x80;\r\n            retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n            return retView.buffer;\r\n        }\r\n        const encodedBuf = pvutils__namespace.utilToBase(this.valueDec, 7);\r\n        if (encodedBuf.byteLength === 0) {\r\n            this.error = \"Error during encoding SID value\";\r\n            return EMPTY_BUFFER;\r\n        }\r\n        const retView = new Uint8Array(encodedBuf.byteLength);\r\n        if (!sizeOnly) {\r\n            const encodedView = new Uint8Array(encodedBuf);\r\n            const len = encodedBuf.byteLength - 1;\r\n            for (let i = 0; i < len; i++)\r\n                retView[i] = encodedView[i] | 0x80;\r\n            retView[len] = encodedView[len];\r\n        }\r\n        return retView;\r\n    }\r\n    toString() {\r\n        let result = \"\";\r\n        if (this.isHexOnly)\r\n            result = pvtsutils__namespace.Convert.ToHex(this.valueHexView);\r\n        else {\r\n            if (this.isFirstSid) {\r\n                let sidValue = this.valueDec;\r\n                if (this.valueDec <= 39)\r\n                    result = \"0.\";\r\n                else {\r\n                    if (this.valueDec <= 79) {\r\n                        result = \"1.\";\r\n                        sidValue -= 40;\r\n                    }\r\n                    else {\r\n                        result = \"2.\";\r\n                        sidValue -= 80;\r\n                    }\r\n                }\r\n                result += sidValue.toString();\r\n            }\r\n            else\r\n                result = this.valueDec.toString();\r\n        }\r\n        return result;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            valueDec: this.valueDec,\r\n            isFirstSid: this.isFirstSid,\r\n        };\r\n    }\r\n}\r\nLocalSidValueBlock.NAME = \"sidBlock\";\n\nclass LocalObjectIdentifierValueBlock extends ValueBlock {\r\n    constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.value = [];\r\n        if (value) {\r\n            this.fromString(value);\r\n        }\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        let resultOffset = inputOffset;\r\n        while (inputLength > 0) {\r\n            const sidBlock = new LocalSidValueBlock();\r\n            resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n            if (resultOffset === -1) {\r\n                this.blockLength = 0;\r\n                this.error = sidBlock.error;\r\n                return resultOffset;\r\n            }\r\n            if (this.value.length === 0)\r\n                sidBlock.isFirstSid = true;\r\n            this.blockLength += sidBlock.blockLength;\r\n            inputLength -= sidBlock.blockLength;\r\n            this.value.push(sidBlock);\r\n        }\r\n        return resultOffset;\r\n    }\r\n    toBER(sizeOnly) {\r\n        const retBuffers = [];\r\n        for (let i = 0; i < this.value.length; i++) {\r\n            const valueBuf = this.value[i].toBER(sizeOnly);\r\n            if (valueBuf.byteLength === 0) {\r\n                this.error = this.value[i].error;\r\n                return EMPTY_BUFFER;\r\n            }\r\n            retBuffers.push(valueBuf);\r\n        }\r\n        return concat(retBuffers);\r\n    }\r\n    fromString(string) {\r\n        this.value = [];\r\n        let pos1 = 0;\r\n        let pos2 = 0;\r\n        let sid = \"\";\r\n        let flag = false;\r\n        do {\r\n            pos2 = string.indexOf(\".\", pos1);\r\n            if (pos2 === -1)\r\n                sid = string.substring(pos1);\r\n            else\r\n                sid = string.substring(pos1, pos2);\r\n            pos1 = pos2 + 1;\r\n            if (flag) {\r\n                const sidBlock = this.value[0];\r\n                let plus = 0;\r\n                switch (sidBlock.valueDec) {\r\n                    case 0:\r\n                        break;\r\n                    case 1:\r\n                        plus = 40;\r\n                        break;\r\n                    case 2:\r\n                        plus = 80;\r\n                        break;\r\n                    default:\r\n                        this.value = [];\r\n                        return;\r\n                }\r\n                const parsedSID = parseInt(sid, 10);\r\n                if (isNaN(parsedSID))\r\n                    return;\r\n                sidBlock.valueDec = parsedSID + plus;\r\n                flag = false;\r\n            }\r\n            else {\r\n                const sidBlock = new LocalSidValueBlock();\r\n                if (sid > Number.MAX_SAFE_INTEGER) {\r\n                    assertBigInt();\r\n                    const sidValue = BigInt(sid);\r\n                    sidBlock.valueBigInt = sidValue;\r\n                }\r\n                else {\r\n                    sidBlock.valueDec = parseInt(sid, 10);\r\n                    if (isNaN(sidBlock.valueDec))\r\n                        return;\r\n                }\r\n                if (!this.value.length) {\r\n                    sidBlock.isFirstSid = true;\r\n                    flag = true;\r\n                }\r\n                this.value.push(sidBlock);\r\n            }\r\n        } while (pos2 !== -1);\r\n    }\r\n    toString() {\r\n        let result = \"\";\r\n        let isHexOnly = false;\r\n        for (let i = 0; i < this.value.length; i++) {\r\n            isHexOnly = this.value[i].isHexOnly;\r\n            let sidStr = this.value[i].toString();\r\n            if (i !== 0)\r\n                result = `${result}.`;\r\n            if (isHexOnly) {\r\n                sidStr = `{${sidStr}}`;\r\n                if (this.value[i].isFirstSid)\r\n                    result = `2.{${sidStr} - 80}`;\r\n                else\r\n                    result += sidStr;\r\n            }\r\n            else\r\n                result += sidStr;\r\n        }\r\n        return result;\r\n    }\r\n    toJSON() {\r\n        const object = {\r\n            ...super.toJSON(),\r\n            value: this.toString(),\r\n            sidArray: [],\r\n        };\r\n        for (let i = 0; i < this.value.length; i++) {\r\n            object.sidArray.push(this.value[i].toJSON());\r\n        }\r\n        return object;\r\n    }\r\n}\r\nLocalObjectIdentifierValueBlock.NAME = \"ObjectIdentifierValueBlock\";\n\nvar _a$m;\r\nclass ObjectIdentifier extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalObjectIdentifierValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 6;\r\n    }\r\n    getValue() {\r\n        return this.valueBlock.toString();\r\n    }\r\n    setValue(value) {\r\n        this.valueBlock.fromString(value);\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            value: this.getValue(),\r\n        };\r\n    }\r\n}\r\n_a$m = ObjectIdentifier;\r\n(() => {\r\n    typeStore.ObjectIdentifier = _a$m;\r\n})();\r\nObjectIdentifier.NAME = \"OBJECT IDENTIFIER\";\n\nclass LocalRelativeSidValueBlock extends HexBlock(LocalBaseBlock) {\r\n    constructor({ valueDec = 0, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.valueDec = valueDec;\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        if (inputLength === 0)\r\n            return inputOffset;\r\n        const inputView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        if (!checkBufferParams(this, inputView, inputOffset, inputLength))\r\n            return -1;\r\n        const intBuffer = inputView.subarray(inputOffset, inputOffset + inputLength);\r\n        this.valueHexView = new Uint8Array(inputLength);\r\n        for (let i = 0; i < inputLength; i++) {\r\n            this.valueHexView[i] = intBuffer[i] & 0x7F;\r\n            this.blockLength++;\r\n            if ((intBuffer[i] & 0x80) === 0x00)\r\n                break;\r\n        }\r\n        const tempView = new Uint8Array(this.blockLength);\r\n        for (let i = 0; i < this.blockLength; i++)\r\n            tempView[i] = this.valueHexView[i];\r\n        this.valueHexView = tempView;\r\n        if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) {\r\n            this.error = \"End of input reached before message was fully decoded\";\r\n            return -1;\r\n        }\r\n        if (this.valueHexView[0] === 0x00)\r\n            this.warnings.push(\"Needlessly long format of SID encoding\");\r\n        if (this.blockLength <= 8)\r\n            this.valueDec = pvutils__namespace.utilFromBase(this.valueHexView, 7);\r\n        else {\r\n            this.isHexOnly = true;\r\n            this.warnings.push(\"Too big SID for decoding, hex only\");\r\n        }\r\n        return (inputOffset + this.blockLength);\r\n    }\r\n    toBER(sizeOnly) {\r\n        if (this.isHexOnly) {\r\n            if (sizeOnly)\r\n                return (new ArrayBuffer(this.valueHexView.byteLength));\r\n            const curView = this.valueHexView;\r\n            const retView = new Uint8Array(this.blockLength);\r\n            for (let i = 0; i < (this.blockLength - 1); i++)\r\n                retView[i] = curView[i] | 0x80;\r\n            retView[this.blockLength - 1] = curView[this.blockLength - 1];\r\n            return retView.buffer;\r\n        }\r\n        const encodedBuf = pvutils__namespace.utilToBase(this.valueDec, 7);\r\n        if (encodedBuf.byteLength === 0) {\r\n            this.error = \"Error during encoding SID value\";\r\n            return EMPTY_BUFFER;\r\n        }\r\n        const retView = new Uint8Array(encodedBuf.byteLength);\r\n        if (!sizeOnly) {\r\n            const encodedView = new Uint8Array(encodedBuf);\r\n            const len = encodedBuf.byteLength - 1;\r\n            for (let i = 0; i < len; i++)\r\n                retView[i] = encodedView[i] | 0x80;\r\n            retView[len] = encodedView[len];\r\n        }\r\n        return retView.buffer;\r\n    }\r\n    toString() {\r\n        let result = \"\";\r\n        if (this.isHexOnly)\r\n            result = pvtsutils__namespace.Convert.ToHex(this.valueHexView);\r\n        else {\r\n            result = this.valueDec.toString();\r\n        }\r\n        return result;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            valueDec: this.valueDec,\r\n        };\r\n    }\r\n}\r\nLocalRelativeSidValueBlock.NAME = \"relativeSidBlock\";\n\nclass LocalRelativeObjectIdentifierValueBlock extends ValueBlock {\r\n    constructor({ value = EMPTY_STRING, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.value = [];\r\n        if (value) {\r\n            this.fromString(value);\r\n        }\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        let resultOffset = inputOffset;\r\n        while (inputLength > 0) {\r\n            const sidBlock = new LocalRelativeSidValueBlock();\r\n            resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength);\r\n            if (resultOffset === -1) {\r\n                this.blockLength = 0;\r\n                this.error = sidBlock.error;\r\n                return resultOffset;\r\n            }\r\n            this.blockLength += sidBlock.blockLength;\r\n            inputLength -= sidBlock.blockLength;\r\n            this.value.push(sidBlock);\r\n        }\r\n        return resultOffset;\r\n    }\r\n    toBER(sizeOnly, writer) {\r\n        const retBuffers = [];\r\n        for (let i = 0; i < this.value.length; i++) {\r\n            const valueBuf = this.value[i].toBER(sizeOnly);\r\n            if (valueBuf.byteLength === 0) {\r\n                this.error = this.value[i].error;\r\n                return EMPTY_BUFFER;\r\n            }\r\n            retBuffers.push(valueBuf);\r\n        }\r\n        return concat(retBuffers);\r\n    }\r\n    fromString(string) {\r\n        this.value = [];\r\n        let pos1 = 0;\r\n        let pos2 = 0;\r\n        let sid = \"\";\r\n        do {\r\n            pos2 = string.indexOf(\".\", pos1);\r\n            if (pos2 === -1)\r\n                sid = string.substring(pos1);\r\n            else\r\n                sid = string.substring(pos1, pos2);\r\n            pos1 = pos2 + 1;\r\n            const sidBlock = new LocalRelativeSidValueBlock();\r\n            sidBlock.valueDec = parseInt(sid, 10);\r\n            if (isNaN(sidBlock.valueDec))\r\n                return true;\r\n            this.value.push(sidBlock);\r\n        } while (pos2 !== -1);\r\n        return true;\r\n    }\r\n    toString() {\r\n        let result = \"\";\r\n        let isHexOnly = false;\r\n        for (let i = 0; i < this.value.length; i++) {\r\n            isHexOnly = this.value[i].isHexOnly;\r\n            let sidStr = this.value[i].toString();\r\n            if (i !== 0)\r\n                result = `${result}.`;\r\n            if (isHexOnly) {\r\n                sidStr = `{${sidStr}}`;\r\n                result += sidStr;\r\n            }\r\n            else\r\n                result += sidStr;\r\n        }\r\n        return result;\r\n    }\r\n    toJSON() {\r\n        const object = {\r\n            ...super.toJSON(),\r\n            value: this.toString(),\r\n            sidArray: [],\r\n        };\r\n        for (let i = 0; i < this.value.length; i++)\r\n            object.sidArray.push(this.value[i].toJSON());\r\n        return object;\r\n    }\r\n}\r\nLocalRelativeObjectIdentifierValueBlock.NAME = \"RelativeObjectIdentifierValueBlock\";\n\nvar _a$l;\r\nclass RelativeObjectIdentifier extends BaseBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters, LocalRelativeObjectIdentifierValueBlock);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 13;\r\n    }\r\n    getValue() {\r\n        return this.valueBlock.toString();\r\n    }\r\n    setValue(value) {\r\n        this.valueBlock.fromString(value);\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : ${this.valueBlock.toString() || \"empty\"}`;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            value: this.getValue(),\r\n        };\r\n    }\r\n}\r\n_a$l = RelativeObjectIdentifier;\r\n(() => {\r\n    typeStore.RelativeObjectIdentifier = _a$l;\r\n})();\r\nRelativeObjectIdentifier.NAME = \"RelativeObjectIdentifier\";\n\nvar _a$k;\r\nclass Sequence extends Constructed {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 16;\r\n    }\r\n}\r\n_a$k = Sequence;\r\n(() => {\r\n    typeStore.Sequence = _a$k;\r\n})();\r\nSequence.NAME = \"SEQUENCE\";\n\nvar _a$j;\r\nclass Set extends Constructed {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 17;\r\n    }\r\n}\r\n_a$j = Set;\r\n(() => {\r\n    typeStore.Set = _a$j;\r\n})();\r\nSet.NAME = \"SET\";\n\nclass LocalStringValueBlock extends HexBlock(ValueBlock) {\r\n    constructor({ ...parameters } = {}) {\r\n        super(parameters);\r\n        this.isHexOnly = true;\r\n        this.value = EMPTY_STRING;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            value: this.value,\r\n        };\r\n    }\r\n}\r\nLocalStringValueBlock.NAME = \"StringValueBlock\";\n\nclass LocalSimpleStringValueBlock extends LocalStringValueBlock {\r\n}\r\nLocalSimpleStringValueBlock.NAME = \"SimpleStringValueBlock\";\n\nclass LocalSimpleStringBlock extends BaseStringBlock {\r\n    constructor({ ...parameters } = {}) {\r\n        super(parameters, LocalSimpleStringValueBlock);\r\n    }\r\n    fromBuffer(inputBuffer) {\r\n        this.valueBlock.value = String.fromCharCode.apply(null, pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer));\r\n    }\r\n    fromString(inputString) {\r\n        const strLen = inputString.length;\r\n        const view = this.valueBlock.valueHexView = new Uint8Array(strLen);\r\n        for (let i = 0; i < strLen; i++)\r\n            view[i] = inputString.charCodeAt(i);\r\n        this.valueBlock.value = inputString;\r\n    }\r\n}\r\nLocalSimpleStringBlock.NAME = \"SIMPLE STRING\";\n\nclass LocalUtf8StringValueBlock extends LocalSimpleStringBlock {\r\n    fromBuffer(inputBuffer) {\r\n        this.valueBlock.valueHexView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n        try {\r\n            this.valueBlock.value = pvtsutils__namespace.Convert.ToUtf8String(inputBuffer);\r\n        }\r\n        catch (ex) {\r\n            this.warnings.push(`Error during \"decodeURIComponent\": ${ex}, using raw string`);\r\n            this.valueBlock.value = pvtsutils__namespace.Convert.ToBinary(inputBuffer);\r\n        }\r\n    }\r\n    fromString(inputString) {\r\n        this.valueBlock.valueHexView = new Uint8Array(pvtsutils__namespace.Convert.FromUtf8String(inputString));\r\n        this.valueBlock.value = inputString;\r\n    }\r\n}\r\nLocalUtf8StringValueBlock.NAME = \"Utf8StringValueBlock\";\n\nvar _a$i;\r\nclass Utf8String extends LocalUtf8StringValueBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 12;\r\n    }\r\n}\r\n_a$i = Utf8String;\r\n(() => {\r\n    typeStore.Utf8String = _a$i;\r\n})();\r\nUtf8String.NAME = \"UTF8String\";\n\nclass LocalBmpStringValueBlock extends LocalSimpleStringBlock {\r\n    fromBuffer(inputBuffer) {\r\n        this.valueBlock.value = pvtsutils__namespace.Convert.ToUtf16String(inputBuffer);\r\n        this.valueBlock.valueHexView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer);\r\n    }\r\n    fromString(inputString) {\r\n        this.valueBlock.value = inputString;\r\n        this.valueBlock.valueHexView = new Uint8Array(pvtsutils__namespace.Convert.FromUtf16String(inputString));\r\n    }\r\n}\r\nLocalBmpStringValueBlock.NAME = \"BmpStringValueBlock\";\n\nvar _a$h;\r\nclass BmpString extends LocalBmpStringValueBlock {\r\n    constructor({ ...parameters } = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 30;\r\n    }\r\n}\r\n_a$h = BmpString;\r\n(() => {\r\n    typeStore.BmpString = _a$h;\r\n})();\r\nBmpString.NAME = \"BMPString\";\n\nclass LocalUniversalStringValueBlock extends LocalSimpleStringBlock {\r\n    fromBuffer(inputBuffer) {\r\n        const copyBuffer = ArrayBuffer.isView(inputBuffer) ? inputBuffer.slice().buffer : inputBuffer.slice(0);\r\n        const valueView = new Uint8Array(copyBuffer);\r\n        for (let i = 0; i < valueView.length; i += 4) {\r\n            valueView[i] = valueView[i + 3];\r\n            valueView[i + 1] = valueView[i + 2];\r\n            valueView[i + 2] = 0x00;\r\n            valueView[i + 3] = 0x00;\r\n        }\r\n        this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer));\r\n    }\r\n    fromString(inputString) {\r\n        const strLength = inputString.length;\r\n        const valueHexView = this.valueBlock.valueHexView = new Uint8Array(strLength * 4);\r\n        for (let i = 0; i < strLength; i++) {\r\n            const codeBuf = pvutils__namespace.utilToBase(inputString.charCodeAt(i), 8);\r\n            const codeView = new Uint8Array(codeBuf);\r\n            if (codeView.length > 4)\r\n                continue;\r\n            const dif = 4 - codeView.length;\r\n            for (let j = (codeView.length - 1); j >= 0; j--)\r\n                valueHexView[i * 4 + j + dif] = codeView[j];\r\n        }\r\n        this.valueBlock.value = inputString;\r\n    }\r\n}\r\nLocalUniversalStringValueBlock.NAME = \"UniversalStringValueBlock\";\n\nvar _a$g;\r\nclass UniversalString extends LocalUniversalStringValueBlock {\r\n    constructor({ ...parameters } = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 28;\r\n    }\r\n}\r\n_a$g = UniversalString;\r\n(() => {\r\n    typeStore.UniversalString = _a$g;\r\n})();\r\nUniversalString.NAME = \"UniversalString\";\n\nvar _a$f;\r\nclass NumericString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 18;\r\n    }\r\n}\r\n_a$f = NumericString;\r\n(() => {\r\n    typeStore.NumericString = _a$f;\r\n})();\r\nNumericString.NAME = \"NumericString\";\n\nvar _a$e;\r\nclass PrintableString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 19;\r\n    }\r\n}\r\n_a$e = PrintableString;\r\n(() => {\r\n    typeStore.PrintableString = _a$e;\r\n})();\r\nPrintableString.NAME = \"PrintableString\";\n\nvar _a$d;\r\nclass TeletexString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 20;\r\n    }\r\n}\r\n_a$d = TeletexString;\r\n(() => {\r\n    typeStore.TeletexString = _a$d;\r\n})();\r\nTeletexString.NAME = \"TeletexString\";\n\nvar _a$c;\r\nclass VideotexString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 21;\r\n    }\r\n}\r\n_a$c = VideotexString;\r\n(() => {\r\n    typeStore.VideotexString = _a$c;\r\n})();\r\nVideotexString.NAME = \"VideotexString\";\n\nvar _a$b;\r\nclass IA5String extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 22;\r\n    }\r\n}\r\n_a$b = IA5String;\r\n(() => {\r\n    typeStore.IA5String = _a$b;\r\n})();\r\nIA5String.NAME = \"IA5String\";\n\nvar _a$a;\r\nclass GraphicString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 25;\r\n    }\r\n}\r\n_a$a = GraphicString;\r\n(() => {\r\n    typeStore.GraphicString = _a$a;\r\n})();\r\nGraphicString.NAME = \"GraphicString\";\n\nvar _a$9;\r\nclass VisibleString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 26;\r\n    }\r\n}\r\n_a$9 = VisibleString;\r\n(() => {\r\n    typeStore.VisibleString = _a$9;\r\n})();\r\nVisibleString.NAME = \"VisibleString\";\n\nvar _a$8;\r\nclass GeneralString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 27;\r\n    }\r\n}\r\n_a$8 = GeneralString;\r\n(() => {\r\n    typeStore.GeneralString = _a$8;\r\n})();\r\nGeneralString.NAME = \"GeneralString\";\n\nvar _a$7;\r\nclass CharacterString extends LocalSimpleStringBlock {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 29;\r\n    }\r\n}\r\n_a$7 = CharacterString;\r\n(() => {\r\n    typeStore.CharacterString = _a$7;\r\n})();\r\nCharacterString.NAME = \"CharacterString\";\n\nvar _a$6;\r\nclass UTCTime extends VisibleString {\r\n    constructor({ value, valueDate, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.year = 0;\r\n        this.month = 0;\r\n        this.day = 0;\r\n        this.hour = 0;\r\n        this.minute = 0;\r\n        this.second = 0;\r\n        if (value) {\r\n            this.fromString(value);\r\n            this.valueBlock.valueHexView = new Uint8Array(value.length);\r\n            for (let i = 0; i < value.length; i++)\r\n                this.valueBlock.valueHexView[i] = value.charCodeAt(i);\r\n        }\r\n        if (valueDate) {\r\n            this.fromDate(valueDate);\r\n            this.valueBlock.valueHexView = new Uint8Array(this.toBuffer());\r\n        }\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 23;\r\n    }\r\n    fromBuffer(inputBuffer) {\r\n        this.fromString(String.fromCharCode.apply(null, pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer)));\r\n    }\r\n    toBuffer() {\r\n        const str = this.toString();\r\n        const buffer = new ArrayBuffer(str.length);\r\n        const view = new Uint8Array(buffer);\r\n        for (let i = 0; i < str.length; i++)\r\n            view[i] = str.charCodeAt(i);\r\n        return buffer;\r\n    }\r\n    fromDate(inputDate) {\r\n        this.year = inputDate.getUTCFullYear();\r\n        this.month = inputDate.getUTCMonth() + 1;\r\n        this.day = inputDate.getUTCDate();\r\n        this.hour = inputDate.getUTCHours();\r\n        this.minute = inputDate.getUTCMinutes();\r\n        this.second = inputDate.getUTCSeconds();\r\n    }\r\n    toDate() {\r\n        return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)));\r\n    }\r\n    fromString(inputString) {\r\n        const parser = /(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})Z/ig;\r\n        const parserArray = parser.exec(inputString);\r\n        if (parserArray === null) {\r\n            this.error = \"Wrong input string for conversion\";\r\n            return;\r\n        }\r\n        const year = parseInt(parserArray[1], 10);\r\n        if (year >= 50)\r\n            this.year = 1900 + year;\r\n        else\r\n            this.year = 2000 + year;\r\n        this.month = parseInt(parserArray[2], 10);\r\n        this.day = parseInt(parserArray[3], 10);\r\n        this.hour = parseInt(parserArray[4], 10);\r\n        this.minute = parseInt(parserArray[5], 10);\r\n        this.second = parseInt(parserArray[6], 10);\r\n    }\r\n    toString(encoding = \"iso\") {\r\n        if (encoding === \"iso\") {\r\n            const outputArray = new Array(7);\r\n            outputArray[0] = pvutils__namespace.padNumber(((this.year < 2000) ? (this.year - 1900) : (this.year - 2000)), 2);\r\n            outputArray[1] = pvutils__namespace.padNumber(this.month, 2);\r\n            outputArray[2] = pvutils__namespace.padNumber(this.day, 2);\r\n            outputArray[3] = pvutils__namespace.padNumber(this.hour, 2);\r\n            outputArray[4] = pvutils__namespace.padNumber(this.minute, 2);\r\n            outputArray[5] = pvutils__namespace.padNumber(this.second, 2);\r\n            outputArray[6] = \"Z\";\r\n            return outputArray.join(\"\");\r\n        }\r\n        return super.toString(encoding);\r\n    }\r\n    onAsciiEncoding() {\r\n        return `${this.constructor.NAME} : ${this.toDate().toISOString()}`;\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            year: this.year,\r\n            month: this.month,\r\n            day: this.day,\r\n            hour: this.hour,\r\n            minute: this.minute,\r\n            second: this.second,\r\n        };\r\n    }\r\n}\r\n_a$6 = UTCTime;\r\n(() => {\r\n    typeStore.UTCTime = _a$6;\r\n})();\r\nUTCTime.NAME = \"UTCTime\";\n\nvar _a$5;\r\nclass GeneralizedTime extends UTCTime {\r\n    constructor(parameters = {}) {\r\n        var _b;\r\n        super(parameters);\r\n        (_b = this.millisecond) !== null && _b !== void 0 ? _b : (this.millisecond = 0);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 24;\r\n    }\r\n    fromDate(inputDate) {\r\n        super.fromDate(inputDate);\r\n        this.millisecond = inputDate.getUTCMilliseconds();\r\n    }\r\n    toDate() {\r\n        return (new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)));\r\n    }\r\n    fromString(inputString) {\r\n        let isUTC = false;\r\n        let timeString = \"\";\r\n        let dateTimeString = \"\";\r\n        let fractionPart = 0;\r\n        let parser;\r\n        let hourDifference = 0;\r\n        let minuteDifference = 0;\r\n        if (inputString[inputString.length - 1] === \"Z\") {\r\n            timeString = inputString.substring(0, inputString.length - 1);\r\n            isUTC = true;\r\n        }\r\n        else {\r\n            const number = new Number(inputString[inputString.length - 1]);\r\n            if (isNaN(number.valueOf()))\r\n                throw new Error(\"Wrong input string for conversion\");\r\n            timeString = inputString;\r\n        }\r\n        if (isUTC) {\r\n            if (timeString.indexOf(\"+\") !== -1)\r\n                throw new Error(\"Wrong input string for conversion\");\r\n            if (timeString.indexOf(\"-\") !== -1)\r\n                throw new Error(\"Wrong input string for conversion\");\r\n        }\r\n        else {\r\n            let multiplier = 1;\r\n            let differencePosition = timeString.indexOf(\"+\");\r\n            let differenceString = \"\";\r\n            if (differencePosition === -1) {\r\n                differencePosition = timeString.indexOf(\"-\");\r\n                multiplier = -1;\r\n            }\r\n            if (differencePosition !== -1) {\r\n                differenceString = timeString.substring(differencePosition + 1);\r\n                timeString = timeString.substring(0, differencePosition);\r\n                if ((differenceString.length !== 2) && (differenceString.length !== 4))\r\n                    throw new Error(\"Wrong input string for conversion\");\r\n                let number = parseInt(differenceString.substring(0, 2), 10);\r\n                if (isNaN(number.valueOf()))\r\n                    throw new Error(\"Wrong input string for conversion\");\r\n                hourDifference = multiplier * number;\r\n                if (differenceString.length === 4) {\r\n                    number = parseInt(differenceString.substring(2, 4), 10);\r\n                    if (isNaN(number.valueOf()))\r\n                        throw new Error(\"Wrong input string for conversion\");\r\n                    minuteDifference = multiplier * number;\r\n                }\r\n            }\r\n        }\r\n        let fractionPointPosition = timeString.indexOf(\".\");\r\n        if (fractionPointPosition === -1)\r\n            fractionPointPosition = timeString.indexOf(\",\");\r\n        if (fractionPointPosition !== -1) {\r\n            const fractionPartCheck = new Number(`0${timeString.substring(fractionPointPosition)}`);\r\n            if (isNaN(fractionPartCheck.valueOf()))\r\n                throw new Error(\"Wrong input string for conversion\");\r\n            fractionPart = fractionPartCheck.valueOf();\r\n            dateTimeString = timeString.substring(0, fractionPointPosition);\r\n        }\r\n        else\r\n            dateTimeString = timeString;\r\n        switch (true) {\r\n            case (dateTimeString.length === 8):\r\n                parser = /(\\d{4})(\\d{2})(\\d{2})/ig;\r\n                if (fractionPointPosition !== -1)\r\n                    throw new Error(\"Wrong input string for conversion\");\r\n                break;\r\n            case (dateTimeString.length === 10):\r\n                parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n                if (fractionPointPosition !== -1) {\r\n                    let fractionResult = 60 * fractionPart;\r\n                    this.minute = Math.floor(fractionResult);\r\n                    fractionResult = 60 * (fractionResult - this.minute);\r\n                    this.second = Math.floor(fractionResult);\r\n                    fractionResult = 1000 * (fractionResult - this.second);\r\n                    this.millisecond = Math.floor(fractionResult);\r\n                }\r\n                break;\r\n            case (dateTimeString.length === 12):\r\n                parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n                if (fractionPointPosition !== -1) {\r\n                    let fractionResult = 60 * fractionPart;\r\n                    this.second = Math.floor(fractionResult);\r\n                    fractionResult = 1000 * (fractionResult - this.second);\r\n                    this.millisecond = Math.floor(fractionResult);\r\n                }\r\n                break;\r\n            case (dateTimeString.length === 14):\r\n                parser = /(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})/ig;\r\n                if (fractionPointPosition !== -1) {\r\n                    const fractionResult = 1000 * fractionPart;\r\n                    this.millisecond = Math.floor(fractionResult);\r\n                }\r\n                break;\r\n            default:\r\n                throw new Error(\"Wrong input string for conversion\");\r\n        }\r\n        const parserArray = parser.exec(dateTimeString);\r\n        if (parserArray === null)\r\n            throw new Error(\"Wrong input string for conversion\");\r\n        for (let j = 1; j < parserArray.length; j++) {\r\n            switch (j) {\r\n                case 1:\r\n                    this.year = parseInt(parserArray[j], 10);\r\n                    break;\r\n                case 2:\r\n                    this.month = parseInt(parserArray[j], 10);\r\n                    break;\r\n                case 3:\r\n                    this.day = parseInt(parserArray[j], 10);\r\n                    break;\r\n                case 4:\r\n                    this.hour = parseInt(parserArray[j], 10) + hourDifference;\r\n                    break;\r\n                case 5:\r\n                    this.minute = parseInt(parserArray[j], 10) + minuteDifference;\r\n                    break;\r\n                case 6:\r\n                    this.second = parseInt(parserArray[j], 10);\r\n                    break;\r\n                default:\r\n                    throw new Error(\"Wrong input string for conversion\");\r\n            }\r\n        }\r\n        if (isUTC === false) {\r\n            const tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond);\r\n            this.year = tempDate.getUTCFullYear();\r\n            this.month = tempDate.getUTCMonth();\r\n            this.day = tempDate.getUTCDay();\r\n            this.hour = tempDate.getUTCHours();\r\n            this.minute = tempDate.getUTCMinutes();\r\n            this.second = tempDate.getUTCSeconds();\r\n            this.millisecond = tempDate.getUTCMilliseconds();\r\n        }\r\n    }\r\n    toString(encoding = \"iso\") {\r\n        if (encoding === \"iso\") {\r\n            const outputArray = [];\r\n            outputArray.push(pvutils__namespace.padNumber(this.year, 4));\r\n            outputArray.push(pvutils__namespace.padNumber(this.month, 2));\r\n            outputArray.push(pvutils__namespace.padNumber(this.day, 2));\r\n            outputArray.push(pvutils__namespace.padNumber(this.hour, 2));\r\n            outputArray.push(pvutils__namespace.padNumber(this.minute, 2));\r\n            outputArray.push(pvutils__namespace.padNumber(this.second, 2));\r\n            if (this.millisecond !== 0) {\r\n                outputArray.push(\".\");\r\n                outputArray.push(pvutils__namespace.padNumber(this.millisecond, 3));\r\n            }\r\n            outputArray.push(\"Z\");\r\n            return outputArray.join(\"\");\r\n        }\r\n        return super.toString(encoding);\r\n    }\r\n    toJSON() {\r\n        return {\r\n            ...super.toJSON(),\r\n            millisecond: this.millisecond,\r\n        };\r\n    }\r\n}\r\n_a$5 = GeneralizedTime;\r\n(() => {\r\n    typeStore.GeneralizedTime = _a$5;\r\n})();\r\nGeneralizedTime.NAME = \"GeneralizedTime\";\n\nvar _a$4;\r\nclass DATE extends Utf8String {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 31;\r\n    }\r\n}\r\n_a$4 = DATE;\r\n(() => {\r\n    typeStore.DATE = _a$4;\r\n})();\r\nDATE.NAME = \"DATE\";\n\nvar _a$3;\r\nclass TimeOfDay extends Utf8String {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 32;\r\n    }\r\n}\r\n_a$3 = TimeOfDay;\r\n(() => {\r\n    typeStore.TimeOfDay = _a$3;\r\n})();\r\nTimeOfDay.NAME = \"TimeOfDay\";\n\nvar _a$2;\r\nclass DateTime extends Utf8String {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 33;\r\n    }\r\n}\r\n_a$2 = DateTime;\r\n(() => {\r\n    typeStore.DateTime = _a$2;\r\n})();\r\nDateTime.NAME = \"DateTime\";\n\nvar _a$1;\r\nclass Duration extends Utf8String {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 34;\r\n    }\r\n}\r\n_a$1 = Duration;\r\n(() => {\r\n    typeStore.Duration = _a$1;\r\n})();\r\nDuration.NAME = \"Duration\";\n\nvar _a;\r\nclass TIME extends Utf8String {\r\n    constructor(parameters = {}) {\r\n        super(parameters);\r\n        this.idBlock.tagClass = 1;\r\n        this.idBlock.tagNumber = 14;\r\n    }\r\n}\r\n_a = TIME;\r\n(() => {\r\n    typeStore.TIME = _a;\r\n})();\r\nTIME.NAME = \"TIME\";\n\nclass Any {\r\n    constructor({ name = EMPTY_STRING, optional = false, } = {}) {\r\n        this.name = name;\r\n        this.optional = optional;\r\n    }\r\n}\n\nclass Choice extends Any {\r\n    constructor({ value = [], ...parameters } = {}) {\r\n        super(parameters);\r\n        this.value = value;\r\n    }\r\n}\n\nclass Repeated extends Any {\r\n    constructor({ value = new Any(), local = false, ...parameters } = {}) {\r\n        super(parameters);\r\n        this.value = value;\r\n        this.local = local;\r\n    }\r\n}\n\nclass RawData {\r\n    constructor({ data = EMPTY_VIEW } = {}) {\r\n        this.dataView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(data);\r\n    }\r\n    get data() {\r\n        return this.dataView.slice().buffer;\r\n    }\r\n    set data(value) {\r\n        this.dataView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(value);\r\n    }\r\n    fromBER(inputBuffer, inputOffset, inputLength) {\r\n        const endLength = inputOffset + inputLength;\r\n        this.dataView = pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer).subarray(inputOffset, endLength);\r\n        return endLength;\r\n    }\r\n    toBER(sizeOnly) {\r\n        return this.dataView.slice().buffer;\r\n    }\r\n}\n\nfunction compareSchema(root, inputData, inputSchema) {\r\n    if (inputSchema instanceof Choice) {\r\n        for (let j = 0; j < inputSchema.value.length; j++) {\r\n            const result = compareSchema(root, inputData, inputSchema.value[j]);\r\n            if (result.verified) {\r\n                return {\r\n                    verified: true,\r\n                    result: root\r\n                };\r\n            }\r\n        }\r\n        {\r\n            const _result = {\r\n                verified: false,\r\n                result: {\r\n                    error: \"Wrong values for Choice type\"\r\n                },\r\n            };\r\n            if (inputSchema.hasOwnProperty(NAME))\r\n                _result.name = inputSchema.name;\r\n            return _result;\r\n        }\r\n    }\r\n    if (inputSchema instanceof Any) {\r\n        if (inputSchema.hasOwnProperty(NAME))\r\n            root[inputSchema.name] = inputData;\r\n        return {\r\n            verified: true,\r\n            result: root\r\n        };\r\n    }\r\n    if ((root instanceof Object) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong root object\" }\r\n        };\r\n    }\r\n    if ((inputData instanceof Object) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 data\" }\r\n        };\r\n    }\r\n    if ((inputSchema instanceof Object) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if ((ID_BLOCK in inputSchema) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if ((FROM_BER in inputSchema.idBlock) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if ((TO_BER in inputSchema.idBlock) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    const encodedId = inputSchema.idBlock.toBER(false);\r\n    if (encodedId.byteLength === 0) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Error encoding idBlock for ASN.1 schema\" }\r\n        };\r\n    }\r\n    const decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength);\r\n    if (decodedOffset === -1) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Error decoding idBlock for ASN.1 schema\" }\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.hasOwnProperty(TAG_CLASS) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) {\r\n        return {\r\n            verified: false,\r\n            result: root\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.hasOwnProperty(TAG_NUMBER) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) {\r\n        return {\r\n            verified: false,\r\n            result: root\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.hasOwnProperty(IS_CONSTRUCTED) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) {\r\n        return {\r\n            verified: false,\r\n            result: root\r\n        };\r\n    }\r\n    if (!(IS_HEX_ONLY in inputSchema.idBlock)) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema\" }\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) {\r\n        return {\r\n            verified: false,\r\n            result: root\r\n        };\r\n    }\r\n    if (inputSchema.idBlock.isHexOnly) {\r\n        if ((VALUE_HEX_VIEW in inputSchema.idBlock) === false) {\r\n            return {\r\n                verified: false,\r\n                result: { error: \"Wrong ASN.1 schema\" }\r\n            };\r\n        }\r\n        const schemaView = inputSchema.idBlock.valueHexView;\r\n        const asn1View = inputData.idBlock.valueHexView;\r\n        if (schemaView.length !== asn1View.length) {\r\n            return {\r\n                verified: false,\r\n                result: root\r\n            };\r\n        }\r\n        for (let i = 0; i < schemaView.length; i++) {\r\n            if (schemaView[i] !== asn1View[1]) {\r\n                return {\r\n                    verified: false,\r\n                    result: root\r\n                };\r\n            }\r\n        }\r\n    }\r\n    if (inputSchema.name) {\r\n        inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n        if (inputSchema.name)\r\n            root[inputSchema.name] = inputData;\r\n    }\r\n    if (inputSchema instanceof typeStore.Constructed) {\r\n        let admission = 0;\r\n        let result = {\r\n            verified: false,\r\n            result: {\r\n                error: \"Unknown error\",\r\n            }\r\n        };\r\n        let maxLength = inputSchema.valueBlock.value.length;\r\n        if (maxLength > 0) {\r\n            if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n                maxLength = inputData.valueBlock.value.length;\r\n            }\r\n        }\r\n        if (maxLength === 0) {\r\n            return {\r\n                verified: true,\r\n                result: root\r\n            };\r\n        }\r\n        if ((inputData.valueBlock.value.length === 0) &&\r\n            (inputSchema.valueBlock.value.length !== 0)) {\r\n            let _optional = true;\r\n            for (let i = 0; i < inputSchema.valueBlock.value.length; i++)\r\n                _optional = _optional && (inputSchema.valueBlock.value[i].optional || false);\r\n            if (_optional) {\r\n                return {\r\n                    verified: true,\r\n                    result: root\r\n                };\r\n            }\r\n            if (inputSchema.name) {\r\n                inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n                if (inputSchema.name)\r\n                    delete root[inputSchema.name];\r\n            }\r\n            root.error = \"Inconsistent object length\";\r\n            return {\r\n                verified: false,\r\n                result: root\r\n            };\r\n        }\r\n        for (let i = 0; i < maxLength; i++) {\r\n            if ((i - admission) >= inputData.valueBlock.value.length) {\r\n                if (inputSchema.valueBlock.value[i].optional === false) {\r\n                    const _result = {\r\n                        verified: false,\r\n                        result: root\r\n                    };\r\n                    root.error = \"Inconsistent length between ASN.1 data and schema\";\r\n                    if (inputSchema.name) {\r\n                        inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n                        if (inputSchema.name) {\r\n                            delete root[inputSchema.name];\r\n                            _result.name = inputSchema.name;\r\n                        }\r\n                    }\r\n                    return _result;\r\n                }\r\n            }\r\n            else {\r\n                if (inputSchema.valueBlock.value[0] instanceof Repeated) {\r\n                    result = compareSchema(root, inputData.valueBlock.value[i], inputSchema.valueBlock.value[0].value);\r\n                    if (result.verified === false) {\r\n                        if (inputSchema.valueBlock.value[0].optional)\r\n                            admission++;\r\n                        else {\r\n                            if (inputSchema.name) {\r\n                                inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n                                if (inputSchema.name)\r\n                                    delete root[inputSchema.name];\r\n                            }\r\n                            return result;\r\n                        }\r\n                    }\r\n                    if ((NAME in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].name.length > 0)) {\r\n                        let arrayRoot = {};\r\n                        if ((LOCAL in inputSchema.valueBlock.value[0]) && (inputSchema.valueBlock.value[0].local))\r\n                            arrayRoot = inputData;\r\n                        else\r\n                            arrayRoot = root;\r\n                        if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === \"undefined\")\r\n                            arrayRoot[inputSchema.valueBlock.value[0].name] = [];\r\n                        arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[i]);\r\n                    }\r\n                }\r\n                else {\r\n                    result = compareSchema(root, inputData.valueBlock.value[i - admission], inputSchema.valueBlock.value[i]);\r\n                    if (result.verified === false) {\r\n                        if (inputSchema.valueBlock.value[i].optional)\r\n                            admission++;\r\n                        else {\r\n                            if (inputSchema.name) {\r\n                                inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n                                if (inputSchema.name)\r\n                                    delete root[inputSchema.name];\r\n                            }\r\n                            return result;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (result.verified === false) {\r\n            const _result = {\r\n                verified: false,\r\n                result: root\r\n            };\r\n            if (inputSchema.name) {\r\n                inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n                if (inputSchema.name) {\r\n                    delete root[inputSchema.name];\r\n                    _result.name = inputSchema.name;\r\n                }\r\n            }\r\n            return _result;\r\n        }\r\n        return {\r\n            verified: true,\r\n            result: root\r\n        };\r\n    }\r\n    if (inputSchema.primitiveSchema &&\r\n        (VALUE_HEX_VIEW in inputData.valueBlock)) {\r\n        const asn1 = localFromBER(inputData.valueBlock.valueHexView);\r\n        if (asn1.offset === -1) {\r\n            const _result = {\r\n                verified: false,\r\n                result: asn1.result\r\n            };\r\n            if (inputSchema.name) {\r\n                inputSchema.name = inputSchema.name.replace(/^\\s+|\\s+$/g, EMPTY_STRING);\r\n                if (inputSchema.name) {\r\n                    delete root[inputSchema.name];\r\n                    _result.name = inputSchema.name;\r\n                }\r\n            }\r\n            return _result;\r\n        }\r\n        return compareSchema(root, asn1.result, inputSchema.primitiveSchema);\r\n    }\r\n    return {\r\n        verified: true,\r\n        result: root\r\n    };\r\n}\r\nfunction verifySchema(inputBuffer, inputSchema) {\r\n    if ((inputSchema instanceof Object) === false) {\r\n        return {\r\n            verified: false,\r\n            result: { error: \"Wrong ASN.1 schema type\" }\r\n        };\r\n    }\r\n    const asn1 = localFromBER(pvtsutils__namespace.BufferSourceConverter.toUint8Array(inputBuffer));\r\n    if (asn1.offset === -1) {\r\n        return {\r\n            verified: false,\r\n            result: asn1.result\r\n        };\r\n    }\r\n    return compareSchema(asn1.result, asn1.result, inputSchema);\r\n}\n\nexports.Any = Any;\nexports.BaseBlock = BaseBlock;\nexports.BaseStringBlock = BaseStringBlock;\nexports.BitString = BitString;\nexports.BmpString = BmpString;\nexports.Boolean = Boolean;\nexports.CharacterString = CharacterString;\nexports.Choice = Choice;\nexports.Constructed = Constructed;\nexports.DATE = DATE;\nexports.DateTime = DateTime;\nexports.Duration = Duration;\nexports.EndOfContent = EndOfContent;\nexports.Enumerated = Enumerated;\nexports.GeneralString = GeneralString;\nexports.GeneralizedTime = GeneralizedTime;\nexports.GraphicString = GraphicString;\nexports.HexBlock = HexBlock;\nexports.IA5String = IA5String;\nexports.Integer = Integer;\nexports.Null = Null;\nexports.NumericString = NumericString;\nexports.ObjectIdentifier = ObjectIdentifier;\nexports.OctetString = OctetString;\nexports.Primitive = Primitive;\nexports.PrintableString = PrintableString;\nexports.RawData = RawData;\nexports.RelativeObjectIdentifier = RelativeObjectIdentifier;\nexports.Repeated = Repeated;\nexports.Sequence = Sequence;\nexports.Set = Set;\nexports.TIME = TIME;\nexports.TeletexString = TeletexString;\nexports.TimeOfDay = TimeOfDay;\nexports.UTCTime = UTCTime;\nexports.UniversalString = UniversalString;\nexports.Utf8String = Utf8String;\nexports.ValueBlock = ValueBlock;\nexports.VideotexString = VideotexString;\nexports.ViewWriter = ViewWriter;\nexports.VisibleString = VisibleString;\nexports.compareSchema = compareSchema;\nexports.fromBER = fromBER;\nexports.verifySchema = verifySchema;\n", "export {Buffer} from \"buffer\"\nexport * from \"./blocklock\"\nexport * from \"./ethers-utils\"\nexport * from \"./solidity-encoder\"\nexport * from \"./solidity-decoder\"\n", "\n\n/////////////////////////////\n//\n\nexport { version } from \"./_version.js\";\n\nexport {\n    decodeBytes32String, encodeBytes32String,\n\n    AbiCoder,\n    ConstructorFragment, ErrorFragment, EventFragment, Fragment, FallbackFragment, FunctionFragment, NamedFragment, ParamType, StructFragment,\n\n    checkResultErrors, ErrorDescription, Indexed, Interface, LogDescription, Result, TransactionDescription,\n    Typed,\n} from \"./abi/index.js\";\n\nexport {\n    getAddress, getIcapAddress,\n    getCreateAddress, getCreate2Address,\n    isAddressable, isAddress, resolveAddress\n} from \"./address/index.js\";\n\nexport {\n    ZeroAddress,\n    WeiPerEther, MaxUint256, MinInt256, MaxInt256, N,\n    ZeroHash,\n    EtherSymbol, MessagePrefix\n} from \"./constants/index.js\";\n\nexport {\n    BaseContract, Contract,\n    ContractFactory,\n    ContractEventPayload, ContractTransactionReceipt, ContractTransactionResponse, ContractUnknownEventPayload, EventLog, UndecodedEventLog\n} from \"./contract/index.js\";\n\nexport {\n    computeHmac,\n    randomBytes,\n    keccak256,\n    ripemd160,\n    sha256, sha512,\n    pbkdf2,\n    scrypt, scryptSync,\n    lock,\n    Signature, SigningKey\n} from \"./crypto/index.js\";\n\nexport {\n    id,\n    ensNormalize, isValidName, namehash, dnsEncode,\n    hashMessage, verifyMessage,\n    solidityPacked, solidityPackedKeccak256, solidityPackedSha256,\n    TypedDataEncoder,\n    verifyTypedData\n} from \"./hash/index.js\";\n\nexport {\n    getDefaultProvider,\n\n    Block, FeeData, Log, TransactionReceipt, TransactionResponse,\n\n    AbstractSigner, NonceManager, VoidSigner,\n\n    AbstractProvider,\n\n    FallbackProvider,\n    JsonRpcApiProvider, JsonRpcProvider, JsonRpcSigner,\n\n    BrowserProvider,\n\n    AlchemyProvider, AnkrProvider, ChainstackProvider, CloudflareProvider,\n    EtherscanProvider, InfuraProvider, InfuraWebSocketProvider, PocketProvider,\n    QuickNodeProvider,\n\n    IpcSocketProvider, SocketProvider, WebSocketProvider,\n\n    EnsResolver,\n    Network,\n\n    EnsPlugin, EtherscanPlugin,\n    FeeDataNetworkPlugin, FetchUrlFeeDataNetworkPlugin,\n    GasCostPlugin, NetworkPlugin, MulticoinProviderPlugin,\n\n    SocketBlockSubscriber, SocketEventSubscriber, SocketPendingSubscriber,\n    SocketSubscriber, UnmanagedSubscriber,\n\n    copyRequest, showThrottleMessage\n} from \"./providers/index.js\";\n\nexport {\n    accessListify,\n    computeAddress, recoverAddress,\n    Transaction\n} from \"./transaction/index.js\";\n\nexport {\n    decodeBase58, encodeBase58,\n    decodeBase64, encodeBase64,\n    concat, dataLength, dataSlice, getBytes, getBytesCopy, hexlify,\n    isHexString, isBytesLike, stripZerosLeft, zeroPadBytes, zeroPadValue,\n    defineProperties, resolveProperties,\n    assert, assertArgument, assertArgumentCount, assertNormalize, assertPrivate,\n    makeError,\n    isCallException, isError,\n    EventPayload,\n    FetchRequest, FetchResponse, FetchCancelSignal,\n    FixedNumber,\n    getBigInt, getNumber, getUint, toBeArray, toBigInt, toBeHex, toNumber, toQuantity,\n    fromTwos, toTwos, mask,\n    formatEther, parseEther, formatUnits, parseUnits,\n    toUtf8Bytes, toUtf8CodePoints, toUtf8String,\n    Utf8ErrorFuncs,\n    decodeRlp, encodeRlp,\n    uuidV4,\n} from \"./utils/index.js\";\n\nexport {\n    Mnemonic,\n    BaseWallet, HDNodeWallet, HDNodeVoidWallet,\n    Wallet,\n\n    defaultPath,\n\n    getAccountPath, getIndexedAccountPath,\n    isCrowdsaleJson, isKeystoreJson,\n\n    decryptCrowdsaleJson, decryptKeystoreJsonSync, decryptKeystoreJson,\n    encryptKeystoreJson, encryptKeystoreJsonSync,\n} from \"./wallet/index.js\";\n\nexport {\n    Wordlist, LangEn, WordlistOwl, WordlistOwlA, wordlists\n} from \"./wordlists/index.js\";\n\n\n\n/////////////////////////////\n// Types\n\nexport type {\n    JsonFragment, JsonFragmentType,\n    FormatType, FragmentType,\n    InterfaceAbi,\n    ParamTypeWalkFunc, ParamTypeWalkAsyncFunc\n} from \"./abi/index.js\";\n\nexport type {\n    Addressable, AddressLike, NameResolver\n} from \"./address/index.js\";\n\nexport type {\n    ConstantContractMethod, ContractEvent, ContractEventArgs, ContractEventName,\n    ContractInterface, ContractMethod, ContractMethodArgs, ContractTransaction,\n    DeferredTopicFilter, Overrides,\n    BaseContractMethod, ContractDeployTransaction, PostfixOverrides,\n    WrappedFallback\n} from \"./contract/index.js\";\n\nexport type { ProgressCallback, SignatureLike } from \"./crypto/index.js\";\n\nexport type { TypedDataDomain, TypedDataField } from \"./hash/index.js\";\n\nexport type {\n    Provider, Signer,\n\n    AbstractProviderOptions, BrowserProviderOptions, FallbackProviderOptions,\n\n    AbstractProviderPlugin, BlockParams, BlockTag, ContractRunner, DebugEventBrowserProvider,\n    Eip1193Provider, EventFilter, Filter, FilterByBlockHash, GasCostParameters,\n    JsonRpcApiProviderOptions, JsonRpcError, JsonRpcPayload, JsonRpcResult,\n    JsonRpcTransactionRequest, LogParams, MinedBlock, MinedTransactionResponse, Networkish,\n    OrphanFilter, PerformActionFilter, PerformActionRequest, PerformActionTransaction,\n    PreparedTransactionRequest, ProviderEvent, Subscriber, Subscription, TopicFilter,\n    TransactionReceiptParams, TransactionRequest, TransactionResponseParams,\n    WebSocketCreator, WebSocketLike\n} from \"./providers/index.js\";\n\nexport type {\n    AccessList, AccessListish, AccessListEntry,\n    Blob, BlobLike, KzgLibrary,\n    TransactionLike\n} from \"./transaction/index.js\";\n\nexport type {\n    BytesLike,\n    BigNumberish, Numeric,\n    ErrorCode,\n    FixedFormat,\n    Utf8ErrorFunc, UnicodeNormalizationForm, Utf8ErrorReason,\n    RlpStructuredData, RlpStructuredDataish,\n\n    GetUrlResponse,\n    FetchPreflightFunc, FetchProcessFunc, FetchRetryFunc,\n    FetchGatewayFunc, FetchGetUrlFunc,\n\n    EthersError, UnknownError, NotImplementedError, UnsupportedOperationError, NetworkError,\n    ServerError, TimeoutError, BadDataError, CancelledError, BufferOverrunError,\n    NumericFaultError, InvalidArgumentError, MissingArgumentError, UnexpectedArgumentError,\n    CallExceptionError, InsufficientFundsError, NonceExpiredError, OffchainFaultError,\n    ReplacementUnderpricedError, TransactionReplacedError, UnconfiguredNameError,\n    ActionRejectedError,\n    CodedEthersError,\n\n    CallExceptionAction, CallExceptionTransaction,\n    EventEmitterable, Listener\n} from \"./utils/index.js\";\n\nexport type {\n    CrowdsaleAccount, KeystoreAccount, EncryptOptions\n} from \"./wallet/index.js\";\n\n// dummy change; to pick-up ws security issue changes\n", "/* Do NOT modify this file; see /src.ts/_admin/update-version.ts */\n\n/**\n *  The current version of Ethers.\n */\nexport const version: string = \"6.13.4\";\n", "/**\n *  Property helper functions.\n *\n *  @_subsection api/utils:Properties  [about-properties]\n */\n\nfunction checkType(value: any, type: string, name: string): void {\n    const types = type.split(\"|\").map(t => t.trim());\n    for (let i = 0; i < types.length; i++) {\n        switch (type) {\n            case \"any\":\n                return;\n            case \"bigint\":\n            case \"boolean\":\n            case \"number\":\n            case \"string\":\n                if (typeof(value) === type) { return; }\n        }\n    }\n\n    const error: any = new Error(`invalid value for type ${ type }`);\n    error.code = \"INVALID_ARGUMENT\";\n    error.argument = `value.${ name }`;\n    error.value = value;\n\n    throw error;\n}\n\n/**\n *  Resolves to a new object that is a copy of %%value%%, but with all\n *  values resolved.\n */\nexport async function resolveProperties<T>(value: { [ P in keyof T ]: T[P] | Promise<T[P]>}): Promise<T> {\n    const keys = Object.keys(value);\n    const results = await Promise.all(keys.map((k) => Promise.resolve(value[<keyof T>k])));\n    return results.reduce((accum: any, v, index) => {\n        accum[keys[index]] = v;\n        return accum;\n    }, <{ [ P in keyof T]: T[P] }>{ });\n}\n\n/**\n *  Assigns the %%values%% to %%target%% as read-only values.\n *\n *  It %%types%% is specified, the values are checked.\n */\nexport function defineProperties<T>(\n target: T,\n values: { [ K in keyof T ]?: T[K] },\n types?: { [ K in keyof T ]?: string }): void {\n\n    for (let key in values) {\n        let value = values[key];\n\n        const type = (types ? types[key]: null);\n        if (type) { checkType(value, type, key); }\n\n        Object.defineProperty(target, key, { enumerable: true, value, writable: false });\n    }\n}\n", "/**\n *  All errors in ethers include properties to ensure they are both\n *  human-readable (i.e. ``.message``) and machine-readable (i.e. ``.code``).\n *\n *  The [[isError]] function can be used to check the error ``code`` and\n *  provide a type guard for the properties present on that error interface.\n *\n *  @_section: api/utils/errors:Errors  [about-errors]\n */\n\nimport { version } from \"../_version.js\";\n\nimport { defineProperties } from \"./properties.js\";\n\nimport type {\n    TransactionRequest, TransactionReceipt, TransactionResponse\n} from \"../providers/index.js\";\n\nimport type { FetchRequest, FetchResponse } from \"./fetch.js\";\n\n/**\n *  An error may contain additional properties, but those must not\n *  conflict with any implicit properties.\n */\nexport type ErrorInfo<T> = Omit<T, \"code\" | \"name\" | \"message\" | \"shortMessage\"> & { shortMessage?: string };\n\n\nfunction stringify(value: any): any {\n    if (value == null) { return \"null\"; }\n\n    if (Array.isArray(value)) {\n        return \"[ \" + (value.map(stringify)).join(\", \") + \" ]\";\n    }\n\n    if (value instanceof Uint8Array) {\n        const HEX = \"0123456789abcdef\";\n        let result = \"0x\";\n        for (let i = 0; i < value.length; i++) {\n            result += HEX[value[i] >> 4];\n            result += HEX[value[i] & 0xf];\n        }\n        return result;\n    }\n\n    if (typeof(value) === \"object\" && typeof(value.toJSON) === \"function\") {\n        return stringify(value.toJSON());\n    }\n\n    switch (typeof(value)) {\n        case \"boolean\": case \"symbol\":\n            return value.toString();\n        case \"bigint\":\n            return BigInt(value).toString();\n        case \"number\":\n            return (value).toString();\n        case \"string\":\n            return JSON.stringify(value);\n        case \"object\": {\n            const keys = Object.keys(value);\n            keys.sort();\n            return \"{ \" + keys.map((k) => `${ stringify(k) }: ${ stringify(value[k]) }`).join(\", \") + \" }\";\n        }\n    }\n\n    return `[ COULD NOT SERIALIZE ]`;\n}\n\n/**\n *  All errors emitted by ethers have an **ErrorCode** to help\n *  identify and coalesce errors to simplify programmatic analysis.\n *\n *  Each **ErrorCode** is the %%code%% proerty of a coresponding\n *  [[EthersError]].\n *\n *  **Generic Errors**\n *\n *  **``\"UNKNOWN_ERROR\"``** - see [[UnknownError]]\n *\n *  **``\"NOT_IMPLEMENTED\"``** - see [[NotImplementedError]]\n *\n *  **``\"UNSUPPORTED_OPERATION\"``** - see [[UnsupportedOperationError]]\n *\n *  **``\"NETWORK_ERROR\"``** - see [[NetworkError]]\n *\n *  **``\"SERVER_ERROR\"``** - see [[ServerError]]\n *\n *  **``\"TIMEOUT\"``** - see [[TimeoutError]]\n *\n *  **``\"BAD_DATA\"``** - see [[BadDataError]]\n *\n *  **``\"CANCELLED\"``** - see [[CancelledError]]\n *\n *  **Operational Errors**\n *\n *  **``\"BUFFER_OVERRUN\"``** - see [[BufferOverrunError]]\n *\n *  **``\"NUMERIC_FAULT\"``** - see [[NumericFaultError]]\n *\n *  **Argument Errors**\n *\n *  **``\"INVALID_ARGUMENT\"``** - see [[InvalidArgumentError]]\n *\n *  **``\"MISSING_ARGUMENT\"``** - see [[MissingArgumentError]]\n *\n *  **``\"UNEXPECTED_ARGUMENT\"``** - see [[UnexpectedArgumentError]]\n *\n *  **``\"VALUE_MISMATCH\"``** - //unused//\n *\n *  **Blockchain Errors**\n *\n *  **``\"CALL_EXCEPTION\"``** - see [[CallExceptionError]]\n *\n *  **``\"INSUFFICIENT_FUNDS\"``** - see [[InsufficientFundsError]]\n *\n *  **``\"NONCE_EXPIRED\"``** - see [[NonceExpiredError]]\n *\n *  **``\"REPLACEMENT_UNDERPRICED\"``** - see [[ReplacementUnderpricedError]]\n *\n *  **``\"TRANSACTION_REPLACED\"``** - see [[TransactionReplacedError]]\n *\n *  **``\"UNCONFIGURED_NAME\"``** - see [[UnconfiguredNameError]]\n *\n *  **``\"OFFCHAIN_FAULT\"``** - see [[OffchainFaultError]]\n *\n *  **User Interaction Errors**\n *\n *  **``\"ACTION_REJECTED\"``** - see [[ActionRejectedError]]\n */\nexport type ErrorCode =\n\n    // Generic Errors\n    \"UNKNOWN_ERROR\" | \"NOT_IMPLEMENTED\" | \"UNSUPPORTED_OPERATION\" |\n    \"NETWORK_ERROR\" | \"SERVER_ERROR\" | \"TIMEOUT\" | \"BAD_DATA\" |\n    \"CANCELLED\" |\n\n    // Operational Errors\n    \"BUFFER_OVERRUN\" |  \"NUMERIC_FAULT\" |\n\n    // Argument Errors\n    \"INVALID_ARGUMENT\" | \"MISSING_ARGUMENT\" | \"UNEXPECTED_ARGUMENT\" |\n    \"VALUE_MISMATCH\" |\n\n    // Blockchain Errors\n    \"CALL_EXCEPTION\" | \"INSUFFICIENT_FUNDS\" | \"NONCE_EXPIRED\" |\n    \"REPLACEMENT_UNDERPRICED\" | \"TRANSACTION_REPLACED\" |\n    \"UNCONFIGURED_NAME\" | \"OFFCHAIN_FAULT\" |\n\n    // User Interaction\n    \"ACTION_REJECTED\"\n;\n\n/**\n *  All errors in Ethers include properties to assist in\n *  machine-readable errors.\n */\nexport interface EthersError<T extends ErrorCode = ErrorCode> extends Error {\n    /**\n     *  The string error code.\n     */\n    code: ErrorCode;\n\n    /**\n     *  A short message describing the error, with minimal additional\n     *  details.\n     */\n    shortMessage: string;\n\n    /**\n     *  Additional info regarding the error that may be useful.\n     *\n     *  This is generally helpful mostly for human-based debugging.\n     */\n    info?: Record<string, any>;\n\n    /**\n     *  Any related error.\n     */\n    error?: Error;\n}\n\n// Generic Errors\n\n/**\n *  This Error is a catch-all for when there is no way for Ethers to\n *  know what the underlying problem is.\n */\nexport interface UnknownError extends EthersError<\"UNKNOWN_ERROR\"> {\n    [ key: string ]: any;\n}\n\n/**\n *  This Error is mostly used as a stub for functionality that is\n *  intended for the future, but is currently not implemented.\n */\nexport interface NotImplementedError extends EthersError<\"NOT_IMPLEMENTED\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n}\n\n/**\n *  This Error indicates that the attempted operation is not supported.\n *\n *  This could range from a specific JSON-RPC end-point not supporting\n *  a feature to a specific configuration of an object prohibiting the\n *  operation.\n *\n *  For example, a [[Wallet]] with no connected [[Provider]] is unable\n *  to send a transaction.\n */\nexport interface UnsupportedOperationError extends EthersError<\"UNSUPPORTED_OPERATION\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n}\n\n/**\n *  This Error indicates a problem connecting to a network.\n */\nexport interface NetworkError extends EthersError<\"NETWORK_ERROR\"> {\n    /**\n     *  The network event.\n     */\n    event: string;\n}\n\n/**\n *  This Error indicates there was a problem fetching a resource from\n *  a server.\n */\nexport interface ServerError extends EthersError<\"SERVER_ERROR\"> {\n    /**\n     *  The requested resource.\n     */\n    request: FetchRequest | string;\n\n    /**\n     *  The response received from the server, if available.\n     */\n    response?: FetchResponse;\n}\n\n/**\n *  This Error indicates that the timeout duration has expired and\n *  that the operation has been implicitly cancelled.\n *\n *  The side-effect of the operation may still occur, as this\n *  generally means a request has been sent and there has simply\n *  been no response to indicate whether it was processed or not.\n */\nexport interface TimeoutError extends EthersError<\"TIMEOUT\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n\n    /**\n     *  The reason.\n     */\n    reason: string;\n\n    /**\n     *  The resource request, if available.\n     */\n    request?: FetchRequest;\n}\n\n/**\n *  This Error indicates that a provided set of data cannot\n *  be correctly interpreted.\n */\nexport interface BadDataError extends EthersError<\"BAD_DATA\"> {\n    /**\n     *  The data.\n     */\n    value: any;\n}\n\n/**\n *  This Error indicates that the operation was cancelled by a\n *  programmatic call, for example to ``cancel()``.\n */\nexport interface CancelledError extends EthersError<\"CANCELLED\"> {\n}\n\n\n// Operational Errors\n\n/**\n *  This Error indicates an attempt was made to read outside the bounds\n *  of protected data.\n *\n *  Most operations in Ethers are protected by bounds checks, to mitigate\n *  exploits when parsing data.\n */\nexport interface BufferOverrunError extends EthersError<\"BUFFER_OVERRUN\"> {\n    /**\n     *  The buffer that was overrun.\n     */\n    buffer: Uint8Array;\n\n    /**\n     *  The length of the buffer.\n     */\n    length: number;\n\n    /**\n     *  The offset that was requested.\n     */\n    offset: number;\n}\n\n/**\n *  This Error indicates an operation which would result in incorrect\n *  arithmetic output has occurred.\n *\n *  For example, trying to divide by zero or using a ``uint8`` to store\n *  a negative value.\n */\nexport interface NumericFaultError extends EthersError<\"NUMERIC_FAULT\"> {\n    /**\n     *  The attempted operation.\n     */\n    operation: string;\n\n    /**\n     *  The fault reported.\n     */\n    fault: string;\n\n    /**\n     *  The value the operation was attempted against.\n     */\n    value: any;\n}\n\n\n// Argument Errors\n\n/**\n *  This Error indicates an incorrect type or value was passed to\n *  a function or method.\n */\nexport interface InvalidArgumentError extends EthersError<\"INVALID_ARGUMENT\"> {\n    /**\n     *  The name of the argument.\n     */\n    argument: string;\n\n    /**\n     *  The value that was provided.\n     */\n    value: any;\n\n    info?: Record<string, any>\n}\n\n/**\n *  This Error indicates there were too few arguments were provided.\n */\nexport interface MissingArgumentError extends EthersError<\"MISSING_ARGUMENT\"> {\n    /**\n     *  The number of arguments received.\n     */\n    count: number;\n\n    /**\n     *  The number of arguments expected.\n     */\n    expectedCount: number;\n}\n\n/**\n *  This Error indicates too many arguments were provided.\n */\nexport interface UnexpectedArgumentError extends EthersError<\"UNEXPECTED_ARGUMENT\"> {\n    /**\n     *  The number of arguments received.\n     */\n    count: number;\n\n    /**\n     *  The number of arguments expected.\n     */\n    expectedCount: number;\n}\n\n\n// Blockchain Errors\n\n/**\n *  The action that resulted in the call exception.\n */\nexport type CallExceptionAction = \"call\" | \"estimateGas\" | \"getTransactionResult\" | \"sendTransaction\" | \"unknown\";\n\n/**\n *  The related transaction that caused the error.\n */\nexport type CallExceptionTransaction = {\n    to: null | string;\n    from?: string;\n    data: string;\n};\n\n/**\n *  This **Error** indicates a transaction reverted.\n */\nexport interface CallExceptionError extends EthersError<\"CALL_EXCEPTION\"> {\n\n    /**\n     *  The action being performed when the revert was encountered.\n     */\n    action: CallExceptionAction;\n\n    /**\n     *  The revert data returned.\n     */\n    data: null | string;\n\n    /**\n     *  A human-readable representation of data, if possible.\n     */\n    reason: null | string;\n\n    /**\n     *  The transaction that triggered the exception.\n     */\n    transaction: CallExceptionTransaction,\n\n    /**\n     *  The contract invocation details, if available.\n     */\n    invocation: null | {\n        method: string;\n        signature: string;\n        args: Array<any>;\n    }\n\n    /**\n     *  The built-in or custom revert error, if available\n     */\n    revert: null | {\n        signature: string;\n        name: string;\n        args: Array<any>;\n    }\n\n    /**\n     *  If the error occurred in a transaction that was mined\n     *  (with a status of ``0``), this is the receipt.\n     */\n    receipt?: TransactionReceipt;   // @TODO: in v7, make this `null | TransactionReceipt`\n}\n\n\n/**\n *  The sending account has insufficient funds to cover the\n *  entire transaction cost.\n */\nexport interface InsufficientFundsError extends EthersError<\"INSUFFICIENT_FUNDS\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  The sending account has already used this nonce in a\n *  transaction that has been included.\n */\nexport interface NonceExpiredError extends EthersError<\"NONCE_EXPIRED\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  A CCIP-read exception, which cannot be recovered from or\n *  be further processed.\n */\nexport interface OffchainFaultError extends EthersError<\"OFFCHAIN_FAULT\"> {\n    /**\n     *  The transaction.\n     */\n    transaction?: TransactionRequest;\n\n    /**\n     *  The reason the CCIP-read failed.\n     */\n    reason: string;\n}\n\n/**\n *  An attempt was made to replace a transaction, but with an\n *  insufficient additional fee to afford evicting the old\n *  transaction from the memory pool.\n */\nexport interface ReplacementUnderpricedError extends EthersError<\"REPLACEMENT_UNDERPRICED\"> {\n    /**\n     *  The transaction.\n     */\n    transaction: TransactionRequest;\n}\n\n/**\n *  A pending transaction was replaced by another.\n */\nexport interface TransactionReplacedError extends EthersError<\"TRANSACTION_REPLACED\"> {\n    /**\n     *  If the transaction was cancelled, such that the original\n     *  effects of the transaction cannot be assured.\n     */\n    cancelled: boolean;\n\n    /**\n     *  The reason the transaction was replaced.\n     */\n    reason: \"repriced\" | \"cancelled\" | \"replaced\";\n\n    /**\n     *  The hash of the replaced transaction.\n     */\n    hash: string;\n\n    /**\n     *  The transaction that replaced the transaction.\n     */\n    replacement: TransactionResponse;\n\n    /**\n     *  The receipt of the transaction that replace the transaction.\n     */\n    receipt: TransactionReceipt;\n}\n\n/**\n *  This Error indicates an ENS name was used, but the name has not\n *  been configured.\n *\n *  This could indicate an ENS name is unowned or that the current\n *  address being pointed to is the [[ZeroAddress]].\n */\nexport interface UnconfiguredNameError extends EthersError<\"UNCONFIGURED_NAME\"> {\n    /**\n     *  The ENS name that was requested\n     */\n    value: string;\n}\n\n/**\n *  This Error indicates a request was rejected by the user.\n *\n *  In most clients (such as MetaMask), when an operation requires user\n *  authorization (such as ``signer.sendTransaction``), the client\n *  presents a dialog box to the user. If the user denies the request\n *  this error is thrown.\n */\nexport interface ActionRejectedError extends EthersError<\"ACTION_REJECTED\"> {\n    /**\n     *  The requested action.\n     */\n    action: \"requestAccess\" | \"sendTransaction\" | \"signMessage\" | \"signTransaction\" | \"signTypedData\" | \"unknown\",\n\n    /**\n     *  The reason the action was rejected.\n     *\n     *  If there is already a pending request, some clients may indicate\n     *  there is already a ``\"pending\"`` action. This prevents an app\n     *  from spamming the user.\n     */\n    reason: \"expired\" | \"rejected\" | \"pending\"\n}\n\n// Coding; converts an ErrorCode its Typed Error\n\n/**\n *  A conditional type that transforms the [[ErrorCode]] T into\n *  its EthersError type.\n *\n *  @flatworm-skip-docs\n */\nexport type CodedEthersError<T> =\n    T extends \"UNKNOWN_ERROR\" ? UnknownError:\n    T extends \"NOT_IMPLEMENTED\" ? NotImplementedError:\n    T extends \"UNSUPPORTED_OPERATION\" ? UnsupportedOperationError:\n    T extends \"NETWORK_ERROR\" ? NetworkError:\n    T extends \"SERVER_ERROR\" ? ServerError:\n    T extends \"TIMEOUT\" ? TimeoutError:\n    T extends \"BAD_DATA\" ? BadDataError:\n    T extends \"CANCELLED\" ? CancelledError:\n\n    T extends \"BUFFER_OVERRUN\" ? BufferOverrunError:\n    T extends \"NUMERIC_FAULT\" ? NumericFaultError:\n\n    T extends \"INVALID_ARGUMENT\" ? InvalidArgumentError:\n    T extends \"MISSING_ARGUMENT\" ? MissingArgumentError:\n    T extends \"UNEXPECTED_ARGUMENT\" ? UnexpectedArgumentError:\n\n    T extends \"CALL_EXCEPTION\" ? CallExceptionError:\n    T extends \"INSUFFICIENT_FUNDS\" ? InsufficientFundsError:\n    T extends \"NONCE_EXPIRED\" ? NonceExpiredError:\n    T extends \"OFFCHAIN_FAULT\" ? OffchainFaultError:\n    T extends \"REPLACEMENT_UNDERPRICED\" ? ReplacementUnderpricedError:\n    T extends \"TRANSACTION_REPLACED\" ? TransactionReplacedError:\n    T extends \"UNCONFIGURED_NAME\" ? UnconfiguredNameError:\n\n    T extends \"ACTION_REJECTED\" ? ActionRejectedError:\n\n    never;\n\n\n\n/**\n *  Returns true if the %%error%% matches an error thrown by ethers\n *  that matches the error %%code%%.\n *\n *  In TypeScript environments, this can be used to check that %%error%%\n *  matches an EthersError type, which means the expected properties will\n *  be set.\n *\n *  @See [ErrorCodes](api:ErrorCode)\n *  @example\n *    try {\n *      // code....\n *    } catch (e) {\n *      if (isError(e, \"CALL_EXCEPTION\")) {\n *          // The Type Guard has validated this object\n *          console.log(e.data);\n *      }\n *    }\n */\nexport function isError<K extends ErrorCode, T extends CodedEthersError<K>>(error: any, code: K): error is T {\n    return (error && (<EthersError>error).code === code);\n}\n\n/**\n *  Returns true if %%error%% is a [[CallExceptionError].\n */\nexport function isCallException(error: any): error is CallExceptionError {\n    return isError(error, \"CALL_EXCEPTION\");\n}\n\n/**\n *  Returns a new Error configured to the format ethers emits errors, with\n *  the %%message%%, [[api:ErrorCode]] %%code%% and additional properties\n *  for the corresponding EthersError.\n *\n *  Each error in ethers includes the version of ethers, a\n *  machine-readable [[ErrorCode]], and depending on %%code%%, additional\n *  required properties. The error message will also include the %%message%%,\n *  ethers version, %%code%% and all additional properties, serialized.\n */\nexport function makeError<K extends ErrorCode, T extends CodedEthersError<K>>(message: string, code: K, info?: ErrorInfo<T>): T {\n    let shortMessage = message;\n\n    {\n        const details: Array<string> = [];\n        if (info) {\n            if (\"message\" in info || \"code\" in info || \"name\" in info) {\n                throw new Error(`value will overwrite populated values: ${ stringify(info) }`);\n            }\n            for (const key in info) {\n                if (key === \"shortMessage\") { continue; }\n                const value = <any>(info[<keyof ErrorInfo<T>>key]);\n//                try {\n                    details.push(key + \"=\" + stringify(value));\n//                } catch (error: any) {\n//                console.log(\"MMM\", error.message);\n//                    details.push(key + \"=[could not serialize object]\");\n//                }\n            }\n        }\n        details.push(`code=${ code }`);\n        details.push(`version=${ version }`);\n\n        if (details.length) {\n            message += \" (\" + details.join(\", \") + \")\";\n        }\n    }\n\n    let error;\n    switch (code) {\n        case \"INVALID_ARGUMENT\":\n            error = new TypeError(message);\n            break;\n        case \"NUMERIC_FAULT\":\n        case \"BUFFER_OVERRUN\":\n            error = new RangeError(message);\n            break;\n        default:\n            error = new Error(message);\n    }\n\n    defineProperties<EthersError>(<EthersError>error, { code });\n\n    if (info) { Object.assign(error, info); }\n\n    if ((<any>error).shortMessage == null) {\n        defineProperties<EthersError>(<EthersError>error, { shortMessage });\n    }\n\n    return <T>error;\n}\n\n/**\n *  Throws an EthersError with %%message%%, %%code%% and additional error\n *  %%info%% when %%check%% is falsish..\n *\n *  @see [[api:makeError]]\n */\nexport function assert<K extends ErrorCode, T extends CodedEthersError<K>>(check: unknown, message: string, code: K, info?: ErrorInfo<T>): asserts check {\n    if (!check) { throw makeError(message, code, info); }\n}\n\n\n/**\n *  A simple helper to simply ensuring provided arguments match expected\n *  constraints, throwing if not.\n *\n *  In TypeScript environments, the %%check%% has been asserted true, so\n *  any further code does not need additional compile-time checks.\n */\nexport function assertArgument(check: unknown, message: string, name: string, value: unknown): asserts check {\n    assert(check, message, \"INVALID_ARGUMENT\", { argument: name, value: value });\n}\n\nexport function assertArgumentCount(count: number, expectedCount: number, message?: string): void {\n    if (message == null) { message = \"\"; }\n    if (message) { message = \": \" + message; }\n\n    assert(count >= expectedCount, \"missing arguemnt\" + message, \"MISSING_ARGUMENT\", {\n        count: count,\n        expectedCount: expectedCount\n    });\n\n    assert(count <= expectedCount, \"too many arguments\" + message, \"UNEXPECTED_ARGUMENT\", {\n        count: count,\n        expectedCount: expectedCount\n    });\n}\n\nconst _normalizeForms = [\"NFD\", \"NFC\", \"NFKD\", \"NFKC\"].reduce((accum, form) => {\n    try {\n        // General test for normalize\n        /* c8 ignore start */\n        if (\"test\".normalize(form) !== \"test\") { throw new Error(\"bad\"); };\n        /* c8 ignore stop */\n\n        if (form === \"NFD\") {\n            const check = String.fromCharCode(0xe9).normalize(\"NFD\");\n            const expected = String.fromCharCode(0x65, 0x0301)\n            /* c8 ignore start */\n            if (check !== expected) { throw new Error(\"broken\") }\n            /* c8 ignore stop */\n        }\n\n        accum.push(form);\n    } catch(error) { }\n\n    return accum;\n}, <Array<string>>[]);\n\n/**\n *  Throws if the normalization %%form%% is not supported.\n */\nexport function assertNormalize(form: string): void {\n    assert(_normalizeForms.indexOf(form) >= 0, \"platform missing String.prototype.normalize\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"String.prototype.normalize\", info: { form }\n    });\n}\n\n/**\n *  Many classes use file-scoped values to guard the constructor,\n *  making it effectively private. This facilitates that pattern\n *  by ensuring the %%givenGaurd%% matches the file-scoped %%guard%%,\n *  throwing if not, indicating the %%className%% if provided.\n */\nexport function assertPrivate(givenGuard: any, guard: any, className?: string): void {\n    if (className == null) { className = \"\"; }\n    if (givenGuard !== guard) {\n        let method = className, operation = \"new\";\n        if (className) {\n            method += \".\";\n            operation += \" \" + className;\n        }\n        assert(false, `private constructor; use ${ method }from* methods`, \"UNSUPPORTED_OPERATION\", {\n            operation\n        });\n    }\n}\n", "/**\n *  Some data helpers.\n *\n *\n *  @_subsection api/utils:Data Helpers  [about-data]\n */\nimport { assert, assertArgument } from \"./errors.js\";\n\n/**\n *  A [[HexString]] whose length is even, which ensures it is a valid\n *  representation of binary data.\n */\nexport type DataHexString = string;\n\n/**\n *  A string which is prefixed with ``0x`` and followed by any number\n *  of case-agnostic hexadecimal characters.\n *\n *  It must match the regular expression ``/0x[0-9A-Fa-f]*\\/``.\n */\nexport type HexString = string;\n\n/**\n *  An object that can be used to represent binary data.\n */\nexport type BytesLike = DataHexString | Uint8Array;\n\nfunction _getBytes(value: BytesLike, name?: string, copy?: boolean): Uint8Array {\n    if (value instanceof Uint8Array) {\n        if (copy) { return new Uint8Array(value); }\n        return value;\n    }\n\n    if (typeof(value) === \"string\" && value.match(/^0x(?:[0-9a-f][0-9a-f])*$/i)) {\n        const result = new Uint8Array((value.length - 2) / 2);\n        let offset = 2;\n        for (let i = 0; i < result.length; i++) {\n            result[i] = parseInt(value.substring(offset, offset + 2), 16);\n            offset += 2;\n        }\n        return result;\n    }\n\n    assertArgument(false, \"invalid BytesLike value\", name || \"value\", value);\n}\n\n/**\n *  Get a typed Uint8Array for %%value%%. If already a Uint8Array\n *  the original %%value%% is returned; if a copy is required use\n *  [[getBytesCopy]].\n *\n *  @see: getBytesCopy\n */\nexport function getBytes(value: BytesLike, name?: string): Uint8Array {\n    return _getBytes(value, name, false);\n}\n\n/**\n *  Get a typed Uint8Array for %%value%%, creating a copy if necessary\n *  to prevent any modifications of the returned value from being\n *  reflected elsewhere.\n *\n *  @see: getBytes\n */\nexport function getBytesCopy(value: BytesLike, name?: string): Uint8Array {\n    return _getBytes(value, name, true);\n}\n\n\n/**\n *  Returns true if %%value%% is a valid [[HexString]].\n *\n *  If %%length%% is ``true`` or a //number//, it also checks that\n *  %%value%% is a valid [[DataHexString]] of %%length%% (if a //number//)\n *  bytes of data (e.g. ``0x1234`` is 2 bytes).\n */\nexport function isHexString(value: any, length?: number | boolean): value is `0x${ string }` {\n    if (typeof(value) !== \"string\" || !value.match(/^0x[0-9A-Fa-f]*$/)) {\n        return false\n    }\n\n    if (typeof(length) === \"number\" && value.length !== 2 + 2 * length) { return false; }\n    if (length === true && (value.length % 2) !== 0) { return false; }\n\n    return true;\n}\n\n/**\n *  Returns true if %%value%% is a valid representation of arbitrary\n *  data (i.e. a valid [[DataHexString]] or a Uint8Array).\n */\nexport function isBytesLike(value: any): value is BytesLike {\n    return (isHexString(value, true) || (value instanceof Uint8Array));\n}\n\nconst HexCharacters: string = \"0123456789abcdef\";\n\n/**\n *  Returns a [[DataHexString]] representation of %%data%%.\n */\nexport function hexlify(data: BytesLike): string {\n    const bytes = getBytes(data);\n\n    let result = \"0x\";\n    for (let i = 0; i < bytes.length; i++) {\n        const v = bytes[i];\n        result += HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f];\n    }\n    return result;\n}\n\n/**\n *  Returns a [[DataHexString]] by concatenating all values\n *  within %%data%%.\n */\nexport function concat(datas: ReadonlyArray<BytesLike>): string {\n    return \"0x\" + datas.map((d) => hexlify(d).substring(2)).join(\"\");\n}\n\n/**\n *  Returns the length of %%data%%, in bytes.\n */\nexport function dataLength(data: BytesLike): number {\n    if (isHexString(data, true)) { return (data.length - 2) / 2; }\n    return getBytes(data).length;\n}\n\n/**\n *  Returns a [[DataHexString]] by slicing %%data%% from the %%start%%\n *  offset to the %%end%% offset.\n *\n *  By default %%start%% is 0 and %%end%% is the length of %%data%%.\n */\nexport function dataSlice(data: BytesLike, start?: number, end?: number): string {\n    const bytes = getBytes(data);\n    if (end != null && end > bytes.length) {\n        assert(false, \"cannot slice beyond data bounds\", \"BUFFER_OVERRUN\", {\n            buffer: bytes, length: bytes.length, offset: end\n        });\n    }\n    return hexlify(bytes.slice((start == null) ? 0: start, (end == null) ? bytes.length: end));\n}\n\n/**\n *  Return the [[DataHexString]] result by stripping all **leading**\n ** zero bytes from %%data%%.\n */\nexport function stripZerosLeft(data: BytesLike): string {\n    let bytes = hexlify(data).substring(2);\n    while (bytes.startsWith(\"00\")) { bytes = bytes.substring(2); }\n    return \"0x\" + bytes;\n}\n\nfunction zeroPad(data: BytesLike, length: number, left: boolean): string {\n    const bytes = getBytes(data);\n    assert(length >= bytes.length, \"padding exceeds data length\", \"BUFFER_OVERRUN\", {\n        buffer: new Uint8Array(bytes),\n        length: length,\n        offset: length + 1\n    });\n\n    const result = new Uint8Array(length);\n    result.fill(0);\n    if (left) {\n        result.set(bytes, length - bytes.length);\n    } else {\n        result.set(bytes, 0);\n    }\n\n    return hexlify(result);\n}\n\n/**\n *  Return the [[DataHexString]] of %%data%% padded on the **left**\n *  to %%length%% bytes.\n *\n *  If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n *  thrown.\n *\n *  This pads data the same as **values** are in Solidity\n *  (e.g. ``uint128``).\n */\nexport function zeroPadValue(data: BytesLike, length: number): string {\n    return zeroPad(data, length, true);\n}\n\n/**\n *  Return the [[DataHexString]] of %%data%% padded on the **right**\n *  to %%length%% bytes.\n *\n *  If %%data%% already exceeds %%length%%, a [[BufferOverrunError]] is\n *  thrown.\n *\n *  This pads data the same as **bytes** are in Solidity\n *  (e.g. ``bytes16``).\n */\nexport function zeroPadBytes(data: BytesLike, length: number): string {\n    return zeroPad(data, length, false);\n}\n", "/**\n *  Some mathematic operations.\n *\n *  @_subsection: api/utils:Math Helpers  [about-maths]\n */\nimport { hexlify, isBytesLike } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\n\nimport type { BytesLike } from \"./data.js\";\n\n/**\n *  Any type that can be used where a numeric value is needed.\n */\nexport type Numeric = number | bigint;\n\n/**\n *  Any type that can be used where a big number is needed.\n */\nexport type BigNumberish = string | Numeric;\n\n\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\n\n//const BN_Max256 = (BN_1 << BigInt(256)) - BN_1;\n\n\n// IEEE 754 support 53-bits of mantissa\nconst maxValue = 0x1fffffffffffff;\n\n/**\n *  Convert %%value%% from a twos-compliment representation of %%width%%\n *  bits to its value.\n *\n *  If the highest bit is ``1``, the result will be negative.\n */\nexport function fromTwos(_value: BigNumberish, _width: Numeric): bigint {\n    const value = getUint(_value, \"value\");\n    const width = BigInt(getNumber(_width, \"width\"));\n\n    assert((value >> width) === BN_0, \"overflow\", \"NUMERIC_FAULT\", {\n        operation: \"fromTwos\", fault: \"overflow\", value: _value\n    });\n\n    // Top bit set; treat as a negative value\n    if (value >> (width - BN_1)) {\n        const mask = (BN_1 << width) - BN_1;\n        return -(((~value) & mask) + BN_1);\n    }\n\n    return value;\n}\n\n/**\n *  Convert %%value%% to a twos-compliment representation of\n *  %%width%% bits.\n *\n *  The result will always be positive.\n */\nexport function toTwos(_value: BigNumberish, _width: Numeric): bigint {\n    let value = getBigInt(_value, \"value\");\n    const width = BigInt(getNumber(_width, \"width\"));\n\n    const limit = (BN_1 << (width - BN_1));\n\n    if (value < BN_0) {\n        value = -value;\n        assert(value <= limit, \"too low\", \"NUMERIC_FAULT\", {\n            operation: \"toTwos\", fault: \"overflow\", value: _value\n        });\n        const mask = (BN_1 << width) - BN_1;\n        return ((~value) & mask) + BN_1;\n    } else {\n        assert(value < limit, \"too high\", \"NUMERIC_FAULT\", {\n            operation: \"toTwos\", fault: \"overflow\", value: _value\n        });\n    }\n\n    return value;\n}\n\n/**\n *  Mask %%value%% with a bitmask of %%bits%% ones.\n */\nexport function mask(_value: BigNumberish, _bits: Numeric): bigint {\n    const value = getUint(_value, \"value\");\n    const bits = BigInt(getNumber(_bits, \"bits\"));\n    return value & ((BN_1 << bits) - BN_1);\n}\n\n/**\n *  Gets a BigInt from %%value%%. If it is an invalid value for\n *  a BigInt, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getBigInt(value: BigNumberish, name?: string): bigint {\n    switch (typeof(value)) {\n        case \"bigint\": return value;\n        case \"number\":\n            assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return BigInt(value);\n        case \"string\":\n            try {\n                if (value === \"\") { throw new Error(\"empty string\"); }\n                if (value[0] === \"-\" && value[1] !== \"-\") {\n                    return -BigInt(value.substring(1));\n                }\n                return BigInt(value);\n            } catch(e: any) {\n                assertArgument(false, `invalid BigNumberish string: ${ e.message }`, name || \"value\", value);\n            }\n    }\n    assertArgument(false, \"invalid BigNumberish value\", name || \"value\", value);\n}\n\n/**\n *  Returns %%value%% as a bigint, validating it is valid as a bigint\n *  value and that it is positive.\n */\nexport function getUint(value: BigNumberish, name?: string): bigint {\n    const result = getBigInt(value, name);\n    assert(result >= BN_0, \"unsigned value cannot be negative\", \"NUMERIC_FAULT\", {\n        fault: \"overflow\", operation: \"getUint\", value\n    });\n    return result;\n}\n\nconst Nibbles = \"0123456789abcdef\";\n\n/*\n * Converts %%value%% to a BigInt. If %%value%% is a Uint8Array, it\n * is treated as Big Endian data.\n */\nexport function toBigInt(value: BigNumberish | Uint8Array): bigint {\n    if (value instanceof Uint8Array) {\n        let result = \"0x0\";\n        for (const v of value) {\n            result += Nibbles[v >> 4];\n            result += Nibbles[v & 0x0f];\n        }\n        return BigInt(result);\n    }\n\n    return getBigInt(value);\n}\n\n/**\n *  Gets a //number// from %%value%%. If it is an invalid value for\n *  a //number//, then an ArgumentError will be thrown for %%name%%.\n */\nexport function getNumber(value: BigNumberish, name?: string): number {\n    switch (typeof(value)) {\n        case \"bigint\":\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return Number(value);\n        case \"number\":\n            assertArgument(Number.isInteger(value), \"underflow\", name || \"value\", value);\n            assertArgument(value >= -maxValue && value <= maxValue, \"overflow\", name || \"value\", value);\n            return value;\n        case \"string\":\n            try {\n                if (value === \"\") { throw new Error(\"empty string\"); }\n                return getNumber(BigInt(value), name);\n            } catch(e: any) {\n                assertArgument(false, `invalid numeric string: ${ e.message }`, name || \"value\", value);\n            }\n    }\n    assertArgument(false, \"invalid numeric value\", name || \"value\", value);\n}\n\n\n/**\n *  Converts %%value%% to a number. If %%value%% is a Uint8Array, it\n *  is treated as Big Endian data. Throws if the value is not safe.\n */\nexport function toNumber(value: BigNumberish | Uint8Array): number {\n    return getNumber(toBigInt(value));\n}\n\n/**\n *  Converts %%value%% to a Big Endian hexstring, optionally padded to\n *  %%width%% bytes.\n */\nexport function toBeHex(_value: BigNumberish, _width?: Numeric): string {\n    const value = getUint(_value, \"value\");\n\n    let result = value.toString(16);\n\n    if (_width == null) {\n        // Ensure the value is of even length\n        if (result.length % 2) { result = \"0\" + result; }\n    } else {\n        const width = getNumber(_width, \"width\");\n        assert(width * 2 >= result.length, `value exceeds width (${ width } bytes)`, \"NUMERIC_FAULT\", {\n            operation: \"toBeHex\",\n            fault: \"overflow\",\n            value: _value\n        });\n\n        // Pad the value to the required width\n        while (result.length < (width * 2)) { result = \"0\" + result; }\n\n    }\n\n    return \"0x\" + result;\n}\n\n/**\n *  Converts %%value%% to a Big Endian Uint8Array.\n */\nexport function toBeArray(_value: BigNumberish): Uint8Array {\n    const value = getUint(_value, \"value\");\n\n    if (value === BN_0) { return new Uint8Array([ ]); }\n\n    let hex = value.toString(16);\n    if (hex.length % 2) { hex = \"0\" + hex; }\n\n    const result = new Uint8Array(hex.length / 2);\n    for (let i = 0; i < result.length; i++) {\n        const offset = i * 2;\n        result[i] = parseInt(hex.substring(offset, offset + 2), 16);\n    }\n\n    return result;\n}\n\n/**\n *  Returns a [[HexString]] for %%value%% safe to use as a //Quantity//.\n *\n *  A //Quantity// does not have and leading 0 values unless the value is\n *  the literal value `0x0`. This is most commonly used for JSSON-RPC\n *  numeric values.\n */\nexport function toQuantity(value: BytesLike | BigNumberish): string {\n    let result = hexlify(isBytesLike(value) ? value: toBeArray(value)).substring(2);\n    while (result.startsWith(\"0\")) { result = result.substring(1); }\n    if (result === \"\") { result = \"0\"; }\n    return \"0x\" + result;\n}\n", "/**\n *  The [Base58 Encoding](link-base58) scheme allows a **numeric** value\n *  to be encoded as a compact string using a radix of 58 using only\n *  alpha-numeric characters. Confusingly similar characters are omitted\n *  (i.e. ``\"l0O\"``).\n *\n *  Note that Base58 encodes a **numeric** value, not arbitrary bytes,\n *  since any zero-bytes on the left would get removed. To mitigate this\n *  issue most schemes that use Base58 choose specific high-order values\n *  to ensure non-zero prefixes.\n *\n *  @_subsection: api/utils:Base58 Encoding [about-base58]\n */\n\nimport { getBytes } from \"./data.js\";\nimport { assertArgument } from \"./errors.js\";\nimport { toBigInt } from \"./maths.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n\nconst Alphabet = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\";\nlet Lookup: null | Record<string, bigint> = null;\n\nfunction getAlpha(letter: string): bigint {\n    if (Lookup == null) {\n        Lookup = { };\n        for (let i = 0; i < Alphabet.length; i++) {\n            Lookup[Alphabet[i]] = BigInt(i);\n        }\n    }\n    const result = Lookup[letter];\n    assertArgument(result != null, `invalid base58 value`, \"letter\", letter);\n    return result;\n}\n\n\nconst BN_0 = BigInt(0);\nconst BN_58 = BigInt(58);\n\n/**\n *  Encode %%value%% as a Base58-encoded string.\n */\nexport function encodeBase58(_value: BytesLike): string {\n    const bytes = getBytes(_value);\n\n    let value = toBigInt(bytes);\n    let result = \"\";\n    while (value) {\n        result = Alphabet[Number(value % BN_58)] + result;\n        value /= BN_58;\n    }\n\n    // Account for leading padding zeros\n    for (let i = 0; i < bytes.length; i++) {\n        if (bytes[i]) { break; }\n        result = Alphabet[0] + result;\n    }\n\n    return result;\n}\n\n/**\n *  Decode the Base58-encoded %%value%%.\n */\nexport function decodeBase58(value: string): bigint {\n    let result = BN_0;\n    for (let i = 0; i < value.length; i++) {\n        result *= BN_58;\n        result += getAlpha(value[i]);\n    }\n    return result;\n}\n", "/**\n *  [Base64 encoding](link-wiki-base64) using 6-bit words to encode\n *  arbitrary bytes into a string using 65 printable symbols, the\n *  upper-case and lower-case alphabet, the digits ``0`` through ``9``,\n *  ``\"+\"`` and ``\"/\"`` with the ``\"=\"`` used for padding.\n *\n *  @_subsection: api/utils:Base64 Encoding  [about-base64]\n */\nimport { getBytes, getBytesCopy } from \"./data.js\";\n\nimport type { BytesLike } from \"./data.js\";\n\n\n/**\n *  Decodes the base-64 encoded %%value%%.\n *\n *  @example:\n *    // The decoded value is always binary data...\n *    result = decodeBase64(\"SGVsbG8gV29ybGQhIQ==\")\n *    //_result:\n *\n *    // ...use toUtf8String to convert it to a string.\n *    toUtf8String(result)\n *    //_result:\n *\n *    // Decoding binary data\n *    decodeBase64(\"EjQ=\")\n *    //_result:\n */\nexport function decodeBase64(value: string): Uint8Array {\n    return getBytesCopy(Buffer.from(value, \"base64\"));\n};\n\n/**\n *  Encodes %%data%% as a base-64 encoded string.\n *\n *  @example:\n *    // Encoding binary data as a hexstring\n *    encodeBase64(\"0x1234\")\n *    //_result:\n *\n *    // Encoding binary data as a Uint8Array\n *    encodeBase64(new Uint8Array([ 0x12, 0x34 ]))\n *    //_result:\n *\n *    // The input MUST be data...\n *    encodeBase64(\"Hello World!!\")\n *    //_error:\n *\n *    // ...use toUtf8Bytes for this.\n *    encodeBase64(toUtf8Bytes(\"Hello World!!\"))\n *    //_result:\n */\nexport function encodeBase64(data: BytesLike): string {\n    return Buffer.from(getBytes(data)).toString(\"base64\");\n}\n", "/**\n *  Events allow for applications to use the observer pattern, which\n *  allows subscribing and publishing events, outside the normal\n *  execution paths.\n *\n *  @_section api/utils/events:Events  [about-events]\n */\nimport { defineProperties } from \"./properties.js\";\n\n/**\n *  A callback function called when a an event is triggered.\n */\nexport type Listener = (...args: Array<any>) => void;\n\n/**\n *  An **EventEmitterable** behaves similar to an EventEmitter\n *  except provides async access to its methods.\n *\n *  An EventEmitter implements the observer pattern.\n */\nexport interface EventEmitterable<T> {\n    /**\n     *  Registers a %%listener%% that is called whenever the\n     *  %%event%% occurs until unregistered.\n     */\n    on(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Registers a %%listener%% that is called the next time\n     *  %%event%% occurs.\n     */\n    once(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Triggers each listener for %%event%% with the %%args%%.\n     */\n    emit(event: T, ...args: Array<any>): Promise<boolean>;\n\n    /**\n     *  Resolves to the number of listeners for %%event%%.\n     */\n    listenerCount(event?: T): Promise<number>;\n\n    /**\n     *  Resolves to the listeners for %%event%%.\n     */\n    listeners(event?: T): Promise<Array<Listener>>;\n\n    /**\n     *  Unregister the %%listener%% for %%event%%. If %%listener%%\n     *  is unspecified, all listeners are unregistered.\n     */\n    off(event: T, listener?: Listener): Promise<this>;\n\n    /**\n     *  Unregister all listeners for %%event%%.\n     */\n    removeAllListeners(event?: T): Promise<this>;\n\n    /**\n     *  Alias for [[on]].\n     */\n    addListener(event: T, listener: Listener): Promise<this>;\n\n    /**\n     *  Alias for [[off]].\n     */\n    removeListener(event: T, listener: Listener): Promise<this>;\n}\n\n/**\n *  When an [[EventEmitterable]] triggers a [[Listener]], the\n *  callback always ahas one additional argument passed, which is\n *  an **EventPayload**.\n */\nexport class EventPayload<T> {\n    /**\n     *  The event filter.\n     */\n    readonly filter!: T;\n\n    /**\n     *  The **EventEmitterable**.\n     */\n    readonly emitter!: EventEmitterable<T>;\n\n    readonly #listener: null | Listener;\n\n    /**\n     *  Create a new **EventPayload** for %%emitter%% with\n     *  the %%listener%% and for %%filter%%.\n     */\n    constructor(emitter: EventEmitterable<T>, listener: null | Listener, filter: T) {\n        this.#listener = listener;\n        defineProperties<EventPayload<any>>(this, { emitter, filter });\n    }\n\n    /**\n     *  Unregister the triggered listener for future events.\n     */\n    async removeListener(): Promise<void> {\n        if (this.#listener == null) { return; }\n        await this.emitter.off(this.filter, this.#listener);\n    }\n}\n", "/**\n *  Using strings in Ethereum (or any security-basd system) requires\n *  additional care. These utilities attempt to mitigate some of the\n *  safety issues as well as provide the ability to recover and analyse\n *  strings.\n *\n *  @_subsection api/utils:Strings and UTF-8  [about-strings]\n */\nimport { getBytes } from \"./data.js\";\nimport { assertArgument, assertNormalize } from \"./errors.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n\n///////////////////////////////\n\n/**\n *  The stanard normalization forms.\n */\nexport type UnicodeNormalizationForm = \"NFC\" | \"NFD\" | \"NFKC\" | \"NFKD\";\n\n/**\n *  When using the UTF-8 error API the following errors can be intercepted\n *  and processed as the %%reason%% passed to the [[Utf8ErrorFunc]].\n *\n *  **``\"UNEXPECTED_CONTINUE\"``** - a continuation byte was present where there\n *  was nothing to continue.\n *\n *  **``\"BAD_PREFIX\"``** - an invalid (non-continuation) byte to start a\n *  UTF-8 codepoint was found.\n *\n *  **``\"OVERRUN\"``** - the string is too short to process the expected\n *  codepoint length.\n *\n *  **``\"MISSING_CONTINUE\"``** - a missing continuation byte was expected but\n *  not found. The %%offset%% indicates the index the continuation byte\n *  was expected at.\n *\n *  **``\"OUT_OF_RANGE\"``** - the computed code point is outside the range\n *  for UTF-8. The %%badCodepoint%% indicates the computed codepoint, which was\n *  outside the valid UTF-8 range.\n *\n *  **``\"UTF16_SURROGATE\"``** - the UTF-8 strings contained a UTF-16 surrogate\n *  pair. The %%badCodepoint%% is the computed codepoint, which was inside the\n *  UTF-16 surrogate range.\n *\n *  **``\"OVERLONG\"``** - the string is an overlong representation. The\n *  %%badCodepoint%% indicates the computed codepoint, which has already\n *  been bounds checked.\n *\n *\n *  @returns string\n */\nexport type Utf8ErrorReason = \"UNEXPECTED_CONTINUE\" | \"BAD_PREFIX\" | \"OVERRUN\" |\n    \"MISSING_CONTINUE\" | \"OUT_OF_RANGE\" | \"UTF16_SURROGATE\" | \"OVERLONG\";\n\n\n/**\n *  A callback that can be used with [[toUtf8String]] to analysis or\n *  recovery from invalid UTF-8 data.\n *\n *  Parsing UTF-8 data is done through a simple Finite-State Machine (FSM)\n *  which calls the ``Utf8ErrorFunc`` if a fault is detected.\n *\n *  The %%reason%% indicates where in the FSM execution the fault\n *  occurred and the %%offset%% indicates where the input failed.\n *\n *  The %%bytes%% represents the raw UTF-8 data that was provided and\n *  %%output%% is the current array of UTF-8 code-points, which may\n *  be updated by the ``Utf8ErrorFunc``.\n *\n *  The value of the %%badCodepoint%% depends on the %%reason%%. See\n *  [[Utf8ErrorReason]] for details.\n *\n *  The function should return the number of bytes that should be skipped\n *  when control resumes to the FSM.\n */\nexport type Utf8ErrorFunc = (reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number) => number;\n\n\nfunction errorFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n    assertArgument(false, `invalid codepoint at offset ${ offset }; ${ reason }`, \"bytes\", bytes);\n}\n\nfunction ignoreFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n\n    // If there is an invalid prefix (including stray continuation), skip any additional continuation bytes\n    if (reason === \"BAD_PREFIX\" || reason === \"UNEXPECTED_CONTINUE\") {\n        let i = 0;\n        for (let o = offset + 1; o < bytes.length; o++) {\n            if (bytes[o] >> 6 !== 0x02) { break; }\n            i++;\n        }\n        return i;\n    }\n\n    // This byte runs us past the end of the string, so just jump to the end\n    // (but the first byte was read already read and therefore skipped)\n    if (reason === \"OVERRUN\") {\n        return bytes.length - offset - 1;\n    }\n\n    // Nothing to skip\n    return 0;\n}\n\nfunction replaceFunc(reason: Utf8ErrorReason, offset: number, bytes: Uint8Array, output: Array<number>, badCodepoint?: number): number {\n\n    // Overlong representations are otherwise \"valid\" code points; just non-deistingtished\n    if (reason === \"OVERLONG\") {\n        assertArgument(typeof(badCodepoint) === \"number\", \"invalid bad code point for replacement\", \"badCodepoint\", badCodepoint);\n        output.push(badCodepoint);\n        return 0;\n    }\n\n    // Put the replacement character into the output\n    output.push(0xfffd);\n\n    // Otherwise, process as if ignoring errors\n    return ignoreFunc(reason, offset, bytes, output, badCodepoint);\n}\n\n/**\n *  A handful of popular, built-in UTF-8 error handling strategies.\n *\n *  **``\"error\"``** - throws on ANY illegal UTF-8 sequence or\n *  non-canonical (overlong) codepoints (this is the default)\n *\n *  **``\"ignore\"``** - silently drops any illegal UTF-8 sequence\n *  and accepts non-canonical (overlong) codepoints\n *\n *  **``\"replace\"``** - replace any illegal UTF-8 sequence with the\n *  UTF-8 replacement character (i.e. ``\"\\\\ufffd\"``) and accepts\n *  non-canonical (overlong) codepoints\n *\n *  @returns: Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>\n */\nexport const Utf8ErrorFuncs: Readonly<Record<\"error\" | \"ignore\" | \"replace\", Utf8ErrorFunc>> = Object.freeze({\n    error: errorFunc,\n    ignore: ignoreFunc,\n    replace: replaceFunc\n});\n\n// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499\nfunction getUtf8CodePoints(_bytes: BytesLike, onError?: Utf8ErrorFunc): Array<number> {\n    if (onError == null) { onError = Utf8ErrorFuncs.error; }\n\n    const bytes = getBytes(_bytes, \"bytes\");\n\n    const result: Array<number> = [];\n    let i = 0;\n\n    // Invalid bytes are ignored\n    while(i < bytes.length) {\n\n        const c = bytes[i++];\n\n        // 0xxx xxxx\n        if (c >> 7 === 0) {\n            result.push(c);\n            continue;\n        }\n\n        // Multibyte; how many bytes left for this character?\n        let extraLength: null | number = null;\n        let overlongMask: null | number = null;\n\n        // 110x xxxx 10xx xxxx\n        if ((c & 0xe0) === 0xc0) {\n            extraLength = 1;\n            overlongMask = 0x7f;\n\n        // 1110 xxxx 10xx xxxx 10xx xxxx\n        } else if ((c & 0xf0) === 0xe0) {\n            extraLength = 2;\n            overlongMask = 0x7ff;\n\n        // 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx\n        } else if ((c & 0xf8) === 0xf0) {\n            extraLength = 3;\n            overlongMask = 0xffff;\n\n        } else {\n            if ((c & 0xc0) === 0x80) {\n                i += onError(\"UNEXPECTED_CONTINUE\", i - 1, bytes, result);\n            } else {\n                i += onError(\"BAD_PREFIX\", i - 1, bytes, result);\n            }\n            continue;\n        }\n\n        // Do we have enough bytes in our data?\n        if (i - 1 + extraLength >= bytes.length) {\n            i += onError(\"OVERRUN\", i - 1, bytes, result);\n            continue;\n        }\n\n        // Remove the length prefix from the char\n        let res: null | number = c & ((1 << (8 - extraLength - 1)) - 1);\n\n        for (let j = 0; j < extraLength; j++) {\n            let nextChar = bytes[i];\n\n            // Invalid continuation byte\n            if ((nextChar & 0xc0) != 0x80) {\n                i += onError(\"MISSING_CONTINUE\", i, bytes, result);\n                res = null;\n                break;\n            };\n\n            res = (res << 6) | (nextChar & 0x3f);\n            i++;\n        }\n\n        // See above loop for invalid continuation byte\n        if (res === null) { continue; }\n\n        // Maximum code point\n        if (res > 0x10ffff) {\n            i += onError(\"OUT_OF_RANGE\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        // Reserved for UTF-16 surrogate halves\n        if (res >= 0xd800 && res <= 0xdfff) {\n            i += onError(\"UTF16_SURROGATE\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        // Check for overlong sequences (more bytes than needed)\n        if (res <= overlongMask) {\n            i += onError(\"OVERLONG\", i - 1 - extraLength, bytes, result, res);\n            continue;\n        }\n\n        result.push(res);\n    }\n\n    return result;\n}\n\n// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array\n\n/**\n *  Returns the UTF-8 byte representation of %%str%%.\n *\n *  If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8Bytes(str: string, form?: UnicodeNormalizationForm): Uint8Array {\n    assertArgument(typeof(str) === \"string\", \"invalid string value\", \"str\", str);\n\n    if (form != null) {\n        assertNormalize(form);\n        str = str.normalize(form);\n    }\n\n    let result: Array<number> = [];\n    for (let i = 0; i < str.length; i++) {\n        const c = str.charCodeAt(i);\n\n        if (c < 0x80) {\n            result.push(c);\n\n        } else if (c < 0x800) {\n            result.push((c >> 6) | 0xc0);\n            result.push((c & 0x3f) | 0x80);\n\n        } else if ((c & 0xfc00) == 0xd800) {\n            i++;\n            const c2 = str.charCodeAt(i);\n\n            assertArgument(i < str.length && ((c2 & 0xfc00) === 0xdc00),\n                \"invalid surrogate pair\", \"str\", str);\n\n            // Surrogate Pair\n            const pair = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);\n            result.push((pair >> 18) | 0xf0);\n            result.push(((pair >> 12) & 0x3f) | 0x80);\n            result.push(((pair >> 6) & 0x3f) | 0x80);\n            result.push((pair & 0x3f) | 0x80);\n\n        } else {\n            result.push((c >> 12) | 0xe0);\n            result.push(((c >> 6) & 0x3f) | 0x80);\n            result.push((c & 0x3f) | 0x80);\n        }\n    }\n\n    return new Uint8Array(result);\n};\n\n//export \nfunction _toUtf8String(codePoints: Array<number>): string {\n    return codePoints.map((codePoint) => {\n        if (codePoint <= 0xffff) {\n            return String.fromCharCode(codePoint);\n        }\n        codePoint -= 0x10000;\n        return String.fromCharCode(\n            (((codePoint >> 10) & 0x3ff) + 0xd800),\n            ((codePoint & 0x3ff) + 0xdc00)\n        );\n    }).join(\"\");\n}\n\n/**\n *  Returns the string represented by the UTF-8 data %%bytes%%.\n *\n *  When %%onError%% function is specified, it is called on UTF-8\n *  errors allowing recovery using the [[Utf8ErrorFunc]] API.\n *  (default: [error](Utf8ErrorFuncs))\n */\nexport function toUtf8String(bytes: BytesLike, onError?: Utf8ErrorFunc): string {\n    return _toUtf8String(getUtf8CodePoints(bytes, onError));\n}\n\n/**\n *  Returns the UTF-8 code-points for %%str%%.\n *\n *  If %%form%% is specified, the string is normalized.\n */\nexport function toUtf8CodePoints(str: string, form?: UnicodeNormalizationForm): Array<number> {\n    return getUtf8CodePoints(toUtf8Bytes(str, form));\n}\n\n", "import http from \"http\";\nimport https from \"https\";\nimport { gunzipSync } from \"zlib\";\n\nimport { assert, makeError } from \"./errors.js\";\nimport { getBytes } from \"./data.js\";\n\nimport type {\n    FetchGetUrlFunc, FetchRequest, FetchCancelSignal, GetUrlResponse\n} from \"./fetch.js\";\n\n/**\n *  @_ignore:\n */\nexport function createGetUrl(options?: Record<string, any>): FetchGetUrlFunc {\n\n    async function getUrl(req: FetchRequest, signal?: FetchCancelSignal): Promise<GetUrlResponse> {\n        // Make sure we weren't cancelled before sending\n        assert(signal == null || !signal.cancelled, \"request cancelled before sending\", \"CANCELLED\");\n\n        const protocol = req.url.split(\":\")[0].toLowerCase();\n\n        assert(protocol === \"http\" || protocol === \"https\", `unsupported protocol ${ protocol }`, \"UNSUPPORTED_OPERATION\", {\n            info: { protocol },\n            operation: \"request\"\n        });\n\n        assert(protocol === \"https\" || !req.credentials || req.allowInsecureAuthentication, \"insecure authorized connections unsupported\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"request\"\n        });\n\n        const method = req.method;\n        const headers = Object.assign({ }, req.headers);\n\n        const reqOptions: any = { method, headers };\n        if (options) {\n            if (options.agent) { reqOptions.agent = options.agent; }\n        }\n\n        // Create a Node-specific AbortController, if available\n        let abort: null | AbortController = null;\n        try {\n            abort = new AbortController();\n            reqOptions.abort = abort.signal;\n        } catch (e) { console.log(e); }\n\n        const request = ((protocol === \"http\") ? http: https).request(req.url, reqOptions);\n\n        request.setTimeout(req.timeout);\n\n        const body = req.body;\n        if (body) { request.write(Buffer.from(body)); }\n\n        request.end();\n\n        return new Promise((resolve, reject) => {\n\n            if (signal) {\n                signal.addListener(() => {\n                    if (abort) { abort.abort(); }\n                    reject(makeError(\"request cancelled\", \"CANCELLED\"));\n                });\n            }\n\n            request.on(\"timeout\", () => {\n                reject(makeError(\"request timeout\", \"TIMEOUT\"));\n            });\n\n            request.once(\"response\", (resp: http.IncomingMessage) => {\n                const statusCode = resp.statusCode || 0;\n                const statusMessage = resp.statusMessage || \"\";\n                const headers = Object.keys(resp.headers || {}).reduce((accum, name) => {\n                    let value = resp.headers[name] || \"\";\n                    if (Array.isArray(value)) {\n                        value = value.join(\", \");\n                    }\n                    accum[name] = value;\n                    return accum;\n                }, <{ [ name: string ]: string }>{ });\n\n                let body: null | Uint8Array = null;\n                //resp.setEncoding(\"utf8\");\n\n                resp.on(\"data\", (chunk: Uint8Array) => {\n                    if (signal) {\n                        try {\n                            signal.checkSignal();\n                        } catch (error) {\n                            return reject(error);\n                        }\n                    }\n\n                    if (body == null) {\n                        body = chunk;\n                    } else {\n                        const newBody = new Uint8Array(body.length + chunk.length);\n                        newBody.set(body, 0);\n                        newBody.set(chunk, body.length);\n                        body = newBody;\n                    }\n                });\n\n                resp.on(\"end\", () => {\n                    if (headers[\"content-encoding\"] === \"gzip\" && body) {\n                        body = getBytes(gunzipSync(body));\n                    }\n\n                    resolve({ statusCode, statusMessage, headers, body });\n                });\n\n                resp.on(\"error\", (error) => {\n                //@TODO: Should this just return nornal response with a server error?\n                    (<any>error).response = { statusCode, statusMessage, headers, body };\n                    reject(error);\n                });\n            });\n\n            request.on(\"error\", (error) => { reject(error); });\n        });\n    }\n\n    return getUrl;\n}\n\n// @TODO: remove in v7; provided for backwards compat\nconst defaultGetUrl: FetchGetUrlFunc = createGetUrl({ });\n\n/**\n *  @_ignore:\n */\nexport async function getUrl(req: FetchRequest, signal?: FetchCancelSignal): Promise<GetUrlResponse> {\n    return defaultGetUrl(req, signal);\n}\n\n", "/**\n *  Fetching content from the web is environment-specific, so Ethers\n *  provides an abstraction that each environment can implement to provide\n *  this service.\n *\n *  On [Node.js](link-node), the ``http`` and ``https`` libs are used to\n *  create a request object, register event listeners and process data\n *  and populate the [[FetchResponse]].\n *\n *  In a browser, the [DOM fetch](link-js-fetch) is used, and the resulting\n *  ``Promise`` is waited on to retrieve the payload.\n *\n *  The [[FetchRequest]] is responsible for handling many common situations,\n *  such as redirects, server throttling, authentication, etc.\n *\n *  It also handles common gateways, such as IPFS and data URIs.\n *\n *  @_section api/utils/fetching:Fetching Web Content  [about-fetch]\n */\nimport { decodeBase64, encodeBase64 } from \"./base64.js\";\nimport { hexlify } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nimport { defineProperties } from \"./properties.js\";\nimport { toUtf8Bytes, toUtf8String } from \"./utf8.js\";\n\nimport { createGetUrl } from \"./geturl.js\";\n\n/**\n *  An environment's implementation of ``getUrl`` must return this type.\n */\nexport type GetUrlResponse = {\n    statusCode: number,\n    statusMessage: string,\n    headers: Record<string, string>,\n    body: null | Uint8Array\n};\n\n/**\n *  This can be used to control how throttling is handled in\n *  [[FetchRequest-setThrottleParams]].\n */\nexport type FetchThrottleParams = {\n    maxAttempts?: number;\n    slotInterval?: number;\n};\n\n/**\n *  Called before any network request, allowing updated headers (e.g. Bearer tokens), etc.\n */\nexport type FetchPreflightFunc = (req: FetchRequest) => Promise<FetchRequest>;\n\n/**\n *  Called on the response, allowing client-based throttling logic or post-processing.\n */\nexport type FetchProcessFunc = (req: FetchRequest, resp: FetchResponse) => Promise<FetchResponse>;\n\n/**\n *  Called prior to each retry; return true to retry, false to abort.\n */\nexport type FetchRetryFunc = (req: FetchRequest, resp: FetchResponse, attempt: number) => Promise<boolean>;\n\n/**\n *  Called on Gateway URLs.\n */\nexport type FetchGatewayFunc = (url: string, signal?: FetchCancelSignal) => Promise<FetchRequest | FetchResponse>;\n\n/**\n *  Used to perform a fetch; use this to override the underlying network\n *  fetch layer. In NodeJS, the default uses the \"http\" and \"https\" libraries\n *  and in the browser ``fetch`` is used. If you wish to use Axios, this is\n *  how you would register it.\n */\nexport type FetchGetUrlFunc = (req: FetchRequest, signal?: FetchCancelSignal) => Promise<GetUrlResponse>;\n\n\nconst MAX_ATTEMPTS = 12;\nconst SLOT_INTERVAL = 250;\n\n// The global FetchGetUrlFunc implementation.\nlet defaultGetUrlFunc: FetchGetUrlFunc = createGetUrl();\n\nconst reData = new RegExp(\"^data:([^;:]*)?(;base64)?,(.*)$\", \"i\");\nconst reIpfs = new RegExp(\"^ipfs:/\\/(ipfs/)?(.*)$\", \"i\");\n\n// If locked, new Gateways cannot be added\nlet locked = false;\n\n// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs\nasync function dataGatewayFunc(url: string, signal?: FetchCancelSignal): Promise<FetchResponse> {\n    try {\n        const match = url.match(reData);\n        if (!match) { throw new Error(\"invalid data\"); }\n        return new FetchResponse(200, \"OK\", {\n            \"content-type\": (match[1] || \"text/plain\"),\n        }, (match[2] ? decodeBase64(match[3]): unpercent(match[3])));\n    } catch (error) {\n        return new FetchResponse(599, \"BAD REQUEST (invalid data: URI)\", { }, null, new FetchRequest(url));\n    }\n}\n\n/**\n *  Returns a [[FetchGatewayFunc]] for fetching content from a standard\n *  IPFS gateway hosted at %%baseUrl%%.\n */\nfunction getIpfsGatewayFunc(baseUrl: string): FetchGatewayFunc {\n    async function gatewayIpfs(url: string, signal?: FetchCancelSignal): Promise<FetchRequest | FetchResponse> {\n        try {\n            const match = url.match(reIpfs);\n            if (!match) { throw new Error(\"invalid link\"); }\n            return new FetchRequest(`${ baseUrl }${ match[2] }`);\n        } catch (error) {\n            return new FetchResponse(599, \"BAD REQUEST (invalid IPFS URI)\", { }, null, new FetchRequest(url));\n        }\n    }\n\n    return gatewayIpfs;\n}\n\nconst Gateways: Record<string, FetchGatewayFunc> = {\n    \"data\": dataGatewayFunc,\n    \"ipfs\": getIpfsGatewayFunc(\"https:/\\/gateway.ipfs.io/ipfs/\")\n};\n\nconst fetchSignals: WeakMap<FetchRequest, () => void> = new WeakMap();\n\n/**\n *  @_ignore\n */\nexport class FetchCancelSignal {\n    #listeners: Array<() => void>;\n    #cancelled: boolean;\n\n    constructor(request: FetchRequest) {\n        this.#listeners = [ ];\n        this.#cancelled = false;\n\n        fetchSignals.set(request, () => {\n            if (this.#cancelled) { return; }\n            this.#cancelled = true;\n\n            for (const listener of this.#listeners) {\n                setTimeout(() => { listener(); }, 0);\n            }\n            this.#listeners = [ ];\n        });\n    }\n\n    addListener(listener: () => void): void {\n        assert(!this.#cancelled, \"singal already cancelled\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fetchCancelSignal.addCancelListener\"\n        });\n        this.#listeners.push(listener);\n    }\n\n    get cancelled(): boolean { return this.#cancelled; }\n\n    checkSignal(): void {\n        assert(!this.cancelled, \"cancelled\", \"CANCELLED\", { });\n    }\n}\n\n// Check the signal, throwing if it is cancelled\nfunction checkSignal(signal?: FetchCancelSignal): FetchCancelSignal {\n    if (signal == null) { throw new Error(\"missing signal; should not happen\"); }\n    signal.checkSignal();\n    return signal;\n}\n\n/**\n *  Represents a request for a resource using a URI.\n *\n *  By default, the supported schemes are ``HTTP``, ``HTTPS``, ``data:``,\n *  and ``IPFS:``.\n *\n *  Additional schemes can be added globally using [[registerGateway]].\n *\n *  @example:\n *    req = new FetchRequest(\"https://www.ricmoo.com\")\n *    resp = await req.send()\n *    resp.body.length\n *    //_result:\n */\nexport class FetchRequest implements Iterable<[ key: string, value: string ]> {\n    #allowInsecure: boolean;\n    #gzip: boolean;\n    #headers: Record<string, string>;\n    #method: string;\n    #timeout: number;\n    #url: string;\n\n    #body?: Uint8Array;\n    #bodyType?: string;\n    #creds?: string;\n\n    // Hooks\n    #preflight?: null | FetchPreflightFunc;\n    #process?: null | FetchProcessFunc;\n    #retry?: null | FetchRetryFunc;\n\n    #signal?: FetchCancelSignal;\n\n    #throttle: Required<FetchThrottleParams>;\n\n    #getUrlFunc: null | FetchGetUrlFunc;\n\n    /**\n     *  The fetch URL to request.\n     */\n    get url(): string { return this.#url; }\n    set url(url: string) {\n        this.#url = String(url);\n    }\n\n    /**\n     *  The fetch body, if any, to send as the request body. //(default: null)//\n     *\n     *  When setting a body, the intrinsic ``Content-Type`` is automatically\n     *  set and will be used if **not overridden** by setting a custom\n     *  header.\n     *\n     *  If %%body%% is null, the body is cleared (along with the\n     *  intrinsic ``Content-Type``).\n     *\n     *  If %%body%% is a string, the intrinsic ``Content-Type`` is set to\n     *  ``text/plain``.\n     *\n     *  If %%body%% is a Uint8Array, the intrinsic ``Content-Type`` is set to\n     *  ``application/octet-stream``.\n     *\n     *  If %%body%% is any other object, the intrinsic ``Content-Type`` is\n     *  set to ``application/json``.\n     */\n    get body(): null | Uint8Array {\n        if (this.#body == null) { return null; }\n        return new Uint8Array(this.#body);\n    }\n    set body(body: null | string | Readonly<object> | Readonly<Uint8Array>) {\n        if (body == null) {\n            this.#body = undefined;\n            this.#bodyType = undefined;\n        } else if (typeof(body) === \"string\") {\n            this.#body = toUtf8Bytes(body);\n            this.#bodyType = \"text/plain\";\n        } else if (body instanceof Uint8Array) {\n            this.#body = body;\n            this.#bodyType = \"application/octet-stream\";\n        } else if (typeof(body) === \"object\") {\n            this.#body = toUtf8Bytes(JSON.stringify(body));\n            this.#bodyType = \"application/json\";\n        } else {\n            throw new Error(\"invalid body\");\n        }\n    }\n\n    /**\n     *  Returns true if the request has a body.\n     */\n    hasBody(): this is (FetchRequest & { body: Uint8Array }) {\n        return (this.#body != null);\n    }\n\n    /**\n     *  The HTTP method to use when requesting the URI. If no method\n     *  has been explicitly set, then ``GET`` is used if the body is\n     *  null and ``POST`` otherwise.\n     */\n    get method(): string {\n        if (this.#method) { return this.#method; }\n        if (this.hasBody()) { return \"POST\"; }\n        return \"GET\";\n    }\n    set method(method: null | string) {\n        if (method == null) { method = \"\"; }\n        this.#method = String(method).toUpperCase();\n    }\n\n    /**\n     *  The headers that will be used when requesting the URI. All\n     *  keys are lower-case.\n     *\n     *  This object is a copy, so any changes will **NOT** be reflected\n     *  in the ``FetchRequest``.\n     *\n     *  To set a header entry, use the ``setHeader`` method.\n     */\n    get headers(): Record<string, string> {\n        const headers = Object.assign({ }, this.#headers);\n\n        if (this.#creds) {\n            headers[\"authorization\"] = `Basic ${ encodeBase64(toUtf8Bytes(this.#creds)) }`;\n        };\n\n        if (this.allowGzip) {\n            headers[\"accept-encoding\"] = \"gzip\";\n        }\n\n        if (headers[\"content-type\"] == null && this.#bodyType) {\n            headers[\"content-type\"] = this.#bodyType;\n        }\n        if (this.body) { headers[\"content-length\"] = String(this.body.length); }\n\n        return headers;\n    }\n\n    /**\n     *  Get the header for %%key%%, ignoring case.\n     */\n    getHeader(key: string): string {\n        return this.headers[key.toLowerCase()];\n    }\n\n    /**\n     *  Set the header for %%key%% to %%value%%. All values are coerced\n     *  to a string.\n     */\n    setHeader(key: string, value: string | number): void {\n        this.#headers[String(key).toLowerCase()] = String(value);\n    }\n\n    /**\n     *  Clear all headers, resetting all intrinsic headers.\n     */\n    clearHeaders(): void {\n        this.#headers = { };\n    }\n\n    [Symbol.iterator](): Iterator<[ key: string, value: string ]> {\n        const headers = this.headers;\n        const keys = Object.keys(headers);\n        let index = 0;\n        return {\n            next: () => {\n                if (index < keys.length) {\n                    const key = keys[index++];\n                    return {\n                        value: [ key, headers[key] ], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The value that will be sent for the ``Authorization`` header.\n     *\n     *  To set the credentials, use the ``setCredentials`` method.\n     */\n    get credentials(): null | string {\n        return this.#creds || null;\n    }\n\n    /**\n     *  Sets an ``Authorization`` for %%username%% with %%password%%.\n     */\n    setCredentials(username: string, password: string): void {\n        assertArgument(!username.match(/:/), \"invalid basic authentication username\", \"username\", \"[REDACTED]\");\n        this.#creds = `${ username }:${ password }`;\n    }\n\n    /**\n     *  Enable and request gzip-encoded responses. The response will\n     *  automatically be decompressed. //(default: true)//\n     */\n    get allowGzip(): boolean {\n        return this.#gzip;\n    }\n    set allowGzip(value: boolean) {\n        this.#gzip = !!value;\n    }\n\n    /**\n     *  Allow ``Authentication`` credentials to be sent over insecure\n     *  channels. //(default: false)//\n     */\n    get allowInsecureAuthentication(): boolean {\n        return !!this.#allowInsecure;\n    }\n    set allowInsecureAuthentication(value: boolean) {\n        this.#allowInsecure = !!value;\n    }\n\n    /**\n     *  The timeout (in milliseconds) to wait for a complete response.\n     *  //(default: 5 minutes)//\n     */\n    get timeout(): number { return this.#timeout; }\n    set timeout(timeout: number) {\n        assertArgument(timeout >= 0, \"timeout must be non-zero\", \"timeout\", timeout);\n        this.#timeout = timeout;\n    }\n\n    /**\n     *  This function is called prior to each request, for example\n     *  during a redirection or retry in case of server throttling.\n     *\n     *  This offers an opportunity to populate headers or update\n     *  content before sending a request.\n     */\n    get preflightFunc(): null | FetchPreflightFunc {\n        return this.#preflight || null;\n    }\n    set preflightFunc(preflight: null | FetchPreflightFunc) {\n        this.#preflight = preflight;\n    }\n\n    /**\n     *  This function is called after each response, offering an\n     *  opportunity to provide client-level throttling or updating\n     *  response data.\n     *\n     *  Any error thrown in this causes the ``send()`` to throw.\n     *\n     *  To schedule a retry attempt (assuming the maximum retry limit\n     *  has not been reached), use [[response.throwThrottleError]].\n     */\n    get processFunc(): null | FetchProcessFunc {\n        return this.#process || null;\n    }\n    set processFunc(process: null | FetchProcessFunc) {\n        this.#process = process;\n    }\n\n    /**\n     *  This function is called on each retry attempt.\n     */\n    get retryFunc(): null | FetchRetryFunc {\n        return this.#retry || null;\n    }\n    set retryFunc(retry: null | FetchRetryFunc) {\n        this.#retry = retry;\n    }\n\n    /**\n     *  This function is called to fetch content from HTTP and\n     *  HTTPS URLs and is platform specific (e.g. nodejs vs\n     *  browsers).\n     *\n     *  This is by default the currently registered global getUrl\n     *  function, which can be changed using [[registerGetUrl]].\n     *  If this has been set, setting is to ``null`` will cause\n     *  this FetchRequest (and any future clones) to revert back to\n     *  using the currently registered global getUrl function.\n     *\n     *  Setting this is generally not necessary, but may be useful\n     *  for developers that wish to intercept requests or to\n     *  configurege a proxy or other agent.\n     */\n    get getUrlFunc(): FetchGetUrlFunc {\n        return this.#getUrlFunc || defaultGetUrlFunc;\n    }\n    set getUrlFunc(value: null | FetchGetUrlFunc) {\n        this.#getUrlFunc = value;\n    }\n\n    /**\n     *  Create a new FetchRequest instance with default values.\n     *\n     *  Once created, each property may be set before issuing a\n     *  ``.send()`` to make the request.\n     */\n    constructor(url: string) {\n        this.#url = String(url);\n\n        this.#allowInsecure = false;\n        this.#gzip = true;\n        this.#headers = { };\n        this.#method = \"\";\n        this.#timeout = 300000;\n\n        this.#throttle = {\n            slotInterval: SLOT_INTERVAL,\n            maxAttempts: MAX_ATTEMPTS\n        };\n\n        this.#getUrlFunc = null;\n    }\n\n    toString(): string {\n        return `<FetchRequest method=${ JSON.stringify(this.method) } url=${ JSON.stringify(this.url) } headers=${ JSON.stringify(this.headers) } body=${ this.#body ? hexlify(this.#body): \"null\" }>`;\n    }\n\n    /**\n     *  Update the throttle parameters used to determine maximum\n     *  attempts and exponential-backoff properties.\n     */\n    setThrottleParams(params: FetchThrottleParams): void {\n        if (params.slotInterval != null) {\n            this.#throttle.slotInterval = params.slotInterval;\n        }\n        if (params.maxAttempts != null) {\n            this.#throttle.maxAttempts = params.maxAttempts;\n        }\n    }\n\n    async #send(attempt: number, expires: number, delay: number, _request: FetchRequest, _response: FetchResponse): Promise<FetchResponse> {\n        if (attempt >= this.#throttle.maxAttempts) {\n            return _response.makeServerError(\"exceeded maximum retry limit\");\n        }\n\n        assert(getTime() <= expires, \"timeout\", \"TIMEOUT\", {\n            operation: \"request.send\", reason: \"timeout\", request: _request\n        });\n\n        if (delay > 0) { await wait(delay); }\n\n        let req = this.clone();\n        const scheme = (req.url.split(\":\")[0] || \"\").toLowerCase();\n\n        // Process any Gateways\n        if (scheme in Gateways) {\n            const result = await Gateways[scheme](req.url, checkSignal(_request.#signal));\n            if (result instanceof FetchResponse) {\n                let response = result;\n\n                if (this.processFunc) {\n                    checkSignal(_request.#signal);\n                    try {\n                        response = await this.processFunc(req, response);\n                    } catch (error: any) {\n\n                        // Something went wrong during processing; throw a 5xx server error\n                        if (error.throttle == null || typeof(error.stall) !== \"number\") {\n                            response.makeServerError(\"error in post-processing function\", error).assertOk();\n                        }\n\n                        // Ignore throttling\n                    }\n                }\n\n                return response;\n            }\n            req = result;\n        }\n\n        // We have a preflight function; update the request\n        if (this.preflightFunc) { req = await this.preflightFunc(req); }\n\n        const resp = await this.getUrlFunc(req, checkSignal(_request.#signal));\n        let response = new FetchResponse(resp.statusCode, resp.statusMessage, resp.headers, resp.body, _request);\n\n        if (response.statusCode === 301 || response.statusCode === 302) {\n\n            // Redirect\n            try {\n                const location = response.headers.location || \"\";\n                return req.redirect(location).#send(attempt + 1, expires, 0, _request, response);\n            } catch (error) { }\n\n            // Things won't get any better on another attempt; abort\n            return response;\n\n        } else if (response.statusCode === 429) {\n\n            // Throttle\n            if (this.retryFunc == null || (await this.retryFunc(req, response, attempt))) {\n                const retryAfter = response.headers[\"retry-after\"];\n                let delay = this.#throttle.slotInterval * Math.trunc(Math.random() * Math.pow(2, attempt));\n                if (typeof(retryAfter) === \"string\" && retryAfter.match(/^[1-9][0-9]*$/)) {\n                    delay = parseInt(retryAfter);\n                }\n                return req.clone().#send(attempt + 1, expires, delay, _request, response);\n            }\n        }\n\n        if (this.processFunc) {\n            checkSignal(_request.#signal);\n            try {\n                response = await this.processFunc(req, response);\n            } catch (error: any) {\n\n                // Something went wrong during processing; throw a 5xx server error\n                if (error.throttle == null || typeof(error.stall) !== \"number\") {\n                    response.makeServerError(\"error in post-processing function\", error).assertOk();\n                }\n\n                // Throttle\n                let delay = this.#throttle.slotInterval * Math.trunc(Math.random() * Math.pow(2, attempt));;\n                if (error.stall >= 0) { delay = error.stall; }\n\n                return req.clone().#send(attempt + 1, expires, delay, _request, response);\n            }\n        }\n\n        return response;\n    }\n\n    /**\n     *  Resolves to the response by sending the request.\n     */\n    send(): Promise<FetchResponse> {\n        assert(this.#signal == null, \"request already sent\", \"UNSUPPORTED_OPERATION\", { operation: \"fetchRequest.send\" });\n        this.#signal = new FetchCancelSignal(this);\n        return this.#send(0, getTime() + this.timeout, 0, this, new FetchResponse(0, \"\", { }, null, this));\n    }\n\n    /**\n     *  Cancels the inflight response, causing a ``CANCELLED``\n     *  error to be rejected from the [[send]].\n     */\n    cancel(): void {\n        assert(this.#signal != null, \"request has not been sent\", \"UNSUPPORTED_OPERATION\", { operation: \"fetchRequest.cancel\" });\n        const signal = fetchSignals.get(this);\n        if (!signal) { throw new Error(\"missing signal; should not happen\"); }\n        signal();\n    }\n\n    /**\n     *  Returns a new [[FetchRequest]] that represents the redirection\n     *  to %%location%%.\n     */\n    redirect(location: string): FetchRequest {\n        // Redirection; for now we only support absolute locations\n        const current = this.url.split(\":\")[0].toLowerCase();\n        const target = location.split(\":\")[0].toLowerCase();\n\n        // Don't allow redirecting:\n        // - non-GET requests\n        // - downgrading the security (e.g. https => http)\n        // - to non-HTTP (or non-HTTPS) protocols [this could be relaxed?]\n        assert(this.method === \"GET\" && (current !== \"https\" || target !== \"http\") && location.match(/^https?:/), `unsupported redirect`, \"UNSUPPORTED_OPERATION\", {\n            operation: `redirect(${ this.method } ${ JSON.stringify(this.url) } => ${ JSON.stringify(location) })`\n        });\n\n        // Create a copy of this request, with a new URL\n        const req = new FetchRequest(location);\n        req.method = \"GET\";\n        req.allowGzip = this.allowGzip;\n        req.timeout = this.timeout;\n        req.#headers = Object.assign({ }, this.#headers);\n        if (this.#body) { req.#body = new Uint8Array(this.#body); }\n        req.#bodyType = this.#bodyType;\n\n        // Do not forward credentials unless on the same domain; only absolute\n        //req.allowInsecure = false;\n        // paths are currently supported; may want a way to specify to forward?\n        //setStore(req.#props, \"creds\", getStore(this.#pros, \"creds\"));\n\n        return req;\n    }\n\n    /**\n     *  Create a new copy of this request.\n     */\n    clone(): FetchRequest {\n        const clone = new FetchRequest(this.url);\n\n        // Preserve \"default method\" (i.e. null)\n        clone.#method = this.#method;\n\n        // Preserve \"default body\" with type, copying the Uint8Array is present\n        if (this.#body) { clone.#body = this.#body; }\n        clone.#bodyType = this.#bodyType;\n\n        // Preserve \"default headers\"\n        clone.#headers = Object.assign({ }, this.#headers);\n\n        // Credentials is readonly, so we copy internally\n        clone.#creds = this.#creds;\n\n        if (this.allowGzip) { clone.allowGzip = true; }\n\n        clone.timeout = this.timeout;\n        if (this.allowInsecureAuthentication) { clone.allowInsecureAuthentication = true; }\n\n        clone.#preflight = this.#preflight;\n        clone.#process = this.#process;\n        clone.#retry = this.#retry;\n\n        clone.#throttle = Object.assign({ }, this.#throttle);\n\n        clone.#getUrlFunc = this.#getUrlFunc;\n\n        return clone;\n    }\n\n    /**\n     *  Locks all static configuration for gateways and FetchGetUrlFunc\n     *  registration.\n     */\n    static lockConfig(): void {\n        locked = true;\n    }\n\n    /**\n     *  Get the current Gateway function for %%scheme%%.\n     */\n    static getGateway(scheme: string): null | FetchGatewayFunc {\n        return Gateways[scheme.toLowerCase()] || null;\n    }\n\n    /**\n     *  Use the %%func%% when fetching URIs using %%scheme%%.\n     *\n     *  This method affects all requests globally.\n     *\n     *  If [[lockConfig]] has been called, no change is made and this\n     *  throws.\n     */\n    static registerGateway(scheme: string, func: FetchGatewayFunc): void {\n        scheme = scheme.toLowerCase();\n        if (scheme === \"http\" || scheme === \"https\") {\n            throw new Error(`cannot intercept ${ scheme }; use registerGetUrl`);\n        }\n        if (locked) { throw new Error(\"gateways locked\"); }\n        Gateways[scheme] = func;\n    }\n\n    /**\n     *  Use %%getUrl%% when fetching URIs over HTTP and HTTPS requests.\n     *\n     *  This method affects all requests globally.\n     *\n     *  If [[lockConfig]] has been called, no change is made and this\n     *  throws.\n     */\n    static registerGetUrl(getUrl: FetchGetUrlFunc): void {\n        if (locked) { throw new Error(\"gateways locked\"); }\n        defaultGetUrlFunc = getUrl;\n    }\n\n    /**\n     *  Creates a getUrl function that fetches content from HTTP and\n     *  HTTPS URLs.\n     *\n     *  The available %%options%% are dependent on the platform\n     *  implementation of the default getUrl function.\n     *\n     *  This is not generally something that is needed, but is useful\n     *  when trying to customize simple behaviour when fetching HTTP\n     *  content.\n     */\n    static createGetUrlFunc(options?: Record<string, any>): FetchGetUrlFunc {\n        return createGetUrl(options);\n    }\n\n    /**\n     *  Creates a function that can \"fetch\" data URIs.\n     *\n     *  Note that this is automatically done internally to support\n     *  data URIs, so it is not necessary to register it.\n     *\n     *  This is not generally something that is needed, but may\n     *  be useful in a wrapper to perfom custom data URI functionality.\n     */\n    static createDataGateway(): FetchGatewayFunc {\n        return dataGatewayFunc;\n    }\n\n    /**\n     *  Creates a function that will fetch IPFS (unvalidated) from\n     *  a custom gateway baseUrl.\n     *\n     *  The default IPFS gateway used internally is\n     *  ``\"https:/\\/gateway.ipfs.io/ipfs/\"``.\n     */\n    static createIpfsGatewayFunc(baseUrl: string): FetchGatewayFunc {\n        return getIpfsGatewayFunc(baseUrl);\n    }\n}\n\n\ninterface ThrottleError extends Error {\n    stall: number;\n    throttle: true;\n};\n\n/**\n *  The response for a FetchRequest.\n */\nexport class FetchResponse implements Iterable<[ key: string, value: string ]> {\n    #statusCode: number;\n    #statusMessage: string;\n    #headers: Record<string, string>;\n    #body: null | Readonly<Uint8Array>;\n    #request: null | FetchRequest;\n\n    #error: { error?: Error, message: string };\n\n    toString(): string {\n        return `<FetchResponse status=${ this.statusCode } body=${ this.#body ? hexlify(this.#body): \"null\" }>`;\n    }\n\n    /**\n     *  The response status code.\n     */\n    get statusCode(): number { return this.#statusCode; }\n\n    /**\n     *  The response status message.\n     */\n    get statusMessage(): string { return this.#statusMessage; }\n\n    /**\n     *  The response headers. All keys are lower-case.\n     */\n    get headers(): Record<string, string> { return Object.assign({ }, this.#headers); }\n\n    /**\n     *  The response body, or ``null`` if there was no body.\n     */\n    get body(): null | Readonly<Uint8Array> {\n        return (this.#body == null) ? null: new Uint8Array(this.#body);\n    }\n\n    /**\n     *  The response body as a UTF-8 encoded string, or the empty\n     *  string (i.e. ``\"\"``) if there was no body.\n     *\n     *  An error is thrown if the body is invalid UTF-8 data.\n     */\n    get bodyText(): string {\n        try {\n            return (this.#body == null) ? \"\": toUtf8String(this.#body);\n        } catch (error) {\n            assert(false, \"response body is not valid UTF-8 data\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"bodyText\", info: { response: this }\n            });\n        }\n    }\n\n    /**\n     *  The response body, decoded as JSON.\n     *\n     *  An error is thrown if the body is invalid JSON-encoded data\n     *  or if there was no body.\n     */\n    get bodyJson(): any {\n        try {\n            return JSON.parse(this.bodyText);\n        } catch (error) {\n            assert(false, \"response body is not valid JSON\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"bodyJson\", info: { response: this }\n            });\n        }\n    }\n\n    [Symbol.iterator](): Iterator<[ key: string, value: string ]> {\n        const headers = this.headers;\n        const keys = Object.keys(headers);\n        let index = 0;\n        return {\n            next: () => {\n                if (index < keys.length) {\n                    const key = keys[index++];\n                    return {\n                        value: [ key, headers[key] ], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    constructor(statusCode: number, statusMessage: string, headers: Readonly<Record<string, string>>, body: null | Uint8Array, request?: FetchRequest) {\n        this.#statusCode = statusCode;\n        this.#statusMessage = statusMessage;\n        this.#headers = Object.keys(headers).reduce((accum, k) => {\n            accum[k.toLowerCase()] = String(headers[k]);\n            return accum;\n        }, <Record<string, string>>{ });\n        this.#body = ((body == null) ? null: new Uint8Array(body));\n        this.#request = (request || null);\n\n        this.#error = { message: \"\" };\n    }\n\n    /**\n     *  Return a Response with matching headers and body, but with\n     *  an error status code (i.e. 599) and %%message%% with an\n     *  optional %%error%%.\n     */\n    makeServerError(message?: string, error?: Error): FetchResponse {\n        let statusMessage: string;\n        if (!message) {\n            message = `${ this.statusCode } ${ this.statusMessage }`;\n            statusMessage = `CLIENT ESCALATED SERVER ERROR (${ message })`;\n        } else {\n            statusMessage = `CLIENT ESCALATED SERVER ERROR (${ this.statusCode } ${ this.statusMessage }; ${ message })`;\n        }\n        const response = new FetchResponse(599, statusMessage, this.headers,\n            this.body, this.#request || undefined);\n        response.#error = { message, error };\n        return response;\n    }\n\n    /**\n     *  If called within a [request.processFunc](FetchRequest-processFunc)\n     *  call, causes the request to retry as if throttled for %%stall%%\n     *  milliseconds.\n     */\n    throwThrottleError(message?: string, stall?: number): never {\n        if (stall == null) {\n            stall = -1;\n        } else {\n            assertArgument(Number.isInteger(stall) && stall >= 0, \"invalid stall timeout\", \"stall\", stall);\n        }\n\n        const error = new Error(message || \"throttling requests\");\n\n        defineProperties(<ThrottleError>error, { stall, throttle: true });\n\n        throw error;\n    }\n\n    /**\n     *  Get the header value for %%key%%, ignoring case.\n     */\n    getHeader(key: string): string {\n        return this.headers[key.toLowerCase()];\n    }\n\n    /**\n     *  Returns true if the response has a body.\n     */\n    hasBody(): this is (FetchResponse & { body: Uint8Array }) {\n        return (this.#body != null);\n    }\n\n    /**\n     *  The request made for this response.\n     */\n    get request(): null | FetchRequest { return this.#request; }\n\n    /**\n     *  Returns true if this response was a success statusCode.\n     */\n    ok(): boolean {\n        return (this.#error.message === \"\" && this.statusCode >= 200 && this.statusCode < 300);\n    }\n\n    /**\n     *  Throws a ``SERVER_ERROR`` if this response is not ok.\n     */\n    assertOk(): void {\n        if (this.ok()) { return; }\n        let { message, error } = this.#error;\n        if (message === \"\") {\n            message = `server response ${ this.statusCode } ${ this.statusMessage }`;\n        }\n\n        let requestUrl: null | string = null;\n        if (this.request) { requestUrl = this.request.url; }\n\n        let responseBody: null | string = null;\n        try {\n            if (this.#body) { responseBody = toUtf8String(this.#body); }\n        } catch (e) { }\n\n        assert(false, message, \"SERVER_ERROR\", {\n            request: (this.request || \"unknown request\"), response: this, error,\n            info: {\n                requestUrl, responseBody,\n                responseStatus: `${ this.statusCode } ${ this.statusMessage }` }\n        });\n    }\n}\n\n\nfunction getTime(): number { return (new Date()).getTime(); }\n\nfunction unpercent(value: string): Uint8Array {\n    return toUtf8Bytes(value.replace(/%([0-9a-f][0-9a-f])/gi, (all, code) => {\n        return String.fromCharCode(parseInt(code, 16));\n    }));\n}\n\nfunction wait(delay: number): Promise<void> {\n    return new Promise((resolve) => setTimeout(resolve, delay));\n}\n", "/**\n *  The **FixedNumber** class permits using values with decimal places,\n *  using fixed-pont math.\n *\n *  Fixed-point math is still based on integers under-the-hood, but uses an\n *  internal offset to store fractional components below, and each operation\n *  corrects for this after each operation.\n *\n *  @_section: api/utils/fixed-point-math:Fixed-Point Maths  [about-fixed-point-math]\n */\nimport { getBytes } from \"./data.js\";\nimport { assert, assertArgument, assertPrivate } from \"./errors.js\";\nimport {\n    getBigInt, getNumber, fromTwos, mask, toBigInt\n} from \"./maths.js\";\nimport { defineProperties } from \"./properties.js\";\n\nimport type { BigNumberish, BytesLike, Numeric } from \"./index.js\";\n\nconst BN_N1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_5 = BigInt(5);\n\nconst _guard = { };\n\n\n// Constant to pull zeros from for multipliers\nlet Zeros = \"0000\";\nwhile (Zeros.length < 80) { Zeros += Zeros; }\n\n// Returns a string \"1\" followed by decimal \"0\"s\nfunction getTens(decimals: number): bigint {\n    let result = Zeros;\n    while (result.length < decimals) { result += result; }\n    return BigInt(\"1\" + result.substring(0, decimals));\n}\n\n\n\n    /*\n     *  Returns a new FixedFormat for %%value%%.\n     *\n     *  If %%value%% is specified as a ``number``, the bit-width is\n     *  128 bits and %%value%% is used for the ``decimals``.\n     *\n     *  A string %%value%% may begin with ``fixed`` or ``ufixed``\n     *  for signed and unsigned respectfully. If no other properties\n     *  are specified, the bit-width is 128-bits with 18 decimals.\n     *\n     *  To specify the bit-width and demicals, append them separated\n     *  by an ``\"x\"`` to the %%value%%.\n     *\n     *  For example, ``ufixed128x18`` describes an unsigned, 128-bit\n     *  wide format with 18 decimals.\n     *\n     *  If %%value%% is an other object, its properties for ``signed``,\n     *  ``width`` and ``decimals`` are checked.\n     */\n\n/**\n *  A description of a fixed-point arithmetic field.\n *\n *  When specifying the fixed format, the values override the default of\n *  a ``fixed128x18``, which implies a signed 128-bit value with 18\n *  decimals of precision.\n *\n *  The alias ``fixed`` and ``ufixed`` can be used for ``fixed128x18`` and\n *  ``ufixed128x18`` respectively.\n *\n *  When a fixed format string begins with a ``u``, it indicates the field\n *  is unsigned, so any negative values will overflow. The first number\n *  indicates the bit-width and the second number indicates the decimal\n *  precision.\n *\n *  When a ``number`` is used for a fixed format, it indicates the number\n *  of decimal places, and the default width and signed-ness will be used.\n *\n *  The bit-width must be byte aligned and the decimals can be at most 80.\n */\nexport type FixedFormat = number | string | {\n    signed?: boolean,\n    width?: number,\n    decimals?: number\n};\n\nfunction checkValue(val: bigint, format: _FixedFormat, safeOp?: string): bigint {\n    const width = BigInt(format.width);\n    if (format.signed) {\n        const limit = (BN_1 << (width - BN_1));\n        assert(safeOp == null || (val >= -limit  && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n            operation: <string>safeOp, fault: \"overflow\", value: val\n        });\n\n        if (val > BN_0) {\n            val = fromTwos(mask(val, width), width);\n        } else {\n            val = -fromTwos(mask(-val, width), width);\n        }\n\n    } else {\n        const limit = (BN_1 << width);\n        assert(safeOp == null || (val >= 0 && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n            operation: <string>safeOp, fault: \"overflow\", value: val\n        });\n        val = (((val % limit) + limit) % limit) & (limit - BN_1);\n    }\n\n    return val;\n}\n\ntype _FixedFormat = { signed: boolean, width: number, decimals: number, name: string }\n\nfunction getFormat(value?: FixedFormat): _FixedFormat {\n    if (typeof(value) === \"number\") { value = `fixed128x${value}` }\n\n    let signed = true;\n    let width = 128;\n    let decimals = 18;\n\n    if (typeof(value) === \"string\") {\n        // Parse the format string\n        if (value === \"fixed\") {\n            // defaults...\n        } else if (value === \"ufixed\") {\n            signed = false;\n        } else {\n            const match = value.match(/^(u?)fixed([0-9]+)x([0-9]+)$/);\n            assertArgument(match, \"invalid fixed format\", \"format\", value);\n            signed = (match[1] !== \"u\");\n            width = parseInt(match[2]);\n            decimals = parseInt(match[3]);\n        }\n    } else if (value) {\n        // Extract the values from the object\n        const v: any = value;\n        const check = (key: string, type: string, defaultValue: any): any => {\n            if (v[key] == null) { return defaultValue; }\n            assertArgument(typeof(v[key]) === type,\n                \"invalid fixed format (\" + key + \" not \" + type +\")\", \"format.\" + key, v[key]);\n            return v[key];\n        }\n        signed = check(\"signed\", \"boolean\", signed);\n        width = check(\"width\", \"number\", width);\n        decimals = check(\"decimals\", \"number\", decimals);\n    }\n\n    assertArgument((width % 8) === 0, \"invalid FixedNumber width (not byte aligned)\", \"format.width\", width);\n    assertArgument(decimals <= 80, \"invalid FixedNumber decimals (too large)\", \"format.decimals\", decimals);\n\n    const name = (signed ? \"\": \"u\") + \"fixed\" + String(width) + \"x\" + String(decimals);\n\n    return { signed, width, decimals, name };\n}\n\nfunction toString(val: bigint, decimals: number) {\n    let negative = \"\";\n    if (val < BN_0) {\n        negative = \"-\";\n        val *= BN_N1;\n    }\n\n    let str = val.toString();\n\n    // No decimal point for whole values\n    if (decimals === 0) { return (negative + str); }\n\n    // Pad out to the whole component (including a whole digit)\n    while (str.length <= decimals) { str = Zeros + str; }\n\n    // Insert the decimal point\n    const index = str.length - decimals;\n    str = str.substring(0, index) + \".\" + str.substring(index);\n\n    // Trim the whole component (leaving at least one 0)\n    while (str[0] === \"0\" && str[1] !== \".\") {\n        str = str.substring(1);\n    }\n\n    // Trim the decimal component (leaving at least one 0)\n    while (str[str.length - 1] === \"0\" && str[str.length - 2] !== \".\") {\n        str = str.substring(0, str.length - 1);\n    }\n\n    return (negative + str);\n}\n\n\n/**\n *  A FixedNumber represents a value over its [[FixedFormat]]\n *  arithmetic field.\n *\n *  A FixedNumber can be used to perform math, losslessly, on\n *  values which have decmial places.\n *\n *  A FixedNumber has a fixed bit-width to store values in, and stores all\n *  values internally by multiplying the value by 10 raised to the power of\n *  %%decimals%%.\n *\n *  If operations are performed that cause a value to grow too high (close to\n *  positive infinity) or too low (close to negative infinity), the value\n *  is said to //overflow//.\n *\n *  For example, an 8-bit signed value, with 0 decimals may only be within\n *  the range ``-128`` to ``127``; so ``-128 - 1`` will overflow and become\n *  ``127``. Likewise, ``127 + 1`` will overflow and become ``-127``.\n *\n *  Many operation have a normal and //unsafe// variant. The normal variant\n *  will throw a [[NumericFaultError]] on any overflow, while the //unsafe//\n *  variant will silently allow overflow, corrupting its value value.\n *\n *  If operations are performed that cause a value to become too small\n *  (close to zero), the value loses precison and is said to //underflow//.\n *\n *  For example, an value with 1 decimal place may store a number as small\n *  as ``0.1``, but the value of ``0.1 / 2`` is ``0.05``, which cannot fit\n *  into 1 decimal place, so underflow occurs which means precision is lost\n *  and the value becomes ``0``.\n *\n *  Some operations have a normal and //signalling// variant. The normal\n *  variant will silently ignore underflow, while the //signalling// variant\n *  will thow a [[NumericFaultError]] on underflow.\n */\nexport class FixedNumber {\n\n    /**\n     *  The specific fixed-point arithmetic field for this value.\n     */\n    readonly format!: string;\n\n    readonly #format: _FixedFormat;\n\n    // The actual value (accounting for decimals)\n    #val: bigint;\n\n    // A base-10 value to multiple values by to maintain the magnitude\n    readonly #tens: bigint;\n\n    /**\n     *  This is a property so console.log shows a human-meaningful value.\n     *\n     *  @private\n     */\n    readonly _value!: string;\n\n    // Use this when changing this file to get some typing info,\n    // but then switch to any to mask the internal type\n    //constructor(guard: any, value: bigint, format: _FixedFormat) {\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, value: bigint, format: any) {\n        assertPrivate(guard, _guard, \"FixedNumber\");\n\n        this.#val = value;\n\n        this.#format = format;\n\n        const _value = toString(value, format.decimals);\n\n        defineProperties<FixedNumber>(this, { format: format.name, _value });\n\n        this.#tens = getTens(format.decimals);\n    }\n\n    /**\n     *  If true, negative values are permitted, otherwise only\n     *  positive values and zero are allowed.\n     */\n    get signed(): boolean { return this.#format.signed; }\n\n    /**\n     *  The number of bits available to store the value.\n     */\n    get width(): number { return this.#format.width; }\n\n    /**\n     *  The number of decimal places in the fixed-point arithment field.\n     */\n    get decimals(): number { return this.#format.decimals; }\n\n    /**\n     *  The value as an integer, based on the smallest unit the\n     *  [[decimals]] allow.\n     */\n    get value(): bigint { return this.#val; }\n\n    #checkFormat(other: FixedNumber): void {\n        assertArgument(this.format === other.format,\n            \"incompatible format; use fixedNumber.toFormat\", \"other\", other);\n    }\n\n    #checkValue(val: bigint, safeOp?: string): FixedNumber {\n/*\n        const width = BigInt(this.width);\n        if (this.signed) {\n            const limit = (BN_1 << (width - BN_1));\n            assert(safeOp == null || (val >= -limit  && val < limit), \"overflow\", \"NUMERIC_FAULT\", {\n                operation: <string>safeOp, fault: \"overflow\", value: val\n            });\n\n            if (val > BN_0) {\n                val = fromTwos(mask(val, width), width);\n            } else {\n                val = -fromTwos(mask(-val, width), width);\n            }\n\n        } else {\n            const masked = mask(val, width);\n            assert(safeOp == null || (val >= 0 && val === masked), \"overflow\", \"NUMERIC_FAULT\", {\n                operation: <string>safeOp, fault: \"overflow\", value: val\n            });\n            val = masked;\n        }\n*/\n        val = checkValue(val, this.#format, safeOp);\n        return new FixedNumber(_guard, val, this.#format);\n    }\n\n    #add(o: FixedNumber, safeOp?: string): FixedNumber {\n        this.#checkFormat(o);\n        return this.#checkValue(this.#val + o.#val, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% added\n     *  to %%other%%, ignoring overflow.\n     */\n    addUnsafe(other: FixedNumber): FixedNumber { return this.#add(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% added\n     *  to %%other%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs.\n     */\n    add(other: FixedNumber): FixedNumber { return this.#add(other, \"add\"); }\n\n    #sub(o: FixedNumber, safeOp?: string): FixedNumber {\n        this.#checkFormat(o);\n        return this.#checkValue(this.#val - o.#val, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n     *  from %%this%%, ignoring overflow.\n     */\n    subUnsafe(other: FixedNumber): FixedNumber { return this.#sub(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%other%% subtracted\n     *  from %%this%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs.\n     */\n    sub(other: FixedNumber): FixedNumber { return this.#sub(other, \"sub\"); }\n\n    #mul(o: FixedNumber, safeOp?: string): FixedNumber {\n        this.#checkFormat(o);\n        return this.#checkValue((this.#val * o.#val) / this.#tens, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n     *  by %%other%%, ignoring overflow and underflow (precision loss).\n     */\n    mulUnsafe(other: FixedNumber): FixedNumber { return this.#mul(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n     *  by %%other%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs.\n     */\n    mul(other: FixedNumber): FixedNumber { return this.#mul(other, \"mul\"); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% multiplied\n     *  by %%other%%. A [[NumericFaultError]] is thrown if overflow\n     *  occurs or if underflow (precision loss) occurs.\n     */\n    mulSignal(other: FixedNumber): FixedNumber {\n        this.#checkFormat(other);\n        const value = this.#val * other.#val;\n        assert((value % this.#tens) === BN_0, \"precision lost during signalling mul\", \"NUMERIC_FAULT\", {\n            operation: \"mulSignal\", fault: \"underflow\", value: this\n        });\n        return this.#checkValue(value / this.#tens, \"mulSignal\");\n    }\n\n    #div(o: FixedNumber, safeOp?: string): FixedNumber {\n        assert(o.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n            operation: \"div\", fault: \"divide-by-zero\", value: this\n        });\n        this.#checkFormat(o);\n        return this.#checkValue((this.#val * this.#tens) / o.#val, safeOp);\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% divided\n     *  by %%other%%, ignoring underflow (precision loss). A\n     *  [[NumericFaultError]] is thrown if overflow occurs.\n     */\n    divUnsafe(other: FixedNumber): FixedNumber { return this.#div(other); }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% divided\n     *  by %%other%%, ignoring underflow (precision loss). A\n     *  [[NumericFaultError]] is thrown if overflow occurs.\n     */\n    div(other: FixedNumber): FixedNumber { return this.#div(other, \"div\"); }\n\n\n    /**\n     *  Returns a new [[FixedNumber]] with the result of %%this%% divided\n     *  by %%other%%. A [[NumericFaultError]] is thrown if underflow\n     *  (precision loss) occurs.\n     */\n    divSignal(other: FixedNumber): FixedNumber {\n        assert(other.#val !== BN_0, \"division by zero\", \"NUMERIC_FAULT\", {\n            operation: \"div\", fault: \"divide-by-zero\", value: this\n        });\n        this.#checkFormat(other);\n        const value = (this.#val * this.#tens);\n        assert((value % other.#val) === BN_0, \"precision lost during signalling div\", \"NUMERIC_FAULT\", {\n            operation: \"divSignal\", fault: \"underflow\", value: this\n        });\n        return this.#checkValue(value / other.#val, \"divSignal\");\n    }\n\n    /**\n     *  Returns a comparison result between %%this%% and %%other%%.\n     *\n     *  This is suitable for use in sorting, where ``-1`` implies %%this%%\n     *  is smaller, ``1`` implies %%this%% is larger and ``0`` implies\n     *  both are equal.\n     */\n     cmp(other: FixedNumber): number {\n         let a = this.value, b = other.value;\n\n         // Coerce a and b to the same magnitude\n         const delta = this.decimals - other.decimals;\n         if (delta > 0) {\n             b *= getTens(delta);\n         } else if (delta < 0) {\n             a *= getTens(-delta);\n         }\n\n         // Comnpare\n         if (a < b) { return -1; }\n         if (a > b) { return 1; }\n         return 0;\n     }\n\n    /**\n     *  Returns true if %%other%% is equal to %%this%%.\n     */\n     eq(other: FixedNumber): boolean { return this.cmp(other) === 0; }\n\n    /**\n     *  Returns true if %%other%% is less than to %%this%%.\n     */\n     lt(other: FixedNumber): boolean { return this.cmp(other) < 0; }\n\n    /**\n     *  Returns true if %%other%% is less than or equal to %%this%%.\n     */\n     lte(other: FixedNumber): boolean { return this.cmp(other) <= 0; }\n\n    /**\n     *  Returns true if %%other%% is greater than to %%this%%.\n     */\n     gt(other: FixedNumber): boolean { return this.cmp(other) > 0; }\n\n    /**\n     *  Returns true if %%other%% is greater than or equal to %%this%%.\n     */\n     gte(other: FixedNumber): boolean { return this.cmp(other) >= 0; }\n\n    /**\n     *  Returns a new [[FixedNumber]] which is the largest **integer**\n     *  that is less than or equal to %%this%%.\n     *\n     *  The decimal component of the result will always be ``0``.\n     */\n    floor(): FixedNumber {\n        let val = this.#val;\n        if (this.#val < BN_0) { val -= this.#tens - BN_1; }\n        val = (this.#val / this.#tens) * this.#tens;\n        return this.#checkValue(val, \"floor\");\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] which is the smallest **integer**\n     *  that is greater than or equal to %%this%%.\n     *\n     *  The decimal component of the result will always be ``0``.\n     */\n    ceiling(): FixedNumber {\n        let val = this.#val;\n        if (this.#val > BN_0) { val += this.#tens - BN_1; }\n        val = (this.#val / this.#tens) * this.#tens;\n        return this.#checkValue(val, \"ceiling\");\n    }\n\n    /**\n     *  Returns a new [[FixedNumber]] with the decimal component\n     *  rounded up on ties at %%decimals%% places.\n     */\n    round(decimals?: number): FixedNumber {\n        if (decimals == null) { decimals = 0; }\n\n        // Not enough precision to not already be rounded\n        if (decimals >= this.decimals) { return this; }\n\n        const delta = this.decimals - decimals;\n        const bump = BN_5 * getTens(delta - 1);\n\n        let value = this.value + bump;\n        const tens = getTens(delta);\n        value = (value / tens) * tens;\n\n        checkValue(value, this.#format, \"round\");\n\n        return new FixedNumber(_guard, value, this.#format);\n    }\n\n    /**\n     *  Returns true if %%this%% is equal to ``0``.\n     */\n    isZero(): boolean { return (this.#val === BN_0); }\n\n    /**\n     *  Returns true if %%this%% is less than ``0``.\n     */\n    isNegative(): boolean { return (this.#val < BN_0); }\n\n    /**\n     *  Returns the string representation of %%this%%.\n     */\n    toString(): string { return this._value; }\n\n    /**\n     *  Returns a float approximation.\n     *\n     *  Due to IEEE 754 precission (or lack thereof), this function\n     *  can only return an approximation and most values will contain\n     *  rounding errors.\n     */\n    toUnsafeFloat(): number { return parseFloat(this.toString()); }\n\n    /**\n     *  Return a new [[FixedNumber]] with the same value but has had\n     *  its field set to %%format%%.\n     *\n     *  This will throw if the value cannot fit into %%format%%.\n     */\n    toFormat(format: FixedFormat): FixedNumber {\n        return FixedNumber.fromString(this.toString(), format);\n    }\n\n    /**\n     *  Creates a new [[FixedNumber]] for %%value%% divided by\n     *  %%decimal%% places with %%format%%.\n     *\n     *  This will throw a [[NumericFaultError]] if %%value%% (once adjusted\n     *  for %%decimals%%) cannot fit in %%format%%, either due to overflow\n     *  or underflow (precision loss).\n     */\n    static fromValue(_value: BigNumberish, _decimals?: Numeric, _format?: FixedFormat): FixedNumber {\n        const decimals = (_decimals == null) ? 0: getNumber(_decimals);\n        const format = getFormat(_format);\n\n        let value = getBigInt(_value, \"value\");\n        const delta = decimals - format.decimals;\n        if (delta > 0) {\n            const tens = getTens(delta);\n            assert((value % tens) === BN_0, \"value loses precision for format\", \"NUMERIC_FAULT\", {\n                operation: \"fromValue\", fault: \"underflow\", value: _value\n            });\n            value /= tens;\n        } else if (delta < 0) {\n            value *= getTens(-delta);\n        }\n\n        checkValue(value, format, \"fromValue\");\n\n        return new FixedNumber(_guard, value, format);\n    }\n\n    /**\n     *  Creates a new [[FixedNumber]] for %%value%% with %%format%%.\n     *\n     *  This will throw a [[NumericFaultError]] if %%value%% cannot fit\n     *  in %%format%%, either due to overflow or underflow (precision loss).\n     */\n    static fromString(_value: string, _format?: FixedFormat): FixedNumber {\n        const match = _value.match(/^(-?)([0-9]*)\\.?([0-9]*)$/);\n        assertArgument(match && (match[2].length + match[3].length) > 0, \"invalid FixedNumber string value\", \"value\", _value);\n\n        const format = getFormat(_format);\n\n        let whole = (match[2] || \"0\"), decimal = (match[3] || \"\");\n\n        // Pad out the decimals\n        while (decimal.length < format.decimals) { decimal += Zeros; }\n\n        // Check precision is safe\n        assert(decimal.substring(format.decimals).match(/^0*$/), \"too many decimals for format\", \"NUMERIC_FAULT\", {\n            operation: \"fromString\", fault: \"underflow\", value: _value\n        });\n\n        // Remove extra padding\n        decimal = decimal.substring(0, format.decimals);\n\n        const value = BigInt(match[1] + whole + decimal)\n\n        checkValue(value, format, \"fromString\");\n\n        return new FixedNumber(_guard, value, format);\n    }\n\n    /**\n     *  Creates a new [[FixedNumber]] with the big-endian representation\n     *  %%value%% with %%format%%.\n     *\n     *  This will throw a [[NumericFaultError]] if %%value%% cannot fit\n     *  in %%format%% due to overflow.\n     */\n    static fromBytes(_value: BytesLike, _format?: FixedFormat): FixedNumber {\n        let value = toBigInt(getBytes(_value, \"value\"));\n        const format = getFormat(_format);\n\n        if (format.signed) { value = fromTwos(value, format.width); }\n\n        checkValue(value, format, \"fromBytes\");\n\n        return new FixedNumber(_guard, value, format);\n    }\n}\n\n//const f1 = FixedNumber.fromString(\"12.56\", \"fixed16x2\");\n//const f2 = FixedNumber.fromString(\"0.3\", \"fixed16x2\");\n//console.log(f1.divSignal(f2));\n//const BUMP = FixedNumber.from(\"0.5\");\n", "//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { hexlify } from \"./data.js\";\nimport { assert, assertArgument } from \"./errors.js\";\nimport { getBytes } from \"./data.js\";\n\nimport type { BytesLike, RlpStructuredData } from \"./index.js\";\n\n\nfunction hexlifyByte(value: number): string {\n    let result = value.toString(16);\n    while (result.length < 2) { result = \"0\" + result; }\n    return \"0x\" + result;\n}\n\nfunction unarrayifyInteger(data: Uint8Array, offset: number, length: number): number {\n    let result = 0;\n    for (let i = 0; i < length; i++) {\n        result = (result * 256) + data[offset + i];\n    }\n    return result;\n}\n\ntype Decoded = {\n    result: any;\n    consumed: number;\n};\n\nfunction _decodeChildren(data: Uint8Array, offset: number, childOffset: number, length: number): Decoded {\n    const result: Array<any> = [];\n\n    while (childOffset < offset + 1 + length) {\n        const decoded = _decode(data, childOffset);\n\n        result.push(decoded.result);\n\n        childOffset += decoded.consumed;\n        assert(childOffset <= offset + 1 + length, \"child data too short\", \"BUFFER_OVERRUN\", {\n            buffer: data, length, offset\n        });\n    }\n\n    return {consumed: (1 + length), result: result};\n}\n\n// returns { consumed: number, result: Object }\nfunction _decode(data: Uint8Array, offset: number): { consumed: number, result: any } {\n    assert(data.length !== 0, \"data too short\", \"BUFFER_OVERRUN\", {\n        buffer: data, length: 0, offset: 1\n    });\n\n    const checkOffset = (offset: number) => {\n        assert(offset <= data.length, \"data short segment too short\", \"BUFFER_OVERRUN\", {\n            buffer: data, length: data.length, offset\n        });\n    };\n\n    // Array with extra length prefix\n    if (data[offset] >= 0xf8) {\n        const lengthLength = data[offset] - 0xf7;\n        checkOffset(offset + 1 + lengthLength);\n\n        const length = unarrayifyInteger(data, offset + 1, lengthLength);\n        checkOffset(offset + 1 + lengthLength + length);\n\n        return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);\n\n    } else if (data[offset] >= 0xc0) {\n        const length = data[offset] - 0xc0;\n        checkOffset(offset + 1 + length);\n\n        return _decodeChildren(data, offset, offset + 1, length);\n\n    } else if (data[offset] >= 0xb8) {\n        const lengthLength = data[offset] - 0xb7;\n        checkOffset(offset + 1 + lengthLength);\n\n        const length = unarrayifyInteger(data, offset + 1, lengthLength);\n        checkOffset(offset + 1 + lengthLength + length);\n\n        const result = hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));\n        return { consumed: (1 + lengthLength + length), result: result }\n\n    } else if (data[offset] >= 0x80) {\n        const length = data[offset] - 0x80;\n        checkOffset(offset + 1 + length);\n\n        const result = hexlify(data.slice(offset + 1, offset + 1 + length));\n        return { consumed: (1 + length), result: result }\n    }\n\n    return { consumed: 1, result: hexlifyByte(data[offset]) };\n}\n\n/**\n *  Decodes %%data%% into the structured data it represents.\n */\nexport function decodeRlp(_data: BytesLike): RlpStructuredData {\n    const data = getBytes(_data, \"data\");\n    const decoded = _decode(data, 0);\n    assertArgument(decoded.consumed === data.length, \"unexpected junk after rlp payload\", \"data\", _data);\n    return decoded.result;\n}\n\n", "//See: https://github.com/ethereum/wiki/wiki/RLP\n\nimport { getBytes } from \"./data.js\";\n\nimport type { RlpStructuredDataish } from \"./rlp.js\";\n\n\nfunction arrayifyInteger(value: number): Array<number> {\n    const result: Array<number> = [];\n    while (value) {\n        result.unshift(value & 0xff);\n        value >>= 8;\n    }\n    return result;\n}\n\nfunction _encode(object: Array<any> | string | Uint8Array): Array<number> {\n    if (Array.isArray(object)) {\n        let payload: Array<number> = [];\n        object.forEach(function(child) {\n            payload = payload.concat(_encode(child));\n        });\n\n        if (payload.length <= 55) {\n            payload.unshift(0xc0 + payload.length)\n            return payload;\n        }\n\n        const length = arrayifyInteger(payload.length);\n        length.unshift(0xf7 + length.length);\n\n        return length.concat(payload);\n\n    }\n\n    const data: Array<number> = Array.prototype.slice.call(getBytes(object, \"object\"));\n\n    if (data.length === 1 && data[0] <= 0x7f) {\n        return data;\n\n    } else if (data.length <= 55) {\n        data.unshift(0x80 + data.length);\n        return data;\n    }\n\n    const length = arrayifyInteger(data.length);\n    length.unshift(0xb7 + length.length);\n\n    return length.concat(data);\n}\n\nconst nibbles = \"0123456789abcdef\";\n\n/**\n *  Encodes %%object%% as an RLP-encoded [[DataHexString]].\n */\nexport function encodeRlp(object: RlpStructuredDataish): string {\n    let result = \"0x\";\n    for (const v of _encode(object)) {\n        result += nibbles[v >> 4];\n        result += nibbles[v & 0xf];\n    }\n    return result;\n}\n", "/**\n *  Most interactions with Ethereum requires integer values, which use\n *  the smallest magnitude unit.\n *\n *  For example, imagine dealing with dollars and cents. Since dollars\n *  are divisible, non-integer values are possible, such as ``$10.77``.\n *  By using the smallest indivisible unit (i.e. cents), the value can\n *  be kept as the integer ``1077``.\n *\n *  When receiving decimal input from the user (as a decimal string),\n *  the value should be converted to an integer and when showing a user\n *  a value, the integer value should be converted to a decimal string.\n *\n *  This creates a clear distinction, between values to be used by code\n *  (integers) and values used for display logic to users (decimals).\n *\n *  The native unit in Ethereum, //ether// is divisible to 18 decimal places,\n *  where each individual unit is called a //wei//.\n *\n *  @_subsection api/utils:Unit Conversion  [about-units]\n */\nimport { assertArgument } from \"./errors.js\";\nimport { FixedNumber } from \"./fixednumber.js\";\nimport { getNumber } from \"./maths.js\";\n\nimport type { BigNumberish, Numeric } from \"../utils/index.js\";\n\n\nconst names = [\n    \"wei\",\n    \"kwei\",\n    \"mwei\",\n    \"gwei\",\n    \"szabo\",\n    \"finney\",\n    \"ether\",\n];\n\n/**\n *  Converts %%value%% into a //decimal string//, assuming %%unit%% decimal\n *  places. The %%unit%% may be the number of decimal places or the name of\n *  a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n *\n */\nexport function formatUnits(value: BigNumberish, unit?: string | Numeric): string {\n    let decimals = 18;\n    if (typeof(unit) === \"string\") {\n        const index = names.indexOf(unit);\n        assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n        decimals = 3 * index;\n    } else if (unit != null) {\n        decimals = getNumber(unit, \"unit\");\n    }\n\n    return FixedNumber.fromValue(value, decimals, { decimals, width: 512 }).toString();\n}\n\n/**\n *  Converts the //decimal string// %%value%% to a BigInt, assuming\n *  %%unit%% decimal places. The %%unit%% may the number of decimal places\n *  or the name of a unit (e.g. ``\"gwei\"`` for 9 decimal places).\n */\nexport function parseUnits(value: string, unit?: string | Numeric): bigint {\n    assertArgument(typeof(value) === \"string\", \"value must be a string\", \"value\", value);\n\n    let decimals = 18;\n    if (typeof(unit) === \"string\") {\n        const index = names.indexOf(unit);\n        assertArgument(index >= 0, \"invalid unit\", \"unit\", unit);\n        decimals = 3 * index;\n    } else if (unit != null) {\n        decimals = getNumber(unit, \"unit\");\n    }\n\n    return FixedNumber.fromString(value, { decimals, width: 512 }).value;\n}\n\n/**\n *  Converts %%value%% into a //decimal string// using 18 decimal places.\n */\nexport function formatEther(wei: BigNumberish): string {\n    return formatUnits(wei, 18);\n}\n\n/**\n *  Converts the //decimal string// %%ether%% to a BigInt, using 18\n *  decimal places.\n */\nexport function parseEther(ether: string): bigint {\n    return parseUnits(ether, 18);\n}\n", "/**\n *  Explain UUID and link to RFC here.\n *\n *  @_subsection: api/utils:UUID  [about-uuid]\n */\nimport { getBytes, hexlify } from \"./data.js\";\n\nimport type { BytesLike } from \"./index.js\";\n\n/**\n *  Returns the version 4 [[link-uuid]] for the %%randomBytes%%.\n *\n *  @see: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\n */\nexport function uuidV4(randomBytes: BytesLike): string {\n    const bytes = getBytes(randomBytes, \"randomBytes\");\n\n    // Section: 4.1.3:\n    // - time_hi_and_version[12:16] = 0b0100\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n    // Section 4.4\n    // - clock_seq_hi_and_reserved[6] = 0b0\n    // - clock_seq_hi_and_reserved[7] = 0b1\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    const value = hexlify(bytes);\n\n    return [\n       value.substring(2, 10),\n       value.substring(10, 14),\n       value.substring(14, 18),\n       value.substring(18, 22),\n       value.substring(22, 34),\n    ].join(\"-\");\n}\n", "\nimport {\n    defineProperties, concat, getBytesCopy, getNumber, hexlify,\n    toBeArray, toBigInt, toNumber,\n    assert, assertArgument\n    /*, isError*/\n} from \"../../utils/index.js\";\n\nimport type { BigNumberish, BytesLike } from \"../../utils/index.js\";\n\n/**\n * @_ignore:\n */\nexport const WordSize: number = 32;\nconst Padding = new Uint8Array(WordSize);\n\n// Properties used to immediate pass through to the underlying object\n// - `then` is used to detect if an object is a Promise for await\nconst passProperties = [ \"then\" ];\n\nconst _guard = { };\n\nconst resultNames: WeakMap<Result, ReadonlyArray<null | string>> = new WeakMap();\n\nfunction getNames(result: Result): ReadonlyArray<null | string> {\n    return resultNames.get(result)!;\n}\nfunction setNames(result: Result, names: ReadonlyArray<null | string>): void {\n    resultNames.set(result, names);\n}\n\nfunction throwError(name: string, error: Error): never {\n    const wrapped = new Error(`deferred error during ABI decoding triggered accessing ${ name }`);\n    (<any>wrapped).error = error;\n    throw wrapped;\n}\n\nfunction toObject(names: ReadonlyArray<null | string>, items: Result, deep?: boolean): Record<string, any> | Array<any> {\n    if (names.indexOf(null) >= 0) {\n        return items.map((item, index) => {\n            if (item instanceof Result) {\n                return toObject(getNames(item), item, deep);\n            }\n            return item;\n        });\n    }\n\n    return (<Array<string>>names).reduce((accum, name, index) => {\n        let item = items.getValue(name);\n        if (!(name in accum)) {\n            if (deep && item instanceof Result) {\n                item = toObject(getNames(item), item, deep);\n            }\n            accum[name] = item;\n        }\n        return accum;\n    }, <Record<string, any>>{ });\n}\n\n\n/**\n *  A [[Result]] is a sub-class of Array, which allows accessing any\n *  of its values either positionally by its index or, if keys are\n *  provided by its name.\n *\n *  @_docloc: api/abi\n */\nexport class Result extends Array<any> {\n    // No longer used; but cannot be removed as it will remove the\n    // #private field from the .d.ts which may break backwards\n    // compatibility\n    readonly #names: ReadonlyArray<null | string>;\n\n    [ K: string | number ]: any\n\n    /**\n     *  @private\n     */\n    constructor(...args: Array<any>) {\n        // To properly sub-class Array so the other built-in\n        // functions work, the constructor has to behave fairly\n        // well. So, in the event we are created via fromItems()\n        // we build the read-only Result object we want, but on\n        // any other input, we use the default constructor\n\n        // constructor(guard: any, items: Array<any>, keys?: Array<null | string>);\n        const guard = args[0];\n        let items: Array<any> = args[1];\n        let names: Array<null | string> = (args[2] || [ ]).slice();\n\n        let wrap = true;\n        if (guard !== _guard) {\n            items = args;\n            names = [ ];\n            wrap = false;\n        }\n\n        // Can't just pass in ...items since an array of length 1\n        // is a special case in the super.\n        super(items.length);\n        items.forEach((item, index) => { this[index] = item; });\n\n        // Find all unique keys\n        const nameCounts = names.reduce((accum, name) => {\n            if (typeof(name) === \"string\") {\n                accum.set(name, (accum.get(name) || 0) + 1);\n            }\n            return accum;\n        }, <Map<string, number>>(new Map()));\n\n        // Remove any key thats not unique\n        setNames(this, Object.freeze(items.map((item, index) => {\n            const name = names[index];\n            if (name != null && nameCounts.get(name) === 1) {\n                return name;\n            }\n            return null;\n        })));\n\n        // Dummy operations to prevent TypeScript from complaining\n        this.#names = [ ];\n        if (this.#names == null) { void(this.#names); }\n\n        if (!wrap) { return; }\n\n        // A wrapped Result is immutable\n        Object.freeze(this);\n\n        // Proxy indices and names so we can trap deferred errors\n        const proxy = new Proxy(this, {\n            get: (target, prop, receiver) => {\n                if (typeof(prop) === \"string\") {\n\n                    // Index accessor\n                    if (prop.match(/^[0-9]+$/)) {\n                        const index = getNumber(prop, \"%index\");\n                        if (index < 0 || index >= this.length) {\n                            throw new RangeError(\"out of result range\");\n                        }\n\n                        const item = target[index];\n                        if (item instanceof Error) {\n                            throwError(`index ${ index }`, item);\n                        }\n                        return item;\n                    }\n\n                    // Pass important checks (like `then` for Promise) through\n                    if (passProperties.indexOf(prop) >= 0) {\n                        return Reflect.get(target, prop, receiver);\n                    }\n\n                    const value = target[prop];\n                    if (value instanceof Function) {\n                        // Make sure functions work with private variables\n                        // See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy#no_private_property_forwarding\n                        return function(this: any, ...args: Array<any>) {\n                            return value.apply((this === receiver) ? target: this, args);\n                        };\n\n                    } else if (!(prop in target)) {\n                        // Possible name accessor\n                        return target.getValue.apply((this === receiver) ? target: this, [ prop ]);\n                    }\n                }\n\n                return Reflect.get(target, prop, receiver);\n            }\n        });\n        setNames(proxy, getNames(this));\n        return proxy;\n    }\n\n    /**\n     *  Returns the Result as a normal Array. If %%deep%%, any children\n     *  which are Result objects are also converted to a normal Array.\n     *\n     *  This will throw if there are any outstanding deferred\n     *  errors.\n     */\n    toArray(deep?: boolean): Array<any> {\n        const result: Array<any> = [ ];\n        this.forEach((item, index) => {\n            if (item instanceof Error) { throwError(`index ${ index }`, item); }\n            if (deep && item instanceof Result) {\n                item = item.toArray(deep);\n            }\n            result.push(item);\n        });\n        return result;\n    }\n\n    /**\n     *  Returns the Result as an Object with each name-value pair. If\n     *  %%deep%%, any children which are Result objects are also\n     *  converted to an Object.\n     *\n     *  This will throw if any value is unnamed, or if there are\n     *  any outstanding deferred errors.\n     */\n    toObject(deep?: boolean): Record<string, any> {\n        const names = getNames(this);\n        return names.reduce((accum, name, index) => {\n\n            assert(name != null, `value at index ${ index } unnamed`, \"UNSUPPORTED_OPERATION\", {\n                operation: \"toObject()\"\n            });\n\n            return toObject(names, this, deep);\n        }, <Record<string, any>>{});\n    }\n\n    /**\n     *  @_ignore\n     */\n    slice(start?: number | undefined, end?: number | undefined): Result {\n        if (start == null) { start = 0; }\n        if (start < 0) {\n            start += this.length;\n            if (start < 0) { start = 0; }\n        }\n\n        if (end == null) { end = this.length; }\n        if (end < 0) {\n            end += this.length;\n            if (end < 0) { end = 0; }\n        }\n        if (end > this.length) { end = this.length; }\n\n        const _names = getNames(this);\n\n        const result: Array<any> = [ ], names: Array<null | string> = [ ];\n        for (let i = start; i < end; i++) {\n            result.push(this[i]);\n            names.push(_names[i]);\n        }\n\n        return new Result(_guard, result, names);\n    }\n\n    /**\n     *  @_ignore\n     */\n    filter(callback: (el: any, index: number, array: Result) => boolean, thisArg?: any): Result {\n        const _names = getNames(this);\n\n        const result: Array<any> = [ ], names: Array<null | string> = [ ];\n        for (let i = 0; i < this.length; i++) {\n            const item = this[i];\n            if (item instanceof Error) {\n                throwError(`index ${ i }`, item);\n            }\n\n            if (callback.call(thisArg, item, i, this)) {\n                result.push(item);\n                names.push(_names[i]);\n            }\n        }\n\n        return new Result(_guard, result, names);\n    }\n\n    /**\n     *  @_ignore\n     */\n    map<T extends any = any>(callback: (el: any, index: number, array: Result) => T, thisArg?: any): Array<T> {\n        const result: Array<T> = [ ];\n        for (let i = 0; i < this.length; i++) {\n            const item = this[i];\n            if (item instanceof Error) {\n                throwError(`index ${ i }`, item);\n            }\n\n            result.push(callback.call(thisArg, item, i, this));\n        }\n\n        return result;\n    }\n\n\n    /**\n     *  Returns the value for %%name%%.\n     *\n     *  Since it is possible to have a key whose name conflicts with\n     *  a method on a [[Result]] or its superclass Array, or any\n     *  JavaScript keyword, this ensures all named values are still\n     *  accessible by name.\n     */\n    getValue(name: string): any {\n        const index = getNames(this).indexOf(name);\n        if (index === -1) { return undefined; }\n\n        const value = this[index];\n\n        if (value instanceof Error) {\n            throwError(`property ${ JSON.stringify(name) }`, (<any>value).error);\n        }\n\n        return value;\n    }\n\n    /**\n     *  Creates a new [[Result]] for %%items%% with each entry\n     *  also accessible by its corresponding name in %%keys%%.\n     */\n    static fromItems(items: Array<any>, keys?: Array<null | string>): Result {\n        return new Result(_guard, items, keys);\n    }\n}\n\n/**\n *  Returns all errors found in a [[Result]].\n *\n *  Since certain errors encountered when creating a [[Result]] do\n *  not impact the ability to continue parsing data, they are\n *  deferred until they are actually accessed. Hence a faulty string\n *  in an Event that is never used does not impact the program flow.\n *\n *  However, sometimes it may be useful to access, identify or\n *  validate correctness of a [[Result]].\n *\n *  @_docloc api/abi\n */\nexport function checkResultErrors(result: Result): Array<{ path: Array<string | number>, error: Error }> {\n    // Find the first error (if any)\n    const errors: Array<{ path: Array<string | number>, error: Error }> = [ ];\n\n    const checkErrors = function(path: Array<string | number>, object: any): void {\n        if (!Array.isArray(object)) { return; }\n        for (let key in object) {\n            const childPath = path.slice();\n            childPath.push(key);\n\n            try {\n                 checkErrors(childPath, object[key]);\n            } catch (error: any) {\n                errors.push({ path: childPath, error: error });\n            }\n        }\n    }\n    checkErrors([ ], result);\n\n    return errors;\n\n}\n\nfunction getValue(value: BigNumberish): Uint8Array {\n    let bytes = toBeArray(value);\n\n    assert (bytes.length <= WordSize, \"value out-of-bounds\",\n        \"BUFFER_OVERRUN\", { buffer: bytes, length: WordSize, offset: bytes.length });\n\n    if (bytes.length !== WordSize) {\n        bytes = getBytesCopy(concat([ Padding.slice(bytes.length % WordSize), bytes ]));\n    }\n\n    return bytes;\n}\n\n/**\n *  @_ignore\n */\nexport abstract class Coder {\n\n    // The coder name:\n    //   - address, uint256, tuple, array, etc.\n    readonly name!: string;\n\n    // The fully expanded type, including composite types:\n    //   - address, uint256, tuple(address,bytes), uint256[3][4][],  etc.\n    readonly type!: string;\n\n    // The localName bound in the signature, in this example it is \"baz\":\n    //   - tuple(address foo, uint bar) baz\n    readonly localName!: string;\n\n    // Whether this type is dynamic:\n    //  - Dynamic: bytes, string, address[], tuple(boolean[]), etc.\n    //  - Not Dynamic: address, uint256, boolean[3], tuple(address, uint8)\n    readonly dynamic!: boolean;\n\n    constructor(name: string, type: string, localName: string, dynamic: boolean) {\n        defineProperties<Coder>(this, { name, type, localName, dynamic }, {\n            name: \"string\", type: \"string\", localName: \"string\", dynamic: \"boolean\"\n        });\n    }\n\n    _throwError(message: string, value: any): never {\n        assertArgument(false, message, this.localName, value);\n    }\n\n    abstract encode(writer: Writer, value: any): number;\n    abstract decode(reader: Reader): any;\n\n    abstract defaultValue(): any;\n}\n\n/**\n *  @_ignore\n */\nexport class Writer {\n    // An array of WordSize lengthed objects to concatenation\n    #data: Array<Uint8Array>;\n    #dataLength: number;\n\n    constructor() {\n        this.#data = [ ];\n        this.#dataLength = 0;\n    }\n\n    get data(): string {\n        return concat(this.#data);\n    }\n    get length(): number { return this.#dataLength; }\n\n    #writeData(data: Uint8Array): number {\n        this.#data.push(data);\n        this.#dataLength += data.length;\n        return data.length;\n    }\n\n    appendWriter(writer: Writer): number {\n        return this.#writeData(getBytesCopy(writer.data));\n    }\n\n    // Arrayish item; pad on the right to *nearest* WordSize\n    writeBytes(value: BytesLike): number {\n        let bytes = getBytesCopy(value);\n        const paddingOffset = bytes.length % WordSize;\n        if (paddingOffset) {\n            bytes = getBytesCopy(concat([ bytes, Padding.slice(paddingOffset) ]))\n        }\n        return this.#writeData(bytes);\n    }\n\n    // Numeric item; pad on the left *to* WordSize\n    writeValue(value: BigNumberish): number {\n        return this.#writeData(getValue(value));\n    }\n\n    // Inserts a numeric place-holder, returning a callback that can\n    // be used to asjust the value later\n    writeUpdatableValue(): (value: BigNumberish) => void {\n        const offset = this.#data.length;\n        this.#data.push(Padding);\n        this.#dataLength += WordSize;\n        return (value: BigNumberish) => {\n            this.#data[offset] = getValue(value);\n        };\n    }\n}\n\n/**\n *  @_ignore\n */\nexport class Reader {\n    // Allows incomplete unpadded data to be read; otherwise an error\n    // is raised if attempting to overrun the buffer. This is required\n    // to deal with an old Solidity bug, in which event data for\n    // external (not public thoguh) was tightly packed.\n    readonly allowLoose!: boolean;\n\n    readonly #data: Uint8Array;\n    #offset: number;\n\n    #bytesRead: number;\n    #parent: null | Reader;\n    #maxInflation: number;\n\n    constructor(data: BytesLike, allowLoose?: boolean, maxInflation?: number) {\n        defineProperties<Reader>(this, { allowLoose: !!allowLoose });\n\n        this.#data = getBytesCopy(data);\n        this.#bytesRead = 0;\n        this.#parent = null;\n        this.#maxInflation = (maxInflation != null) ? maxInflation: 1024;\n\n        this.#offset = 0;\n    }\n\n    get data(): string { return hexlify(this.#data); }\n    get dataLength(): number { return this.#data.length; }\n    get consumed(): number { return this.#offset; }\n    get bytes(): Uint8Array { return new Uint8Array(this.#data); }\n\n    #incrementBytesRead(count: number): void {\n        if (this.#parent) { return this.#parent.#incrementBytesRead(count); }\n\n        this.#bytesRead += count;\n\n        // Check for excessive inflation (see: #4537)\n        assert(this.#maxInflation < 1 || this.#bytesRead <= this.#maxInflation * this.dataLength, `compressed ABI data exceeds inflation ratio of ${ this.#maxInflation } ( see: https:/\\/github.com/ethers-io/ethers.js/issues/4537 )`,  \"BUFFER_OVERRUN\", {\n            buffer: getBytesCopy(this.#data), offset: this.#offset,\n            length: count, info: {\n                bytesRead: this.#bytesRead,\n                dataLength: this.dataLength\n            }\n        });\n    }\n\n    #peekBytes(offset: number, length: number, loose?: boolean): Uint8Array {\n        let alignedLength = Math.ceil(length / WordSize) * WordSize;\n        if (this.#offset + alignedLength > this.#data.length) {\n            if (this.allowLoose && loose && this.#offset + length <= this.#data.length) {\n                alignedLength = length;\n            } else {\n                assert(false, \"data out-of-bounds\", \"BUFFER_OVERRUN\", {\n                    buffer: getBytesCopy(this.#data),\n                    length: this.#data.length,\n                    offset: this.#offset + alignedLength\n                });\n            }\n        }\n        return this.#data.slice(this.#offset, this.#offset + alignedLength)\n    }\n\n    // Create a sub-reader with the same underlying data, but offset\n    subReader(offset: number): Reader {\n        const reader = new Reader(this.#data.slice(this.#offset + offset), this.allowLoose, this.#maxInflation);\n        reader.#parent = this;\n        return reader;\n    }\n\n    // Read bytes\n    readBytes(length: number, loose?: boolean): Uint8Array {\n        let bytes = this.#peekBytes(0, length, !!loose);\n        this.#incrementBytesRead(length);\n        this.#offset += bytes.length;\n        // @TODO: Make sure the length..end bytes are all 0?\n        return bytes.slice(0, length);\n    }\n\n    // Read a numeric values\n    readValue(): bigint {\n        return toBigInt(this.readBytes(WordSize));\n    }\n\n    readIndex(): number {\n        return toNumber(this.readBytes(WordSize));\n    }\n}\n", "\nexport {\n    createHash, createHmac, pbkdf2Sync, randomBytes\n} from \"crypto\";\n", "/**\n *  An **HMAC** enables verification that a given key was used\n *  to authenticate a payload.\n *\n *  See: [[link-wiki-hmac]]\n *\n *  @_subsection: api/crypto:HMAC  [about-hmac]\n */\nimport { createHmac } from \"./crypto.js\";\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _computeHmac = function(algorithm: \"sha256\" | \"sha512\", key: Uint8Array, data: Uint8Array): BytesLike {\n    return createHmac(algorithm, key).update(data).digest();\n}\n\nlet __computeHmac = _computeHmac;\n\n/**\n *  Return the HMAC for %%data%% using the %%key%% key with the underlying\n *  %%algo%% used for compression.\n *\n *  @example:\n *    key = id(\"some-secret\")\n *\n *    // Compute the HMAC\n *    computeHmac(\"sha256\", key, \"0x1337\")\n *    //_result:\n *\n *    // To compute the HMAC of UTF-8 data, the data must be\n *    // converted to UTF-8 bytes\n *    computeHmac(\"sha256\", key, toUtf8Bytes(\"Hello World\"))\n *    //_result:\n *\n */\nexport function computeHmac(algorithm: \"sha256\" | \"sha512\", _key: BytesLike, _data: BytesLike): string {\n    const key = getBytes(_key, \"key\");\n    const data = getBytes(_data, \"data\");\n    return hexlify(__computeHmac(algorithm, key, data));\n}\ncomputeHmac._ = _computeHmac;\ncomputeHmac.lock =  function() { locked = true; }\ncomputeHmac.register = function(func: (algorithm: \"sha256\" | \"sha512\", key: Uint8Array, data: Uint8Array) => BytesLike) {\n    if (locked) { throw new Error(\"computeHmac is locked\"); }\n    __computeHmac = func;\n}\nObject.freeze(computeHmac);\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`Wrong positive integer: ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`Expected boolean, not ${b}`);\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!(b instanceof Uint8Array)) throw new Error('Expected Uint8Array');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Expected Uint8Array of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(hash: Hash) {\n  if (typeof hash !== 'function' || typeof hash.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(hash.outputLen);\n  number(hash.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\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}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\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) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; 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(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: 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) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: 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) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: 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(Ah: number, Al: number, Bh: number, Bl: number) {\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) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: 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) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\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};\n// prettier-ignore\nconst u64 = {\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", "// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// See utils.ts for details.\n// The file will throw on node.js 14 and earlier.\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto =\n  nc && typeof nc === 'object' && 'webcrypto' in nc ? (nc.webcrypto as any) : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated, we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n\n// big-endian hardware is rare. Just in case someone still decides to run hashes:\n// early-throw an error because we don't support BE yet.\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\nif (!isLE) throw new Error('Non little-endian hardware is not supported');\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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/**\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  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\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.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => 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 in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  if (!u8a(data)) throw new Error(`expected Uint8Array, got ${typeof data}`);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\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\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst [SHA3_PI, SHA3_ROTL, _SHA3_IOTA]: [number[], number[], bigint[]] = [[], [], []];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    keccakP(this.state32, this.rounds);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n", "/**\n *  Cryptographic hashing functions\n *\n *  @_subsection: api/crypto:Hash Functions [about-crypto-hashing]\n */\n\nimport { keccak_256 } from \"@noble/hashes/sha3\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _keccak256 = function(data: Uint8Array): Uint8Array {\n    return keccak_256(data);\n}\n\nlet __keccak256: (data: Uint8Array) => BytesLike = _keccak256;\n\n/**\n *  Compute the cryptographic KECCAK256 hash of %%data%%.\n *\n *  The %%data%% **must** be a data representation, to compute the\n *  hash of UTF-8 data use the [[id]] function.\n *\n *  @returns DataHexstring\n *  @example:\n *    keccak256(\"0x\")\n *    //_result:\n *\n *    keccak256(\"0x1337\")\n *    //_result:\n *\n *    keccak256(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n *    // Strings are assumed to be DataHexString, otherwise it will\n *    // throw. To hash UTF-8 data, see the note above.\n *    keccak256(\"Hello World\")\n *    //_error:\n */\nexport function keccak256(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__keccak256(data));\n}\nkeccak256._ = _keccak256;\nkeccak256.lock = function(): void { locked = true; }\nkeccak256.register = function(func: (data: Uint8Array) => BytesLike) {\n    if (locked) { throw new TypeError(\"keccak256 is locked\"); }\n    __keccak256 = func;\n}\nObject.freeze(keccak256);\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n// Polyfill for Safari 14\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n// Base SHA2 class (RFC 6234)\nexport abstract class SHA2<T extends SHA2<T>> extends 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  // 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(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\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) {\n    exists(this);\n    output(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    this.buffer.subarray(pos).fill(0);\n    // we have less than padOffset left in buffer, so we cannot put length in 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    setBigUint64(view, 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 should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should 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() {\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.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "import { SHA2 } from './_sha2.js';\nimport { wrapConstructor } from './utils.js';\n\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160.html\n// https://homes.esat.kuleuven.be/~bosselae/ripemd160/pdf/AB-9601/AB-9601.pdf\nconst Rho = /* @__PURE__ */ new Uint8Array([7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8]);\nconst Id = /* @__PURE__ */ Uint8Array.from({ length: 16 }, (_, i) => i);\nconst Pi = /* @__PURE__ */ Id.map((i) => (9 * i + 5) % 16);\nlet idxL = [Id];\nlet idxR = [Pi];\nfor (let i = 0; i < 4; i++) for (let j of [idxL, idxR]) j.push(j[i].map((k) => Rho[k]));\n\nconst shifts = /* @__PURE__ */ [\n  [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n  [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n  [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n  [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n  [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => new Uint8Array(i));\nconst shiftsL = /* @__PURE__ */ idxL.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst shiftsR = /* @__PURE__ */ idxR.map((idx, i) => idx.map((j) => shifts[i][j]));\nconst Kl = /* @__PURE__ */ new Uint32Array([\n  0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\nconst Kr = /* @__PURE__ */ new Uint32Array([\n  0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\n// The rotate left (circular left shift) operation for uint32\nconst rotl = (word: number, shift: number) => (word << shift) | (word >>> (32 - shift));\n// It's called f() in spec.\nfunction f(group: number, x: number, y: number, z: number): number {\n  if (group === 0) return x ^ y ^ z;\n  else if (group === 1) return (x & y) | (~x & z);\n  else if (group === 2) return (x | ~y) ^ z;\n  else if (group === 3) return (x & z) | (y & ~z);\n  else return x ^ (y | ~z);\n}\n// Temporary buffer, not used to store anything between runs\nconst BUF = /* @__PURE__ */ new Uint32Array(16);\nexport class RIPEMD160 extends SHA2<RIPEMD160> {\n  private h0 = 0x67452301 | 0;\n  private h1 = 0xefcdab89 | 0;\n  private h2 = 0x98badcfe | 0;\n  private h3 = 0x10325476 | 0;\n  private h4 = 0xc3d2e1f0 | 0;\n\n  constructor() {\n    super(64, 20, 8, true);\n  }\n  protected get(): [number, number, number, number, number] {\n    const { h0, h1, h2, h3, h4 } = this;\n    return [h0, h1, h2, h3, h4];\n  }\n  protected set(h0: number, h1: number, h2: number, h3: number, h4: number) {\n    this.h0 = h0 | 0;\n    this.h1 = h1 | 0;\n    this.h2 = h2 | 0;\n    this.h3 = h3 | 0;\n    this.h4 = h4 | 0;\n  }\n  protected process(view: DataView, offset: number): void {\n    for (let i = 0; i < 16; i++, offset += 4) BUF[i] = view.getUint32(offset, true);\n    // prettier-ignore\n    let al = this.h0 | 0, ar = al,\n        bl = this.h1 | 0, br = bl,\n        cl = this.h2 | 0, cr = cl,\n        dl = this.h3 | 0, dr = dl,\n        el = this.h4 | 0, er = el;\n\n    // Instead of iterating 0 to 80, we split it into 5 groups\n    // And use the groups in constants, functions, etc. Much simpler\n    for (let group = 0; group < 5; group++) {\n      const rGroup = 4 - group;\n      const hbl = Kl[group], hbr = Kr[group]; // prettier-ignore\n      const rl = idxL[group], rr = idxR[group]; // prettier-ignore\n      const sl = shiftsL[group], sr = shiftsR[group]; // prettier-ignore\n      for (let i = 0; i < 16; i++) {\n        const tl = (rotl(al + f(group, bl, cl, dl) + BUF[rl[i]] + hbl, sl[i]) + el) | 0;\n        al = el, el = dl, dl = rotl(cl, 10) | 0, cl = bl, bl = tl; // prettier-ignore\n      }\n      // 2 loops are 10% faster\n      for (let i = 0; i < 16; i++) {\n        const tr = (rotl(ar + f(rGroup, br, cr, dr) + BUF[rr[i]] + hbr, sr[i]) + er) | 0;\n        ar = er, er = dr, dr = rotl(cr, 10) | 0, cr = br, br = tr; // prettier-ignore\n      }\n    }\n    // Add the compressed chunk to the current hash value\n    this.set(\n      (this.h1 + cl + dr) | 0,\n      (this.h2 + dl + er) | 0,\n      (this.h3 + el + ar) | 0,\n      (this.h4 + al + br) | 0,\n      (this.h0 + bl + cr) | 0\n    );\n  }\n  protected roundClean() {\n    BUF.fill(0);\n  }\n  destroy() {\n    this.destroyed = true;\n    this.buffer.fill(0);\n    this.set(0, 0, 0, 0, 0);\n  }\n}\n\n/**\n * RIPEMD-160 - a hash function from 1990s.\n * @param message - msg that would be hashed\n */\nexport const ripemd160 = /* @__PURE__ */ wrapConstructor(() => new RIPEMD160());\n", "import { ripemd160 as noble_ripemd160 } from \"@noble/hashes/ripemd160\";\n\nimport { getBytes,  hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _ripemd160 = function(data: Uint8Array): Uint8Array {\n    return noble_ripemd160(data);\n}\n\nlet __ripemd160: (data: Uint8Array) => BytesLike = _ripemd160;\n\n/**\n *  Compute the cryptographic RIPEMD-160 hash of %%data%%.\n *\n *  @_docloc: api/crypto:Hash Functions\n *  @returns DataHexstring\n *\n *  @example:\n *    ripemd160(\"0x\")\n *    //_result:\n *\n *    ripemd160(\"0x1337\")\n *    //_result:\n *\n *    ripemd160(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n */\nexport function ripemd160(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__ripemd160(data));\n}\nripemd160._ = _ripemd160;\nripemd160.lock = function(): void { locked = true; }\nripemd160.register = function(func: (data: Uint8Array) => BytesLike) {\n    if (locked) { throw new TypeError(\"ripemd160 is locked\"); }\n    __ripemd160 = func;\n}\nObject.freeze(ripemd160);\n", "/**\n *  A **Password-Based Key-Derivation Function** is designed to create\n *  a sequence of bytes suitible as a **key** from a human-rememberable\n *  password.\n *\n *  @_subsection: api/crypto:Passwords  [about-pbkdf]\n */\n\nimport { pbkdf2Sync } from \"./crypto.js\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nlet locked = false;\n\nconst _pbkdf2 = function(password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: \"sha256\" | \"sha512\"): BytesLike {\n    return pbkdf2Sync(password, salt, iterations, keylen, algo);\n}\n\nlet __pbkdf2 = _pbkdf2;\n\n/**\n *  Return the [[link-pbkdf2]] for %%keylen%% bytes for %%password%% using\n *  the %%salt%% and using %%iterations%% of %%algo%%.\n *\n *  This PBKDF is outdated and should not be used in new projects, but is\n *  required to decrypt older files.\n *\n *  @example:\n *    // The password must be converted to bytes, and it is generally\n *    // best practices to ensure the string has been normalized. Many\n *    // formats explicitly indicate the normalization form to use.\n *    password = \"hello\"\n *    passwordBytes = toUtf8Bytes(password, \"NFKC\")\n *\n *    salt = id(\"some-salt\")\n *\n *    // Compute the PBKDF2\n *    pbkdf2(passwordBytes, salt, 1024, 16, \"sha256\")\n *    //_result:\n */\nexport function pbkdf2(_password: BytesLike, _salt: BytesLike, iterations: number, keylen: number, algo: \"sha256\" | \"sha512\"): string {\n    const password = getBytes(_password, \"password\");\n    const salt = getBytes(_salt, \"salt\");\n    return hexlify(__pbkdf2(password, salt, iterations, keylen, algo));\n}\npbkdf2._ = _pbkdf2;\npbkdf2.lock = function(): void { locked = true; }\npbkdf2.register = function(func: (password: Uint8Array, salt: Uint8Array, iterations: number, keylen: number, algo: \"sha256\" | \"sha512\") => BytesLike) {\n    if (locked) { throw new Error(\"pbkdf2 is locked\"); }\n    __pbkdf2 = func;\n}\nObject.freeze(pbkdf2);\n", "/**\n *  A **Cryptographically Secure Random Value** is one that has been\n *  generated with additional care take to prevent side-channels\n *  from allowing others to detect it and prevent others from through\n *  coincidence generate the same values.\n *\n *  @_subsection: api/crypto:Random Values  [about-crypto-random]\n */\nimport { randomBytes as crypto_random } from \"./crypto.js\";\n\nlet locked = false;\n\nconst _randomBytes = function(length: number): Uint8Array {\n    return new Uint8Array(crypto_random(length));\n}\n\nlet __randomBytes = _randomBytes;\n\n/**\n *  Return %%length%% bytes of cryptographically secure random data.\n *\n *  @example:\n *    randomBytes(8)\n *    //_result:\n */\nexport function randomBytes(length: number): Uint8Array {\n    return __randomBytes(length);\n}\n\nrandomBytes._ = _randomBytes;\nrandomBytes.lock = function(): void { locked = true; }\nrandomBytes.register = function(func: (length: number) => Uint8Array) {\n    if (locked) { throw new Error(\"randomBytes is locked\"); }\n    __randomBytes = func;\n}\nObject.freeze(randomBytes);\n", "import { SHA2 } from './_sha2.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Choice: a ? b : c\nconst Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n// Majority function, true if any two inpust is true\nconst Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */new Uint32Array([\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// Initial state (first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):\n// prettier-ignore\nconst IV = /* @__PURE__ */new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nclass SHA256 extends SHA2<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = IV[0] | 0;\n  B = IV[1] | 0;\n  C = IV[2] | 0;\n  D = IV[3] | 0;\n  E = IV[4] | 0;\n  F = IV[5] | 0;\n  G = IV[6] | 0;\n  H = IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 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  ) {\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() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends 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: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_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    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\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() {\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  destroy() {\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 */\nexport const hmac = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "import { hash as assertHash, number as assertNumber } from './_assert.js';\nimport { hmac } from './hmac.js';\nimport { Hash, CHash, Input, createView, toBytes, checkOpts, asyncLoop } from './utils.js';\n\n// PBKDF (RFC 2898)\nexport type Pbkdf2Opt = {\n  c: number; // Iterations\n  dkLen?: number; // Desired key length in bytes (Intended output length in octets of the derived key\n  asyncTick?: number; // Maximum time in ms for which async function can block execution\n};\n// Common prologue and epilogue for sync/async functions\nfunction pbkdf2Init(hash: CHash, _password: Input, _salt: Input, _opts: Pbkdf2Opt) {\n  assertHash(hash);\n  const opts = checkOpts({ dkLen: 32, asyncTick: 10 }, _opts);\n  const { c, dkLen, asyncTick } = opts;\n  assertNumber(c);\n  assertNumber(dkLen);\n  assertNumber(asyncTick);\n  if (c < 1) throw new Error('PBKDF2: iterations (c) should be >= 1');\n  const password = toBytes(_password);\n  const salt = toBytes(_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  u.fill(0);\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 */\nexport function pbkdf2(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt) {\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 + \u22EF + 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 ^ \u22EF ^ 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\u22121)\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\nexport async function pbkdf2Async(hash: CHash, password: Input, salt: Input, opts: Pbkdf2Opt) {\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 + \u22EF + 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 ^ \u22EF ^ 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\u22121)\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", "import { number as assertNumber } from './_assert.js';\nimport { sha256 } from './sha256.js';\nimport { pbkdf2 } from './pbkdf2.js';\nimport { asyncLoop, checkOpts, Input, u32 } from './utils.js';\n\n// RFC 7914 Scrypt KDF\n\n// Left rotate for uint32\nconst rotl = (a: number, b: number) => (a << b) | (a >>> (32 - b));\n\n// The main Scrypt loop: uses Salsa extensively.\n// Six versions of the function were tried, this is the fastest one.\n// prettier-ignore\nfunction XorAndSalsa(\n  prev: Uint32Array,\n  pi: number,\n  input: Uint32Array,\n  ii: number,\n  out: Uint32Array,\n  oi: number\n) {\n  // Based on https://cr.yp.to/salsa20.html\n  // Xor blocks\n  let y00 = prev[pi++] ^ input[ii++], y01 = prev[pi++] ^ input[ii++];\n  let y02 = prev[pi++] ^ input[ii++], y03 = prev[pi++] ^ input[ii++];\n  let y04 = prev[pi++] ^ input[ii++], y05 = prev[pi++] ^ input[ii++];\n  let y06 = prev[pi++] ^ input[ii++], y07 = prev[pi++] ^ input[ii++];\n  let y08 = prev[pi++] ^ input[ii++], y09 = prev[pi++] ^ input[ii++];\n  let y10 = prev[pi++] ^ input[ii++], y11 = prev[pi++] ^ input[ii++];\n  let y12 = prev[pi++] ^ input[ii++], y13 = prev[pi++] ^ input[ii++];\n  let y14 = prev[pi++] ^ input[ii++], y15 = prev[pi++] ^ input[ii++];\n  // Save state to temporary variables (salsa)\n  let x00 = y00, x01 = y01, x02 = y02, x03 = y03,\n      x04 = y04, x05 = y05, x06 = y06, x07 = y07,\n      x08 = y08, x09 = y09, x10 = y10, x11 = y11,\n      x12 = y12, x13 = y13, x14 = y14, x15 = y15;\n  // Main loop (salsa)\n  for (let i = 0; i < 8; i += 2) {\n    x04 ^= rotl(x00 + x12 | 0,  7); x08 ^= rotl(x04 + x00 | 0,  9);\n    x12 ^= rotl(x08 + x04 | 0, 13); x00 ^= rotl(x12 + x08 | 0, 18);\n    x09 ^= rotl(x05 + x01 | 0,  7); x13 ^= rotl(x09 + x05 | 0,  9);\n    x01 ^= rotl(x13 + x09 | 0, 13); x05 ^= rotl(x01 + x13 | 0, 18);\n    x14 ^= rotl(x10 + x06 | 0,  7); x02 ^= rotl(x14 + x10 | 0,  9);\n    x06 ^= rotl(x02 + x14 | 0, 13); x10 ^= rotl(x06 + x02 | 0, 18);\n    x03 ^= rotl(x15 + x11 | 0,  7); x07 ^= rotl(x03 + x15 | 0,  9);\n    x11 ^= rotl(x07 + x03 | 0, 13); x15 ^= rotl(x11 + x07 | 0, 18);\n    x01 ^= rotl(x00 + x03 | 0,  7); x02 ^= rotl(x01 + x00 | 0,  9);\n    x03 ^= rotl(x02 + x01 | 0, 13); x00 ^= rotl(x03 + x02 | 0, 18);\n    x06 ^= rotl(x05 + x04 | 0,  7); x07 ^= rotl(x06 + x05 | 0,  9);\n    x04 ^= rotl(x07 + x06 | 0, 13); x05 ^= rotl(x04 + x07 | 0, 18);\n    x11 ^= rotl(x10 + x09 | 0,  7); x08 ^= rotl(x11 + x10 | 0,  9);\n    x09 ^= rotl(x08 + x11 | 0, 13); x10 ^= rotl(x09 + x08 | 0, 18);\n    x12 ^= rotl(x15 + x14 | 0,  7); x13 ^= rotl(x12 + x15 | 0,  9);\n    x14 ^= rotl(x13 + x12 | 0, 13); x15 ^= rotl(x14 + x13 | 0, 18);\n  }\n  // Write output (salsa)\n  out[oi++] = (y00 + x00) | 0; out[oi++] = (y01 + x01) | 0;\n  out[oi++] = (y02 + x02) | 0; out[oi++] = (y03 + x03) | 0;\n  out[oi++] = (y04 + x04) | 0; out[oi++] = (y05 + x05) | 0;\n  out[oi++] = (y06 + x06) | 0; out[oi++] = (y07 + x07) | 0;\n  out[oi++] = (y08 + x08) | 0; out[oi++] = (y09 + x09) | 0;\n  out[oi++] = (y10 + x10) | 0; out[oi++] = (y11 + x11) | 0;\n  out[oi++] = (y12 + x12) | 0; out[oi++] = (y13 + x13) | 0;\n  out[oi++] = (y14 + x14) | 0; out[oi++] = (y15 + x15) | 0;\n}\n\nfunction BlockMix(input: Uint32Array, ii: number, out: Uint32Array, oi: number, r: number) {\n  // The block B is r 128-byte chunks (which is equivalent of 2r 64-byte chunks)\n  let head = oi + 0;\n  let tail = oi + 16 * r;\n  for (let i = 0; i < 16; i++) out[tail + i] = input[ii + (2 * r - 1) * 16 + i]; // X \u2190 B[2r\u22121]\n  for (let i = 0; i < r; i++, head += 16, ii += 16) {\n    // We write odd & even Yi at same time. Even: 0bXXXXX0 Odd:  0bXXXXX1\n    XorAndSalsa(out, tail, input, ii, out, head); // head[i] = Salsa(blockIn[2*i] ^ tail[i-1])\n    if (i > 0) tail += 16; // First iteration overwrites tmp value in tail\n    XorAndSalsa(out, head, input, (ii += 16), out, tail); // tail[i] = Salsa(blockIn[2*i+1] ^ head[i])\n  }\n}\n\nexport type ScryptOpts = {\n  N: number; // cost factor\n  r: number; // block size\n  p: number; // parallelization\n  dkLen?: number; // key length\n  asyncTick?: number; // block execution max time\n  maxmem?: number;\n  onProgress?: (progress: number) => void;\n};\n\n// Common prologue and epilogue for sync/async functions\nfunction scryptInit(password: Input, salt: Input, _opts?: ScryptOpts) {\n  // Maxmem - 1GB+1KB by default\n  const opts = checkOpts(\n    {\n      dkLen: 32,\n      asyncTick: 10,\n      maxmem: 1024 ** 3 + 1024,\n    },\n    _opts\n  );\n  const { N, r, p, dkLen, asyncTick, maxmem, onProgress } = opts;\n  assertNumber(N);\n  assertNumber(r);\n  assertNumber(p);\n  assertNumber(dkLen);\n  assertNumber(asyncTick);\n  assertNumber(maxmem);\n  if (onProgress !== undefined && typeof onProgress !== 'function')\n    throw new Error('progressCb should be function');\n  const blockSize = 128 * r;\n  const blockSize32 = blockSize / 4;\n  if (N <= 1 || (N & (N - 1)) !== 0 || N >= 2 ** (blockSize / 8) || N > 2 ** 32) {\n    // NOTE: we limit N to be less than 2**32 because of 32 bit variant of Integrify function\n    // There is no JS engines that allows alocate more than 4GB per single Uint8Array for now, but can change in future.\n    throw new Error(\n      'Scrypt: N must be larger than 1, a power of 2, less than 2^(128 * r / 8) and less than 2^32'\n    );\n  }\n  if (p < 0 || p > ((2 ** 32 - 1) * 32) / blockSize) {\n    throw new Error(\n      'Scrypt: p must be a positive integer less than or equal to ((2^32 - 1) * 32) / (128 * r)'\n    );\n  }\n  if (dkLen < 0 || dkLen > (2 ** 32 - 1) * 32) {\n    throw new Error(\n      'Scrypt: dkLen should be positive integer less than or equal to (2^32 - 1) * 32'\n    );\n  }\n  const memUsed = blockSize * (N + p);\n  if (memUsed > maxmem) {\n    throw new Error(\n      `Scrypt: parameters too large, ${memUsed} (128 * r * (N + p)) > ${maxmem} (maxmem)`\n    );\n  }\n  // [B0...Bp\u22121] \u2190 PBKDF2HMAC-SHA256(Passphrase, Salt, 1, blockSize*ParallelizationFactor)\n  // Since it has only one iteration there is no reason to use async variant\n  const B = pbkdf2(sha256, password, salt, { c: 1, dkLen: blockSize * p });\n  const B32 = u32(B);\n  // Re-used between parallel iterations. Array(iterations) of B\n  const V = u32(new Uint8Array(blockSize * N));\n  const tmp = u32(new Uint8Array(blockSize));\n  let blockMixCb = () => {};\n  if (onProgress) {\n    const totalBlockMix = 2 * N * p;\n    // Invoke callback if progress changes from 10.01 to 10.02\n    // Allows to draw smooth progress bar on up to 8K screen\n    const callbackPer = Math.max(Math.floor(totalBlockMix / 10000), 1);\n    let blockMixCnt = 0;\n    blockMixCb = () => {\n      blockMixCnt++;\n      if (onProgress && (!(blockMixCnt % callbackPer) || blockMixCnt === totalBlockMix))\n        onProgress(blockMixCnt / totalBlockMix);\n    };\n  }\n  return { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick };\n}\n\nfunction scryptOutput(\n  password: Input,\n  dkLen: number,\n  B: Uint8Array,\n  V: Uint32Array,\n  tmp: Uint32Array\n) {\n  const res = pbkdf2(sha256, password, B, { c: 1, dkLen });\n  B.fill(0);\n  V.fill(0);\n  tmp.fill(0);\n  return res;\n}\n\n/**\n * Scrypt KDF from RFC 7914.\n * @param password - pass\n * @param salt - salt\n * @param opts - parameters\n * - `N` is cpu/mem work factor (power of 2 e.g. 2**18)\n * - `r` is block size (8 is common), fine-tunes sequential memory read size and performance\n * - `p` is parallelization factor (1 is common)\n * - `dkLen` is output key length in bytes e.g. 32.\n * - `asyncTick` - (default: 10) max time in ms for which async function can block execution\n * - `maxmem` - (default: `1024 ** 3 + 1024` aka 1GB+1KB). A limit that the app could use for scrypt\n * - `onProgress` - callback function that would be executed for progress report\n * @returns Derived key\n */\nexport function scrypt(password: Input, salt: Input, opts: ScryptOpts) {\n  const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb } = scryptInit(\n    password,\n    salt,\n    opts\n  );\n  for (let pi = 0; pi < p; pi++) {\n    const Pi = blockSize32 * pi;\n    for (let i = 0; i < blockSize32; i++) V[i] = B32[Pi + i]; // V[0] = B[i]\n    for (let i = 0, pos = 0; i < N - 1; i++) {\n      BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n      blockMixCb();\n    }\n    BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n    blockMixCb();\n    for (let i = 0; i < N; i++) {\n      // First u32 of the last 64-byte block (u32 is LE)\n      const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n      for (let k = 0; k < blockSize32; k++) tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n      BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n      blockMixCb();\n    }\n  }\n  return scryptOutput(password, dkLen, B, V, tmp);\n}\n\n/**\n * Scrypt KDF from RFC 7914.\n */\nexport async function scryptAsync(password: Input, salt: Input, opts: ScryptOpts) {\n  const { N, r, p, dkLen, blockSize32, V, B32, B, tmp, blockMixCb, asyncTick } = scryptInit(\n    password,\n    salt,\n    opts\n  );\n  for (let pi = 0; pi < p; pi++) {\n    const Pi = blockSize32 * pi;\n    for (let i = 0; i < blockSize32; i++) V[i] = B32[Pi + i]; // V[0] = B[i]\n    let pos = 0;\n    await asyncLoop(N - 1, asyncTick, () => {\n      BlockMix(V, pos, V, (pos += blockSize32), r); // V[i] = BlockMix(V[i-1]);\n      blockMixCb();\n    });\n    BlockMix(V, (N - 1) * blockSize32, B32, Pi, r); // Process last element\n    blockMixCb();\n    await asyncLoop(N, asyncTick, () => {\n      // First u32 of the last 64-byte block (u32 is LE)\n      const j = B32[Pi + blockSize32 - 16] % N; // j = Integrify(X) % iterations\n      for (let k = 0; k < blockSize32; k++) tmp[k] = B32[Pi + k] ^ V[j * blockSize32 + k]; // tmp = B ^ V[j]\n      BlockMix(tmp, 0, B32, Pi, r); // B = BlockMix(B ^ V[j])\n      blockMixCb();\n    });\n  }\n  return scryptOutput(password, dkLen, B, V, tmp);\n}\n", "import { scrypt as _nobleSync, scryptAsync as _nobleAsync } from \"@noble/hashes/scrypt\";\n\nimport { getBytes, hexlify as H } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n/**\n *  A callback during long-running operations to update any\n *  UI or provide programatic access to the progress.\n *\n *  The %%percent%% is a value between ``0`` and ``1``.\n *\n *  @_docloc: api/crypto:Passwords\n */\nexport type ProgressCallback = (percent: number) => void;\n\n\nlet lockedSync = false, lockedAsync = false;\n\nconst _scryptAsync = async function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) {\n    return await _nobleAsync(passwd, salt, { N, r, p, dkLen, onProgress });\n}\nconst _scryptSync = function(passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) {\n    return _nobleSync(passwd, salt, { N, r, p, dkLen });\n}\n\nlet __scryptAsync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, onProgress?: ProgressCallback) => Promise<BytesLike> = _scryptAsync;\nlet __scryptSync: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike = _scryptSync\n\n\n/**\n *  The [[link-wiki-scrypt]] uses a memory and cpu hard method of\n *  derivation to increase the resource cost to brute-force a password\n *  for a given key.\n *\n *  This means this algorithm is intentionally slow, and can be tuned to\n *  become slower. As computation and memory speed improve over time,\n *  increasing the difficulty maintains the cost of an attacker.\n *\n *  For example, if a target time of 5 seconds is used, a legitimate user\n *  which knows their password requires only 5 seconds to unlock their\n *  account. A 6 character password has 68 billion possibilities, which\n *  would require an attacker to invest over 10,000 years of CPU time. This\n *  is of course a crude example (as password generally aren't random),\n *  but demonstrates to value of imposing large costs to decryption.\n *\n *  For this reason, if building a UI which involved decrypting or\n *  encrypting datsa using scrypt, it is recommended to use a\n *  [[ProgressCallback]] (as event short periods can seem lik an eternity\n *  if the UI freezes). Including the phrase //\"decrypting\"// in the UI\n *  can also help, assuring the user their waiting is for a good reason.\n *\n *  @_docloc: api/crypto:Passwords\n *\n *  @example:\n *    // The password must be converted to bytes, and it is generally\n *    // best practices to ensure the string has been normalized. Many\n *    // formats explicitly indicate the normalization form to use.\n *    password = \"hello\"\n *    passwordBytes = toUtf8Bytes(password, \"NFKC\")\n *\n *    salt = id(\"some-salt\")\n *\n *    // Compute the scrypt\n *    scrypt(passwordBytes, salt, 1024, 8, 1, 16)\n *    //_result:\n */\nexport async function scrypt(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback): Promise<string> {\n    const passwd = getBytes(_passwd, \"passwd\");\n    const salt = getBytes(_salt, \"salt\");\n    return H(await __scryptAsync(passwd, salt, N, r, p, dkLen, progress));\n}\nscrypt._ = _scryptAsync;\nscrypt.lock = function(): void { lockedAsync = true; }\nscrypt.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number, progress?: ProgressCallback) => Promise<BytesLike>) {\n    if (lockedAsync) { throw new Error(\"scrypt is locked\"); }\n    __scryptAsync = func;\n}\nObject.freeze(scrypt);\n\n/**\n *  Provides a synchronous variant of [[scrypt]].\n *\n *  This will completely lock up and freeze the UI in a browser and will\n *  prevent any event loop from progressing. For this reason, it is\n *  preferred to use the [async variant](scrypt).\n *\n *  @_docloc: api/crypto:Passwords\n *\n *  @example:\n *    // The password must be converted to bytes, and it is generally\n *    // best practices to ensure the string has been normalized. Many\n *    // formats explicitly indicate the normalization form to use.\n *    password = \"hello\"\n *    passwordBytes = toUtf8Bytes(password, \"NFKC\")\n *\n *    salt = id(\"some-salt\")\n *\n *    // Compute the scrypt\n *    scryptSync(passwordBytes, salt, 1024, 8, 1, 16)\n *    //_result:\n */\nexport function scryptSync(_passwd: BytesLike, _salt: BytesLike, N: number, r: number, p: number, dkLen: number): string {\n    const passwd = getBytes(_passwd, \"passwd\");\n    const salt = getBytes(_salt, \"salt\");\n    return H(__scryptSync(passwd, salt, N, r, p, dkLen));\n}\nscryptSync._ = _scryptSync;\nscryptSync.lock = function(): void { lockedSync = true; }\nscryptSync.register = function(func: (passwd: Uint8Array, salt: Uint8Array, N: number, r: number, p: number, dkLen: number) => BytesLike) {\n    if (lockedSync) { throw new Error(\"scryptSync is locked\"); }\n    __scryptSync = func;\n}\nObject.freeze(scryptSync);\n", "import { createHash } from \"./crypto.js\";\n\nimport { getBytes, hexlify } from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n\nconst _sha256 = function(data: Uint8Array): Uint8Array {\n    return createHash(\"sha256\").update(data).digest();\n}\n\nconst _sha512 = function(data: Uint8Array): Uint8Array {\n    return createHash(\"sha512\").update(data).digest();\n}\n\nlet __sha256: (data: Uint8Array) => BytesLike = _sha256;\nlet __sha512: (data: Uint8Array) => BytesLike = _sha512;\n\nlet locked256 = false, locked512 = false;\n\n\n/**\n *  Compute the cryptographic SHA2-256 hash of %%data%%.\n *\n *  @_docloc: api/crypto:Hash Functions\n *  @returns DataHexstring\n *\n *  @example:\n *    sha256(\"0x\")\n *    //_result:\n *\n *    sha256(\"0x1337\")\n *    //_result:\n *\n *    sha256(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n *\n */\nexport function sha256(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__sha256(data));\n}\nsha256._ = _sha256;\nsha256.lock = function(): void { locked256 = true; }\nsha256.register = function(func: (data: Uint8Array) => BytesLike): void {\n    if (locked256) { throw new Error(\"sha256 is locked\"); }\n    __sha256 = func;\n}\nObject.freeze(sha256);\n\n\n/**\n *  Compute the cryptographic SHA2-512 hash of %%data%%.\n *\n *  @_docloc: api/crypto:Hash Functions\n *  @returns DataHexstring\n *\n *  @example:\n *    sha512(\"0x\")\n *    //_result:\n *\n *    sha512(\"0x1337\")\n *    //_result:\n *\n *    sha512(new Uint8Array([ 0x13, 0x37 ]))\n *    //_result:\n */\nexport function sha512(_data: BytesLike): string {\n    const data = getBytes(_data, \"data\");\n    return hexlify(__sha512(data));\n}\nsha512._ = _sha512;\nsha512.lock = function(): void { locked512 = true; }\nsha512.register = function(func: (data: Uint8Array) => BytesLike): void {\n    if (locked512) { throw new Error(\"sha512 is locked\"); }\n    __sha512 = func;\n}\nObject.freeze(sha256);\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst u8a = (a: any): a is Uint8Array => a instanceof Uint8Array;\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) =>\n  i.toString(16).padStart(2, '0')\n);\n/**\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${hex}`);\n}\n\n/**\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  const len = hex.length;\n  if (len % 2) throw new Error('padded hex string expected, got unpadded hex of length ' + len);\n  const array = new Uint8Array(len / 2);\n  for (let i = 0; i < array.length; i++) {\n    const j = i * 2;\n    const hexByte = hex.slice(j, j + 2);\n    const byte = Number.parseInt(hexByte, 16);\n    if (Number.isNaN(byte) || byte < 0) throw new Error('Invalid byte sequence');\n    array[i] = byte;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  if (!u8a(bytes)) throw new Error('Uint8Array expected');\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (u8a(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\nexport function concatBytes(...arrays: Uint8Array[]): Uint8Array {\n  const r = new Uint8Array(arrays.reduce((sum, a) => sum + a.length, 0));\n  let pad = 0; // walk through each item, ensure they have proper type\n  arrays.forEach((a) => {\n    if (!u8a(a)) throw new Error('Uint8Array expected');\n    r.set(a, pad);\n    pad += a.length;\n  });\n  return r;\n}\n\nexport function equalBytes(b1: Uint8Array, b2: Uint8Array) {\n  // We don't care about timing attacks here\n  if (b1.length !== b2.length) return false;\n  for (let i = 0; i < b1.length; i++) if (b1[i] !== b2[i]) return false;\n  return true;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport const bitSet = (n: bigint, pos: number, value: boolean) => {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n};\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || val instanceof Uint8Array,\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  numberToBytesBE,\n  numberToBytesLE,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendreConst = (f.ORDER - _1n) / _2n; // Integer arithmetic\n  return (x: T): boolean => {\n    const p = f.pow(x, legendreConst);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const opts = (W: number) => {\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, precomputesMap: Map<T, T[]>, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      // @ts-ignore\n      const W: number = P._WINDOW_SIZE || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = precomputesMap.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) {\n          precomputesMap.set(P, transform(comp));\n        }\n      }\n      return this.wNAF(W, comp, n);\n    },\n  };\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes } from './utils.js';\nimport { Group, GroupConstructor, wNAF, BasicCurve, validateBasic, AffinePoint } from './curve.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | true;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\n// ASN.1 DER encoding utilities\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  _parseInt(data: Uint8Array): { d: bigint; l: Uint8Array } {\n    const { Err: E } = DER;\n    if (data.length < 2 || data[0] !== 0x02) throw new E('Invalid signature integer tag');\n    const len = data[1];\n    const res = data.subarray(2, len + 2);\n    if (!len || res.length !== len) throw new E('Invalid signature integer: wrong length');\n    // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n    // since we always use positive integers here. It must always be empty:\n    // - add zero byte if exists\n    // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n    if (res[0] & 0b10000000) throw new E('Invalid signature integer: negative');\n    if (res[0] === 0x00 && !(res[1] & 0b10000000))\n      throw new E('Invalid signature integer: unnecessary leading zero');\n    return { d: b2n(res), l: data.subarray(len + 2) }; // d is data, l is left\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    if (!(data instanceof Uint8Array)) throw new Error('ui8a expected');\n    let l = data.length;\n    if (l < 2 || data[0] != 0x30) throw new E('Invalid signature tag');\n    if (data[1] !== l - 2) throw new E('Invalid signature: incorrect length');\n    const { d: r, l: sBytes } = DER._parseInt(data.subarray(2));\n    const { d: s, l: rBytesLeft } = DER._parseInt(sBytes);\n    if (rBytesLeft.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r, s };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    // Add leading zero if first byte has negative bit enabled. More details in '_parseInt'\n    const slice = (s: string): string => (Number.parseInt(s[0], 16) & 0b1000 ? '00' + s : s);\n    const h = (num: number | bigint) => {\n      const hex = num.toString(16);\n      return hex.length & 1 ? `0${hex}` : hex;\n    };\n    const s = slice(h(sig.s));\n    const r = slice(h(sig.r));\n    const shl = s.length / 2;\n    const rhl = r.length / 2;\n    const sl = h(shl);\n    const rl = h(rhl);\n    return `30${h(rhl + shl + 4)}02${rl}${r}02${sl}${s}`;\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>) {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return typeof num === 'bigint' && _0n < num && num < CURVE.n;\n  }\n  function assertGE(num: bigint) {\n    if (!isWithinCurveOrder(num)) throw new Error('Expected valid bigint: 0 < bigint < curve.n');\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (key instanceof Uint8Array) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, n); // disabled by default, enabled for BLS\n    assertGE(num); // num in range [1..N-1]\n    return num;\n  }\n\n  const pointPrecomputes = new Map<Point, Point[]>();\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(readonly px: T, readonly py: T, readonly pz: T) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n    _WINDOW_SIZE?: number;\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      this._WINDOW_SIZE = windowSize;\n      pointPrecomputes.delete(this);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      if (this.is0()) {\n        // (0, 1, 0) aka ZERO is invalid in most contexts.\n        // In BLS, ZERO can be serialized, so we allow it.\n        // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n        if (CURVE.allowInfinityPoint && !Fp.is0(this.py)) return;\n        throw new Error('bad point: ZERO');\n      }\n      // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n      const { x, y } = this.toAffine();\n      // Check if x, y are valid field elements\n      if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n      const left = Fp.sqr(y); // y\u00B2\n      const right = weierstrassEquation(x); // x\u00B3 + ax + b\n      if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n      if (!this.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    }\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    private is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, pointPrecomputes, n, (comp: Point[]) => {\n        const toInv = Fp.invertBatch(comp.map((p) => p.pz));\n        return comp.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n      });\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(n: bigint): Point {\n      const I = Point.ZERO;\n      if (n === _0n) return I;\n      assertGE(n); // Will throw on 0\n      if (n === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, n);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      assertGE(scalar);\n      let n = scalar;\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      const { endo } = CURVE;\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(n);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(n);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      const { px: x, py: y, pz: z } = this;\n      const is0 = this.is0();\n      // If invZ was 0, we return zero point. However we still want to execute\n      // all operations, so we replace invZ with a random number, 1.\n      if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n      const ax = Fp.mul(x, iz);\n      const ay = Fp.mul(y, iz);\n      const zz = Fp.mul(z, iz);\n      if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n      if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n      return { x: ax, y: ay };\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function isValidFieldElement(num: bigint): boolean {\n    return _0n < num && num < Fp.ORDER; // 0 is banned since it's not invertible FE\n  }\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!isValidFieldElement(x)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(readonly r: bigint, readonly s: bigint, readonly recovery?: number) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      // can use assertGE here\n      if (!isWithinCurveOrder(this.r)) throw new Error('r must be 0 < r < CURVE.n');\n      if (!isWithinCurveOrder(this.s)) throw new Error('s must be 0 < s < CURVE.n');\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = item instanceof Uint8Array;\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    if (typeof num !== 'bigint') throw new Error('bigint expected');\n    if (!(_0n <= num && num < ORDER_MASK))\n      throw new Error(`bigint expected < 2^${CURVE.nBitLength}`);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || sg instanceof Uint8Array) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { weierstrass, CurveType } from './abstract/weierstrass.js';\nimport { CHash } from './abstract/utils.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { Field, mod, pow2 } from './abstract/modular.js';\nimport { ProjPointType as PointType, mapToCurveSimpleSWU } from './abstract/weierstrass.js';\nimport type { Hex, PrivKey } from './abstract/utils.js';\nimport { bytesToNumberBE, concatBytes, ensureBytes, numberToBytesBE } from './abstract/utils.js';\nimport { createHasher, isogenyMap } from './abstract/hash-to-curve.js';\nimport { createCurve } from './_shortw_utils.js';\n\nconst secp256k1P = BigInt('0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f');\nconst secp256k1N = BigInt('0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141');\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst divNearest = (a: bigint, b: bigint) => (a + b / _2n) / b;\n\n/**\n * \u221An = n^((p+1)/4) for fields p = 3 mod 4. We unwrap the loop and multiply bit-by-bit.\n * (P+1n/4n).toString(2) would produce bits [223x 1, 0, 22x 1, 4x 0, 11, 00]\n */\nfunction sqrtMod(y: bigint): bigint {\n  const P = secp256k1P;\n  // prettier-ignore\n  const _3n = BigInt(3), _6n = BigInt(6), _11n = BigInt(11), _22n = BigInt(22);\n  // prettier-ignore\n  const _23n = BigInt(23), _44n = BigInt(44), _88n = BigInt(88);\n  const b2 = (y * y * y) % P; // x^3, 11\n  const b3 = (b2 * b2 * y) % P; // x^7\n  const b6 = (pow2(b3, _3n, P) * b3) % P;\n  const b9 = (pow2(b6, _3n, P) * b3) % P;\n  const b11 = (pow2(b9, _2n, P) * b2) % P;\n  const b22 = (pow2(b11, _11n, P) * b11) % P;\n  const b44 = (pow2(b22, _22n, P) * b22) % P;\n  const b88 = (pow2(b44, _44n, P) * b44) % P;\n  const b176 = (pow2(b88, _88n, P) * b88) % P;\n  const b220 = (pow2(b176, _44n, P) * b44) % P;\n  const b223 = (pow2(b220, _3n, P) * b3) % P;\n  const t1 = (pow2(b223, _23n, P) * b22) % P;\n  const t2 = (pow2(t1, _6n, P) * b2) % P;\n  const root = pow2(t2, _2n, P);\n  if (!Fp.eql(Fp.sqr(root), y)) throw new Error('Cannot find square root');\n  return root;\n}\n\nconst Fp = Field(secp256k1P, undefined, undefined, { sqrt: sqrtMod });\n\nexport const secp256k1 = createCurve(\n  {\n    a: BigInt(0), // equation params: a, b\n    b: BigInt(7), // Seem to be rigid: bitcointalk.org/index.php?topic=289795.msg3183975#msg3183975\n    Fp, // Field's prime: 2n**256n - 2n**32n - 2n**9n - 2n**8n - 2n**7n - 2n**6n - 2n**4n - 1n\n    n: secp256k1N, // Curve order, total count of valid points in the field\n    // Base point (x, y) aka generator point\n    Gx: BigInt('55066263022277343669578718895168534326250603453777594175500187360389116729240'),\n    Gy: BigInt('32670510020758816978083085130507043184471273380659243275938904335757337482424'),\n    h: BigInt(1), // Cofactor\n    lowS: true, // Allow only low-S signatures by default in sign() and verify()\n    /**\n     * secp256k1 belongs to Koblitz curves: it has efficiently computable endomorphism.\n     * Endomorphism uses 2x less RAM, speeds up precomputation by 2x and ECDH / key recovery by 20%.\n     * For precomputed wNAF it trades off 1/2 init time & 1/3 ram for 20% perf hit.\n     * Explanation: https://gist.github.com/paulmillr/eb670806793e84df628a7c434a873066\n     */\n    endo: {\n      beta: BigInt('0x7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee'),\n      splitScalar: (k: bigint) => {\n        const n = secp256k1N;\n        const a1 = BigInt('0x3086d221a7d46bcde86c90e49284eb15');\n        const b1 = -_1n * BigInt('0xe4437ed6010e88286f547fa90abfe4c3');\n        const a2 = BigInt('0x114ca50f7a8e2f3f657c1108d9d44cfd8');\n        const b2 = a1;\n        const POW_2_128 = BigInt('0x100000000000000000000000000000000'); // (2n**128n).toString(16)\n\n        const c1 = divNearest(b2 * k, n);\n        const c2 = divNearest(-b1 * k, n);\n        let k1 = mod(k - c1 * a1 - c2 * a2, n);\n        let k2 = mod(-c1 * b1 - c2 * b2, n);\n        const k1neg = k1 > POW_2_128;\n        const k2neg = k2 > POW_2_128;\n        if (k1neg) k1 = n - k1;\n        if (k2neg) k2 = n - k2;\n        if (k1 > POW_2_128 || k2 > POW_2_128) {\n          throw new Error('splitScalar: Endomorphism failed, k=' + k);\n        }\n        return { k1neg, k1, k2neg, k2 };\n      },\n    },\n  },\n  sha256\n);\n\n// Schnorr signatures are superior to ECDSA from above. Below is Schnorr-specific BIP0340 code.\n// https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki\nconst _0n = BigInt(0);\nconst fe = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1P;\nconst ge = (x: bigint) => typeof x === 'bigint' && _0n < x && x < secp256k1N;\n/** An object mapping tags to their tagged hash prefix of [SHA256(tag) | SHA256(tag)] */\nconst TAGGED_HASH_PREFIXES: { [tag: string]: Uint8Array } = {};\nfunction taggedHash(tag: string, ...messages: Uint8Array[]): Uint8Array {\n  let tagP = TAGGED_HASH_PREFIXES[tag];\n  if (tagP === undefined) {\n    const tagH = sha256(Uint8Array.from(tag, (c) => c.charCodeAt(0)));\n    tagP = concatBytes(tagH, tagH);\n    TAGGED_HASH_PREFIXES[tag] = tagP;\n  }\n  return sha256(concatBytes(tagP, ...messages));\n}\n\n// ECDSA compact points are 33-byte. Schnorr is 32: we strip first byte 0x02 or 0x03\nconst pointToBytes = (point: PointType<bigint>) => point.toRawBytes(true).slice(1);\nconst numTo32b = (n: bigint) => numberToBytesBE(n, 32);\nconst modP = (x: bigint) => mod(x, secp256k1P);\nconst modN = (x: bigint) => mod(x, secp256k1N);\nconst Point = secp256k1.ProjectivePoint;\nconst GmulAdd = (Q: PointType<bigint>, a: bigint, b: bigint) =>\n  Point.BASE.multiplyAndAddUnsafe(Q, a, b);\n\n// Calculate point, scalar and bytes\nfunction schnorrGetExtPubKey(priv: PrivKey) {\n  let d_ = secp256k1.utils.normPrivateKeyToScalar(priv); // same method executed in fromPrivateKey\n  let p = Point.fromPrivateKey(d_); // P = d'\u22C5G; 0 < d' < n check is done inside\n  const scalar = p.hasEvenY() ? d_ : modN(-d_);\n  return { scalar: scalar, bytes: pointToBytes(p) };\n}\n/**\n * lift_x from BIP340. Convert 32-byte x coordinate to elliptic curve point.\n * @returns valid point checked for being on-curve\n */\nfunction lift_x(x: bigint): PointType<bigint> {\n  if (!fe(x)) throw new Error('bad x: need 0 < x < p'); // Fail if x \u2265 p.\n  const xx = modP(x * x);\n  const c = modP(xx * x + BigInt(7)); // Let c = x\u00B3 + 7 mod p.\n  let y = sqrtMod(c); // Let y = c^(p+1)/4 mod p.\n  if (y % _2n !== _0n) y = modP(-y); // Return the unique point P such that x(P) = x and\n  const p = new Point(x, y, _1n); // y(P) = y if y mod 2 = 0 or y(P) = p-y otherwise.\n  p.assertValidity();\n  return p;\n}\n/**\n * Create tagged hash, convert it to bigint, reduce modulo-n.\n */\nfunction challenge(...args: Uint8Array[]): bigint {\n  return modN(bytesToNumberBE(taggedHash('BIP0340/challenge', ...args)));\n}\n\n/**\n * Schnorr public key is just `x` coordinate of Point as per BIP340.\n */\nfunction schnorrGetPublicKey(privateKey: Hex): Uint8Array {\n  return schnorrGetExtPubKey(privateKey).bytes; // d'=int(sk). Fail if d'=0 or d'\u2265n. Ret bytes(d'\u22C5G)\n}\n\n/**\n * Creates Schnorr signature as per BIP340. Verifies itself before returning anything.\n * auxRand is optional and is not the sole source of k generation: bad CSPRNG won't be dangerous.\n */\nfunction schnorrSign(\n  message: Hex,\n  privateKey: PrivKey,\n  auxRand: Hex = randomBytes(32)\n): Uint8Array {\n  const m = ensureBytes('message', message);\n  const { bytes: px, scalar: d } = schnorrGetExtPubKey(privateKey); // checks for isWithinCurveOrder\n  const a = ensureBytes('auxRand', auxRand, 32); // Auxiliary random data a: a 32-byte array\n  const t = numTo32b(d ^ bytesToNumberBE(taggedHash('BIP0340/aux', a))); // Let t be the byte-wise xor of bytes(d) and hash/aux(a)\n  const rand = taggedHash('BIP0340/nonce', t, px, m); // Let rand = hash/nonce(t || bytes(P) || m)\n  const k_ = modN(bytesToNumberBE(rand)); // Let k' = int(rand) mod n\n  if (k_ === _0n) throw new Error('sign failed: k is zero'); // Fail if k' = 0.\n  const { bytes: rx, scalar: k } = schnorrGetExtPubKey(k_); // Let R = k'\u22C5G.\n  const e = challenge(rx, px, m); // Let e = int(hash/challenge(bytes(R) || bytes(P) || m)) mod n.\n  const sig = new Uint8Array(64); // Let sig = bytes(R) || bytes((k + ed) mod n).\n  sig.set(rx, 0);\n  sig.set(numTo32b(modN(k + e * d)), 32);\n  // If Verify(bytes(P), m, sig) (see below) returns failure, abort\n  if (!schnorrVerify(sig, m, px)) throw new Error('sign: Invalid signature produced');\n  return sig;\n}\n\n/**\n * Verifies Schnorr signature.\n * Will swallow errors & return false except for initial type validation of arguments.\n */\nfunction schnorrVerify(signature: Hex, message: Hex, publicKey: Hex): boolean {\n  const sig = ensureBytes('signature', signature, 64);\n  const m = ensureBytes('message', message);\n  const pub = ensureBytes('publicKey', publicKey, 32);\n  try {\n    const P = lift_x(bytesToNumberBE(pub)); // P = lift_x(int(pk)); fail if that fails\n    const r = bytesToNumberBE(sig.subarray(0, 32)); // Let r = int(sig[0:32]); fail if r \u2265 p.\n    if (!fe(r)) return false;\n    const s = bytesToNumberBE(sig.subarray(32, 64)); // Let s = int(sig[32:64]); fail if s \u2265 n.\n    if (!ge(s)) return false;\n    const e = challenge(numTo32b(r), pointToBytes(P), m); // int(challenge(bytes(r)||bytes(P)||m))%n\n    const R = GmulAdd(P, s, modN(-e)); // R = s\u22C5G - e\u22C5P\n    if (!R || !R.hasEvenY() || R.toAffine().x !== r) return false; // -eP == (n-e)P\n    return true; // Fail if is_infinite(R) / not has_even_y(R) / x(R) \u2260 r.\n  } catch (error) {\n    return false;\n  }\n}\n\nexport const schnorr = /* @__PURE__ */ (() => ({\n  getPublicKey: schnorrGetPublicKey,\n  sign: schnorrSign,\n  verify: schnorrVerify,\n  utils: {\n    randomPrivateKey: secp256k1.utils.randomPrivateKey,\n    lift_x,\n    pointToBytes,\n    numberToBytesBE,\n    bytesToNumberBE,\n    taggedHash,\n    mod,\n  },\n}))();\n\nconst isoMap = /* @__PURE__ */ (() =>\n  isogenyMap(\n    Fp,\n    [\n      // xNum\n      [\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c7',\n        '0x7d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c6581',\n        '0x534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262',\n        '0x8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c',\n      ],\n      // xDen\n      [\n        '0xd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b',\n        '0xedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d14',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n      // yNum\n      [\n        '0x4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c',\n        '0xc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a3',\n        '0x29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931',\n        '0x2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d84',\n      ],\n      // yDen\n      [\n        '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffff93b',\n        '0x7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c2573',\n        '0x6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f',\n        '0x0000000000000000000000000000000000000000000000000000000000000001', // LAST 1\n      ],\n    ].map((i) => i.map((j) => BigInt(j))) as [bigint[], bigint[], bigint[], bigint[]]\n  ))();\nconst mapSWU = /* @__PURE__ */ (() =>\n  mapToCurveSimpleSWU(Fp, {\n    A: BigInt('0x3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533'),\n    B: BigInt('1771'),\n    Z: Fp.create(BigInt('-11')),\n  }))();\nconst htf = /* @__PURE__ */ (() =>\n  createHasher(\n    secp256k1.ProjectivePoint,\n    (scalars: bigint[]) => {\n      const { x, y } = mapSWU(Fp.create(scalars[0]));\n      return isoMap(x, y);\n    },\n    {\n      DST: 'secp256k1_XMD:SHA-256_SSWU_RO_',\n      encodeDST: 'secp256k1_XMD:SHA-256_SSWU_NU_',\n      p: Fp.ORDER,\n      m: 1,\n      k: 128,\n      expand: 'xmd',\n      hash: sha256,\n    }\n  ))();\nexport const hashToCurve = /* @__PURE__ */ (() => htf.hashToCurve)();\nexport const encodeToCurve = /* @__PURE__ */ (() => htf.encodeToCurve)();\n", "\n/**\n *  A constant for the zero address.\n *\n *  (**i.e.** ``\"0x0000000000000000000000000000000000000000\"``)\n */\nexport const ZeroAddress: string = \"0x0000000000000000000000000000000000000000\";\n\n", "/**\n *  A constant for the zero hash.\n *\n *  (**i.e.** ``\"0x0000000000000000000000000000000000000000000000000000000000000000\"``)\n */\nexport const ZeroHash: string = \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n\n", "\n/**\n *  A constant for the order N for the secp256k1 curve.\n *\n *  (**i.e.** ``0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n``)\n */\nexport const N: bigint = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\n\n/**\n *  A constant for the number of wei in a single ether.\n *\n *  (**i.e.** ``1000000000000000000n``)\n */\nexport const WeiPerEther: bigint = BigInt(\"1000000000000000000\");\n\n/**\n *  A constant for the maximum value for a ``uint256``.\n *\n *  (**i.e.** ``0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn``)\n */\nexport const MaxUint256: bigint = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n/**\n *  A constant for the minimum value for an ``int256``.\n *\n *  (**i.e.** ``-8000000000000000000000000000000000000000000000000000000000000000n``)\n */\nexport const MinInt256: bigint = BigInt(\"0x8000000000000000000000000000000000000000000000000000000000000000\") * BigInt(-1);\n\n/**\n *  A constant for the maximum value for an ``int256``.\n *\n *  (**i.e.** ``0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn``)\n */\nexport const MaxInt256: bigint = BigInt(\"0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n", "// NFKC (composed)             // (decomposed)\n\n/**\n *  A constant for the ether symbol (normalized using NFKC).\n *\n *  (**i.e.** ``\"\\\\u039e\"``)\n */\nexport const EtherSymbol: string = \"\\u039e\";  // \"\\uD835\\uDF63\";\n\n\n/**\n *  A constant for the [[link-eip-191]] personal message prefix.\n *\n *  (**i.e.** ``\"\\\\x19Ethereum Signed Message:\\\\n\"``)\n */\nexport const MessagePrefix: string = \"\\x19Ethereum Signed Message:\\n\";\n", "\nimport { ZeroHash } from \"../constants/index.js\";\nimport {\n    concat, dataLength, getBigInt, getBytes, getNumber, hexlify,\n    toBeArray, isHexString, zeroPadValue,\n    assertArgument, assertPrivate\n} from \"../utils/index.js\";\n\nimport type {\n    BigNumberish, BytesLike, Numeric\n} from \"../utils/index.js\";\n\n\n// Constants\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27);\nconst BN_28 = BigInt(28);\nconst BN_35 = BigInt(35);\n\n\nconst _guard = { };\n\n// @TODO: Allow Uint8Array\n\n/**\n *  A SignatureLike\n *\n *  @_docloc: api/crypto:Signing\n */\nexport type SignatureLike = Signature | string | {\n    r: string;\n    s: string;\n    v: BigNumberish;\n    yParity?: 0 | 1;\n    yParityAndS?: string;\n} | {\n    r: string;\n    yParityAndS: string;\n    yParity?: 0 | 1;\n    s?: string;\n    v?: number;\n} | {\n    r: string;\n    s: string;\n    yParity: 0 | 1;\n    v?: BigNumberish;\n    yParityAndS?: string;\n};\n\nfunction toUint256(value: BigNumberish): string {\n    return zeroPadValue(toBeArray(value), 32);\n}\n\n/**\n *  A Signature  @TODO\n *\n *\n *  @_docloc: api/crypto:Signing\n */\nexport class Signature {\n    #r: string;\n    #s: string;\n    #v: 27 | 28;\n    #networkV: null | bigint;\n\n    /**\n     *  The ``r`` value for a signautre.\n     *\n     *  This represents the ``x`` coordinate of a \"reference\" or\n     *  challenge point, from which the ``y`` can be computed.\n     */\n    get r(): string { return this.#r; }\n    set r(value: BytesLike) {\n        assertArgument(dataLength(value) === 32, \"invalid r\", \"value\", value);\n        this.#r = hexlify(value);\n    }\n\n    /**\n     *  The ``s`` value for a signature.\n     */\n    get s(): string { return this.#s; }\n    set s(_value: BytesLike) {\n        assertArgument(dataLength(_value) === 32, \"invalid s\", \"value\", _value);\n        const value = hexlify(_value);\n        assertArgument(parseInt(value.substring(0, 3)) < 8, \"non-canonical s\", \"value\", value);\n        this.#s = value;\n    }\n\n    /**\n     *  The ``v`` value for a signature.\n     *\n     *  Since a given ``x`` value for ``r`` has two possible values for\n     *  its correspondin ``y``, the ``v`` indicates which of the two ``y``\n     *  values to use.\n     *\n     *  It is normalized to the values ``27`` or ``28`` for legacy\n     *  purposes.\n     */\n    get v(): 27 | 28 { return this.#v; }\n    set v(value: BigNumberish) {\n        const v = getNumber(value, \"value\");\n        assertArgument(v === 27 || v === 28, \"invalid v\", \"v\", value);\n        this.#v = v;\n    }\n\n    /**\n     *  The EIP-155 ``v`` for legacy transactions. For non-legacy\n     *  transactions, this value is ``null``.\n     */\n    get networkV(): null | bigint { return this.#networkV; }\n\n    /**\n     *  The chain ID for EIP-155 legacy transactions. For non-legacy\n     *  transactions, this value is ``null``.\n     */\n    get legacyChainId(): null | bigint {\n        const v = this.networkV;\n        if (v == null) { return null; }\n        return Signature.getChainId(v);\n    }\n\n    /**\n     *  The ``yParity`` for the signature.\n     *\n     *  See ``v`` for more details on how this value is used.\n     */\n    get yParity(): 0 | 1 {\n        return (this.v === 27) ? 0: 1;\n    }\n\n    /**\n     *  The [[link-eip-2098]] compact representation of the ``yParity``\n     *  and ``s`` compacted into a single ``bytes32``.\n     */\n    get yParityAndS(): string {\n        // The EIP-2098 compact representation\n        const yParityAndS = getBytes(this.s);\n        if (this.yParity) { yParityAndS[0] |= 0x80; }\n        return hexlify(yParityAndS);\n    }\n\n    /**\n     *  The [[link-eip-2098]] compact representation.\n     */\n    get compactSerialized(): string {\n        return concat([ this.r, this.yParityAndS ]);\n    }\n\n    /**\n     *  The serialized representation.\n     */\n    get serialized(): string {\n        return concat([ this.r, this.s, (this.yParity ? \"0x1c\": \"0x1b\") ]);\n    }\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, r: string, s: string, v: 27 | 28) {\n        assertPrivate(guard, _guard, \"Signature\");\n        this.#r = r;\n        this.#s = s;\n        this.#v = v;\n        this.#networkV = null;\n    }\n\n    [Symbol.for('nodejs.util.inspect.custom')](): string {\n        return `Signature { r: \"${ this.r }\", s: \"${ this.s }\", yParity: ${ this.yParity }, networkV: ${ this.networkV } }`;\n    }\n\n    /**\n     *  Returns a new identical [[Signature]].\n     */\n    clone(): Signature {\n        const clone = new Signature(_guard, this.r, this.s, this.v);\n        if (this.networkV) { clone.#networkV = this.networkV; }\n        return clone;\n    }\n\n    /**\n     *  Returns a representation that is compatible with ``JSON.stringify``.\n     */\n    toJSON(): any {\n        const networkV = this.networkV;\n        return {\n            _type: \"signature\",\n            networkV: ((networkV != null) ? networkV.toString(): null),\n            r: this.r, s: this.s, v: this.v,\n        };\n    }\n\n    /**\n     *  Compute the chain ID from the ``v`` in a legacy EIP-155 transactions.\n     *\n     *  @example:\n     *    Signature.getChainId(45)\n     *    //_result:\n     *\n     *    Signature.getChainId(46)\n     *    //_result:\n     */\n    static getChainId(v: BigNumberish): bigint {\n        const bv = getBigInt(v, \"v\");\n\n        // The v is not an EIP-155 v, so it is the unspecified chain ID\n        if ((bv == BN_27) || (bv == BN_28)) { return BN_0; }\n\n        // Bad value for an EIP-155 v\n        assertArgument(bv >= BN_35, \"invalid EIP-155 v\", \"v\", v);\n\n        return (bv - BN_35) / BN_2;\n    }\n\n    /**\n     *  Compute the ``v`` for a chain ID for a legacy EIP-155 transactions.\n     *\n     *  Legacy transactions which use [[link-eip-155]] hijack the ``v``\n     *  property to include the chain ID.\n     *\n     *  @example:\n     *    Signature.getChainIdV(5, 27)\n     *    //_result:\n     *\n     *    Signature.getChainIdV(5, 28)\n     *    //_result:\n     *\n     */\n    static getChainIdV(chainId: BigNumberish, v: 27 | 28): bigint {\n        return (getBigInt(chainId) * BN_2) + BigInt(35 + v - 27);\n    }\n\n    /**\n     *  Compute the normalized legacy transaction ``v`` from a ``yParirty``,\n     *  a legacy transaction ``v`` or a legacy [[link-eip-155]] transaction.\n     *\n     *  @example:\n     *    // The values 0 and 1 imply v is actually yParity\n     *    Signature.getNormalizedV(0)\n     *    //_result:\n     *\n     *    // Legacy non-EIP-1559 transaction (i.e. 27 or 28)\n     *    Signature.getNormalizedV(27)\n     *    //_result:\n     *\n     *    // Legacy EIP-155 transaction (i.e. >= 35)\n     *    Signature.getNormalizedV(46)\n     *    //_result:\n     *\n     *    // Invalid values throw\n     *    Signature.getNormalizedV(5)\n     *    //_error:\n     */\n    static getNormalizedV(v: BigNumberish): 27 | 28 {\n        const bv = getBigInt(v);\n\n        if (bv === BN_0 || bv === BN_27) { return 27; }\n        if (bv === BN_1 || bv === BN_28) { return 28; }\n\n        assertArgument(bv >= BN_35, \"invalid v\", \"v\", v);\n\n        // Otherwise, EIP-155 v means odd is 27 and even is 28\n        return (bv & BN_1) ? 27: 28;\n    }\n\n    /**\n     *  Creates a new [[Signature]].\n     *\n     *  If no %%sig%% is provided, a new [[Signature]] is created\n     *  with default values.\n     *\n     *  If %%sig%% is a string, it is parsed.\n     */\n    static from(sig?: SignatureLike): Signature {\n        function assertError(check: unknown, message: string): asserts check {\n            assertArgument(check, message, \"signature\", sig);\n        };\n\n        if (sig == null) {\n            return new Signature(_guard, ZeroHash, ZeroHash, 27);\n        }\n\n        if (typeof(sig) === \"string\") {\n            const bytes = getBytes(sig, \"signature\");\n            if (bytes.length === 64) {\n                const r = hexlify(bytes.slice(0, 32));\n                const s = bytes.slice(32, 64);\n                const v = (s[0] & 0x80) ? 28: 27;\n                s[0] &= 0x7f;\n                return new Signature(_guard, r, hexlify(s), v);\n            }\n\n            if (bytes.length === 65) {\n                const r = hexlify(bytes.slice(0, 32));\n                const s = bytes.slice(32, 64);\n                assertError((s[0] & 0x80) === 0, \"non-canonical s\");\n                const v = Signature.getNormalizedV(bytes[64]);\n                return new Signature(_guard, r, hexlify(s), v);\n            }\n\n            assertError(false, \"invalid raw signature length\");\n        }\n\n        if (sig instanceof Signature) { return sig.clone(); }\n\n        // Get r\n        const _r = sig.r;\n        assertError(_r != null, \"missing r\");\n        const r = toUint256(_r);\n\n        // Get s; by any means necessary (we check consistency below)\n        const s = (function(s?: string, yParityAndS?: string) {\n            if (s != null) { return toUint256(s); }\n\n            if (yParityAndS != null) {\n                assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n                const bytes = getBytes(yParityAndS);\n                bytes[0] &= 0x7f;\n                return hexlify(bytes);\n            }\n\n            assertError(false, \"missing s\");\n        })(sig.s, sig.yParityAndS);\n        assertError((getBytes(s)[0] & 0x80) == 0, \"non-canonical s\");\n\n        // Get v; by any means necessary (we check consistency below)\n        const { networkV, v } = (function(_v?: BigNumberish, yParityAndS?: string, yParity?: Numeric): { networkV?: bigint, v: 27 | 28 } {\n            if (_v != null) {\n                const v = getBigInt(_v);\n                return {\n                    networkV: ((v >= BN_35) ? v: undefined),\n                    v: Signature.getNormalizedV(v)\n                };\n            }\n\n            if (yParityAndS != null) {\n                assertError(isHexString(yParityAndS, 32), \"invalid yParityAndS\");\n                return { v: ((getBytes(yParityAndS)[0] & 0x80) ? 28: 27) };\n            }\n\n            if (yParity != null) {\n                switch (getNumber(yParity, \"sig.yParity\")) {\n                    case 0: return { v: 27 };\n                    case 1: return { v: 28 };\n                }\n                assertError(false, \"invalid yParity\");\n            }\n\n            assertError(false, \"missing v\");\n        })(sig.v, sig.yParityAndS, sig.yParity);\n\n        const result = new Signature(_guard, r, s, v);\n        if (networkV) { result.#networkV =  networkV; }\n\n        // If multiple of v, yParity, yParityAndS we given, check they match\n        assertError(sig.yParity == null || getNumber(sig.yParity, \"sig.yParity\") === result.yParity, \"yParity mismatch\");\n        assertError(sig.yParityAndS == null || sig.yParityAndS === result.yParityAndS, \"yParityAndS mismatch\");\n\n        return result;\n    }\n}\n\n", "/**\n *  Add details about signing here.\n *\n *  @_subsection: api/crypto:Signing  [about-signing]\n */\n\nimport { secp256k1 } from \"@noble/curves/secp256k1\";\n\nimport {\n    concat, dataLength, getBytes, getBytesCopy, hexlify, toBeHex,\n    assertArgument\n} from \"../utils/index.js\";\n\nimport { Signature } from \"./signature.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type { SignatureLike } from \"./index.js\";\n\n\n/**\n *  A **SigningKey** provides high-level access to the elliptic curve\n *  cryptography (ECC) operations and key management.\n */\nexport class SigningKey {\n    #privateKey: string;\n\n    /**\n     *  Creates a new **SigningKey** for %%privateKey%%.\n     */\n    constructor(privateKey: BytesLike) {\n        assertArgument(dataLength(privateKey) === 32, \"invalid private key\", \"privateKey\", \"[REDACTED]\");\n        this.#privateKey = hexlify(privateKey);\n    }\n\n    /**\n     *  The private key.\n     */\n    get privateKey(): string { return this.#privateKey; }\n\n    /**\n     *  The uncompressed public key.\n     *\n     * This will always begin with the prefix ``0x04`` and be 132\n     * characters long (the ``0x`` prefix and 130 hexadecimal nibbles).\n     */\n    get publicKey(): string { return SigningKey.computePublicKey(this.#privateKey); }\n\n    /**\n     *  The compressed public key.\n     *\n     *  This will always begin with either the prefix ``0x02`` or ``0x03``\n     *  and be 68 characters long (the ``0x`` prefix and 33 hexadecimal\n     *  nibbles)\n     */\n    get compressedPublicKey(): string { return SigningKey.computePublicKey(this.#privateKey, true); }\n\n    /**\n     *  Return the signature of the signed %%digest%%.\n     */\n    sign(digest: BytesLike): Signature {\n        assertArgument(dataLength(digest) === 32, \"invalid digest length\", \"digest\", digest);\n\n        const sig = secp256k1.sign(getBytesCopy(digest), getBytesCopy(this.#privateKey), {\n            lowS: true\n        });\n\n        return Signature.from({\n            r: toBeHex(sig.r, 32),\n            s: toBeHex(sig.s, 32),\n            v: (sig.recovery ? 0x1c: 0x1b)\n        });\n    }\n\n    /**\n     *  Returns the [[link-wiki-ecdh]] shared secret between this\n     *  private key and the %%other%% key.\n     *\n     *  The %%other%% key may be any type of key, a raw public key,\n     *  a compressed/uncompressed pubic key or aprivate key.\n     *\n     *  Best practice is usually to use a cryptographic hash on the\n     *  returned value before using it as a symetric secret.\n     *\n     *  @example:\n     *    sign1 = new SigningKey(id(\"some-secret-1\"))\n     *    sign2 = new SigningKey(id(\"some-secret-2\"))\n     *\n     *    // Notice that privA.computeSharedSecret(pubB)...\n     *    sign1.computeSharedSecret(sign2.publicKey)\n     *    //_result:\n     *\n     *    // ...is equal to privB.computeSharedSecret(pubA).\n     *    sign2.computeSharedSecret(sign1.publicKey)\n     *    //_result:\n     */\n    computeSharedSecret(other: BytesLike): string {\n        const pubKey = SigningKey.computePublicKey(other);\n        return hexlify(secp256k1.getSharedSecret(getBytesCopy(this.#privateKey), getBytes(pubKey), false));\n    }\n\n    /**\n     *  Compute the public key for %%key%%, optionally %%compressed%%.\n     *\n     *  The %%key%% may be any type of key, a raw public key, a\n     *  compressed/uncompressed public key or private key.\n     *\n     *  @example:\n     *    sign = new SigningKey(id(\"some-secret\"));\n     *\n     *    // Compute the uncompressed public key for a private key\n     *    SigningKey.computePublicKey(sign.privateKey)\n     *    //_result:\n     *\n     *    // Compute the compressed public key for a private key\n     *    SigningKey.computePublicKey(sign.privateKey, true)\n     *    //_result:\n     *\n     *    // Compute the uncompressed public key\n     *    SigningKey.computePublicKey(sign.publicKey, false);\n     *    //_result:\n     *\n     *    // Compute the Compressed a public key\n     *    SigningKey.computePublicKey(sign.publicKey, true);\n     *    //_result:\n     */\n    static computePublicKey(key: BytesLike, compressed?: boolean): string {\n        let bytes = getBytes(key, \"key\");\n\n        // private key\n        if (bytes.length === 32) {\n            const pubKey = secp256k1.getPublicKey(bytes, !!compressed);\n            return hexlify(pubKey);\n        }\n\n        // raw public key; use uncompressed key with 0x04 prefix\n        if (bytes.length === 64) {\n            const pub = new Uint8Array(65);\n            pub[0] = 0x04;\n            pub.set(bytes, 1);\n            bytes = pub;\n        }\n\n        const point = secp256k1.ProjectivePoint.fromHex(bytes);\n        return hexlify(point.toRawBytes(compressed));\n    }\n\n    /**\n     *  Returns the public key for the private key which produced the\n     *  %%signature%% for the given %%digest%%.\n     *\n     *  @example:\n     *    key = new SigningKey(id(\"some-secret\"))\n     *    digest = id(\"hello world\")\n     *    sig = key.sign(digest)\n     *\n     *    // Notice the signer public key...\n     *    key.publicKey\n     *    //_result:\n     *\n     *    // ...is equal to the recovered public key\n     *    SigningKey.recoverPublicKey(digest, sig)\n     *    //_result:\n     *\n     */\n    static recoverPublicKey(digest: BytesLike, signature: SignatureLike): string {\n        assertArgument(dataLength(digest) === 32, \"invalid digest length\", \"digest\", digest);\n\n        const sig = Signature.from(signature);\n\n        let secpSig = secp256k1.Signature.fromCompact(getBytesCopy(concat([ sig.r, sig.s ])));\n        secpSig = secpSig.addRecoveryBit(sig.yParity);\n\n        const pubKey = secpSig.recoverPublicKey(getBytesCopy(digest));\n        assertArgument(pubKey != null, \"invalid signautre for digest\", \"signature\", signature);\n\n        return \"0x\" + pubKey.toHex(false);\n    }\n\n    /**\n     *  Returns the point resulting from adding the ellipic curve points\n     *  %%p0%% and %%p1%%.\n     *\n     *  This is not a common function most developers should require, but\n     *  can be useful for certain privacy-specific techniques.\n     *\n     *  For example, it is used by [[HDNodeWallet]] to compute child\n     *  addresses from parent public keys and chain codes.\n     */\n    static addPoints(p0: BytesLike, p1: BytesLike, compressed?: boolean): string {\n        const pub0 = secp256k1.ProjectivePoint.fromHex(SigningKey.computePublicKey(p0).substring(2));\n        const pub1 = secp256k1.ProjectivePoint.fromHex(SigningKey.computePublicKey(p1).substring(2));\n        return \"0x\" + pub0.add(pub1).toHex(!!compressed)\n    }\n}\n\n", "/**\n *  A fundamental building block of Ethereum is the underlying\n *  cryptographic primitives.\n *\n *  @_section: api/crypto:Cryptographic Functions   [about-crypto]\n */\n\nnull\n\n// We import all these so we can export lock()\nimport { computeHmac } from \"./hmac.js\";\nimport { keccak256 } from \"./keccak.js\";\nimport { ripemd160 } from \"./ripemd160.js\";\nimport { pbkdf2 } from \"./pbkdf2.js\";\nimport { randomBytes } from \"./random.js\";\nimport { scrypt, scryptSync } from \"./scrypt.js\";\nimport { sha256, sha512 } from \"./sha2.js\";\n\nexport {\n    computeHmac,\n\n    randomBytes,\n\n    keccak256,\n    ripemd160,\n    sha256, sha512,\n\n    pbkdf2,\n    scrypt, scryptSync\n};\n\nexport { SigningKey } from \"./signing-key.js\";\nexport { Signature } from \"./signature.js\";\n\n/**\n *  Once called, prevents any future change to the underlying cryptographic\n *  primitives using the ``.register`` feature for hooks.\n */\nfunction lock(): void {\n    computeHmac.lock();\n    keccak256.lock();\n    pbkdf2.lock();\n    randomBytes.lock();\n    ripemd160.lock();\n    scrypt.lock();\n    scryptSync.lock();\n    sha256.lock();\n    sha512.lock();\n    randomBytes.lock();\n}\n\nexport { lock };\n\n/////////////////////////////\n// Types\n\nexport type { ProgressCallback } from \"./scrypt.js\";\n\nexport type { SignatureLike } from \"./signature.js\";\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_36 = BigInt(36);\n\nfunction getChecksumAddress(address: string): string {\n//    if (!isHexString(address, 20)) {\n//        logger.throwArgumentError(\"invalid address\", \"address\", address);\n//    }\n\n    address = address.toLowerCase();\n\n    const chars = address.substring(2).split(\"\");\n\n    const expanded = new Uint8Array(40);\n    for (let i = 0; i < 40; i++) {\n        expanded[i] = chars[i].charCodeAt(0);\n    }\n\n    const hashed = getBytes(keccak256(expanded));\n\n    for (let i = 0; i < 40; i += 2) {\n        if ((hashed[i >> 1] >> 4) >= 8) {\n            chars[i] = chars[i].toUpperCase();\n        }\n        if ((hashed[i >> 1] & 0x0f) >= 8) {\n            chars[i + 1] = chars[i + 1].toUpperCase();\n        }\n    }\n\n    return \"0x\" + chars.join(\"\");\n}\n\n// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number\n\n// Create lookup table\nconst ibanLookup: { [character: string]: string } = { };\nfor (let i = 0; i < 10; i++) { ibanLookup[String(i)] = String(i); }\nfor (let i = 0; i < 26; i++) { ibanLookup[String.fromCharCode(65 + i)] = String(10 + i); }\n\n// How many decimal digits can we process? (for 64-bit float, this is 15)\n// i.e. Math.floor(Math.log10(Number.MAX_SAFE_INTEGER));\nconst safeDigits = 15;\n\nfunction ibanChecksum(address: string): string {\n    address = address.toUpperCase();\n    address = address.substring(4) + address.substring(0, 2) + \"00\";\n\n    let expanded = address.split(\"\").map((c) => { return ibanLookup[c]; }).join(\"\");\n\n    // Javascript can handle integers safely up to 15 (decimal) digits\n    while (expanded.length >= safeDigits){\n        let block = expanded.substring(0, safeDigits);\n        expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);\n    }\n\n    let checksum = String(98 - (parseInt(expanded, 10) % 97));\n    while (checksum.length < 2) { checksum = \"0\" + checksum; }\n\n    return checksum;\n};\n\nconst Base36 = (function() {;\n    const result: Record<string, bigint> = { };\n    for (let i = 0; i < 36; i++) {\n        const key = \"0123456789abcdefghijklmnopqrstuvwxyz\"[i];\n        result[key] = BigInt(i);\n    }\n    return result;\n})();\n\nfunction fromBase36(value: string): bigint {\n    value = value.toLowerCase();\n\n    let result = BN_0;\n    for (let i = 0; i < value.length; i++) {\n        result = result * BN_36 + Base36[value[i]];\n    }\n    return result;\n}\n\n/**\n *  Returns a normalized and checksumed address for %%address%%.\n *  This accepts non-checksum addresses, checksum addresses and\n *  [[getIcapAddress]] formats.\n *\n *  The checksum in Ethereum uses the capitalization (upper-case\n *  vs lower-case) of the characters within an address to encode\n *  its checksum, which offers, on average, a checksum of 15-bits.\n *\n *  If %%address%% contains both upper-case and lower-case, it is\n *  assumed to already be a checksum address and its checksum is\n *  validated, and if the address fails its expected checksum an\n *  error is thrown.\n *\n *  If you wish the checksum of %%address%% to be ignore, it should\n *  be converted to lower-case (i.e. ``.toLowercase()``) before\n *  being passed in. This should be a very rare situation though,\n *  that you wish to bypass the safegaurds in place to protect\n *  against an address that has been incorrectly copied from another\n *  source.\n *\n *  @example:\n *    // Adds the checksum (via upper-casing specific letters)\n *    getAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\")\n *    //_result:\n *\n *    // Converts ICAP address and adds checksum\n *    getAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n *    //_result:\n *\n *    // Throws an error if an address contains mixed case,\n *    // but the checksum fails\n *    getAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_error:\n */\nexport function getAddress(address: string): string {\n\n    assertArgument(typeof(address) === \"string\", \"invalid address\", \"address\", address);\n\n    if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {\n\n        // Missing the 0x prefix\n        if (!address.startsWith(\"0x\")) { address = \"0x\" + address; }\n\n        const result = getChecksumAddress(address);\n\n        // It is a checksummed address with a bad checksum\n        assertArgument(!address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) || result === address,\n            \"bad address checksum\", \"address\", address);\n\n        return result;\n    }\n\n    // Maybe ICAP? (we only support direct mode)\n    if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {\n        // It is an ICAP address with a bad checksum\n        assertArgument(address.substring(2, 4) === ibanChecksum(address), \"bad icap checksum\", \"address\", address);\n\n        let result = fromBase36(address.substring(4)).toString(16);\n        while (result.length < 40) { result = \"0\" + result; }\n        return  getChecksumAddress(\"0x\" + result);\n    }\n\n    assertArgument(false, \"invalid address\", \"address\", address);\n}\n\n/**\n *  The [ICAP Address format](link-icap) format is an early checksum\n *  format which attempts to be compatible with the banking\n *  industry [IBAN format](link-wiki-iban) for bank accounts.\n *\n *  It is no longer common or a recommended format.\n *\n *  @example:\n *    getIcapAddress(\"0x8ba1f109551bd432803012645ac136ddd64dba72\");\n *    //_result:\n *\n *    getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\");\n *    //_result:\n *\n *    // Throws an error if the ICAP checksum is wrong\n *    getIcapAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK37\");\n *    //_error:\n */\nexport function getIcapAddress(address: string): string {\n    //let base36 = _base16To36(getAddress(address).substring(2)).toUpperCase();\n    let base36 = BigInt(getAddress(address)).toString(36).toUpperCase();\n    while (base36.length < 30) { base36 = \"0\" + base36; }\n    return \"XE\" + ibanChecksum(\"XE00\" + base36) + base36;\n}\n", "import { keccak256 } from \"../crypto/index.js\";\nimport {\n    concat, dataSlice, getBigInt, getBytes, encodeRlp, assertArgument\n} from \"../utils/index.js\";\n\nimport { getAddress } from \"./address.js\";\n\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\n\n// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed\n\n/**\n *  Returns the address that would result from a ``CREATE`` for %%tx%%.\n *\n *  This can be used to compute the address a contract will be\n *  deployed to by an EOA when sending a deployment transaction (i.e.\n *  when the ``to`` address is ``null``).\n *\n *  This can also be used to compute the address a contract will be\n *  deployed to by a contract, by using the contract's address as the\n *  ``to`` and the contract's nonce.\n *\n *  @example\n *    from = \"0x8ba1f109551bD432803012645Ac136ddd64DBA72\";\n *    nonce = 5;\n *\n *    getCreateAddress({ from, nonce });\n *    //_result:\n */\nexport function getCreateAddress(tx: { from: string, nonce: BigNumberish }): string {\n    const from = getAddress(tx.from);\n    const nonce = getBigInt(tx.nonce, \"tx.nonce\");\n\n    let nonceHex = nonce.toString(16);\n    if (nonceHex === \"0\") {\n        nonceHex = \"0x\";\n    } else if (nonceHex.length % 2) {\n        nonceHex = \"0x0\" + nonceHex;\n    } else {\n        nonceHex = \"0x\" + nonceHex;\n    }\n\n    return getAddress(dataSlice(keccak256(encodeRlp([ from, nonceHex ])), 12));\n}\n\n/**\n *  Returns the address that would result from a ``CREATE2`` operation\n *  with the given %%from%%, %%salt%% and %%initCodeHash%%.\n *\n *  To compute the %%initCodeHash%% from a contract's init code, use\n *  the [[keccak256]] function.\n *\n *  For a quick overview and example of ``CREATE2``, see [[link-ricmoo-wisps]].\n *\n *  @example\n *    // The address of the contract\n *    from = \"0x8ba1f109551bD432803012645Ac136ddd64DBA72\"\n *\n *    // The salt\n *    salt = id(\"HelloWorld\")\n *\n *    // The hash of the initCode\n *    initCode = \"0x6394198df16000526103ff60206004601c335afa6040516060f3\";\n *    initCodeHash = keccak256(initCode)\n *\n *    getCreate2Address(from, salt, initCodeHash)\n *    //_result:\n */\nexport function getCreate2Address(_from: string, _salt: BytesLike, _initCodeHash: BytesLike): string {\n    const from = getAddress(_from);\n    const salt = getBytes(_salt, \"salt\");\n    const initCodeHash = getBytes(_initCodeHash, \"initCodeHash\");\n\n    assertArgument(salt.length === 32, \"salt must be 32 bytes\", \"salt\", _salt);\n\n    assertArgument(initCodeHash.length === 32, \"initCodeHash must be 32 bytes\", \"initCodeHash\", _initCodeHash);\n\n    return getAddress(dataSlice(keccak256(concat([ \"0xff\", from, salt, initCodeHash ])), 12))\n}\n", "import { assert, assertArgument } from \"../utils/index.js\";\n\nimport { getAddress } from \"./address.js\";\n\nimport type { Addressable, AddressLike, NameResolver } from \"./index.js\";\n\n\n/**\n *  Returns true if %%value%% is an object which implements the\n *  [[Addressable]] interface.\n *\n *  @example:\n *    // Wallets and AbstractSigner sub-classes\n *    isAddressable(Wallet.createRandom())\n *    //_result:\n *\n *    // Contracts\n *    contract = new Contract(\"dai.tokens.ethers.eth\", [ ], provider)\n *    isAddressable(contract)\n *    //_result:\n */\nexport function isAddressable(value: any): value is Addressable {\n    return (value && typeof(value.getAddress) === \"function\");\n}\n\n/**\n *  Returns true if %%value%% is a valid address.\n *\n *  @example:\n *    // Valid address\n *    isAddress(\"0x8ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_result:\n *\n *    // Valid ICAP address\n *    isAddress(\"XE65GB6LDNXYOFTX0NSV3FUWKOWIXAMJK36\")\n *    //_result:\n *\n *    // Invalid checksum\n *    isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBa72\")\n *    //_result:\n *\n *    // Invalid ICAP checksum\n *    isAddress(\"0x8Ba1f109551bD432803012645Ac136ddd64DBA72\")\n *    //_result:\n *\n *    // Not an address (an ENS name requires a provided and an\n *    // asynchronous API to access)\n *    isAddress(\"ricmoo.eth\")\n *    //_result:\n */\nexport function isAddress(value: any): value is string {\n    try {\n        getAddress(value);\n        return true;\n    } catch (error) { }\n    return false;\n}\n\nasync function checkAddress(target: any, promise: Promise<null | string>): Promise<string> {\n    const result = await promise;\n    if (result == null || result === \"0x0000000000000000000000000000000000000000\") {\n        assert(typeof(target) !== \"string\", \"unconfigured name\", \"UNCONFIGURED_NAME\", { value: target });\n        assertArgument(false, \"invalid AddressLike value; did not resolve to a value address\", \"target\", target);\n    }\n    return getAddress(result);\n}\n\n/**\n *  Resolves to an address for the %%target%%, which may be any\n *  supported address type, an [[Addressable]] or a Promise which\n *  resolves to an address.\n *\n *  If an ENS name is provided, but that name has not been correctly\n *  configured a [[UnconfiguredNameError]] is thrown.\n *\n *  @example:\n *    addr = \"0x6B175474E89094C44Da98b954EedeAC495271d0F\"\n *\n *    // Addresses are return synchronously\n *    resolveAddress(addr, provider)\n *    //_result:\n *\n *    // Address promises are resolved asynchronously\n *    resolveAddress(Promise.resolve(addr))\n *    //_result:\n *\n *    // ENS names are resolved asynchronously\n *    resolveAddress(\"dai.tokens.ethers.eth\", provider)\n *    //_result:\n *\n *    // Addressable objects are resolved asynchronously\n *    contract = new Contract(addr, [ ])\n *    resolveAddress(contract, provider)\n *    //_result:\n *\n *    // Unconfigured ENS names reject\n *    resolveAddress(\"nothing-here.ricmoo.eth\", provider)\n *    //_error:\n *\n *    // ENS names require a NameResolver object passed in\n *    // (notice the provider was omitted)\n *    resolveAddress(\"nothing-here.ricmoo.eth\")\n *    //_error:\n */\nexport function resolveAddress(target: AddressLike, resolver?: null | NameResolver): string | Promise<string> {\n\n    if (typeof(target) === \"string\") {\n        if (target.match(/^0x[0-9a-f]{40}$/i)) { return getAddress(target); }\n\n        assert(resolver != null, \"ENS resolution requires a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"resolveName\" });\n\n        return checkAddress(target, resolver.resolveName(target));\n\n    } else if (isAddressable(target)) {\n        return checkAddress(target, target.getAddress());\n\n    } else if (target && typeof(target.then) === \"function\") {\n        return checkAddress(target, target);\n    }\n\n    assertArgument(false, \"unsupported addressable value\", \"target\", target);\n}\n", "/**\n *  A Typed object allows a value to have its type explicitly\n *  specified.\n *\n *  For example, in Solidity, the value ``45`` could represent a\n *  ``uint8`` or a ``uint256``. The value ``0x1234`` could represent\n *  a ``bytes2`` or ``bytes``.\n *\n *  Since JavaScript has no meaningful way to explicitly inform any\n *  APIs which what the type is, this allows transparent interoperation\n *  with Soldity.\n *\n *  @_subsection: api/abi:Typed Values\n */\n\nimport { assertPrivate, defineProperties } from \"../utils/index.js\";\n\nimport type { Addressable } from \"../address/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\nimport type { Result } from \"./coders/abstract-coder.js\";\n\nconst _gaurd = { };\n\nfunction n(value: BigNumberish, width: number): Typed {\n    let signed = false;\n    if (width < 0) {\n        signed = true;\n        width *= -1;\n    }\n\n    // @TODO: Check range is valid for value\n    return new Typed(_gaurd, `${ signed ? \"\": \"u\" }int${ width }`, value, { signed, width });\n}\n\nfunction b(value: BytesLike, size?: number): Typed {\n    // @TODO: Check range is valid for value\n    return new Typed(_gaurd, `bytes${ (size) ? size: \"\" }`, value, { size });\n}\n\n// @TODO: Remove this in v7, it was replaced by TypedBigInt\n/**\n *  @_ignore:\n */\nexport interface TypedNumber extends Typed {\n    value: number;\n    defaultValue(): number;\n    minValue(): number;\n    maxValue(): number;\n}\n\n/**\n *  A **Typed** that represents a numeric value.\n */\nexport interface TypedBigInt extends Typed {\n    /**\n     *  The value.\n     */\n    value: bigint;\n\n    /**\n     *  The default value for all numeric types is ``0``.\n     */\n    defaultValue(): bigint;\n\n    /**\n     *  The minimum value for this type, accounting for bit-width and signed-ness.\n     */\n    minValue(): bigint;\n\n    /**\n     *  The minimum value for this type, accounting for bit-width.\n     */\n    maxValue(): bigint;\n}\n\n/**\n *  A **Typed** that represents a binary sequence of data as bytes.\n */\nexport interface TypedData extends Typed {\n    /**\n     *  The value.\n     */\n    value: string;\n\n    /**\n     *  The default value for this type.\n     */\n    defaultValue(): string;\n}\n\n/**\n *  A **Typed** that represents a UTF-8 sequence of bytes.\n */\nexport interface TypedString extends Typed {\n    /**\n     *  The value.\n     */\n    value: string;\n\n    /**\n     *  The default value for the string type is the empty string (i.e. ``\"\"``).\n     */\n    defaultValue(): string;\n}\n\nconst _typedSymbol = Symbol.for(\"_ethers_typed\");\n\n/**\n *  The **Typed** class to wrap values providing explicit type information.\n */\nexport class Typed {\n\n    /**\n     *  The type, as a Solidity-compatible type.\n     */\n    readonly type!: string;\n\n    /**\n     *  The actual value.\n     */\n    readonly value!: any;\n\n    readonly #options: any;\n\n    /**\n     *  @_ignore:\n     */\n    readonly _typedSymbol!: Symbol;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(gaurd: any, type: string, value: any, options?: any) {\n        if (options == null) { options = null; }\n        assertPrivate(_gaurd, gaurd, \"Typed\");\n        defineProperties<Typed>(this, { _typedSymbol, type, value });\n        this.#options = options;\n\n        // Check the value is valid\n        this.format();\n    }\n\n    /**\n     *  Format the type as a Human-Readable type.\n     */\n    format(): string {\n        if (this.type === \"array\") {\n            throw new Error(\"\");\n        } else if (this.type === \"dynamicArray\") {\n            throw new Error(\"\");\n        } else if (this.type === \"tuple\") {\n            return `tuple(${ this.value.map((v: Typed) => v.format()).join(\",\") })`\n        }\n\n        return this.type;\n    }\n\n    /**\n     *  The default value returned by this type.\n     */\n    defaultValue(): string | number | bigint | Result {\n        return 0;\n    }\n\n    /**\n     *  The minimum value for numeric types.\n     */\n    minValue(): string | number | bigint {\n        return 0;\n    }\n\n    /**\n     *  The maximum value for numeric types.\n     */\n    maxValue(): string | number | bigint {\n        return 0;\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedBigInt]].\n     */\n    isBigInt(): this is TypedBigInt {\n        return !!(this.type.match(/^u?int[0-9]+$/));\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedData]].\n     */\n    isData(): this is TypedData {\n        return this.type.startsWith(\"bytes\");\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard is this is a [[TypedString]].\n     */\n    isString(): this is TypedString {\n        return (this.type === \"string\");\n    }\n\n    /**\n     *  Returns the tuple name, if this is a tuple. Throws otherwise.\n     */\n    get tupleName(): null | string {\n        if (this.type !== \"tuple\") { throw TypeError(\"not a tuple\"); }\n        return this.#options;\n    }\n\n    // Returns the length of this type as an array\n    // - `null` indicates the length is unforced, it could be dynamic\n    // - `-1` indicates the length is dynamic\n    // - any other value indicates it is a static array and is its length\n\n    /**\n     *  Returns the length of the array type or ``-1`` if it is dynamic.\n     *\n     *  Throws if the type is not an array.\n     */\n    get arrayLength(): null | number {\n        if (this.type !== \"array\") { throw TypeError(\"not an array\"); }\n        if (this.#options === true) { return -1; }\n        if (this.#options === false) { return (<Array<any>>(this.value)).length; }\n        return null;\n    }\n\n    /**\n     *  Returns a new **Typed** of %%type%% with the %%value%%.\n     */\n    static from(type: string, value: any): Typed {\n        return new Typed(_gaurd, type, value);\n    }\n\n    /**\n     *  Return a new ``uint8`` type for %%v%%.\n     */\n    static uint8(v: BigNumberish): Typed { return n(v, 8); }\n\n    /**\n     *  Return a new ``uint16`` type for %%v%%.\n     */\n    static uint16(v: BigNumberish): Typed { return n(v, 16); }\n\n    /**\n     *  Return a new ``uint24`` type for %%v%%.\n     */\n    static uint24(v: BigNumberish): Typed { return n(v, 24); }\n\n    /**\n     *  Return a new ``uint32`` type for %%v%%.\n     */\n    static uint32(v: BigNumberish): Typed { return n(v, 32); }\n\n    /**\n     *  Return a new ``uint40`` type for %%v%%.\n     */\n    static uint40(v: BigNumberish): Typed { return n(v, 40); }\n\n    /**\n     *  Return a new ``uint48`` type for %%v%%.\n     */\n    static uint48(v: BigNumberish): Typed { return n(v, 48); }\n\n    /**\n     *  Return a new ``uint56`` type for %%v%%.\n     */\n    static uint56(v: BigNumberish): Typed { return n(v, 56); }\n\n    /**\n     *  Return a new ``uint64`` type for %%v%%.\n     */\n    static uint64(v: BigNumberish): Typed { return n(v, 64); }\n\n    /**\n     *  Return a new ``uint72`` type for %%v%%.\n     */\n    static uint72(v: BigNumberish): Typed { return n(v, 72); }\n\n    /**\n     *  Return a new ``uint80`` type for %%v%%.\n     */\n    static uint80(v: BigNumberish): Typed { return n(v, 80); }\n\n    /**\n     *  Return a new ``uint88`` type for %%v%%.\n     */\n    static uint88(v: BigNumberish): Typed { return n(v, 88); }\n\n    /**\n     *  Return a new ``uint96`` type for %%v%%.\n     */\n    static uint96(v: BigNumberish): Typed { return n(v, 96); }\n\n    /**\n     *  Return a new ``uint104`` type for %%v%%.\n     */\n    static uint104(v: BigNumberish): Typed { return n(v, 104); }\n\n    /**\n     *  Return a new ``uint112`` type for %%v%%.\n     */\n    static uint112(v: BigNumberish): Typed { return n(v, 112); }\n\n    /**\n     *  Return a new ``uint120`` type for %%v%%.\n     */\n    static uint120(v: BigNumberish): Typed { return n(v, 120); }\n\n    /**\n     *  Return a new ``uint128`` type for %%v%%.\n     */\n    static uint128(v: BigNumberish): Typed { return n(v, 128); }\n\n    /**\n     *  Return a new ``uint136`` type for %%v%%.\n     */\n    static uint136(v: BigNumberish): Typed { return n(v, 136); }\n\n    /**\n     *  Return a new ``uint144`` type for %%v%%.\n     */\n    static uint144(v: BigNumberish): Typed { return n(v, 144); }\n\n    /**\n     *  Return a new ``uint152`` type for %%v%%.\n     */\n    static uint152(v: BigNumberish): Typed { return n(v, 152); }\n\n    /**\n     *  Return a new ``uint160`` type for %%v%%.\n     */\n    static uint160(v: BigNumberish): Typed { return n(v, 160); }\n\n    /**\n     *  Return a new ``uint168`` type for %%v%%.\n     */\n    static uint168(v: BigNumberish): Typed { return n(v, 168); }\n\n    /**\n     *  Return a new ``uint176`` type for %%v%%.\n     */\n    static uint176(v: BigNumberish): Typed { return n(v, 176); }\n\n    /**\n     *  Return a new ``uint184`` type for %%v%%.\n     */\n    static uint184(v: BigNumberish): Typed { return n(v, 184); }\n\n    /**\n     *  Return a new ``uint192`` type for %%v%%.\n     */\n    static uint192(v: BigNumberish): Typed { return n(v, 192); }\n\n    /**\n     *  Return a new ``uint200`` type for %%v%%.\n     */\n    static uint200(v: BigNumberish): Typed { return n(v, 200); }\n\n    /**\n     *  Return a new ``uint208`` type for %%v%%.\n     */\n    static uint208(v: BigNumberish): Typed { return n(v, 208); }\n\n    /**\n     *  Return a new ``uint216`` type for %%v%%.\n     */\n    static uint216(v: BigNumberish): Typed { return n(v, 216); }\n\n    /**\n     *  Return a new ``uint224`` type for %%v%%.\n     */\n    static uint224(v: BigNumberish): Typed { return n(v, 224); }\n\n    /**\n     *  Return a new ``uint232`` type for %%v%%.\n     */\n    static uint232(v: BigNumberish): Typed { return n(v, 232); }\n\n    /**\n     *  Return a new ``uint240`` type for %%v%%.\n     */\n    static uint240(v: BigNumberish): Typed { return n(v, 240); }\n\n    /**\n     *  Return a new ``uint248`` type for %%v%%.\n     */\n    static uint248(v: BigNumberish): Typed { return n(v, 248); }\n\n    /**\n     *  Return a new ``uint256`` type for %%v%%.\n     */\n    static uint256(v: BigNumberish): Typed { return n(v, 256); }\n\n    /**\n     *  Return a new ``uint256`` type for %%v%%.\n     */\n    static uint(v: BigNumberish): Typed { return n(v, 256); }\n\n    /**\n     *  Return a new ``int8`` type for %%v%%.\n     */\n    static int8(v: BigNumberish): Typed { return n(v, -8); }\n\n    /**\n     *  Return a new ``int16`` type for %%v%%.\n     */\n    static int16(v: BigNumberish): Typed { return n(v, -16); }\n\n    /**\n     *  Return a new ``int24`` type for %%v%%.\n     */\n    static int24(v: BigNumberish): Typed { return n(v, -24); }\n\n    /**\n     *  Return a new ``int32`` type for %%v%%.\n     */\n    static int32(v: BigNumberish): Typed { return n(v, -32); }\n\n    /**\n     *  Return a new ``int40`` type for %%v%%.\n     */\n    static int40(v: BigNumberish): Typed { return n(v, -40); }\n\n    /**\n     *  Return a new ``int48`` type for %%v%%.\n     */\n    static int48(v: BigNumberish): Typed { return n(v, -48); }\n\n    /**\n     *  Return a new ``int56`` type for %%v%%.\n     */\n    static int56(v: BigNumberish): Typed { return n(v, -56); }\n\n    /**\n     *  Return a new ``int64`` type for %%v%%.\n     */\n    static int64(v: BigNumberish): Typed { return n(v, -64); }\n\n    /**\n     *  Return a new ``int72`` type for %%v%%.\n     */\n    static int72(v: BigNumberish): Typed { return n(v, -72); }\n\n    /**\n     *  Return a new ``int80`` type for %%v%%.\n     */\n    static int80(v: BigNumberish): Typed { return n(v, -80); }\n\n    /**\n     *  Return a new ``int88`` type for %%v%%.\n     */\n    static int88(v: BigNumberish): Typed { return n(v, -88); }\n\n    /**\n     *  Return a new ``int96`` type for %%v%%.\n     */\n    static int96(v: BigNumberish): Typed { return n(v, -96); }\n\n    /**\n     *  Return a new ``int104`` type for %%v%%.\n     */\n    static int104(v: BigNumberish): Typed { return n(v, -104); }\n\n    /**\n     *  Return a new ``int112`` type for %%v%%.\n     */\n    static int112(v: BigNumberish): Typed { return n(v, -112); }\n\n    /**\n     *  Return a new ``int120`` type for %%v%%.\n     */\n    static int120(v: BigNumberish): Typed { return n(v, -120); }\n\n    /**\n     *  Return a new ``int128`` type for %%v%%.\n     */\n    static int128(v: BigNumberish): Typed { return n(v, -128); }\n\n    /**\n     *  Return a new ``int136`` type for %%v%%.\n     */\n    static int136(v: BigNumberish): Typed { return n(v, -136); }\n\n    /**\n     *  Return a new ``int144`` type for %%v%%.\n     */\n    static int144(v: BigNumberish): Typed { return n(v, -144); }\n\n    /**\n     *  Return a new ``int52`` type for %%v%%.\n     */\n    static int152(v: BigNumberish): Typed { return n(v, -152); }\n\n    /**\n     *  Return a new ``int160`` type for %%v%%.\n     */\n    static int160(v: BigNumberish): Typed { return n(v, -160); }\n\n    /**\n     *  Return a new ``int168`` type for %%v%%.\n     */\n    static int168(v: BigNumberish): Typed { return n(v, -168); }\n\n    /**\n     *  Return a new ``int176`` type for %%v%%.\n     */\n    static int176(v: BigNumberish): Typed { return n(v, -176); }\n\n    /**\n     *  Return a new ``int184`` type for %%v%%.\n     */\n    static int184(v: BigNumberish): Typed { return n(v, -184); }\n\n    /**\n     *  Return a new ``int92`` type for %%v%%.\n     */\n    static int192(v: BigNumberish): Typed { return n(v, -192); }\n\n    /**\n     *  Return a new ``int200`` type for %%v%%.\n     */\n    static int200(v: BigNumberish): Typed { return n(v, -200); }\n\n    /**\n     *  Return a new ``int208`` type for %%v%%.\n     */\n    static int208(v: BigNumberish): Typed { return n(v, -208); }\n\n    /**\n     *  Return a new ``int216`` type for %%v%%.\n     */\n    static int216(v: BigNumberish): Typed { return n(v, -216); }\n\n    /**\n     *  Return a new ``int224`` type for %%v%%.\n     */\n    static int224(v: BigNumberish): Typed { return n(v, -224); }\n\n    /**\n     *  Return a new ``int232`` type for %%v%%.\n     */\n    static int232(v: BigNumberish): Typed { return n(v, -232); }\n\n    /**\n     *  Return a new ``int240`` type for %%v%%.\n     */\n    static int240(v: BigNumberish): Typed { return n(v, -240); }\n\n    /**\n     *  Return a new ``int248`` type for %%v%%.\n     */\n    static int248(v: BigNumberish): Typed { return n(v, -248); }\n\n    /**\n     *  Return a new ``int256`` type for %%v%%.\n     */\n    static int256(v: BigNumberish): Typed { return n(v, -256); }\n\n    /**\n     *  Return a new ``int256`` type for %%v%%.\n     */\n    static int(v: BigNumberish): Typed { return n(v, -256); }\n\n    /**\n     *  Return a new ``bytes1`` type for %%v%%.\n     */\n    static bytes1(v: BytesLike): Typed { return b(v, 1); }\n\n    /**\n     *  Return a new ``bytes2`` type for %%v%%.\n     */\n    static bytes2(v: BytesLike): Typed { return b(v, 2); }\n\n    /**\n     *  Return a new ``bytes3`` type for %%v%%.\n     */\n    static bytes3(v: BytesLike): Typed { return b(v, 3); }\n\n    /**\n     *  Return a new ``bytes4`` type for %%v%%.\n     */\n    static bytes4(v: BytesLike): Typed { return b(v, 4); }\n\n    /**\n     *  Return a new ``bytes5`` type for %%v%%.\n     */\n    static bytes5(v: BytesLike): Typed { return b(v, 5); }\n\n    /**\n     *  Return a new ``bytes6`` type for %%v%%.\n     */\n    static bytes6(v: BytesLike): Typed { return b(v, 6); }\n\n    /**\n     *  Return a new ``bytes7`` type for %%v%%.\n     */\n    static bytes7(v: BytesLike): Typed { return b(v, 7); }\n\n    /**\n     *  Return a new ``bytes8`` type for %%v%%.\n     */\n    static bytes8(v: BytesLike): Typed { return b(v, 8); }\n\n    /**\n     *  Return a new ``bytes9`` type for %%v%%.\n     */\n    static bytes9(v: BytesLike): Typed { return b(v, 9); }\n\n    /**\n     *  Return a new ``bytes10`` type for %%v%%.\n     */\n    static bytes10(v: BytesLike): Typed { return b(v, 10); }\n\n    /**\n     *  Return a new ``bytes11`` type for %%v%%.\n     */\n    static bytes11(v: BytesLike): Typed { return b(v, 11); }\n\n    /**\n     *  Return a new ``bytes12`` type for %%v%%.\n     */\n    static bytes12(v: BytesLike): Typed { return b(v, 12); }\n\n    /**\n     *  Return a new ``bytes13`` type for %%v%%.\n     */\n    static bytes13(v: BytesLike): Typed { return b(v, 13); }\n\n    /**\n     *  Return a new ``bytes14`` type for %%v%%.\n     */\n    static bytes14(v: BytesLike): Typed { return b(v, 14); }\n\n    /**\n     *  Return a new ``bytes15`` type for %%v%%.\n     */\n    static bytes15(v: BytesLike): Typed { return b(v, 15); }\n\n    /**\n     *  Return a new ``bytes16`` type for %%v%%.\n     */\n    static bytes16(v: BytesLike): Typed { return b(v, 16); }\n\n    /**\n     *  Return a new ``bytes17`` type for %%v%%.\n     */\n    static bytes17(v: BytesLike): Typed { return b(v, 17); }\n\n    /**\n     *  Return a new ``bytes18`` type for %%v%%.\n     */\n    static bytes18(v: BytesLike): Typed { return b(v, 18); }\n\n    /**\n     *  Return a new ``bytes19`` type for %%v%%.\n     */\n    static bytes19(v: BytesLike): Typed { return b(v, 19); }\n\n    /**\n     *  Return a new ``bytes20`` type for %%v%%.\n     */\n    static bytes20(v: BytesLike): Typed { return b(v, 20); }\n\n    /**\n     *  Return a new ``bytes21`` type for %%v%%.\n     */\n    static bytes21(v: BytesLike): Typed { return b(v, 21); }\n\n    /**\n     *  Return a new ``bytes22`` type for %%v%%.\n     */\n    static bytes22(v: BytesLike): Typed { return b(v, 22); }\n\n    /**\n     *  Return a new ``bytes23`` type for %%v%%.\n     */\n    static bytes23(v: BytesLike): Typed { return b(v, 23); }\n\n    /**\n     *  Return a new ``bytes24`` type for %%v%%.\n     */\n    static bytes24(v: BytesLike): Typed { return b(v, 24); }\n\n    /**\n     *  Return a new ``bytes25`` type for %%v%%.\n     */\n    static bytes25(v: BytesLike): Typed { return b(v, 25); }\n\n    /**\n     *  Return a new ``bytes26`` type for %%v%%.\n     */\n    static bytes26(v: BytesLike): Typed { return b(v, 26); }\n\n    /**\n     *  Return a new ``bytes27`` type for %%v%%.\n     */\n    static bytes27(v: BytesLike): Typed { return b(v, 27); }\n\n    /**\n     *  Return a new ``bytes28`` type for %%v%%.\n     */\n    static bytes28(v: BytesLike): Typed { return b(v, 28); }\n\n    /**\n     *  Return a new ``bytes29`` type for %%v%%.\n     */\n    static bytes29(v: BytesLike): Typed { return b(v, 29); }\n\n    /**\n     *  Return a new ``bytes30`` type for %%v%%.\n     */\n    static bytes30(v: BytesLike): Typed { return b(v, 30); }\n\n    /**\n     *  Return a new ``bytes31`` type for %%v%%.\n     */\n    static bytes31(v: BytesLike): Typed { return b(v, 31); }\n\n    /**\n     *  Return a new ``bytes32`` type for %%v%%.\n     */\n    static bytes32(v: BytesLike): Typed { return b(v, 32); }\n\n\n    /**\n     *  Return a new ``address`` type for %%v%%.\n     */\n    static address(v: string | Addressable): Typed { return new Typed(_gaurd, \"address\", v); }\n\n    /**\n     *  Return a new ``bool`` type for %%v%%.\n     */\n    static bool(v: any): Typed { return new Typed(_gaurd, \"bool\", !!v); }\n\n    /**\n     *  Return a new ``bytes`` type for %%v%%.\n     */\n    static bytes(v: BytesLike): Typed { return new Typed(_gaurd, \"bytes\", v); }\n\n    /**\n     *  Return a new ``string`` type for %%v%%.\n     */\n    static string(v: string): Typed { return new Typed(_gaurd, \"string\", v); }\n\n\n    /**\n     *  Return a new ``array`` type for %%v%%, allowing %%dynamic%% length.\n     */\n    static array(v: Array<any | Typed>, dynamic?: null | boolean): Typed {\n        throw new Error(\"not implemented yet\");\n        return new Typed(_gaurd, \"array\", v, dynamic);\n    }\n\n\n    /**\n     *  Return a new ``tuple`` type for %%v%%, with the optional %%name%%.\n     */\n    static tuple(v: Array<any | Typed> | Record<string, any | Typed>, name?: string): Typed {\n        throw new Error(\"not implemented yet\");\n        return new Typed(_gaurd, \"tuple\", v, name);\n    }\n\n\n    /**\n     *  Return a new ``uint8`` type for %%v%%.\n     */\n    static overrides(v: Record<string, any>): Typed {\n        return new Typed(_gaurd, \"overrides\", Object.assign({ }, v));\n    }\n\n    /**\n     *  Returns true only if %%value%% is a [[Typed]] instance.\n     */\n    static isTyped(value: any): value is Typed {\n        return (value\n            && typeof(value) === \"object\"\n            && \"_typedSymbol\" in value\n            && value._typedSymbol === _typedSymbol);\n    }\n\n    /**\n     *  If the value is a [[Typed]] instance, validates the underlying value\n     *  and returns it, otherwise returns value directly.\n     *\n     *  This is useful for functions that with to accept either a [[Typed]]\n     *  object or values.\n     */\n    static dereference<T>(value: Typed | T, type: string): T {\n        if (Typed.isTyped(value)) {\n            if (value.type !== type) {\n                throw new Error(`invalid type: expecetd ${ type }, got ${ value.type }`);\n            }\n            return value.value;\n        }\n        return value;\n    }\n}\n", "import { getAddress } from \"../../address/index.js\";\nimport { toBeHex } from \"../../utils/maths.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class AddressCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"address\", \"address\", localName, false);\n    }\n\n    defaultValue(): string {\n        return \"0x0000000000000000000000000000000000000000\";\n    }\n\n    encode(writer: Writer, _value: string | Typed): number {\n        let value = Typed.dereference(_value, \"string\");\n        try {\n            value = getAddress(value);\n        } catch (error: any) {\n            return this._throwError(error.message, _value);\n        }\n        return writer.writeValue(value);\n    }\n\n    decode(reader: Reader): any {\n        return getAddress(toBeHex(reader.readValue(), 20));\n    }\n}\n", "import { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  Clones the functionality of an existing Coder, but without a localName\n *\n *  @_ignore\n */\nexport class AnonymousCoder extends Coder {\n    private coder: Coder;\n\n    constructor(coder: Coder) {\n        super(coder.name, coder.type, \"_\", coder.dynamic);\n        this.coder = coder;\n    }\n\n    defaultValue(): any {\n        return this.coder.defaultValue();\n    }\n\n    encode(writer: Writer, value: any): number {\n        return this.coder.encode(writer, value);\n    }\n\n    decode(reader: Reader): any {\n        return this.coder.decode(reader);\n    }\n}\n", "import {\n    defineProperties, isError, assert, assertArgument, assertArgumentCount\n} from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\n\nimport { Coder, Result, WordSize, Writer } from \"./abstract-coder.js\";\nimport { AnonymousCoder } from \"./anonymous.js\";\n\nimport type { Reader } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport function pack(writer: Writer, coders: ReadonlyArray<Coder>, values: Array<any> | { [ name: string ]: any }): number {\n    let arrayValues: Array<any> = [ ];\n\n    if (Array.isArray(values)) {\n       arrayValues = values;\n\n    } else if (values && typeof(values) === \"object\") {\n        let unique: { [ name: string ]: boolean } = { };\n\n        arrayValues = coders.map((coder) => {\n            const name = coder.localName;\n            assert(name, \"cannot encode object for signature with missing names\",\n                \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n\n            assert(!unique[name], \"cannot encode object for signature with duplicate names\",\n                \"INVALID_ARGUMENT\", { argument: \"values\", info: { coder }, value: values });\n\n            unique[name] = true;\n\n            return values[name];\n        });\n\n    } else {\n        assertArgument(false, \"invalid tuple value\", \"tuple\", values);\n    }\n\n    assertArgument(coders.length === arrayValues.length, \"types/value length mismatch\", \"tuple\", values);\n\n    let staticWriter = new Writer();\n    let dynamicWriter = new Writer();\n\n    let updateFuncs: Array<(baseOffset: number) => void> = [];\n    coders.forEach((coder, index) => {\n        let value = arrayValues[index];\n\n        if (coder.dynamic) {\n            // Get current dynamic offset (for the future pointer)\n            let dynamicOffset = dynamicWriter.length;\n\n            // Encode the dynamic value into the dynamicWriter\n            coder.encode(dynamicWriter, value);\n\n            // Prepare to populate the correct offset once we are done\n            let updateFunc = staticWriter.writeUpdatableValue();\n            updateFuncs.push((baseOffset: number) => {\n                updateFunc(baseOffset + dynamicOffset);\n            });\n\n        } else {\n            coder.encode(staticWriter, value);\n        }\n    });\n\n    // Backfill all the dynamic offsets, now that we know the static length\n    updateFuncs.forEach((func) => { func(staticWriter.length); });\n\n    let length = writer.appendWriter(staticWriter);\n    length += writer.appendWriter(dynamicWriter);\n    return length;\n}\n\n/**\n *  @_ignore\n */\nexport function unpack(reader: Reader, coders: ReadonlyArray<Coder>): Result {\n    let values: Array<any> = [];\n    let keys: Array<null | string> = [ ];\n\n    // A reader anchored to this base\n    let baseReader = reader.subReader(0);\n\n    coders.forEach((coder) => {\n        let value: any = null;\n\n        if (coder.dynamic) {\n            let offset = reader.readIndex();\n            let offsetReader = baseReader.subReader(offset);\n            try {\n                value = coder.decode(offsetReader);\n            } catch (error: any) {\n                // Cannot recover from this\n                if (isError(error, \"BUFFER_OVERRUN\")) {\n                    throw error;\n                }\n\n                value = error;\n                value.baseType = coder.name;\n                value.name = coder.localName;\n                value.type = coder.type;\n            }\n\n        } else {\n            try {\n                value = coder.decode(reader);\n            } catch (error: any) {\n                // Cannot recover from this\n                if (isError(error, \"BUFFER_OVERRUN\")) {\n                    throw error;\n                }\n\n                value = error;\n                value.baseType = coder.name;\n                value.name = coder.localName;\n                value.type = coder.type;\n            }\n        }\n\n        if (value == undefined) {\n            throw new Error(\"investigate\");\n        }\n\n        values.push(value);\n        keys.push(coder.localName || null);\n    });\n\n    return Result.fromItems(values, keys);\n}\n\n/**\n *  @_ignore\n */\nexport class ArrayCoder extends Coder {\n    readonly coder!: Coder;\n    readonly length!: number;\n\n    constructor(coder: Coder, length: number, localName: string) {\n        const type = (coder.type + \"[\" + (length >= 0 ? length: \"\") + \"]\");\n        const dynamic = (length === -1 || coder.dynamic);\n        super(\"array\", type, localName, dynamic);\n        defineProperties<ArrayCoder>(this, { coder, length });\n    }\n\n    defaultValue(): Array<any> {\n        // Verifies the child coder is valid (even if the array is dynamic or 0-length)\n        const defaultChild = this.coder.defaultValue();\n\n        const result: Array<any> = [];\n        for (let i = 0; i < this.length; i++) {\n            result.push(defaultChild);\n        }\n        return result;\n    }\n\n    encode(writer: Writer, _value: Array<any> | Typed): number {\n        const value = Typed.dereference(_value, \"array\");\n\n        if(!Array.isArray(value)) {\n            this._throwError(\"expected array value\", value);\n        }\n\n        let count = this.length;\n\n        if (count === -1) {\n            count = value.length;\n            writer.writeValue(value.length);\n        }\n\n        assertArgumentCount(value.length, count, \"coder array\" + (this.localName? (\" \"+ this.localName): \"\"));\n\n        let coders: Array<Coder> = [ ];\n        for (let i = 0; i < value.length; i++) { coders.push(this.coder); }\n\n        return pack(writer, coders, value);\n    }\n\n    decode(reader: Reader): any {\n        let count = this.length;\n        if (count === -1) {\n            count = reader.readIndex();\n\n            // Check that there is *roughly* enough data to ensure\n            // stray random data is not being read as a length. Each\n            // slot requires at least 32 bytes for their value (or 32\n            // bytes as a link to the data). This could use a much\n            // tighter bound, but we are erroring on the side of safety.\n            assert(count * WordSize <= reader.dataLength, \"insufficient data length\",\n                \"BUFFER_OVERRUN\", { buffer: reader.bytes, offset: count * WordSize, length: reader.dataLength });\n        }\n        let coders: Array<Coder> = [];\n        for (let i = 0; i < count; i++) { coders.push(new AnonymousCoder(this.coder)); }\n\n        return unpack(reader, coders);\n    }\n}\n\n", "import { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport class BooleanCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"bool\", \"bool\", localName, false);\n    }\n\n    defaultValue(): boolean {\n        return false;\n    }\n\n    encode(writer: Writer, _value: boolean | Typed): number {\n        const value = Typed.dereference(_value, \"bool\");\n        return writer.writeValue(value ? 1: 0);\n    }\n\n    decode(reader: Reader): any {\n        return !!reader.readValue();\n    }\n}\n", "import { getBytesCopy, hexlify } from \"../../utils/index.js\";\n\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class DynamicBytesCoder extends Coder {\n    constructor(type: string, localName: string) {\n       super(type, type, localName, true);\n    }\n\n    defaultValue(): string {\n        return \"0x\";\n    }\n\n    encode(writer: Writer, value: any): number {\n        value = getBytesCopy(value);\n        let length = writer.writeValue(value.length);\n        length += writer.writeBytes(value);\n        return length;\n    }\n\n    decode(reader: Reader): any {\n        return reader.readBytes(reader.readIndex(), true);\n    }\n}\n\n/**\n *  @_ignore\n */\nexport class BytesCoder extends DynamicBytesCoder {\n    constructor(localName: string) {\n        super(\"bytes\", localName);\n    }\n\n    decode(reader: Reader): any {\n        return hexlify(super.decode(reader));\n    }\n}\n", "\nimport { defineProperties, getBytesCopy, hexlify } from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport type { BytesLike } from \"../../utils/index.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class FixedBytesCoder extends Coder {\n    readonly size!: number;\n\n    constructor(size: number, localName: string) {\n        let name = \"bytes\" + String(size);\n        super(name, name, localName, false);\n        defineProperties<FixedBytesCoder>(this, { size }, { size: \"number\" });\n    }\n\n    defaultValue(): string {\n        return (\"0x0000000000000000000000000000000000000000000000000000000000000000\").substring(0, 2 + this.size * 2);\n    }\n\n    encode(writer: Writer, _value: BytesLike | Typed): number {\n        let data = getBytesCopy(Typed.dereference(_value, this.type));\n        if (data.length !== this.size) { this._throwError(\"incorrect data length\", _value); }\n        return writer.writeBytes(data);\n    }\n\n    decode(reader: Reader): any {\n        return hexlify(reader.readBytes(this.size));\n    }\n}\n", "import { Coder } from \"./abstract-coder.js\";\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\nconst Empty = new Uint8Array([ ]);\n\n/**\n *  @_ignore\n */\nexport class NullCoder extends Coder {\n\n    constructor(localName: string) {\n        super(\"null\", \"\", localName, false);\n    }\n\n    defaultValue(): null {\n        return null;\n    }\n\n    encode(writer: Writer, value: any): number {\n        if (value != null) { this._throwError(\"not null\", value); }\n        return writer.writeBytes(Empty);\n    }\n\n    decode(reader: Reader): any {\n        reader.readBytes(0);\n        return null;\n    }\n}\n", "import {\n    defineProperties, fromTwos, getBigInt, mask, toTwos\n} from \"../../utils/index.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder, WordSize } from \"./abstract-coder.js\";\n\nimport type { BigNumberish } from \"../../utils/index.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n/**\n *  @_ignore\n */\nexport class NumberCoder extends Coder {\n    readonly size!: number;\n    readonly signed!: boolean;\n\n    constructor(size: number, signed: boolean, localName: string) {\n        const name = ((signed ? \"int\": \"uint\") + (size * 8));\n        super(name, name, localName, false);\n\n        defineProperties<NumberCoder>(this, { size, signed }, { size: \"number\", signed: \"boolean\" });\n    }\n\n    defaultValue(): number {\n        return 0;\n    }\n\n    encode(writer: Writer, _value: BigNumberish | Typed): number {\n        let value = getBigInt(Typed.dereference(_value, this.type));\n\n        // Check bounds are safe for encoding\n        let maxUintValue = mask(BN_MAX_UINT256, WordSize * 8);\n        if (this.signed) {\n            let bounds = mask(maxUintValue, (this.size * 8) - 1);\n            if (value > bounds || value < -(bounds + BN_1)) {\n                this._throwError(\"value out-of-bounds\", _value);\n            }\n            value = toTwos(value, 8 * WordSize);\n        } else if (value < BN_0 || value > mask(maxUintValue, this.size * 8)) {\n            this._throwError(\"value out-of-bounds\", _value);\n        }\n\n        return writer.writeValue(value);\n    }\n\n    decode(reader: Reader): any {\n        let value = mask(reader.readValue(), this.size * 8);\n\n        if (this.signed) {\n            value = fromTwos(value, this.size * 8);\n        }\n\n        return value;\n    }\n}\n\n", "import { toUtf8Bytes, toUtf8String } from \"../../utils/utf8.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { DynamicBytesCoder } from \"./bytes.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n\n/**\n *  @_ignore\n */\nexport class StringCoder extends DynamicBytesCoder {\n\n    constructor(localName: string) {\n        super(\"string\", localName);\n    }\n\n    defaultValue(): string {\n        return \"\";\n    }\n\n    encode(writer: Writer, _value: string | Typed): number {\n        return super.encode(writer, toUtf8Bytes(Typed.dereference(_value, \"string\")));\n    }\n\n    decode(reader: Reader): any {\n        return toUtf8String(super.decode(reader));\n    }\n}\n", "import { defineProperties } from \"../../utils/properties.js\";\n\nimport { Typed } from \"../typed.js\";\nimport { Coder } from \"./abstract-coder.js\";\n\nimport { pack, unpack } from \"./array.js\";\n\nimport type { Reader, Writer } from \"./abstract-coder.js\";\n\n/**\n *  @_ignore\n */\nexport class TupleCoder extends Coder {\n    readonly coders!: ReadonlyArray<Coder>;\n\n    constructor(coders: Array<Coder>, localName: string) {\n        let dynamic = false;\n        const types: Array<string> = [];\n        coders.forEach((coder) => {\n            if (coder.dynamic) { dynamic = true; }\n            types.push(coder.type);\n        });\n        const type = (\"tuple(\" + types.join(\",\") + \")\");\n\n        super(\"tuple\", type, localName, dynamic);\n        defineProperties<TupleCoder>(this, { coders: Object.freeze(coders.slice()) });\n    }\n\n    defaultValue(): any {\n        const values: any = [ ];\n        this.coders.forEach((coder) => {\n            values.push(coder.defaultValue());\n        });\n\n        // We only output named properties for uniquely named coders\n        const uniqueNames = this.coders.reduce((accum, coder) => {\n            const name = coder.localName;\n            if (name) {\n                if (!accum[name]) { accum[name] = 0; }\n                accum[name]++;\n            }\n            return accum;\n        }, <{ [ name: string ]: number }>{ });\n\n        // Add named values\n        this.coders.forEach((coder: Coder, index: number) => {\n            let name = coder.localName;\n            if (!name || uniqueNames[name] !== 1) { return; }\n\n            if (name === \"length\") { name = \"_length\"; }\n\n            if (values[name] != null) { return; }\n\n            values[name] = values[index];\n        });\n\n        return Object.freeze(values);\n    }\n\n    encode(writer: Writer, _value: Array<any> | { [ name: string ]: any } | Typed): number {\n        const value = Typed.dereference(_value, \"tuple\");\n        return pack(writer, this.coders, value);\n    }\n\n    decode(reader: Reader): any {\n        return unpack(reader, this.coders);\n    }\n}\n\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { toUtf8Bytes } from \"../utils/index.js\";\n\n/**\n *  A simple hashing function which operates on UTF-8 strings to\n *  compute an 32-byte identifier.\n *\n *  This simply computes the [UTF-8 bytes](toUtf8Bytes) and computes\n *  the [[keccak256]].\n *\n *  @example:\n *    id(\"hello world\")\n *    //_result:\n */\nexport function id(value: string): string {\n    return keccak256(toUtf8Bytes(value));\n}\n", "// created 2023-09-25T01:01:55.148Z\n// compressed base64-encoded blob for include-ens data\n// source: https://github.com/adraffy/ens-normalize.js/blob/main/src/make.js\n// see: https://github.com/adraffy/ens-normalize.js#security\n// SHA-256: 0565ed049b9cf1614bb9e11ba7d8ac6a6fb96c893253d890f7e2b2884b9ded32\nvar COMPRESSED$1 = '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';\nconst FENCED = new Map([[8217,\"apostrophe\"],[8260,\"fraction slash\"],[12539,\"middle dot\"]]);\nconst NSM_MAX = 4;\n\nfunction decode_arithmetic(bytes) {\r\n\tlet pos = 0;\r\n\tfunction u16() { return (bytes[pos++] << 8) | bytes[pos++]; }\r\n\t\r\n\t// decode the frequency table\r\n\tlet symbol_count = u16();\r\n\tlet total = 1;\r\n\tlet acc = [0, 1]; // first symbol has frequency 1\r\n\tfor (let i = 1; i < symbol_count; i++) {\r\n\t\tacc.push(total += u16());\r\n\t}\r\n\r\n\t// skip the sized-payload that the last 3 symbols index into\r\n\tlet skip = u16();\r\n\tlet pos_payload = pos;\r\n\tpos += skip;\r\n\r\n\tlet read_width = 0;\r\n\tlet read_buffer = 0; \r\n\tfunction read_bit() {\r\n\t\tif (read_width == 0) {\r\n\t\t\t// this will read beyond end of buffer\r\n\t\t\t// but (undefined|0) => zero pad\r\n\t\t\tread_buffer = (read_buffer << 8) | bytes[pos++];\r\n\t\t\tread_width = 8;\r\n\t\t}\r\n\t\treturn (read_buffer >> --read_width) & 1;\r\n\t}\r\n\r\n\tconst N = 31;\r\n\tconst FULL = 2**N;\r\n\tconst HALF = FULL >>> 1;\r\n\tconst QRTR = HALF >> 1;\r\n\tconst MASK = FULL - 1;\r\n\r\n\t// fill register\r\n\tlet register = 0;\r\n\tfor (let i = 0; i < N; i++) register = (register << 1) | read_bit();\r\n\r\n\tlet symbols = [];\r\n\tlet low = 0;\r\n\tlet range = FULL; // treat like a float\r\n\twhile (true) {\r\n\t\tlet value = Math.floor((((register - low + 1) * total) - 1) / range);\r\n\t\tlet start = 0;\r\n\t\tlet end = symbol_count;\r\n\t\twhile (end - start > 1) { // binary search\r\n\t\t\tlet mid = (start + end) >>> 1;\r\n\t\t\tif (value < acc[mid]) {\r\n\t\t\t\tend = mid;\r\n\t\t\t} else {\r\n\t\t\t\tstart = mid;\r\n\t\t\t}\r\n\t\t}\r\n\t\tif (start == 0) break; // first symbol is end mark\r\n\t\tsymbols.push(start);\r\n\t\tlet a = low + Math.floor(range * acc[start]   / total);\r\n\t\tlet b = low + Math.floor(range * acc[start+1] / total) - 1;\r\n\t\twhile (((a ^ b) & HALF) == 0) {\r\n\t\t\tregister = (register << 1) & MASK | read_bit();\r\n\t\t\ta = (a << 1) & MASK;\r\n\t\t\tb = (b << 1) & MASK | 1;\r\n\t\t}\r\n\t\twhile (a & ~b & QRTR) {\r\n\t\t\tregister = (register & HALF) | ((register << 1) & (MASK >>> 1)) | read_bit();\r\n\t\t\ta = (a << 1) ^ HALF;\r\n\t\t\tb = ((b ^ HALF) << 1) | HALF | 1;\r\n\t\t}\r\n\t\tlow = a;\r\n\t\trange = 1 + b - a;\r\n\t}\r\n\tlet offset = symbol_count - 4;\r\n\treturn symbols.map(x => { // index into payload\r\n\t\tswitch (x - offset) {\r\n\t\t\tcase 3: return offset + 0x10100 + ((bytes[pos_payload++] << 16) | (bytes[pos_payload++] << 8) | bytes[pos_payload++]);\r\n\t\t\tcase 2: return offset + 0x100 + ((bytes[pos_payload++] << 8) | bytes[pos_payload++]);\r\n\t\t\tcase 1: return offset + bytes[pos_payload++];\r\n\t\t\tdefault: return x - 1;\r\n\t\t}\r\n\t});\r\n}\t\r\n\r\n// returns an iterator which returns the next symbol\r\nfunction read_payload(v) {\r\n\tlet pos = 0;\r\n\treturn () => v[pos++];\r\n}\r\nfunction read_compressed_payload(s) {\r\n\treturn read_payload(decode_arithmetic(unsafe_atob(s)));\r\n}\r\n\r\n// unsafe in the sense:\r\n// expected well-formed Base64 w/o padding \r\n// 20220922: added for https://github.com/adraffy/ens-normalize.js/issues/4\r\nfunction unsafe_atob(s) {\r\n\tlet lookup = [];\r\n\t[...'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'].forEach((c, i) => lookup[c.charCodeAt(0)] = i);\r\n\tlet n = s.length;\r\n\tlet ret = new Uint8Array((6 * n) >> 3);\r\n\tfor (let i = 0, pos = 0, width = 0, carry = 0; i < n; i++) {\r\n\t\tcarry = (carry << 6) | lookup[s.charCodeAt(i)];\r\n\t\twidth += 6;\r\n\t\tif (width >= 8) {\r\n\t\t\tret[pos++] = (carry >> (width -= 8));\r\n\t\t}\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\n// eg. [0,1,2,3...] => [0,-1,1,-2,...]\r\nfunction signed(i) { \r\n\treturn (i & 1) ? (~i >> 1) : (i >> 1);\r\n}\r\n\r\nfunction read_deltas(n, next) {\r\n\tlet v = Array(n);\r\n\tfor (let i = 0, x = 0; i < n; i++) v[i] = x += signed(next());\r\n\treturn v;\r\n}\r\n\r\n// [123][5] => [0 3] [1 1] [0 0]\r\nfunction read_sorted(next, prev = 0) {\r\n\tlet ret = [];\r\n\twhile (true) {\r\n\t\tlet x = next();\r\n\t\tlet n = next();\r\n\t\tif (!n) break;\r\n\t\tprev += x;\r\n\t\tfor (let i = 0; i < n; i++) {\r\n\t\t\tret.push(prev + i);\r\n\t\t}\r\n\t\tprev += n + 1;\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction read_sorted_arrays(next) {\r\n\treturn read_array_while(() => { \r\n\t\tlet v = read_sorted(next);\r\n\t\tif (v.length) return v;\r\n\t});\r\n}\r\n\r\n// returns map of x => ys\r\nfunction read_mapped(next) {\r\n\tlet ret = [];\r\n\twhile (true) {\r\n\t\tlet w = next();\r\n\t\tif (w == 0) break;\r\n\t\tret.push(read_linear_table(w, next));\r\n\t}\r\n\twhile (true) {\r\n\t\tlet w = next() - 1;\r\n\t\tif (w < 0) break;\r\n\t\tret.push(read_replacement_table(w, next));\r\n\t}\r\n\treturn ret.flat();\r\n}\r\n\r\n// read until next is falsy\r\n// return array of read values\r\nfunction read_array_while(next) {\r\n\tlet v = [];\r\n\twhile (true) {\r\n\t\tlet x = next(v.length);\r\n\t\tif (!x) break;\r\n\t\tv.push(x);\r\n\t}\r\n\treturn v;\r\n}\r\n\r\n// read w columns of length n\r\n// return as n rows of length w\r\nfunction read_transposed(n, w, next) {\r\n\tlet m = Array(n).fill().map(() => []);\r\n\tfor (let i = 0; i < w; i++) {\r\n\t\tread_deltas(n, next).forEach((x, j) => m[j].push(x));\r\n\t}\r\n\treturn m;\r\n}\r\n \r\n// returns [[x, ys], [x+dx, ys+dy], [x+2*dx, ys+2*dy], ...]\r\n// where dx/dy = steps, n = run size, w = length of y\r\nfunction read_linear_table(w, next) {\r\n\tlet dx = 1 + next();\r\n\tlet dy = next();\r\n\tlet vN = read_array_while(next);\r\n\tlet m = read_transposed(vN.length, 1+w, next);\r\n\treturn m.flatMap((v, i) => {\r\n\t\tlet [x, ...ys] = v;\r\n\t\treturn Array(vN[i]).fill().map((_, j) => {\r\n\t\t\tlet j_dy = j * dy;\r\n\t\t\treturn [x + j * dx, ys.map(y => y + j_dy)];\r\n\t\t});\r\n\t});\r\n}\r\n\r\n// return [[x, ys...], ...]\r\n// where w = length of y\r\nfunction read_replacement_table(w, next) { \r\n\tlet n = 1 + next();\r\n\tlet m = read_transposed(n, 1+w, next);\r\n\treturn m.map(v => [v[0], v.slice(1)]);\r\n}\r\n\r\n\r\nfunction read_trie(next) {\r\n\tlet ret = [];\r\n\tlet sorted = read_sorted(next); \r\n\texpand(decode([]), []);\r\n\treturn ret; // not sorted\r\n\tfunction decode(Q) { // characters that lead into this node\r\n\t\tlet S = next(); // state: valid, save, check\r\n\t\tlet B = read_array_while(() => { // buckets leading to new nodes\r\n\t\t\tlet cps = read_sorted(next).map(i => sorted[i]);\r\n\t\t\tif (cps.length) return decode(cps);\r\n\t\t});\r\n\t\treturn {S, B, Q};\r\n\t}\r\n\tfunction expand({S, B}, cps, saved) {\r\n\t\tif (S & 4 && saved === cps[cps.length-1]) return;\r\n\t\tif (S & 2) saved = cps[cps.length-1];\r\n\t\tif (S & 1) ret.push(cps); \r\n\t\tfor (let br of B) {\r\n\t\t\tfor (let cp of br.Q) {\r\n\t\t\t\texpand(br, [...cps, cp], saved);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\n\nfunction hex_cp(cp) {\r\n\treturn cp.toString(16).toUpperCase().padStart(2, '0');\r\n}\r\n\r\nfunction quote_cp(cp) {\r\n\treturn `{${hex_cp(cp)}}`; // raffy convention: like \"\\u{X}\" w/o the \"\\u\"\r\n}\r\n\r\n/*\r\nexport function explode_cp(s) {\r\n\treturn [...s].map(c => c.codePointAt(0));\r\n}\r\n*/\r\nfunction explode_cp(s) { // this is about 2x faster\r\n\tlet cps = [];\r\n\tfor (let pos = 0, len = s.length; pos < len; ) {\r\n\t\tlet cp = s.codePointAt(pos);\r\n\t\tpos += cp < 0x10000 ? 1 : 2;\r\n\t\tcps.push(cp);\r\n\t}\r\n\treturn cps;\r\n}\r\n\r\nfunction str_from_cps(cps) {\r\n\tconst chunk = 4096;\r\n\tlet len = cps.length;\r\n\tif (len < chunk) return String.fromCodePoint(...cps);\r\n\tlet buf = [];\r\n\tfor (let i = 0; i < len; ) {\r\n\t\tbuf.push(String.fromCodePoint(...cps.slice(i, i += chunk)));\r\n\t}\r\n\treturn buf.join('');\r\n}\r\n\r\nfunction compare_arrays(a, b) {\r\n\tlet n = a.length;\r\n\tlet c = n - b.length;\r\n\tfor (let i = 0; c == 0 && i < n; i++) c = a[i] - b[i];\r\n\treturn c;\r\n}\n\n// created 2023-09-25T01:01:55.148Z\n// compressed base64-encoded blob for include-nf data\n// source: https://github.com/adraffy/ens-normalize.js/blob/main/src/make.js\n// see: https://github.com/adraffy/ens-normalize.js#security\n// SHA-256: a974b6f8541fc29d919bc85118af0a44015851fab5343f8679cb31be2bdb209e\nvar COMPRESSED = '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';\n\n// https://unicode.org/reports/tr15/\r\n// for reference implementation\r\n// see: /derive/nf.js\r\n\r\n\r\n// algorithmic hangul\r\n// https://www.unicode.org/versions/Unicode15.0.0/ch03.pdf (page 144)\r\nconst S0 = 0xAC00;\r\nconst L0 = 0x1100;\r\nconst V0 = 0x1161;\r\nconst T0 = 0x11A7;\r\nconst L_COUNT = 19;\r\nconst V_COUNT = 21;\r\nconst T_COUNT = 28;\r\nconst N_COUNT = V_COUNT * T_COUNT;\r\nconst S_COUNT = L_COUNT * N_COUNT;\r\nconst S1 = S0 + S_COUNT;\r\nconst L1 = L0 + L_COUNT;\r\nconst V1 = V0 + V_COUNT;\r\nconst T1 = T0 + T_COUNT;\r\n\r\nfunction unpack_cc(packed) {\r\n\treturn (packed >> 24) & 0xFF;\r\n}\r\nfunction unpack_cp(packed) {\r\n\treturn packed & 0xFFFFFF;\r\n}\r\n\r\nlet SHIFTED_RANK, EXCLUSIONS, DECOMP, RECOMP;\r\n\r\nfunction init$1() {\r\n\t//console.time('nf');\r\n\tlet r = read_compressed_payload(COMPRESSED);\r\n\tSHIFTED_RANK = new Map(read_sorted_arrays(r).flatMap((v, i) => v.map(x => [x, (i+1) << 24]))); // pre-shifted\r\n\tEXCLUSIONS = new Set(read_sorted(r));\r\n\tDECOMP = new Map();\r\n\tRECOMP = new Map();\r\n\tfor (let [cp, cps] of read_mapped(r)) {\r\n\t\tif (!EXCLUSIONS.has(cp) && cps.length == 2) {\r\n\t\t\tlet [a, b] = cps;\r\n\t\t\tlet bucket = RECOMP.get(a);\r\n\t\t\tif (!bucket) {\r\n\t\t\t\tbucket = new Map();\r\n\t\t\t\tRECOMP.set(a, bucket);\r\n\t\t\t}\r\n\t\t\tbucket.set(b, cp);\r\n\t\t}\r\n\t\tDECOMP.set(cp, cps.reverse()); // stored reversed\r\n\t}\r\n\t//console.timeEnd('nf');\r\n\t// 20230905: 11ms\r\n}\r\n\r\nfunction is_hangul(cp) {\r\n\treturn cp >= S0 && cp < S1;\r\n}\r\n\r\nfunction compose_pair(a, b) {\r\n\tif (a >= L0 && a < L1 && b >= V0 && b < V1) {\r\n\t\treturn S0 + (a - L0) * N_COUNT + (b - V0) * T_COUNT;\r\n\t} else if (is_hangul(a) && b > T0 && b < T1 && (a - S0) % T_COUNT == 0) {\r\n\t\treturn a + (b - T0);\r\n\t} else {\r\n\t\tlet recomp = RECOMP.get(a);\r\n\t\tif (recomp) {\r\n\t\t\trecomp = recomp.get(b);\r\n\t\t\tif (recomp) {\r\n\t\t\t\treturn recomp;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn -1;\r\n\t}\r\n}\r\n\r\nfunction decomposed(cps) {\r\n\tif (!SHIFTED_RANK) init$1();\r\n\tlet ret = [];\r\n\tlet buf = [];\r\n\tlet check_order = false;\r\n\tfunction add(cp) {\r\n\t\tlet cc = SHIFTED_RANK.get(cp);\r\n\t\tif (cc) {\r\n\t\t\tcheck_order = true;\r\n\t\t\tcp |= cc;\r\n\t\t}\r\n\t\tret.push(cp);\r\n\t}\r\n\tfor (let cp of cps) {\r\n\t\twhile (true) {\r\n\t\t\tif (cp < 0x80) {\r\n\t\t\t\tret.push(cp);\r\n\t\t\t} else if (is_hangul(cp)) {\r\n\t\t\t\tlet s_index = cp - S0;\r\n\t\t\t\tlet l_index = s_index / N_COUNT | 0;\r\n\t\t\t\tlet v_index = (s_index % N_COUNT) / T_COUNT | 0;\r\n\t\t\t\tlet t_index = s_index % T_COUNT;\r\n\t\t\t\tadd(L0 + l_index);\r\n\t\t\t\tadd(V0 + v_index);\r\n\t\t\t\tif (t_index > 0) add(T0 + t_index);\r\n\t\t\t} else {\r\n\t\t\t\tlet mapped = DECOMP.get(cp);\r\n\t\t\t\tif (mapped) {\r\n\t\t\t\t\tbuf.push(...mapped);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tadd(cp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!buf.length) break;\r\n\t\t\tcp = buf.pop();\r\n\t\t}\r\n\t}\r\n\tif (check_order && ret.length > 1) {\r\n\t\tlet prev_cc = unpack_cc(ret[0]);\r\n\t\tfor (let i = 1; i < ret.length; i++) {\r\n\t\t\tlet cc = unpack_cc(ret[i]);\r\n\t\t\tif (cc == 0 || prev_cc <= cc) {\r\n\t\t\t\tprev_cc = cc;\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tlet j = i-1;\r\n\t\t\twhile (true) {\r\n\t\t\t\tlet tmp = ret[j+1];\r\n\t\t\t\tret[j+1] = ret[j];\r\n\t\t\t\tret[j] = tmp;\r\n\t\t\t\tif (!j) break;\r\n\t\t\t\tprev_cc = unpack_cc(ret[--j]);\r\n\t\t\t\tif (prev_cc <= cc) break;\r\n\t\t\t}\r\n\t\t\tprev_cc = unpack_cc(ret[i]);\r\n\t\t}\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction composed_from_decomposed(v) {\r\n\tlet ret = [];\r\n\tlet stack = [];\r\n\tlet prev_cp = -1;\r\n\tlet prev_cc = 0;\r\n\tfor (let packed of v) {\r\n\t\tlet cc = unpack_cc(packed);\r\n\t\tlet cp = unpack_cp(packed);\r\n\t\tif (prev_cp == -1) {\r\n\t\t\tif (cc == 0) {\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tret.push(cp);\r\n\t\t\t}\r\n\t\t} else if (prev_cc > 0 && prev_cc >= cc) {\r\n\t\t\tif (cc == 0) {\r\n\t\t\t\tret.push(prev_cp, ...stack);\r\n\t\t\t\tstack.length = 0;\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tstack.push(cp);\r\n\t\t\t}\r\n\t\t\tprev_cc = cc;\r\n\t\t} else {\r\n\t\t\tlet composed = compose_pair(prev_cp, cp);\r\n\t\t\tif (composed >= 0) {\r\n\t\t\t\tprev_cp = composed;\r\n\t\t\t} else if (prev_cc == 0 && cc == 0) {\r\n\t\t\t\tret.push(prev_cp);\r\n\t\t\t\tprev_cp = cp;\r\n\t\t\t} else {\r\n\t\t\t\tstack.push(cp);\r\n\t\t\t\tprev_cc = cc;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (prev_cp >= 0) {\r\n\t\tret.push(prev_cp, ...stack);\t\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\n// note: cps can be iterable\r\nfunction nfd(cps) {\r\n\treturn decomposed(cps).map(unpack_cp);\r\n}\r\nfunction nfc(cps) {\r\n\treturn composed_from_decomposed(decomposed(cps));\r\n}\n\nconst HYPHEN = 0x2D;\r\nconst STOP = 0x2E;\r\nconst STOP_CH = '.';\r\nconst FE0F = 0xFE0F;\r\nconst UNIQUE_PH = 1;\r\n\r\n// 20230913: replace [...v] with Array_from(v) to avoid large spreads\r\nconst Array_from = x => Array.from(x); // Array.from.bind(Array);\r\n\r\nfunction group_has_cp(g, cp) {\r\n\t// 20230913: keep primary and secondary distinct instead of creating valid union\r\n\treturn g.P.has(cp) || g.Q.has(cp);\r\n}\r\n\r\nclass Emoji extends Array {\r\n\tget is_emoji() { return true; } // free tagging system\r\n}\r\n\r\nlet MAPPED, IGNORED, CM, NSM, ESCAPE, NFC_CHECK, GROUPS, WHOLE_VALID, WHOLE_MAP, VALID, EMOJI_LIST, EMOJI_ROOT;\r\n\r\nfunction init() {\r\n\tif (MAPPED) return;\r\n\t\r\n\tlet r = read_compressed_payload(COMPRESSED$1);\r\n\tconst read_sorted_array = () => read_sorted(r);\r\n\tconst read_sorted_set = () => new Set(read_sorted_array());\r\n\tconst set_add_many = (set, v) => v.forEach(x => set.add(x));\r\n\r\n\tMAPPED = new Map(read_mapped(r)); \r\n\tIGNORED = read_sorted_set(); // ignored characters are not valid, so just read raw codepoints\r\n\r\n\t/*\r\n\t// direct include from payload is smaller than the decompression code\r\n\tconst FENCED = new Map(read_array_while(() => {\r\n\t\tlet cp = r();\r\n\t\tif (cp) return [cp, read_str(r())];\r\n\t}));\r\n\t*/\r\n\t// 20230217: we still need all CM for proper error formatting\r\n\t// but norm only needs NSM subset that are potentially-valid\r\n\tCM = read_sorted_array();\r\n\tNSM = new Set(read_sorted_array().map(i => CM[i]));\r\n\tCM = new Set(CM);\r\n\t\r\n\tESCAPE = read_sorted_set(); // characters that should not be printed\r\n\tNFC_CHECK = read_sorted_set(); // only needed to illustrate ens_tokenize() transformations\r\n\r\n\tlet chunks = read_sorted_arrays(r);\r\n\tlet unrestricted = r();\r\n\t//const read_chunked = () => new Set(read_sorted_array().flatMap(i => chunks[i]).concat(read_sorted_array()));\r\n\tconst read_chunked = () => {\r\n\t\t// 20230921: build set in parts, 2x faster\r\n\t\tlet set = new Set();\r\n\t\tread_sorted_array().forEach(i => set_add_many(set, chunks[i]));\r\n\t\tset_add_many(set, read_sorted_array());\r\n\t\treturn set; \r\n\t};\r\n\tGROUPS = read_array_while(i => {\r\n\t\t// minifier property mangling seems unsafe\r\n\t\t// so these are manually renamed to single chars\r\n\t\tlet N = read_array_while(r).map(x => x+0x60);\r\n\t\tif (N.length) {\r\n\t\t\tlet R = i >= unrestricted; // unrestricted then restricted\r\n\t\t\tN[0] -= 32; // capitalize\r\n\t\t\tN = str_from_cps(N);\r\n\t\t\tif (R) N=`Restricted[${N}]`;\r\n\t\t\tlet P = read_chunked(); // primary\r\n\t\t\tlet Q = read_chunked(); // secondary\r\n\t\t\tlet M = !r(); // not-whitelisted, check for NSM\r\n\t\t\t// *** this code currently isn't needed ***\r\n\t\t\t/*\r\n\t\t\tlet V = [...P, ...Q].sort((a, b) => a-b); // derive: sorted valid\r\n\t\t\tlet M = r()-1; // number of combining mark\r\n\t\t\tif (M < 0) { // whitelisted\r\n\t\t\t\tM = new Map(read_array_while(() => {\r\n\t\t\t\t\tlet i = r();\r\n\t\t\t\t\tif (i) return [V[i-1], read_array_while(() => {\r\n\t\t\t\t\t\tlet v = read_array_while(r);\r\n\t\t\t\t\t\tif (v.length) return v.map(x => x-1);\r\n\t\t\t\t\t})];\r\n\t\t\t\t}));\r\n\t\t\t}*/\r\n\t\t\treturn {N, P, Q, M, R};\r\n\t\t}\r\n\t});\r\n\r\n\t// decode compressed wholes\r\n\tWHOLE_VALID = read_sorted_set();\r\n\tWHOLE_MAP = new Map();\r\n\tlet wholes = read_sorted_array().concat(Array_from(WHOLE_VALID)).sort((a, b) => a-b); // must be sorted\r\n\twholes.forEach((cp, i) => {\r\n\t\tlet d = r(); \r\n\t\tlet w = wholes[i] = d ? wholes[i-d] : {V: [], M: new Map()};\r\n\t\tw.V.push(cp); // add to member set\r\n\t\tif (!WHOLE_VALID.has(cp)) {\r\n\t\t\tWHOLE_MAP.set(cp, w);  // register with whole map\r\n\t\t}\r\n\t});\r\n\r\n\t// compute confusable-extent complements\r\n\t// usage: WHOLE_MAP.get(cp).M.get(cp) = complement set\r\n\tfor (let {V, M} of new Set(WHOLE_MAP.values())) {\r\n\t\t// connect all groups that have each whole character\r\n\t\tlet recs = [];\r\n\t\tfor (let cp of V) {\r\n\t\t\tlet gs = GROUPS.filter(g => group_has_cp(g, cp));\r\n\t\t\tlet rec = recs.find(({G}) => gs.some(g => G.has(g)));\r\n\t\t\tif (!rec) {\r\n\t\t\t\trec = {G: new Set(), V: []};\r\n\t\t\t\trecs.push(rec);\r\n\t\t\t}\r\n\t\t\trec.V.push(cp);\r\n\t\t\tset_add_many(rec.G, gs);\r\n\t\t}\r\n\t\t// per character cache groups which are not a member of the extent\r\n\t\tlet union = recs.flatMap(x => Array_from(x.G)); // all of the groups used by this whole\r\n\t\tfor (let {G, V} of recs) {\r\n\t\t\tlet complement = new Set(union.filter(g => !G.has(g))); // groups not covered by the extent\r\n\t\t\tfor (let cp of V) {\r\n\t\t\t\tM.set(cp, complement); // this is the same reference\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// compute valid set\r\n\t// 20230924: VALID was union but can be re-used\r\n\tVALID = new Set(); // exists in 1+ groups\r\n\tlet multi = new Set(); // exists in 2+ groups\r\n\tconst add_to_union = cp => VALID.has(cp) ? multi.add(cp) : VALID.add(cp);\r\n\tfor (let g of GROUPS) {\r\n\t\tfor (let cp of g.P) add_to_union(cp);\r\n\t\tfor (let cp of g.Q) add_to_union(cp);\r\n\t}\r\n\t// dual purpose WHOLE_MAP: return placeholder if unique non-confusable\r\n\tfor (let cp of VALID) {\r\n\t\tif (!WHOLE_MAP.has(cp) && !multi.has(cp)) {\r\n\t\t\tWHOLE_MAP.set(cp, UNIQUE_PH);\r\n\t\t}\r\n\t}\r\n\t// add all decomposed parts\r\n\t// see derive: \"Valid is Closed (via Brute-force)\"\r\n\tset_add_many(VALID, nfd(VALID));\r\n\t\r\n\t// decode emoji\r\n\t// 20230719: emoji are now fully-expanded to avoid quirk logic \r\n\tEMOJI_LIST = read_trie(r).map(v => Emoji.from(v)).sort(compare_arrays);\r\n\tEMOJI_ROOT = new Map(); // this has approx 7K nodes (2+ per emoji)\r\n\tfor (let cps of EMOJI_LIST) {\r\n\t\t// 20230719: change to *slightly* stricter algorithm which disallows \r\n\t\t// insertion of misplaced FE0F in emoji sequences (matching ENSIP-15)\r\n\t\t// example: beautified [A B] (eg. flag emoji) \r\n\t\t//  before: allow: [A FE0F B], error: [A FE0F FE0F B] \r\n\t\t//   after: error: both\r\n\t\t// note: this code now matches ENSNormalize.{cs,java} logic\r\n\t\tlet prev = [EMOJI_ROOT];\r\n\t\tfor (let cp of cps) {\r\n\t\t\tlet next = prev.map(node => {\r\n\t\t\t\tlet child = node.get(cp);\r\n\t\t\t\tif (!child) {\r\n\t\t\t\t\t// should this be object? \r\n\t\t\t\t\t// (most have 1-2 items, few have many)\r\n\t\t\t\t\t// 20230719: no, v8 default map is 4?\r\n\t\t\t\t\tchild = new Map();\r\n\t\t\t\t\tnode.set(cp, child);\r\n\t\t\t\t}\r\n\t\t\t\treturn child;\r\n\t\t\t});\r\n\t\t\tif (cp === FE0F) {\r\n\t\t\t\tprev.push(...next); // less than 20 elements\r\n\t\t\t} else {\r\n\t\t\t\tprev = next;\r\n\t\t\t}\r\n\t\t}\r\n\t\tfor (let x of prev) {\r\n\t\t\tx.V = cps;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// if escaped: {HEX}\r\n//       else: \"x\" {HEX}\r\nfunction quoted_cp(cp) {\r\n\treturn (should_escape(cp) ? '' : `${bidi_qq(safe_str_from_cps([cp]))} `) + quote_cp(cp);\r\n}\r\n\r\n// 20230211: some messages can be mixed-directional and result in spillover\r\n// use 200E after a quoted string to force the remainder of a string from \r\n// acquring the direction of the quote\r\n// https://www.w3.org/International/questions/qa-bidi-unicode-controls#exceptions\r\nfunction bidi_qq(s) {\r\n\treturn `\"${s}\"\\u200E`; // strong LTR\r\n}\r\n\r\nfunction check_label_extension(cps) {\r\n\tif (cps.length >= 4 && cps[2] == HYPHEN && cps[3] == HYPHEN) {\r\n\t\tthrow new Error(`invalid label extension: \"${str_from_cps(cps.slice(0, 4))}\"`); // this can only be ascii so cant be bidi\r\n\t}\r\n}\r\nfunction check_leading_underscore(cps) {\r\n\tconst UNDERSCORE = 0x5F;\r\n\tfor (let i = cps.lastIndexOf(UNDERSCORE); i > 0; ) {\r\n\t\tif (cps[--i] !== UNDERSCORE) {\r\n\t\t\tthrow new Error('underscore allowed only at start');\r\n\t\t}\r\n\t}\r\n}\r\n// check that a fenced cp is not leading, trailing, or touching another fenced cp\r\nfunction check_fenced(cps) {\r\n\tlet cp = cps[0];\r\n\tlet prev = FENCED.get(cp);\r\n\tif (prev) throw error_placement(`leading ${prev}`);\r\n\tlet n = cps.length;\r\n\tlet last = -1; // prevents trailing from throwing\r\n\tfor (let i = 1; i < n; i++) {\r\n\t\tcp = cps[i];\r\n\t\tlet match = FENCED.get(cp);\r\n\t\tif (match) {\r\n\t\t\t// since cps[0] isn't fenced, cps[1] cannot throw\r\n\t\t\tif (last == i) throw error_placement(`${prev} + ${match}`);\r\n\t\t\tlast = i + 1;\r\n\t\t\tprev = match;\r\n\t\t}\r\n\t}\r\n\tif (last == n) throw error_placement(`trailing ${prev}`);\r\n}\r\n\r\n// create a safe to print string \r\n// invisibles are escaped\r\n// leading cm uses placeholder\r\n// if cps exceed max, middle truncate with ellipsis\r\n// quoter(cp) => string, eg. 3000 => \"{3000}\"\r\n// note: in html, you'd call this function then replace [<>&] with entities\r\nfunction safe_str_from_cps(cps, max = Infinity, quoter = quote_cp) {\r\n\t//if (Number.isInteger(cps)) cps = [cps];\r\n\t//if (!Array.isArray(cps)) throw new TypeError(`expected codepoints`);\r\n\tlet buf = [];\r\n\tif (is_combining_mark(cps[0])) buf.push('\u25CC');\r\n\tif (cps.length > max) {\r\n\t\tmax >>= 1;\r\n\t\tcps = [...cps.slice(0, max), 0x2026, ...cps.slice(-max)];\r\n\t}\r\n\tlet prev = 0;\r\n\tlet n = cps.length;\r\n\tfor (let i = 0; i < n; i++) {\r\n\t\tlet cp = cps[i];\r\n\t\tif (should_escape(cp)) {\r\n\t\t\tbuf.push(str_from_cps(cps.slice(prev, i)));\r\n\t\t\tbuf.push(quoter(cp));\r\n\t\t\tprev = i + 1;\r\n\t\t}\r\n\t}\r\n\tbuf.push(str_from_cps(cps.slice(prev, n)));\r\n\treturn buf.join('');\r\n}\r\n\r\n// note: set(s) cannot be exposed because they can be modified\r\n// note: Object.freeze() doesn't work\r\nfunction is_combining_mark(cp) {\r\n\tinit();\r\n\treturn CM.has(cp);\r\n}\r\nfunction should_escape(cp) {\r\n\tinit();\r\n\treturn ESCAPE.has(cp);\r\n}\r\n\r\n// return all supported emoji as fully-qualified emoji \r\n// ordered by length then lexicographic \r\nfunction ens_emoji() {\r\n\tinit();\r\n\treturn EMOJI_LIST.map(x => x.slice()); // emoji are exposed so copy\r\n}\r\n\r\nfunction ens_normalize_fragment(frag, decompose) {\r\n\tinit();\r\n\tlet nf = decompose ? nfd : nfc;\r\n\treturn frag.split(STOP_CH).map(label => str_from_cps(tokens_from_str(explode_cp(label), nf, filter_fe0f).flat())).join(STOP_CH);\r\n}\r\n\r\nfunction ens_normalize(name) {\r\n\treturn flatten(split(name, nfc, filter_fe0f));\r\n}\r\n\r\nfunction ens_beautify(name) {\r\n\tlet labels = split(name, nfc, x => x); // emoji not exposed\r\n\tfor (let {type, output, error} of labels) {\r\n\t\tif (error) break; // flatten will throw\r\n\r\n\t\t// replace leading/trailing hyphen\r\n\t\t// 20230121: consider beautifing all or leading/trailing hyphen to unicode variant\r\n\t\t// not exactly the same in every font, but very similar: \"-\" vs \"\u2010\"\r\n\t\t/*\r\n\t\tconst UNICODE_HYPHEN = 0x2010;\r\n\t\t// maybe this should replace all for visual consistancy?\r\n\t\t// `node tools/reg-count.js regex ^-\\{2,\\}` => 592\r\n\t\t//for (let i = 0; i < output.length; i++) if (output[i] == 0x2D) output[i] = 0x2010;\r\n\t\tif (output[0] == HYPHEN) output[0] = UNICODE_HYPHEN;\r\n\t\tlet end = output.length-1;\r\n\t\tif (output[end] == HYPHEN) output[end] = UNICODE_HYPHEN;\r\n\t\t*/\r\n\t\t// 20230123: WHATWG URL uses \"CheckHyphens\" false\r\n\t\t// https://url.spec.whatwg.org/#idna\r\n\r\n\t\t// update ethereum symbol\r\n\t\t// \u03BE => \u039E if not greek\r\n\t\tif (type !== 'Greek') array_replace(output, 0x3BE, 0x39E);\r\n\r\n\t\t// 20221213: fixes bidi subdomain issue, but breaks invariant (200E is disallowed)\r\n\t\t// could be fixed with special case for: 2D (.) + 200E (LTR)\r\n\t\t// https://discuss.ens.domains/t/bidi-label-ordering-spoof/15824\r\n\t\t//output.splice(0, 0, 0x200E);\r\n\t}\r\n\treturn flatten(labels);\r\n}\r\n\r\nfunction array_replace(v, a, b) {\r\n\tlet prev = 0;\r\n\twhile (true) {\r\n\t\tlet next = v.indexOf(a, prev);\r\n\t\tif (next < 0) break;\r\n\t\tv[next] = b; \r\n\t\tprev = next + 1;\r\n\t}\r\n}\r\n\r\nfunction ens_split(name, preserve_emoji) {\r\n\treturn split(name, nfc, preserve_emoji ? x => x.slice() : filter_fe0f); // emoji are exposed so copy\r\n}\r\n\r\nfunction split(name, nf, ef) {\r\n\tif (!name) return []; // 20230719: empty name allowance\r\n\tinit();\r\n\tlet offset = 0;\r\n\t// https://unicode.org/reports/tr46/#Validity_Criteria\r\n\t// 4.) \"The label must not contain a U+002E ( . ) FULL STOP.\"\r\n\treturn name.split(STOP_CH).map(label => {\r\n\t\tlet input = explode_cp(label);\r\n\t\tlet info = {\r\n\t\t\tinput,\r\n\t\t\toffset, // codepoint, not substring!\r\n\t\t};\r\n\t\toffset += input.length + 1; // + stop\r\n\t\ttry {\r\n\t\t\t// 1.) \"The label must be in Unicode Normalization Form NFC\"\r\n\t\t\tlet tokens = info.tokens = tokens_from_str(input, nf, ef);\r\n\t\t\tlet token_count = tokens.length;\r\n\t\t\tlet type;\r\n\t\t\tif (!token_count) { // the label was effectively empty (could of had ignored characters)\r\n\t\t\t\t//norm = [];\r\n\t\t\t\t//type = 'None'; // use this instead of next match, \"ASCII\"\r\n\t\t\t\t// 20230120: change to strict\r\n\t\t\t\t// https://discuss.ens.domains/t/ens-name-normalization-2nd/14564/59\r\n\t\t\t\tthrow new Error(`empty label`);\r\n\t\t\t} \r\n\t\t\tlet norm = info.output = tokens.flat();\r\n\t\t\tcheck_leading_underscore(norm);\r\n\t\t\tlet emoji = info.emoji = token_count > 1 || tokens[0].is_emoji; // same as: tokens.some(x => x.is_emoji);\r\n\t\t\tif (!emoji && norm.every(cp => cp < 0x80)) { // special case for ascii\r\n\t\t\t\t// 20230123: matches matches WHATWG, see note 3.3\r\n\t\t\t\tcheck_label_extension(norm); // only needed for ascii\r\n\t\t\t\t// cant have fenced\r\n\t\t\t\t// cant have cm\r\n\t\t\t\t// cant have wholes\r\n\t\t\t\t// see derive: \"Fastpath ASCII\"\r\n\t\t\t\ttype = 'ASCII';\r\n\t\t\t} else {\r\n\t\t\t\tlet chars = tokens.flatMap(x => x.is_emoji ? [] : x); // all of the nfc tokens concat together\r\n\t\t\t\tif (!chars.length) { // theres no text, just emoji\r\n\t\t\t\t\ttype = 'Emoji';\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// 5.) \"The label must not begin with a combining mark, that is: General_Category=Mark.\"\r\n\t\t\t\t\tif (CM.has(norm[0])) throw error_placement('leading combining mark');\r\n\t\t\t\t\tfor (let i = 1; i < token_count; i++) { // we've already checked the first token\r\n\t\t\t\t\t\tlet cps = tokens[i];\r\n\t\t\t\t\t\tif (!cps.is_emoji && CM.has(cps[0])) { // every text token has emoji neighbors, eg. EtEEEtEt...\r\n\t\t\t\t\t\t\t// bidi_qq() not needed since emoji is LTR and cps is a CM\r\n\t\t\t\t\t\t\tthrow error_placement(`emoji + combining mark: \"${str_from_cps(tokens[i-1])} + ${safe_str_from_cps([cps[0]])}\"`); \r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcheck_fenced(norm);\r\n\t\t\t\t\tlet unique = Array_from(new Set(chars));\r\n\t\t\t\t\tlet [g] = determine_group(unique); // take the first match\r\n\t\t\t\t\t// see derive: \"Matching Groups have Same CM Style\"\r\n\t\t\t\t\t// alternative: could form a hybrid type: Latin/Japanese/...\t\r\n\t\t\t\t\tcheck_group(g, chars); // need text in order\r\n\t\t\t\t\tcheck_whole(g, unique); // only need unique text (order would be required for multiple-char confusables)\r\n\t\t\t\t\ttype = g.N;\r\n\t\t\t\t\t// 20230121: consider exposing restricted flag\r\n\t\t\t\t\t// it's simpler to just check for 'Restricted'\r\n\t\t\t\t\t// or even better: type.endsWith(']')\r\n\t\t\t\t\t//if (g.R) info.restricted = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tinfo.type = type;\r\n\t\t} catch (err) {\r\n\t\t\tinfo.error = err; // use full error object\r\n\t\t}\r\n\t\treturn info;\r\n\t});\r\n}\r\n\r\nfunction check_whole(group, unique) {\r\n\tlet maker;\r\n\tlet shared = [];\r\n\tfor (let cp of unique) {\r\n\t\tlet whole = WHOLE_MAP.get(cp);\r\n\t\tif (whole === UNIQUE_PH) return; // unique, non-confusable\r\n\t\tif (whole) {\r\n\t\t\tlet set = whole.M.get(cp); // groups which have a character that look-like this character\r\n\t\t\tmaker = maker ? maker.filter(g => set.has(g)) : Array_from(set);\r\n\t\t\tif (!maker.length) return; // confusable intersection is empty\r\n\t\t} else {\r\n\t\t\tshared.push(cp); \r\n\t\t}\r\n\t}\r\n\tif (maker) {\r\n\t\t// we have 1+ confusable\r\n\t\t// check if any of the remaining groups\r\n\t\t// contain the shared characters too\r\n\t\tfor (let g of maker) {\r\n\t\t\tif (shared.every(cp => group_has_cp(g, cp))) {\r\n\t\t\t\tthrow new Error(`whole-script confusable: ${group.N}/${g.N}`);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// assumption: unique.size > 0\r\n// returns list of matching groups\r\nfunction determine_group(unique) {\r\n\tlet groups = GROUPS;\r\n\tfor (let cp of unique) {\r\n\t\t// note: we need to dodge CM that are whitelisted\r\n\t\t// but that code isn't currently necessary\r\n\t\tlet gs = groups.filter(g => group_has_cp(g, cp));\r\n\t\tif (!gs.length) {\r\n\t\t\tif (!GROUPS.some(g => group_has_cp(g, cp))) { \r\n\t\t\t\t// the character was composed of valid parts\r\n\t\t\t\t// but it's NFC form is invalid\r\n\t\t\t\t// 20230716: change to more exact statement, see: ENSNormalize.{cs,java}\r\n\t\t\t\t// note: this doesn't have to be a composition\r\n\t\t\t\t// 20230720: change to full check\r\n\t\t\t\tthrow error_disallowed(cp); // this should be rare\r\n\t\t\t} else {\r\n\t\t\t\t// there is no group that contains all these characters\r\n\t\t\t\t// throw using the highest priority group that matched\r\n\t\t\t\t// https://www.unicode.org/reports/tr39/#mixed_script_confusables\r\n\t\t\t\tthrow error_group_member(groups[0], cp);\r\n\t\t\t}\r\n\t\t}\r\n\t\tgroups = gs;\r\n\t\tif (gs.length == 1) break; // there is only one group left\r\n\t}\r\n\t// there are at least 1 group(s) with all of these characters\r\n\treturn groups;\r\n}\r\n\r\n// throw on first error\r\nfunction flatten(split) {\r\n\treturn split.map(({input, error, output}) => {\r\n\t\tif (error) {\r\n\t\t\t// don't print label again if just a single label\r\n\t\t\tlet msg = error.message;\r\n\t\t\t// bidi_qq() only necessary if msg is digits\r\n\t\t\tthrow new Error(split.length == 1 ? msg : `Invalid label ${bidi_qq(safe_str_from_cps(input, 63))}: ${msg}`); \r\n\t\t}\r\n\t\treturn str_from_cps(output);\r\n\t}).join(STOP_CH);\r\n}\r\n\r\nfunction error_disallowed(cp) {\r\n\t// TODO: add cp to error?\r\n\treturn new Error(`disallowed character: ${quoted_cp(cp)}`); \r\n}\r\nfunction error_group_member(g, cp) {\r\n\tlet quoted = quoted_cp(cp);\r\n\tlet gg = GROUPS.find(g => g.P.has(cp)); // only check primary\r\n\tif (gg) {\r\n\t\tquoted = `${gg.N} ${quoted}`;\r\n\t}\r\n\treturn new Error(`illegal mixture: ${g.N} + ${quoted}`);\r\n}\r\nfunction error_placement(where) {\r\n\treturn new Error(`illegal placement: ${where}`);\r\n}\r\n\r\n// assumption: cps.length > 0\r\n// assumption: cps[0] isn't a CM\r\n// assumption: the previous character isn't an emoji\r\nfunction check_group(g, cps) {\r\n\tfor (let cp of cps) {\r\n\t\tif (!group_has_cp(g, cp)) {\r\n\t\t\t// for whitelisted scripts, this will throw illegal mixture on invalid cm, eg. \"e{300}{300}\"\r\n\t\t\t// at the moment, it's unnecessary to introduce an extra error type\r\n\t\t\t// until there exists a whitelisted multi-character\r\n\t\t\t//   eg. if (M < 0 && is_combining_mark(cp)) { ... }\r\n\t\t\t// there are 3 cases:\r\n\t\t\t//   1. illegal cm for wrong group => mixture error\r\n\t\t\t//   2. illegal cm for same group => cm error\r\n\t\t\t//       requires set of whitelist cm per group: \r\n\t\t\t//        eg. new Set([...g.P, ...g.Q].flatMap(nfc).filter(cp => CM.has(cp)))\r\n\t\t\t//   3. wrong group => mixture error\r\n\t\t\tthrow error_group_member(g, cp);\r\n\t\t}\r\n\t}\r\n\t//if (M >= 0) { // we have a known fixed cm count\r\n\tif (g.M) { // we need to check for NSM\r\n\t\tlet decomposed = nfd(cps);\r\n\t\tfor (let i = 1, e = decomposed.length; i < e; i++) { // see: assumption\r\n\t\t\t// 20230210: bugfix: using cps instead of decomposed h/t Carbon225\r\n\t\t\t/*\r\n\t\t\tif (CM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\twhile (j < e && CM.has(decomposed[j])) j++;\r\n\t\t\t\tif (j - i > M) {\r\n\t\t\t\t\tthrow new Error(`too many combining marks: ${g.N} ${bidi_qq(str_from_cps(decomposed.slice(i-1, j)))} (${j-i}/${M})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t\t// 20230217: switch to NSM counting\r\n\t\t\t// https://www.unicode.org/reports/tr39/#Optional_Detection\r\n\t\t\tif (NSM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\tfor (let cp; j < e && NSM.has(cp = decomposed[j]); j++) {\r\n\t\t\t\t\t// a. Forbid sequences of the same nonspacing mark.\r\n\t\t\t\t\tfor (let k = i; k < j; k++) { // O(n^2) but n < 100\r\n\t\t\t\t\t\tif (decomposed[k] == cp) {\r\n\t\t\t\t\t\t\tthrow new Error(`duplicate non-spacing marks: ${quoted_cp(cp)}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t// parse to end so we have full nsm count\r\n\t\t\t\t// b. Forbid sequences of more than 4 nonspacing marks (gc=Mn or gc=Me).\r\n\t\t\t\tif (j - i > NSM_MAX) {\r\n\t\t\t\t\t// note: this slice starts with a base char or spacing-mark cm\r\n\t\t\t\t\tthrow new Error(`excessive non-spacing marks: ${bidi_qq(safe_str_from_cps(decomposed.slice(i-1, j)))} (${j-i}/${NSM_MAX})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t// *** this code currently isn't needed ***\r\n\t/*\r\n\tlet cm_whitelist = M instanceof Map;\r\n\tfor (let i = 0, e = cps.length; i < e; ) {\r\n\t\tlet cp = cps[i++];\r\n\t\tlet seqs = cm_whitelist && M.get(cp);\r\n\t\tif (seqs) { \r\n\t\t\t// list of codepoints that can follow\r\n\t\t\t// if this exists, this will always be 1+\r\n\t\t\tlet j = i;\r\n\t\t\twhile (j < e && CM.has(cps[j])) j++;\r\n\t\t\tlet cms = cps.slice(i, j);\r\n\t\t\tlet match = seqs.find(seq => !compare_arrays(seq, cms));\r\n\t\t\tif (!match) throw new Error(`disallowed combining mark sequence: \"${safe_str_from_cps([cp, ...cms])}\"`);\r\n\t\t\ti = j;\r\n\t\t} else if (!V.has(cp)) {\r\n\t\t\t// https://www.unicode.org/reports/tr39/#mixed_script_confusables\r\n\t\t\tlet quoted = quoted_cp(cp);\r\n\t\t\tfor (let cp of cps) {\r\n\t\t\t\tlet u = UNIQUE.get(cp);\r\n\t\t\t\tif (u && u !== g) {\r\n\t\t\t\t\t// if both scripts are restricted this error is confusing\r\n\t\t\t\t\t// because we don't differentiate RestrictedA from RestrictedB \r\n\t\t\t\t\tif (!u.R) quoted = `${quoted} is ${u.N}`;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthrow new Error(`disallowed ${g.N} character: ${quoted}`);\r\n\t\t\t//throw new Error(`disallowed character: ${quoted} (expected ${g.N})`);\r\n\t\t\t//throw new Error(`${g.N} does not allow: ${quoted}`);\r\n\t\t}\r\n\t}\r\n\tif (!cm_whitelist) {\r\n\t\tlet decomposed = nfd(cps);\r\n\t\tfor (let i = 1, e = decomposed.length; i < e; i++) { // we know it can't be cm leading\r\n\t\t\tif (CM.has(decomposed[i])) {\r\n\t\t\t\tlet j = i + 1;\r\n\t\t\t\twhile (j < e && CM.has(decomposed[j])) j++;\r\n\t\t\t\tif (j - i > M) {\r\n\t\t\t\t\tthrow new Error(`too many combining marks: \"${str_from_cps(decomposed.slice(i-1, j))}\" (${j-i}/${M})`);\r\n\t\t\t\t}\r\n\t\t\t\ti = j;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t*/\r\n}\r\n\r\n// given a list of codepoints\r\n// returns a list of lists, where emoji are a fully-qualified (as Array subclass)\r\n// eg. explode_cp(\"abc\uD83D\uDCA9d\") => [[61, 62, 63], Emoji[1F4A9, FE0F], [64]]\r\n// 20230818: rename for 'process' name collision h/t Javarome\r\n// https://github.com/adraffy/ens-normalize.js/issues/23\r\nfunction tokens_from_str(input, nf, ef) {\r\n\tlet ret = [];\r\n\tlet chars = [];\r\n\tinput = input.slice().reverse(); // flip so we can pop\r\n\twhile (input.length) {\r\n\t\tlet emoji = consume_emoji_reversed(input);\r\n\t\tif (emoji) {\r\n\t\t\tif (chars.length) {\r\n\t\t\t\tret.push(nf(chars));\r\n\t\t\t\tchars = [];\r\n\t\t\t}\r\n\t\t\tret.push(ef(emoji));\r\n\t\t} else {\r\n\t\t\tlet cp = input.pop();\r\n\t\t\tif (VALID.has(cp)) {\r\n\t\t\t\tchars.push(cp);\r\n\t\t\t} else {\r\n\t\t\t\tlet cps = MAPPED.get(cp);\r\n\t\t\t\tif (cps) {\r\n\t\t\t\t\tchars.push(...cps); // less than 10 elements\r\n\t\t\t\t} else if (!IGNORED.has(cp)) {\r\n\t\t\t\t\t// 20230912: unicode 15.1 changed the order of processing such that\r\n\t\t\t\t\t// disallowed parts are only rejected after NFC\r\n\t\t\t\t\t// https://unicode.org/reports/tr46/#Validity_Criteria\r\n\t\t\t\t\t// this doesn't impact normalization as of today\r\n\t\t\t\t\t// technically, this error can be removed as the group logic will apply similar logic\r\n\t\t\t\t\t// however the error type might be less clear\r\n\t\t\t\t\tthrow error_disallowed(cp);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (chars.length) {\r\n\t\tret.push(nf(chars));\r\n\t}\r\n\treturn ret;\r\n}\r\n\r\nfunction filter_fe0f(cps) {\r\n\treturn cps.filter(cp => cp != FE0F);\r\n}\r\n\r\n// given array of codepoints\r\n// returns the longest valid emoji sequence (or undefined if no match)\r\n// *MUTATES* the supplied array\r\n// disallows interleaved ignored characters\r\n// fills (optional) eaten array with matched codepoints\r\nfunction consume_emoji_reversed(cps, eaten) {\r\n\tlet node = EMOJI_ROOT;\r\n\tlet emoji;\r\n\tlet pos = cps.length;\r\n\twhile (pos) {\r\n\t\tnode = node.get(cps[--pos]);\r\n\t\tif (!node) break;\r\n\t\tlet {V} = node;\r\n\t\tif (V) { // this is a valid emoji (so far)\r\n\t\t\temoji = V;\r\n\t\t\tif (eaten) eaten.push(...cps.slice(pos).reverse()); // (optional) copy input, used for ens_tokenize()\r\n\t\t\tcps.length = pos; // truncate\r\n\t\t}\r\n\t}\r\n\treturn emoji;\r\n}\r\n\r\n// ************************************************************\r\n// tokenizer \r\n\r\nconst TY_VALID = 'valid';\r\nconst TY_MAPPED = 'mapped';\r\nconst TY_IGNORED = 'ignored';\r\nconst TY_DISALLOWED = 'disallowed';\r\nconst TY_EMOJI = 'emoji';\r\nconst TY_NFC = 'nfc';\r\nconst TY_STOP = 'stop';\r\n\r\nfunction ens_tokenize(name, {\r\n\tnf = true, // collapse unnormalized runs into a single token\r\n} = {}) {\r\n\tinit();\r\n\tlet input = explode_cp(name).reverse();\r\n\tlet eaten = [];\r\n\tlet tokens = [];\r\n\twhile (input.length) {\r\n\t\tlet emoji = consume_emoji_reversed(input, eaten);\r\n\t\tif (emoji) {\r\n\t\t\ttokens.push({\r\n\t\t\t\ttype: TY_EMOJI,\r\n\t\t\t\temoji: emoji.slice(), // copy emoji\r\n\t\t\t\tinput: eaten,\r\n\t\t\t\tcps: filter_fe0f(emoji)\r\n\t\t\t});\r\n\t\t\teaten = []; // reset buffer\r\n\t\t} else {\r\n\t\t\tlet cp = input.pop();\r\n\t\t\tif (cp == STOP) {\r\n\t\t\t\ttokens.push({type: TY_STOP, cp});\r\n\t\t\t} else if (VALID.has(cp)) {\r\n\t\t\t\ttokens.push({type: TY_VALID, cps: [cp]});\r\n\t\t\t} else if (IGNORED.has(cp)) {\r\n\t\t\t\ttokens.push({type: TY_IGNORED, cp});\r\n\t\t\t} else {\r\n\t\t\t\tlet cps = MAPPED.get(cp);\r\n\t\t\t\tif (cps) {\r\n\t\t\t\t\ttokens.push({type: TY_MAPPED, cp, cps: cps.slice()});\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttokens.push({type: TY_DISALLOWED, cp});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tif (nf) {\r\n\t\tfor (let i = 0, start = -1; i < tokens.length; i++) {\r\n\t\t\tlet token = tokens[i];\r\n\t\t\tif (is_valid_or_mapped(token.type)) {\r\n\t\t\t\tif (requires_check(token.cps)) { // normalization might be needed\r\n\t\t\t\t\tlet end = i + 1;\r\n\t\t\t\t\tfor (let pos = end; pos < tokens.length; pos++) { // find adjacent text\r\n\t\t\t\t\t\tlet {type, cps} = tokens[pos];\r\n\t\t\t\t\t\tif (is_valid_or_mapped(type)) {\r\n\t\t\t\t\t\t\tif (!requires_check(cps)) break;\r\n\t\t\t\t\t\t\tend = pos + 1;\r\n\t\t\t\t\t\t} else if (type !== TY_IGNORED) { // || type !== TY_DISALLOWED) { \r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (start < 0) start = i;\r\n\t\t\t\t\tlet slice = tokens.slice(start, end);\r\n\t\t\t\t\tlet cps0 = slice.flatMap(x => is_valid_or_mapped(x.type) ? x.cps : []); // strip junk tokens\r\n\t\t\t\t\tlet cps = nfc(cps0);\r\n\t\t\t\t\tif (compare_arrays(cps, cps0)) { // bundle into an nfc token\r\n\t\t\t\t\t\ttokens.splice(start, end - start, {\r\n\t\t\t\t\t\t\ttype: TY_NFC, \r\n\t\t\t\t\t\t\tinput: cps0, // there are 3 states: tokens0 ==(process)=> input ==(nfc)=> tokens/cps\r\n\t\t\t\t\t\t\tcps, \r\n\t\t\t\t\t\t\ttokens0: collapse_valid_tokens(slice),\r\n\t\t\t\t\t\t\ttokens: ens_tokenize(str_from_cps(cps), {nf: false})\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\ti = start;\r\n\t\t\t\t\t} else { \r\n\t\t\t\t\t\ti = end - 1; // skip to end of slice\r\n\t\t\t\t\t}\r\n\t\t\t\t\tstart = -1; // reset\r\n\t\t\t\t} else {\r\n\t\t\t\t\tstart = i; // remember last\r\n\t\t\t\t}\r\n\t\t\t} else if (token.type !== TY_IGNORED) { // 20221024: is this correct?\r\n\t\t\t\tstart = -1; // reset\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn collapse_valid_tokens(tokens);\r\n}\r\n\r\nfunction is_valid_or_mapped(type) {\r\n\treturn type == TY_VALID || type == TY_MAPPED;\r\n}\r\n\r\nfunction requires_check(cps) {\r\n\treturn cps.some(cp => NFC_CHECK.has(cp));\r\n}\r\n\r\nfunction collapse_valid_tokens(tokens) {\r\n\tfor (let i = 0; i < tokens.length; i++) {\r\n\t\tif (tokens[i].type == TY_VALID) {\r\n\t\t\tlet j = i + 1;\r\n\t\t\twhile (j < tokens.length && tokens[j].type == TY_VALID) j++;\r\n\t\t\ttokens.splice(i, j - i, {type: TY_VALID, cps: tokens.slice(i, j).flatMap(x => x.cps)});\r\n\t\t}\r\n\t}\r\n\treturn tokens;\r\n}\n\nexport { ens_beautify, ens_emoji, ens_normalize, ens_normalize_fragment, ens_split, ens_tokenize, is_combining_mark, nfc, nfd, safe_str_from_cps, should_escape };\n", "\nimport { keccak256 } from \"../crypto/index.js\";\nimport {\n    concat, hexlify, assertArgument, toUtf8Bytes\n} from \"../utils/index.js\";\n\n\nimport { ens_normalize } from \"@adraffy/ens-normalize\";\n\nconst Zeros = new Uint8Array(32);\nZeros.fill(0);\n\nfunction checkComponent(comp: Uint8Array): Uint8Array {\n    assertArgument(comp.length !== 0, \"invalid ENS name; empty component\", \"comp\", comp)\n    return comp;\n}\n\nfunction ensNameSplit(name: string): Array<Uint8Array> {\n    const bytes = toUtf8Bytes(ensNormalize(name));\n    const comps: Array<Uint8Array> = [ ];\n\n    if (name.length === 0) { return comps; }\n\n    let last = 0;\n    for (let i = 0; i < bytes.length; i++) {\n        const d = bytes[i];\n\n        // A separator (i.e. \".\"); copy this component\n        if (d === 0x2e) {\n            comps.push(checkComponent(bytes.slice(last, i)));\n            last = i + 1;\n        }\n    }\n\n    // There was a stray separator at the end of the name\n    assertArgument(last < bytes.length, \"invalid ENS name; empty component\", \"name\", name);\n\n    comps.push(checkComponent(bytes.slice(last)));\n    return comps;\n}\n\n/**\n *  Returns the ENS %%name%% normalized.\n */\nexport function ensNormalize(name: string): string {\n    try {\n        if (name.length === 0) { throw new Error(\"empty label\"); }\n        return ens_normalize(name);\n    } catch (error: any) {\n        assertArgument(false, `invalid ENS name (${ error.message })`, \"name\", name);\n    }\n}\n\n/**\n *  Returns ``true`` if %%name%% is a valid ENS name.\n */\nexport function isValidName(name: string): name is string {\n    try {\n        return (ensNameSplit(name).length !== 0);\n    } catch (error) { }\n    return false;\n}\n\n/**\n *  Returns the [[link-namehash]] for %%name%%.\n */\nexport function namehash(name: string): string {\n    assertArgument(typeof(name) === \"string\", \"invalid ENS name; not a string\", \"name\", name);\n\n    assertArgument(name.length, `invalid ENS name (empty label)`, \"name\", name);\n\n    let result: string | Uint8Array = Zeros;\n\n    const comps = ensNameSplit(name);\n    while (comps.length) {\n        result = keccak256(concat([ result, keccak256(<Uint8Array>(comps.pop()))] ));\n    }\n\n    return hexlify(result);\n}\n\n/**\n *  Returns the DNS encoded %%name%%.\n *\n *  This is used for various parts of ENS name resolution, such\n *  as the wildcard resolution.\n */\nexport function dnsEncode(name: string, _maxLength?: number): string {\n    const length = (_maxLength != null) ? _maxLength: 63;\n\n    assertArgument(length <= 255, \"DNS encoded label cannot exceed 255\", \"length\", length);\n\n    return hexlify(concat(ensNameSplit(name).map((comp) => {\n        assertArgument(comp.length <= length, `label ${ JSON.stringify(name) } exceeds ${ length } bytes`, \"name\", name);\n\n        const bytes = new Uint8Array(comp.length + 1);\n        bytes.set(comp, 1);\n        bytes[0] = bytes.length - 1;\n        return bytes;\n    }))) + \"00\";\n}\n", "import { getAddress } from \"../address/index.js\";\nimport { assertArgument, isHexString } from \"../utils/index.js\";\n\nimport type { AccessList, AccessListish } from \"./index.js\";\n\n\nfunction accessSetify(addr: string, storageKeys: Array<string>): { address: string,storageKeys: Array<string> } {\n    return {\n        address: getAddress(addr),\n        storageKeys: storageKeys.map((storageKey, index) => {\n            assertArgument(isHexString(storageKey, 32), \"invalid slot\", `storageKeys[${ index }]`, storageKey);\n            return storageKey.toLowerCase();\n        })\n    };\n}\n\n/**\n *  Returns a [[AccessList]] from any ethers-supported access-list structure.\n */\nexport function accessListify(value: AccessListish): AccessList {\n    if (Array.isArray(value)) {\n        return (<Array<[ string, Array<string>] | { address: string, storageKeys: Array<string>}>>value).map((set, index) => {\n            if (Array.isArray(set)) {\n                assertArgument(set.length === 2, \"invalid slot set\", `value[${ index }]`, set);\n                return accessSetify(set[0], set[1])\n            }\n            assertArgument(set != null && typeof(set) === \"object\", \"invalid address-slot set\", \"value\", value);\n            return accessSetify(set.address, set.storageKeys);\n        });\n    }\n\n    assertArgument(value != null && typeof(value) === \"object\", \"invalid access list\", \"value\", value);\n\n    const result: Array<{ address: string, storageKeys: Array<string> }> = Object.keys(value).map((addr) => {\n        const storageKeys: Record<string, true> = value[addr].reduce((accum, storageKey) => {\n            accum[storageKey] = true;\n            return accum;\n        }, <Record<string, true>>{ });\n        return accessSetify(addr, Object.keys(storageKeys).sort())\n    });\n    result.sort((a, b) => (a.address.localeCompare(b.address)));\n    return result;\n}\n", "import { getAddress } from \"../address/index.js\";\nimport { keccak256, SigningKey } from \"../crypto/index.js\";\n\nimport type { SignatureLike } from \"../crypto/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\n/**\n *  Returns the address for the %%key%%.\n *\n *  The key may be any standard form of public key or a private key.\n */\nexport function computeAddress(key: string | SigningKey): string {\n    let pubkey: string;\n    if (typeof(key) === \"string\") {\n        pubkey = SigningKey.computePublicKey(key, false);\n    } else {\n        pubkey = key.publicKey;\n    }\n    return getAddress(keccak256(\"0x\" + pubkey.substring(4)).substring(26));\n}\n\n/**\n *  Returns the recovered address for the private key that was\n *  used to sign %%digest%% that resulted in %%signature%%.\n */\nexport function recoverAddress(digest: BytesLike, signature: SignatureLike): string {\n    return computeAddress(SigningKey.recoverPublicKey(digest, signature));\n}\n", "\nimport { getAddress } from \"../address/index.js\";\nimport { ZeroAddress } from \"../constants/addresses.js\";\nimport {\n    keccak256, sha256, Signature, SigningKey\n} from \"../crypto/index.js\";\nimport {\n    concat, decodeRlp, encodeRlp, getBytes, getBigInt, getNumber, hexlify,\n    assert, assertArgument, isBytesLike, isHexString, toBeArray, zeroPadValue\n} from \"../utils/index.js\";\n\nimport { accessListify } from \"./accesslist.js\";\nimport { recoverAddress } from \"./address.js\";\n\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\nimport type { SignatureLike } from \"../crypto/index.js\";\n\nimport type { AccessList, AccessListish } from \"./index.js\";\n\n\nconst BN_0 = BigInt(0);\nconst BN_2 = BigInt(2);\nconst BN_27 = BigInt(27)\nconst BN_28 = BigInt(28)\nconst BN_35 = BigInt(35);\nconst BN_MAX_UINT = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\nconst BLOB_SIZE = 4096 * 32;\n\n// The BLS Modulo; each field within a BLOb must be less than this\n//const BLOB_BLS_MODULO = BigInt(\"0x73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001\");\n\n/**\n *  A **TransactionLike** is an object which is appropriate as a loose\n *  input for many operations which will populate missing properties of\n *  a transaction.\n */\nexport interface TransactionLike<A = string> {\n    /**\n     *  The type.\n     */\n    type?: null | number;\n\n    /**\n     *  The recipient address or ``null`` for an ``init`` transaction.\n     */\n    to?: null | A;\n\n    /**\n     *  The sender.\n     */\n    from?: null | A;\n\n    /**\n     *  The nonce.\n     */\n    nonce?: null | number;\n\n    /**\n     *  The maximum amount of gas that can be used.\n     */\n    gasLimit?: null | BigNumberish;\n\n    /**\n     *  The gas price for legacy and berlin transactions.\n     */\n    gasPrice?: null | BigNumberish;\n\n    /**\n     *  The maximum priority fee per gas for london transactions.\n     */\n    maxPriorityFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The maximum total fee per gas for london transactions.\n     */\n    maxFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The data.\n     */\n    data?: null | string;\n\n    /**\n     *  The value (in wei) to send.\n     */\n    value?: null | BigNumberish;\n\n    /**\n     *  The chain ID the transaction is valid on.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The transaction hash.\n     */\n    hash?: null | string;\n\n    /**\n     *  The signature provided by the sender.\n     */\n    signature?: null | SignatureLike;\n\n    /**\n     *  The access list for berlin and london transactions.\n     */\n    accessList?: null | AccessListish;\n\n    /**\n     *  The maximum fee per blob gas (see [[link-eip-4844]]).\n     */\n    maxFeePerBlobGas?: null | BigNumberish;\n\n    /**\n     *  The versioned hashes (see [[link-eip-4844]]).\n     */\n    blobVersionedHashes?: null | Array<string>;\n\n    /**\n     *  The blobs (if any) attached to this transaction (see [[link-eip-4844]]).\n     */\n    blobs?: null | Array<BlobLike>\n\n    /**\n     *  An external library for computing the KZG commitments and\n     *  proofs necessary for EIP-4844 transactions (see [[link-eip-4844]]).\n     *\n     *  This is generally ``null``, unless you are creating BLOb\n     *  transactions.\n     */\n    kzg?: null | KzgLibrary;\n}\n\n/**\n *  A full-valid BLOb object for [[link-eip-4844]] transactions.\n *\n *  The commitment and proof should have been computed using a\n *  KZG library.\n */\nexport interface Blob {\n    data: string;\n    proof: string;\n    commitment: string;\n}\n\n/**\n *  A BLOb object that can be passed for [[link-eip-4844]]\n *  transactions.\n *\n *  It may have had its commitment and proof already provided\n *  or rely on an attached [[KzgLibrary]] to compute them.\n */\nexport type BlobLike = BytesLike | {\n    data: BytesLike;\n    proof: BytesLike;\n    commitment: BytesLike;\n};\n\n/**\n *  A KZG Library with the necessary functions to compute\n *  BLOb commitments and proofs.\n */\nexport interface KzgLibrary {\n    blobToKzgCommitment: (blob: Uint8Array) => Uint8Array;\n    computeBlobKzgProof: (blob: Uint8Array, commitment: Uint8Array) => Uint8Array;\n}\n\nfunction getVersionedHash(version: number, hash: BytesLike): string {\n    let versioned = version.toString(16);\n    while (versioned.length < 2) { versioned = \"0\" + versioned; }\n    versioned += sha256(hash).substring(4);\n    return \"0x\" + versioned;\n}\n\nfunction handleAddress(value: string): null | string {\n    if (value === \"0x\") { return null; }\n    return getAddress(value);\n}\n\nfunction handleAccessList(value: any, param: string): AccessList {\n    try {\n        return accessListify(value);\n    } catch (error: any) {\n        assertArgument(false, error.message, param, value);\n    }\n}\n\nfunction handleNumber(_value: string, param: string): number {\n    if (_value === \"0x\") { return 0; }\n    return getNumber(_value, param);\n}\n\nfunction handleUint(_value: string, param: string): bigint {\n    if (_value === \"0x\") { return BN_0; }\n    const value = getBigInt(_value, param);\n    assertArgument(value <= BN_MAX_UINT, \"value exceeds uint size\", param, value);\n    return value;\n}\n\nfunction formatNumber(_value: BigNumberish, name: string): Uint8Array {\n    const value = getBigInt(_value, \"value\");\n    const result = toBeArray(value);\n    assertArgument(result.length <= 32, `value too large`, `tx.${ name }`, value);\n    return result;\n}\n\nfunction formatAccessList(value: AccessListish): Array<[ string, Array<string> ]> {\n    return accessListify(value).map((set) => [ set.address, set.storageKeys ]);\n}\n\nfunction formatHashes(value: Array<string>, param: string): Array<string> {\n    assertArgument(Array.isArray(value), `invalid ${ param }`, \"value\", value);\n    for (let i = 0; i < value.length; i++) {\n        assertArgument(isHexString(value[i], 32), \"invalid ${ param } hash\", `value[${ i }]`, value[i]);\n    }\n    return value;\n}\n\nfunction _parseLegacy(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(data);\n\n    assertArgument(Array.isArray(fields) && (fields.length === 9 || fields.length === 6),\n        \"invalid field count for legacy transaction\", \"data\", data);\n\n    const tx: TransactionLike = {\n        type:     0,\n        nonce:    handleNumber(fields[0], \"nonce\"),\n        gasPrice: handleUint(fields[1], \"gasPrice\"),\n        gasLimit: handleUint(fields[2], \"gasLimit\"),\n        to:       handleAddress(fields[3]),\n        value:    handleUint(fields[4], \"value\"),\n        data:     hexlify(fields[5]),\n        chainId:  BN_0\n    };\n\n    // Legacy unsigned transaction\n    if (fields.length === 6) { return tx; }\n\n    const v = handleUint(fields[6], \"v\");\n    const r = handleUint(fields[7], \"r\");\n    const s = handleUint(fields[8], \"s\");\n\n    if (r === BN_0 && s === BN_0) {\n        // EIP-155 unsigned transaction\n        tx.chainId = v;\n\n    } else {\n\n        // Compute the EIP-155 chain ID (or 0 for legacy)\n        let chainId = (v - BN_35) / BN_2;\n        if (chainId < BN_0) { chainId = BN_0; }\n        tx.chainId = chainId\n\n        // Signed Legacy Transaction\n        assertArgument(chainId !== BN_0 || (v === BN_27 || v === BN_28), \"non-canonical legacy v\", \"v\", fields[6]);\n\n        tx.signature = Signature.from({\n            r: zeroPadValue(fields[7], 32),\n            s: zeroPadValue(fields[8], 32),\n            v\n        });\n\n        //tx.hash = keccak256(data);\n    }\n\n    return tx;\n}\n\nfunction _serializeLegacy(tx: Transaction, sig: null | Signature): string {\n    const fields: Array<any> = [\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || \"0x\"),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n    ];\n\n    let chainId = BN_0;\n    if (tx.chainId != BN_0) {\n        // A chainId was provided; if non-zero we'll use EIP-155\n        chainId = getBigInt(tx.chainId, \"tx.chainId\");\n\n        // We have a chainId in the tx and an EIP-155 v in the signature,\n        // make sure they agree with each other\n        assertArgument(!sig || sig.networkV == null || sig.legacyChainId === chainId,\n             \"tx.chainId/sig.v mismatch\", \"sig\", sig);\n\n    } else if (tx.signature) {\n        // No explicit chainId, but EIP-155 have a derived implicit chainId\n        const legacy = tx.signature.legacyChainId;\n        if (legacy != null) { chainId = legacy; }\n    }\n\n    // Requesting an unsigned transaction\n    if (!sig) {\n        // We have an EIP-155 transaction (chainId was specified and non-zero)\n        if (chainId !== BN_0) {\n            fields.push(toBeArray(chainId));\n            fields.push(\"0x\");\n            fields.push(\"0x\");\n        }\n\n        return encodeRlp(fields);\n    }\n\n    // @TODO: We should probably check that tx.signature, chainId, and sig\n    //        match but that logic could break existing code, so schedule\n    //        this for the next major bump.\n\n    // Compute the EIP-155 v\n    let v = BigInt(27 + sig.yParity);\n    if (chainId !== BN_0) {\n        v = Signature.getChainIdV(chainId, sig.v);\n    } else if (BigInt(sig.v) !== v) {\n        assertArgument(false, \"tx.chainId/sig.v mismatch\", \"sig\", sig);\n    }\n\n    // Add the signature\n    fields.push(toBeArray(v));\n    fields.push(toBeArray(sig.r));\n    fields.push(toBeArray(sig.s));\n\n    return encodeRlp(fields);\n}\n\nfunction _parseEipSignature(tx: TransactionLike, fields: Array<string>): void {\n    let yParity: number;\n    try {\n        yParity = handleNumber(fields[0], \"yParity\");\n        if (yParity !== 0 && yParity !== 1) { throw new Error(\"bad yParity\"); }\n    } catch (error) {\n        assertArgument(false, \"invalid yParity\", \"yParity\", fields[0]);\n    }\n\n    const r = zeroPadValue(fields[1], 32);\n    const s = zeroPadValue(fields[2], 32);\n\n    const signature = Signature.from({ r, s, yParity });\n    tx.signature = signature;\n}\n\nfunction _parseEip1559(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(getBytes(data).slice(1));\n\n    assertArgument(Array.isArray(fields) && (fields.length === 9 || fields.length === 12),\n        \"invalid field count for transaction type: 2\", \"data\", hexlify(data));\n\n    const tx: TransactionLike = {\n        type:                  2,\n        chainId:               handleUint(fields[0], \"chainId\"),\n        nonce:                 handleNumber(fields[1], \"nonce\"),\n        maxPriorityFeePerGas:  handleUint(fields[2], \"maxPriorityFeePerGas\"),\n        maxFeePerGas:          handleUint(fields[3], \"maxFeePerGas\"),\n        gasPrice:              null,\n        gasLimit:              handleUint(fields[4], \"gasLimit\"),\n        to:                    handleAddress(fields[5]),\n        value:                 handleUint(fields[6], \"value\"),\n        data:                  hexlify(fields[7]),\n        accessList:            handleAccessList(fields[8], \"accessList\"),\n    };\n\n    // Unsigned EIP-1559 Transaction\n    if (fields.length === 9) { return tx; }\n\n    //tx.hash = keccak256(data);\n\n    _parseEipSignature(tx, fields.slice(9));\n\n    return tx;\n}\n\nfunction _serializeEip1559(tx: Transaction, sig: null | Signature): string {\n    const fields: Array<any> = [\n        formatNumber(tx.chainId, \"chainId\"),\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n        formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || \"0x\"),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n        formatAccessList(tx.accessList || [ ])\n    ];\n\n    if (sig) {\n        fields.push(formatNumber(sig.yParity, \"yParity\"));\n        fields.push(toBeArray(sig.r));\n        fields.push(toBeArray(sig.s));\n    }\n\n    return concat([ \"0x02\", encodeRlp(fields)]);\n}\n\nfunction _parseEip2930(data: Uint8Array): TransactionLike {\n    const fields: any = decodeRlp(getBytes(data).slice(1));\n\n    assertArgument(Array.isArray(fields) && (fields.length === 8 || fields.length === 11),\n        \"invalid field count for transaction type: 1\", \"data\", hexlify(data));\n\n    const tx: TransactionLike = {\n        type:       1,\n        chainId:    handleUint(fields[0], \"chainId\"),\n        nonce:      handleNumber(fields[1], \"nonce\"),\n        gasPrice:   handleUint(fields[2], \"gasPrice\"),\n        gasLimit:   handleUint(fields[3], \"gasLimit\"),\n        to:         handleAddress(fields[4]),\n        value:      handleUint(fields[5], \"value\"),\n        data:       hexlify(fields[6]),\n        accessList: handleAccessList(fields[7], \"accessList\")\n    };\n\n    // Unsigned EIP-2930 Transaction\n    if (fields.length === 8) { return tx; }\n\n    //tx.hash = keccak256(data);\n\n    _parseEipSignature(tx, fields.slice(8));\n\n    return tx;\n}\n\nfunction _serializeEip2930(tx: Transaction, sig: null | Signature): string {\n    const fields: any = [\n        formatNumber(tx.chainId, \"chainId\"),\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.gasPrice || 0, \"gasPrice\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || \"0x\"),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n        formatAccessList(tx.accessList || [ ])\n    ];\n\n    if (sig) {\n        fields.push(formatNumber(sig.yParity, \"recoveryParam\"));\n        fields.push(toBeArray(sig.r));\n        fields.push(toBeArray(sig.s));\n    }\n\n    return concat([ \"0x01\", encodeRlp(fields)]);\n}\n\nfunction _parseEip4844(data: Uint8Array): TransactionLike {\n    let fields: any = decodeRlp(getBytes(data).slice(1));\n\n    let typeName = \"3\";\n\n    let blobs: null | Array<Blob> = null;\n\n    // Parse the network format\n    if (fields.length === 4 && Array.isArray(fields[0])) {\n        typeName = \"3 (network format)\";\n        const fBlobs = fields[1], fCommits = fields[2], fProofs = fields[3];\n        assertArgument(Array.isArray(fBlobs), \"invalid network format: blobs not an array\", \"fields[1]\", fBlobs);\n        assertArgument(Array.isArray(fCommits), \"invalid network format: commitments not an array\", \"fields[2]\", fCommits);\n        assertArgument(Array.isArray(fProofs), \"invalid network format: proofs not an array\", \"fields[3]\", fProofs);\n        assertArgument(fBlobs.length === fCommits.length, \"invalid network format: blobs/commitments length mismatch\", \"fields\", fields);\n        assertArgument(fBlobs.length === fProofs.length, \"invalid network format: blobs/proofs length mismatch\", \"fields\", fields);\n\n        blobs = [ ];\n        for (let i = 0; i < fields[1].length; i++) {\n            blobs.push({\n                data: fBlobs[i],\n                commitment: fCommits[i],\n                proof: fProofs[i],\n            });\n        }\n\n        fields = fields[0];\n    }\n\n    assertArgument(Array.isArray(fields) && (fields.length === 11 || fields.length === 14),\n        `invalid field count for transaction type: ${ typeName }`, \"data\", hexlify(data));\n\n    const tx: TransactionLike = {\n        type:                  3,\n        chainId:               handleUint(fields[0], \"chainId\"),\n        nonce:                 handleNumber(fields[1], \"nonce\"),\n        maxPriorityFeePerGas:  handleUint(fields[2], \"maxPriorityFeePerGas\"),\n        maxFeePerGas:          handleUint(fields[3], \"maxFeePerGas\"),\n        gasPrice:              null,\n        gasLimit:              handleUint(fields[4], \"gasLimit\"),\n        to:                    handleAddress(fields[5]),\n        value:                 handleUint(fields[6], \"value\"),\n        data:                  hexlify(fields[7]),\n        accessList:            handleAccessList(fields[8], \"accessList\"),\n        maxFeePerBlobGas:      handleUint(fields[9], \"maxFeePerBlobGas\"),\n        blobVersionedHashes:   fields[10]\n    };\n\n    if (blobs) { tx.blobs = blobs; }\n\n    assertArgument(tx.to != null, `invalid address for transaction type: ${ typeName }`, \"data\", data);\n\n    assertArgument(Array.isArray(tx.blobVersionedHashes), \"invalid blobVersionedHashes: must be an array\", \"data\", data);\n    for (let i = 0; i < tx.blobVersionedHashes.length; i++) {\n        assertArgument(isHexString(tx.blobVersionedHashes[i], 32), `invalid blobVersionedHash at index ${ i }: must be length 32`, \"data\", data);\n    }\n\n    // Unsigned EIP-4844 Transaction\n    if (fields.length === 11) { return tx; }\n\n    // @TODO: Do we need to do this? This is only called internally\n    // and used to verify hashes; it might save time to not do this\n    //tx.hash = keccak256(concat([ \"0x03\", encodeRlp(fields) ]));\n\n    _parseEipSignature(tx, fields.slice(11));\n\n    return tx;\n}\n\nfunction _serializeEip4844(tx: Transaction, sig: null | Signature, blobs: null | Array<Blob>): string {\n    const fields: Array<any> = [\n        formatNumber(tx.chainId, \"chainId\"),\n        formatNumber(tx.nonce, \"nonce\"),\n        formatNumber(tx.maxPriorityFeePerGas || 0, \"maxPriorityFeePerGas\"),\n        formatNumber(tx.maxFeePerGas || 0, \"maxFeePerGas\"),\n        formatNumber(tx.gasLimit, \"gasLimit\"),\n        (tx.to || ZeroAddress),\n        formatNumber(tx.value, \"value\"),\n        tx.data,\n        formatAccessList(tx.accessList || [ ]),\n        formatNumber(tx.maxFeePerBlobGas || 0, \"maxFeePerBlobGas\"),\n        formatHashes(tx.blobVersionedHashes || [ ], \"blobVersionedHashes\")\n    ];\n\n    if (sig) {\n        fields.push(formatNumber(sig.yParity, \"yParity\"));\n        fields.push(toBeArray(sig.r));\n        fields.push(toBeArray(sig.s));\n\n        // We have blobs; return the network wrapped format\n        if (blobs) {\n            return concat([\n                \"0x03\",\n                encodeRlp([\n                    fields,\n                    blobs.map((b) => b.data),\n                    blobs.map((b) => b.commitment),\n                    blobs.map((b) => b.proof),\n                ])\n            ]);\n        }\n\n    }\n\n    return concat([ \"0x03\", encodeRlp(fields)]);\n}\n\n/**\n *  A **Transaction** describes an operation to be executed on\n *  Ethereum by an Externally Owned Account (EOA). It includes\n *  who (the [[to]] address), what (the [[data]]) and how much (the\n *  [[value]] in ether) the operation should entail.\n *\n *  @example:\n *    tx = new Transaction()\n *    //_result:\n *\n *    tx.data = \"0x1234\";\n *    //_result:\n */\nexport class Transaction implements TransactionLike<string> {\n    #type: null | number;\n    #to: null | string;\n    #data: string;\n    #nonce: number;\n    #gasLimit: bigint;\n    #gasPrice: null | bigint;\n    #maxPriorityFeePerGas: null | bigint;\n    #maxFeePerGas: null | bigint;\n    #value: bigint;\n    #chainId: bigint;\n    #sig: null | Signature;\n    #accessList: null | AccessList;\n    #maxFeePerBlobGas: null | bigint;\n    #blobVersionedHashes: null | Array<string>;\n    #kzg: null | KzgLibrary;\n    #blobs: null | Array<Blob>;\n\n    /**\n     *  The transaction type.\n     *\n     *  If null, the type will be automatically inferred based on\n     *  explicit properties.\n     */\n    get type(): null | number { return this.#type; }\n    set type(value: null | number | string) {\n        switch (value) {\n            case null:\n                this.#type = null;\n                break;\n            case 0: case \"legacy\":\n                this.#type = 0;\n                break;\n            case 1: case \"berlin\": case \"eip-2930\":\n                this.#type = 1;\n                break;\n            case 2: case \"london\": case \"eip-1559\":\n                this.#type = 2;\n                break;\n            case 3: case \"cancun\": case \"eip-4844\":\n                this.#type = 3;\n                break;\n            default:\n                assertArgument(false, \"unsupported transaction type\", \"type\", value);\n        }\n    }\n\n    /**\n     *  The name of the transaction type.\n     */\n    get typeName(): null | string {\n        switch (this.type) {\n            case 0: return \"legacy\";\n            case 1: return \"eip-2930\";\n            case 2: return \"eip-1559\";\n            case 3: return \"eip-4844\";\n        }\n\n        return null;\n    }\n\n    /**\n     *  The ``to`` address for the transaction or ``null`` if the\n     *  transaction is an ``init`` transaction.\n     */\n    get to(): null | string {\n        const value = this.#to;\n        if (value == null && this.type === 3) { return ZeroAddress; }\n        return value;\n    }\n    set to(value: null | string) {\n        this.#to = (value == null) ? null: getAddress(value);\n    }\n\n    /**\n     *  The transaction nonce.\n     */\n    get nonce(): number { return this.#nonce; }\n    set nonce(value: BigNumberish) { this.#nonce = getNumber(value, \"value\"); }\n\n    /**\n     *  The gas limit.\n     */\n    get gasLimit(): bigint { return this.#gasLimit; }\n    set gasLimit(value: BigNumberish) { this.#gasLimit = getBigInt(value); }\n\n    /**\n     *  The gas price.\n     *\n     *  On legacy networks this defines the fee that will be paid. On\n     *  EIP-1559 networks, this should be ``null``.\n     */\n    get gasPrice(): null | bigint {\n        const value = this.#gasPrice;\n        if (value == null && (this.type === 0 || this.type === 1)) { return BN_0; }\n        return value;\n    }\n    set gasPrice(value: null | BigNumberish) {\n        this.#gasPrice = (value == null) ? null: getBigInt(value, \"gasPrice\");\n    }\n\n    /**\n     *  The maximum priority fee per unit of gas to pay. On legacy\n     *  networks this should be ``null``.\n     */\n    get maxPriorityFeePerGas(): null | bigint {\n        const value = this.#maxPriorityFeePerGas;\n        if (value == null) {\n            if (this.type === 2 || this.type === 3) { return BN_0; }\n            return null;\n        }\n        return value;\n    }\n    set maxPriorityFeePerGas(value: null | BigNumberish) {\n        this.#maxPriorityFeePerGas = (value == null) ? null: getBigInt(value, \"maxPriorityFeePerGas\");\n    }\n\n    /**\n     *  The maximum total fee per unit of gas to pay. On legacy\n     *  networks this should be ``null``.\n     */\n    get maxFeePerGas(): null | bigint {\n        const value = this.#maxFeePerGas;\n        if (value == null) {\n            if (this.type === 2 || this.type === 3) { return BN_0; }\n            return null;\n        }\n        return value;\n    }\n    set maxFeePerGas(value: null | BigNumberish) {\n        this.#maxFeePerGas = (value == null) ? null: getBigInt(value, \"maxFeePerGas\");\n    }\n\n    /**\n     *  The transaction data. For ``init`` transactions this is the\n     *  deployment code.\n     */\n    get data(): string { return this.#data; }\n    set data(value: BytesLike) { this.#data = hexlify(value); }\n\n    /**\n     *  The amount of ether (in wei) to send in this transactions.\n     */\n    get value(): bigint { return this.#value; }\n    set value(value: BigNumberish) {\n        this.#value = getBigInt(value, \"value\");\n    }\n\n    /**\n     *  The chain ID this transaction is valid on.\n     */\n    get chainId(): bigint { return this.#chainId; }\n    set chainId(value: BigNumberish) { this.#chainId = getBigInt(value); }\n\n    /**\n     *  If signed, the signature for this transaction.\n     */\n    get signature(): null | Signature { return this.#sig || null; }\n    set signature(value: null | SignatureLike) {\n        this.#sig = (value == null) ? null: Signature.from(value);\n    }\n\n    /**\n     *  The access list.\n     *\n     *  An access list permits discounted (but pre-paid) access to\n     *  bytecode and state variable access within contract execution.\n     */\n    get accessList(): null | AccessList {\n        const value = this.#accessList || null;\n        if (value == null) {\n            if (this.type === 1 || this.type === 2 || this.type === 3) {\n                // @TODO: in v7, this should assign the value or become\n                // a live object itself, otherwise mutation is inconsistent\n                return [ ];\n            }\n            return null;\n        }\n        return value;\n    }\n    set accessList(value: null | AccessListish) {\n        this.#accessList = (value == null) ? null: accessListify(value);\n    }\n\n    /**\n     *  The max fee per blob gas for Cancun transactions.\n     */\n    get maxFeePerBlobGas(): null | bigint {\n        const value = this.#maxFeePerBlobGas;\n        if (value == null && this.type === 3) { return BN_0; }\n        return value;\n    }\n    set maxFeePerBlobGas(value: null | BigNumberish) {\n        this.#maxFeePerBlobGas = (value == null) ? null: getBigInt(value, \"maxFeePerBlobGas\");\n    }\n\n    /**\n     *  The BLOb versioned hashes for Cancun transactions.\n     */\n    get blobVersionedHashes(): null | Array<string> {\n        // @TODO: Mutation is inconsistent; if unset, the returned value\n        // cannot mutate the object, if set it can\n        let value = this.#blobVersionedHashes;\n        if (value == null && this.type === 3) { return [ ]; }\n        return value;\n    }\n    set blobVersionedHashes(value: null | Array<string>) {\n        if (value != null) {\n            assertArgument(Array.isArray(value), \"blobVersionedHashes must be an Array\", \"value\", value);\n            value = value.slice();\n            for (let i = 0; i < value.length; i++) {\n                assertArgument(isHexString(value[i], 32), \"invalid blobVersionedHash\", `value[${ i }]`, value[i]);\n            }\n        }\n        this.#blobVersionedHashes = value;\n    }\n\n    /**\n     *  The BLObs for the Transaction, if any.\n     *\n     *  If ``blobs`` is non-``null``, then the [[seriailized]]\n     *  will return the network formatted sidecar, otherwise it\n     *  will return the standard [[link-eip-2718]] payload. The\n     *  [[unsignedSerialized]] is unaffected regardless.\n     *\n     *  When setting ``blobs``, either fully valid [[Blob]] objects\n     *  may be specified (i.e. correctly padded, with correct\n     *  committments and proofs) or a raw [[BytesLike]] may\n     *  be provided.\n     *\n     *  If raw [[BytesLike]] are provided, the [[kzg]] property **must**\n     *  be already set. The blob will be correctly padded and the\n     *  [[KzgLibrary]] will be used to compute the committment and\n     *  proof for the blob.\n     *\n     *  A BLOb is a sequence of field elements, each of which must\n     *  be within the BLS field modulo, so some additional processing\n     *  may be required to encode arbitrary data to ensure each 32 byte\n     *  field is within the valid range.\n     *\n     *  Setting this automatically populates [[blobVersionedHashes]],\n     *  overwriting any existing values. Setting this to ``null``\n     *  does **not** remove the [[blobVersionedHashes]], leaving them\n     *  present.\n     */\n    get blobs(): null | Array<Blob> {\n        if (this.#blobs == null) { return null; }\n        return this.#blobs.map((b) => Object.assign({ }, b));\n    }\n    set blobs(_blobs: null | Array<BlobLike>) {\n        if (_blobs == null) {\n            this.#blobs = null;\n            return;\n        }\n\n        const blobs: Array<Blob> = [ ];\n        const versionedHashes: Array<string> = [ ];\n        for (let i = 0; i < _blobs.length; i++) {\n            const blob = _blobs[i];\n\n            if (isBytesLike(blob)) {\n                assert(this.#kzg, \"adding a raw blob requires a KZG library\", \"UNSUPPORTED_OPERATION\", {\n                    operation: \"set blobs()\"\n                });\n\n                let data = getBytes(blob);\n                assertArgument(data.length <= BLOB_SIZE, \"blob is too large\", `blobs[${ i }]`, blob);\n\n                // Pad blob if necessary\n                if (data.length !== BLOB_SIZE) {\n                    const padded = new Uint8Array(BLOB_SIZE);\n                    padded.set(data);\n                    data = padded;\n                }\n\n                const commit = this.#kzg.blobToKzgCommitment(data);\n                const proof = hexlify(this.#kzg.computeBlobKzgProof(data, commit));\n\n                blobs.push({\n                    data: hexlify(data),\n                    commitment: hexlify(commit),\n                    proof\n                });\n                versionedHashes.push(getVersionedHash(1, commit));\n\n            } else {\n                const commit = hexlify(blob.commitment);\n                blobs.push({\n                    data: hexlify(blob.data),\n                    commitment: commit,\n                    proof: hexlify(blob.proof)\n                });\n                versionedHashes.push(getVersionedHash(1, commit));\n            }\n        }\n\n        this.#blobs = blobs;\n        this.#blobVersionedHashes = versionedHashes;\n    }\n\n    get kzg(): null | KzgLibrary { return this.#kzg; }\n    set kzg(kzg: null | KzgLibrary) {\n        this.#kzg = kzg;\n    }\n\n    /**\n     *  Creates a new Transaction with default values.\n     */\n    constructor() {\n        this.#type = null;\n        this.#to = null;\n        this.#nonce = 0;\n        this.#gasLimit = BN_0;\n        this.#gasPrice = null;\n        this.#maxPriorityFeePerGas = null;\n        this.#maxFeePerGas = null;\n        this.#data = \"0x\";\n        this.#value = BN_0;\n        this.#chainId = BN_0;\n        this.#sig = null;\n        this.#accessList = null;\n        this.#maxFeePerBlobGas = null;\n        this.#blobVersionedHashes = null;\n        this.#blobs = null;\n        this.#kzg = null;\n    }\n\n    /**\n     *  The transaction hash, if signed. Otherwise, ``null``.\n     */\n    get hash(): null | string {\n        if (this.signature == null) { return null; }\n        return keccak256(this.#getSerialized(true, false));\n    }\n\n    /**\n     *  The pre-image hash of this transaction.\n     *\n     *  This is the digest that a [[Signer]] must sign to authorize\n     *  this transaction.\n     */\n    get unsignedHash(): string {\n        return keccak256(this.unsignedSerialized);\n    }\n\n    /**\n     *  The sending address, if signed. Otherwise, ``null``.\n     */\n    get from(): null | string {\n        if (this.signature == null) { return null; }\n        return recoverAddress(this.unsignedHash, this.signature);\n    }\n\n    /**\n     *  The public key of the sender, if signed. Otherwise, ``null``.\n     */\n    get fromPublicKey(): null | string {\n        if (this.signature == null) { return null; }\n        return SigningKey.recoverPublicKey(this.unsignedHash, this.signature);\n    }\n\n    /**\n     *  Returns true if signed.\n     *\n     *  This provides a Type Guard that properties requiring a signed\n     *  transaction are non-null.\n     */\n    isSigned(): this is (Transaction & { type: number, typeName: string, from: string, signature: Signature }) {\n        return this.signature != null;\n    }\n\n    #getSerialized(signed: boolean, sidecar: boolean): string {\n        assert(!signed || this.signature != null, \"cannot serialize unsigned transaction; maybe you meant .unsignedSerialized\", \"UNSUPPORTED_OPERATION\", { operation: \".serialized\"});\n\n        const sig = signed ? this.signature: null;\n        switch (this.inferType()) {\n            case 0:\n                return _serializeLegacy(this, sig);\n            case 1:\n                return _serializeEip2930(this, sig);\n            case 2:\n                return _serializeEip1559(this, sig);\n            case 3:\n                return _serializeEip4844(this, sig, sidecar ? this.blobs: null);\n        }\n\n        assert(false, \"unsupported transaction type\", \"UNSUPPORTED_OPERATION\", { operation: \".serialized\" });\n    }\n\n    /**\n     *  The serialized transaction.\n     *\n     *  This throws if the transaction is unsigned. For the pre-image,\n     *  use [[unsignedSerialized]].\n     */\n    get serialized(): string {\n        return this.#getSerialized(true, true);\n    }\n\n    /**\n     *  The transaction pre-image.\n     *\n     *  The hash of this is the digest which needs to be signed to\n     *  authorize this transaction.\n     */\n    get unsignedSerialized(): string {\n        return this.#getSerialized(false, false);\n    }\n\n    /**\n     *  Return the most \"likely\" type; currently the highest\n     *  supported transaction type.\n     */\n    inferType(): number {\n        const types = this.inferTypes();\n\n        // Prefer London (EIP-1559) over Cancun (BLOb)\n        if (types.indexOf(2) >= 0) { return 2; }\n\n        // Return the highest inferred type\n        return <number>(types.pop());\n    }\n\n    /**\n     *  Validates the explicit properties and returns a list of compatible\n     *  transaction types.\n     */\n    inferTypes(): Array<number> {\n\n        // Checks that there are no conflicting properties set\n        const hasGasPrice = this.gasPrice != null;\n        const hasFee = (this.maxFeePerGas != null || this.maxPriorityFeePerGas != null);\n        const hasAccessList = (this.accessList != null);\n        const hasBlob = (this.#maxFeePerBlobGas != null || this.#blobVersionedHashes);\n\n        //if (hasGasPrice && hasFee) {\n        //    throw new Error(\"transaction cannot have gasPrice and maxFeePerGas\");\n        //}\n\n        if (this.maxFeePerGas != null && this.maxPriorityFeePerGas != null) {\n            assert(this.maxFeePerGas >= this.maxPriorityFeePerGas, \"priorityFee cannot be more than maxFee\", \"BAD_DATA\", { value: this });\n        }\n\n        //if (this.type === 2 && hasGasPrice) {\n        //    throw new Error(\"eip-1559 transaction cannot have gasPrice\");\n        //}\n\n        assert(!hasFee || (this.type !== 0 && this.type !== 1), \"transaction type cannot have maxFeePerGas or maxPriorityFeePerGas\", \"BAD_DATA\", { value: this });\n        assert(this.type !== 0 || !hasAccessList, \"legacy transaction cannot have accessList\", \"BAD_DATA\", { value: this })\n\n        const types: Array<number> = [ ];\n\n        // Explicit type\n        if (this.type != null) {\n            types.push(this.type);\n\n        } else {\n            if (hasFee) {\n                types.push(2);\n            } else if (hasGasPrice) {\n                types.push(1);\n                if (!hasAccessList) { types.push(0); }\n            } else if (hasAccessList) {\n                types.push(1);\n                types.push(2);\n            } else if (hasBlob && this.to) {\n                types.push(3);\n            } else {\n                types.push(0);\n                types.push(1);\n                types.push(2);\n                types.push(3);\n            }\n        }\n\n        types.sort();\n\n        return types;\n    }\n\n    /**\n     *  Returns true if this transaction is a legacy transaction (i.e.\n     *  ``type === 0``).\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isLegacy(): this is (Transaction & { type: 0, gasPrice: bigint }) {\n        return (this.type === 0);\n    }\n\n    /**\n     *  Returns true if this transaction is berlin hardform transaction (i.e.\n     *  ``type === 1``).\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isBerlin(): this is (Transaction & { type: 1, gasPrice: bigint, accessList: AccessList }) {\n        return (this.type === 1);\n    }\n\n    /**\n     *  Returns true if this transaction is london hardform transaction (i.e.\n     *  ``type === 2``).\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isLondon(): this is (Transaction & { type: 2, accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint }) {\n        return (this.type === 2);\n    }\n\n    /**\n     *  Returns true if this transaction is an [[link-eip-4844]] BLOB\n     *  transaction.\n     *\n     *  This provides a Type Guard that the related properties are\n     *  non-null.\n     */\n    isCancun(): this is (Transaction & { type: 3, to: string, accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, maxFeePerBlobGas: bigint, blobVersionedHashes: Array<string> }) {\n        return (this.type === 3);\n    }\n\n    /**\n     *  Create a copy of this transaciton.\n     */\n    clone(): Transaction {\n        return Transaction.from(this);\n    }\n\n    /**\n     *  Return a JSON-friendly object.\n     */\n    toJSON(): any {\n        const s = (v: null | bigint) => {\n            if (v == null) { return null; }\n            return v.toString();\n        };\n\n        return {\n            type: this.type,\n            to: this.to,\n//            from: this.from,\n            data: this.data,\n            nonce: this.nonce,\n            gasLimit: s(this.gasLimit),\n            gasPrice: s(this.gasPrice),\n            maxPriorityFeePerGas: s(this.maxPriorityFeePerGas),\n            maxFeePerGas: s(this.maxFeePerGas),\n            value: s(this.value),\n            chainId: s(this.chainId),\n            sig: this.signature ? this.signature.toJSON(): null,\n            accessList: this.accessList\n        };\n    }\n\n    /**\n     *  Create a **Transaction** from a serialized transaction or a\n     *  Transaction-like object.\n     */\n    static from(tx?: string | TransactionLike<string>): Transaction {\n        if (tx == null) { return new Transaction(); }\n\n        if (typeof(tx) === \"string\") {\n            const payload = getBytes(tx);\n\n            if (payload[0] >= 0x7f) { // @TODO: > vs >= ??\n                return Transaction.from(_parseLegacy(payload));\n            }\n\n            switch(payload[0]) {\n                case 1: return Transaction.from(_parseEip2930(payload));\n                case 2: return Transaction.from(_parseEip1559(payload));\n                case 3: return Transaction.from(_parseEip4844(payload));\n            }\n            assert(false, \"unsupported transaction type\", \"UNSUPPORTED_OPERATION\", { operation: \"from\" });\n        }\n\n        const result = new Transaction();\n        if (tx.type != null) { result.type = tx.type; }\n        if (tx.to != null) { result.to = tx.to; }\n        if (tx.nonce != null) { result.nonce = tx.nonce; }\n        if (tx.gasLimit != null) { result.gasLimit = tx.gasLimit; }\n        if (tx.gasPrice != null) { result.gasPrice = tx.gasPrice; }\n        if (tx.maxPriorityFeePerGas != null) { result.maxPriorityFeePerGas = tx.maxPriorityFeePerGas; }\n        if (tx.maxFeePerGas != null) { result.maxFeePerGas = tx.maxFeePerGas; }\n        if (tx.maxFeePerBlobGas != null) { result.maxFeePerBlobGas = tx.maxFeePerBlobGas; }\n        if (tx.data != null) { result.data = tx.data; }\n        if (tx.value != null) { result.value = tx.value; }\n        if (tx.chainId != null) { result.chainId = tx.chainId; }\n        if (tx.signature != null) { result.signature = Signature.from(tx.signature); }\n        if (tx.accessList != null) { result.accessList = tx.accessList; }\n\n        // This will get overwritten by blobs, if present\n        if (tx.blobVersionedHashes != null) { result.blobVersionedHashes = tx.blobVersionedHashes; }\n\n        // Make sure we assign the kzg before assigning blobs, which\n        // require the library in the event raw blob data is provided.\n        if (tx.kzg != null) { result.kzg = tx.kzg; }\n        if (tx.blobs != null) { result.blobs = tx.blobs; }\n\n        if (tx.hash != null) {\n            assertArgument(result.isSigned(), \"unsigned transaction cannot define '.hash'\", \"tx\", tx);\n            assertArgument(result.hash === tx.hash, \"hash mismatch\", \"tx\", tx);\n        }\n\n        if (tx.from != null) {\n            assertArgument(result.isSigned(), \"unsigned transaction cannot define '.from'\", \"tx\", tx);\n            assertArgument(result.from.toLowerCase() === (tx.from || \"\").toLowerCase(), \"from mismatch\", \"tx\", tx);\n        }\n\n        return result;\n    }\n}\n", "import { keccak256 } from \"../crypto/index.js\";\nimport { MessagePrefix } from \"../constants/index.js\";\nimport { recoverAddress } from \"../transaction/index.js\";\nimport { concat, toUtf8Bytes } from \"../utils/index.js\";\n\nimport type { SignatureLike } from \"../crypto/index.js\";\n/**\n *  Computes the [[link-eip-191]] personal-sign message digest to sign.\n *\n *  This prefixes the message with [[MessagePrefix]] and the decimal length\n *  of %%message%% and computes the [[keccak256]] digest.\n *\n *  If %%message%% is a string, it is converted to its UTF-8 bytes\n *  first. To compute the digest of a [[DataHexString]], it must be converted\n *  to [bytes](getBytes).\n *\n *  @example:\n *    hashMessage(\"Hello World\")\n *    //_result:\n *\n *    // Hashes the SIX (6) string characters, i.e.\n *    // [ \"0\", \"x\", \"4\", \"2\", \"4\", \"3\" ]\n *    hashMessage(\"0x4243\")\n *    //_result:\n *\n *    // Hashes the TWO (2) bytes [ 0x42, 0x43 ]...\n *    hashMessage(getBytes(\"0x4243\"))\n *    //_result:\n *\n *    // ...which is equal to using data\n *    hashMessage(new Uint8Array([ 0x42, 0x43 ]))\n *    //_result:\n *\n */\nexport function hashMessage(message: Uint8Array | string): string {\n    if (typeof(message) === \"string\") { message = toUtf8Bytes(message); }\n    return keccak256(concat([\n        toUtf8Bytes(MessagePrefix),\n        toUtf8Bytes(String(message.length)),\n        message\n    ]));\n}\n\n/**\n *  Return the address of the private key that produced\n *  the signature %%sig%% during signing for %%message%%.\n */\nexport function verifyMessage(message: Uint8Array | string, sig: SignatureLike): string {\n    const digest = hashMessage(message);\n    return recoverAddress(digest, sig);\n}\n", "import { getAddress } from \"../address/index.js\";\nimport {\n    keccak256 as _keccak256, sha256 as _sha256\n} from \"../crypto/index.js\";\nimport {\n    concat, dataLength, getBytes, hexlify, toBeArray, toTwos, toUtf8Bytes, zeroPadBytes, zeroPadValue,\n    assertArgument\n} from \"../utils/index.js\";\n\n\nconst regexBytes = new RegExp(\"^bytes([0-9]+)$\");\nconst regexNumber = new RegExp(\"^(u?int)([0-9]*)$\");\nconst regexArray = new RegExp(\"^(.*)\\\\[([0-9]*)\\\\]$\");\n\n\nfunction _pack(type: string, value: any, isArray?: boolean): Uint8Array {\n    switch(type) {\n        case \"address\":\n            if (isArray) { return getBytes(zeroPadValue(value, 32)); }\n            return getBytes(getAddress(value));\n        case \"string\":\n            return toUtf8Bytes(value);\n        case \"bytes\":\n            return getBytes(value);\n        case \"bool\":\n            value = (!!value ? \"0x01\": \"0x00\");\n            if (isArray) { return getBytes(zeroPadValue(value, 32)); }\n            return getBytes(value);\n    }\n\n    let match =  type.match(regexNumber);\n    if (match) {\n        let signed = (match[1] === \"int\");\n        let size = parseInt(match[2] || \"256\")\n\n        assertArgument((!match[2] || match[2] === String(size)) && (size % 8 === 0) && size !== 0 && size <= 256, \"invalid number type\", \"type\", type);\n\n        if (isArray) { size = 256; }\n\n        if (signed) { value = toTwos(value, size); }\n\n        return getBytes(zeroPadValue(toBeArray(value), size / 8));\n    }\n\n    match = type.match(regexBytes);\n    if (match) {\n        const size = parseInt(match[1]);\n\n        assertArgument(String(size) === match[1] && size !== 0 && size <= 32, \"invalid bytes type\", \"type\", type);\n        assertArgument(dataLength(value) === size, `invalid value for ${ type }`, \"value\", value);\n\n        if (isArray) { return getBytes(zeroPadBytes(value, 32)); }\n        return value;\n    }\n\n    match = type.match(regexArray);\n    if (match && Array.isArray(value)) {\n        const baseType = match[1];\n        const count = parseInt(match[2] || String(value.length));\n        assertArgument(count === value.length, `invalid array length for ${ type }`, \"value\", value);\n\n        const result: Array<Uint8Array> = [];\n        value.forEach(function(value) {\n            result.push(_pack(baseType, value, true));\n        });\n        return getBytes(concat(result));\n    }\n\n    assertArgument(false, \"invalid type\", \"type\", type)\n}\n\n// @TODO: Array Enum\n\n/**\n *   Computes the [[link-solc-packed]] representation of %%values%%\n *   respectively to their %%types%%.\n *\n *   @example:\n *       addr = \"0x8ba1f109551bd432803012645ac136ddd64dba72\"\n *       solidityPacked([ \"address\", \"uint\" ], [ addr, 45 ]);\n *       //_result:\n */\nexport function solidityPacked(types: ReadonlyArray<string>, values: ReadonlyArray<any>): string {\n    assertArgument(types.length === values.length, \"wrong number of values; expected ${ types.length }\", \"values\", values);\n\n    const tight: Array<Uint8Array> = [];\n    types.forEach(function(type, index) {\n        tight.push(_pack(type, values[index]));\n    });\n    return hexlify(concat(tight));\n}\n\n/**\n *   Computes the [[link-solc-packed]] [[keccak256]] hash of %%values%%\n *   respectively to their %%types%%.\n *\n *   @example:\n *       addr = \"0x8ba1f109551bd432803012645ac136ddd64dba72\"\n *       solidityPackedKeccak256([ \"address\", \"uint\" ], [ addr, 45 ]);\n *       //_result:\n */\nexport function solidityPackedKeccak256(types: ReadonlyArray<string>, values: ReadonlyArray<any>): string {\n    return _keccak256(solidityPacked(types, values));\n}\n\n/**\n *   Computes the [[link-solc-packed]] [[sha256]] hash of %%values%%\n *   respectively to their %%types%%.\n *\n *   @example:\n *       addr = \"0x8ba1f109551bd432803012645ac136ddd64dba72\"\n *       solidityPackedSha256([ \"address\", \"uint\" ], [ addr, 45 ]);\n *       //_result:\n */\nexport function solidityPackedSha256(types: ReadonlyArray<string>, values: ReadonlyArray<any>): string {\n    return _sha256(solidityPacked(types, values));\n}\n", "//import { TypedDataDomain, TypedDataField } from \"@ethersproject/providerabstract-signer\";\nimport { getAddress } from \"../address/index.js\";\nimport { keccak256 } from \"../crypto/index.js\";\nimport { recoverAddress } from \"../transaction/index.js\";\nimport {\n    concat, defineProperties, getBigInt, getBytes, hexlify, isHexString, mask, toBeHex, toQuantity, toTwos, zeroPadValue,\n    assertArgument\n} from \"../utils/index.js\";\n\nimport { id } from \"./id.js\";\n\nimport type { SignatureLike } from \"../crypto/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\n\n\nconst padding = new Uint8Array(32);\npadding.fill(0);\n\nconst BN__1 = BigInt(-1);\nconst BN_0 = BigInt(0);\nconst BN_1 = BigInt(1);\nconst BN_MAX_UINT256 = BigInt(\"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\");\n\n// @TODO: in v7, verifyingContract should be an AddressLike and use resolveAddress\n\n/**\n *  The domain for an [[link-eip-712]] payload.\n */\nexport interface TypedDataDomain {\n    /**\n     *  The human-readable name of the signing domain.\n     */\n    name?: null | string;\n\n    /**\n     *  The major version of the signing domain.\n     */\n    version?: null | string;\n\n    /**\n     *  The chain ID of the signing domain.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The the address of the contract that will verify the signature.\n     */\n    verifyingContract?: null | string;\n\n    /**\n     *  A salt used for purposes decided by the specific domain.\n     */\n    salt?: null | BytesLike;\n};\n\n/**\n *  A specific field of a structured [[link-eip-712]] type.\n */\nexport interface TypedDataField {\n    /**\n     *  The field name.\n     */\n    name: string;\n\n    /**\n     *  The type of the field.\n     */\n    type: string;\n};\n\nfunction hexPadRight(value: BytesLike): string {\n    const bytes = getBytes(value);\n    const padOffset = bytes.length % 32\n    if (padOffset) {\n        return concat([ bytes, padding.slice(padOffset) ]);\n    }\n    return hexlify(bytes);\n}\n\nconst hexTrue = toBeHex(BN_1, 32);\nconst hexFalse = toBeHex(BN_0, 32);\n\nconst domainFieldTypes: Record<string, string> = {\n    name: \"string\",\n    version: \"string\",\n    chainId: \"uint256\",\n    verifyingContract: \"address\",\n    salt: \"bytes32\"\n};\n\nconst domainFieldNames: Array<string> = [\n    \"name\", \"version\", \"chainId\", \"verifyingContract\", \"salt\"\n];\n\nfunction checkString(key: string): (value: any) => string {\n    return function (value: any){\n        assertArgument(typeof(value) === \"string\", `invalid domain value for ${ JSON.stringify(key) }`, `domain.${ key }`, value);\n        return value;\n    }\n}\n\nconst domainChecks: Record<string, (value: any) => any> = {\n    name: checkString(\"name\"),\n    version: checkString(\"version\"),\n    chainId: function(_value: any) {\n        const value = getBigInt(_value, \"domain.chainId\");\n        assertArgument(value >= 0, \"invalid chain ID\", \"domain.chainId\", _value);\n        if (Number.isSafeInteger(value)) { return Number(value); }\n        return toQuantity(value);\n    },\n    verifyingContract: function(value: any) {\n        try {\n            return getAddress(value).toLowerCase();\n        } catch (error) { }\n        assertArgument(false, `invalid domain value \"verifyingContract\"`, \"domain.verifyingContract\", value);\n    },\n    salt: function(value: any) {\n        const bytes = getBytes(value, \"domain.salt\");\n        assertArgument(bytes.length === 32, `invalid domain value \"salt\"`, \"domain.salt\", value);\n        return hexlify(bytes);\n    }\n}\n\nfunction getBaseEncoder(type: string): null | ((value: any) => string) {\n    // intXX and uintXX\n    {\n        const match = type.match(/^(u?)int(\\d+)$/);\n        if (match) {\n            const signed = (match[1] === \"\");\n\n            const width = parseInt(match[2]);\n            assertArgument(width % 8 === 0 && width !== 0 && width <= 256 && match[2] === String(width), \"invalid numeric width\", \"type\", type);\n\n            const boundsUpper = mask(BN_MAX_UINT256, signed ? (width - 1): width);\n            const boundsLower = signed ? ((boundsUpper + BN_1) * BN__1): BN_0;\n\n            return function(_value: BigNumberish) {\n                const value = getBigInt(_value, \"value\");\n\n                assertArgument(value >= boundsLower && value <= boundsUpper, `value out-of-bounds for ${ type }`, \"value\", value);\n\n                return toBeHex(signed ? toTwos(value, 256): value, 32);\n            };\n        }\n    }\n\n    // bytesXX\n    {\n        const match = type.match(/^bytes(\\d+)$/);\n        if (match) {\n            const width = parseInt(match[1]);\n            assertArgument(width !== 0 && width <= 32 && match[1] === String(width), \"invalid bytes width\", \"type\", type);\n\n            return function(value: BytesLike) {\n                const bytes = getBytes(value);\n                assertArgument(bytes.length === width, `invalid length for ${ type }`, \"value\", value);\n                return hexPadRight(value);\n            };\n        }\n    }\n\n    switch (type) {\n        case \"address\": return function(value: string) {\n            return zeroPadValue(getAddress(value), 32);\n        };\n        case \"bool\": return function(value: boolean) {\n            return ((!value) ? hexFalse: hexTrue);\n        };\n        case \"bytes\": return function(value: BytesLike) {\n            return keccak256(value);\n        };\n        case \"string\": return function(value: string) {\n            return id(value);\n        };\n    }\n\n    return null;\n}\n\nfunction encodeType(name: string, fields: Array<TypedDataField>): string {\n    return `${ name }(${ fields.map(({ name, type }) => (type + \" \" + name)).join(\",\") })`;\n}\n\ntype ArrayResult = {\n    base: string;         // The base type\n    index?: string;       // the full Index (if any)\n    array?: {             // The Array... (if index)\n        base: string;     // ...base type (same as above)\n        prefix: string;   // ...sans the final Index\n        count: number;    // ...the final Index (-1 for dynamic)\n    }\n};\n\n// foo[][3] => { base: \"foo\", index: \"[][3]\", array: {\n//     base: \"foo\", prefix: \"foo[]\", count: 3 } }\nfunction splitArray(type: string): ArrayResult {\n    const match = type.match(/^([^\\x5b]*)((\\x5b\\d*\\x5d)*)(\\x5b(\\d*)\\x5d)$/);\n    if (match) {\n        return {\n            base: match[1],\n            index: (match[2] + match[4]),\n            array: {\n                base: match[1],\n                prefix: (match[1] + match[2]),\n                count: (match[5] ? parseInt(match[5]): -1),\n            }\n        };\n    }\n\n    return { base: type };\n}\n\n/**\n *  A **TypedDataEncode** prepares and encodes [[link-eip-712]] payloads\n *  for signed typed data.\n *\n *  This is useful for those that wish to compute various components of a\n *  typed data hash, primary types, or sub-components, but generally the\n *  higher level [[Signer-signTypedData]] is more useful.\n */\nexport class TypedDataEncoder {\n    /**\n     *  The primary type for the structured [[types]].\n     *\n     *  This is derived automatically from the [[types]], since no\n     *  recursion is possible, once the DAG for the types is consturcted\n     *  internally, the primary type must be the only remaining type with\n     *  no parent nodes.\n     */\n    readonly primaryType!: string;\n\n    readonly #types: string;\n\n    /**\n     *  The types.\n     */\n    get types(): Record<string, Array<TypedDataField>> {\n        return JSON.parse(this.#types);\n    }\n\n    readonly #fullTypes: Map<string, string>\n\n    readonly #encoderCache: Map<string, (value: any) => string>;\n\n    /**\n     *  Create a new **TypedDataEncoder** for %%types%%.\n     *\n     *  This performs all necessary checking that types are valid and\n     *  do not violate the [[link-eip-712]] structural constraints as\n     *  well as computes the [[primaryType]].\n     */\n    constructor(_types: Record<string, Array<TypedDataField>>) {\n        this.#fullTypes = new Map();\n        this.#encoderCache = new Map();\n\n        // Link struct types to their direct child structs\n        const links: Map<string, Set<string>> = new Map();\n\n        // Link structs to structs which contain them as a child\n        const parents: Map<string, Array<string>> = new Map();\n\n        // Link all subtypes within a given struct\n        const subtypes: Map<string, Set<string>> = new Map();\n\n        const types: Record<string, Array<TypedDataField>> = { };\n        Object.keys(_types).forEach((type) => {\n            types[type] = _types[type].map(({ name, type }) => {\n\n                // Normalize the base type (unless name conflict)\n                let { base, index } = splitArray(type);\n                if (base === \"int\" && !_types[\"int\"]) { base = \"int256\"; }\n                if (base === \"uint\" && !_types[\"uint\"]) { base = \"uint256\"; }\n\n                return { name, type: (base + (index || \"\")) };\n            });\n\n            links.set(type, new Set());\n            parents.set(type, [ ]);\n            subtypes.set(type, new Set());\n        });\n        this.#types = JSON.stringify(types);\n\n        for (const name in types) {\n            const uniqueNames: Set<string> = new Set();\n\n            for (const field of types[name]) {\n\n                // Check each field has a unique name\n                assertArgument(!uniqueNames.has(field.name), `duplicate variable name ${ JSON.stringify(field.name) } in ${ JSON.stringify(name) }`, \"types\", _types);\n                uniqueNames.add(field.name);\n\n                // Get the base type (drop any array specifiers)\n                const baseType = splitArray(field.type).base;\n                assertArgument(baseType !== name, `circular type reference to ${ JSON.stringify(baseType) }`, \"types\", _types);\n\n                // Is this a base encoding type?\n                const encoder = getBaseEncoder(baseType);\n                if (encoder) { continue; }\n\n                assertArgument(parents.has(baseType), `unknown type ${ JSON.stringify(baseType) }`, \"types\", _types);\n\n                // Add linkage\n                (parents.get(baseType) as Array<string>).push(name);\n                (links.get(name) as Set<string>).add(baseType);\n            }\n        }\n\n        // Deduce the primary type\n        const primaryTypes = Array.from(parents.keys()).filter((n) => ((parents.get(n) as Array<string>).length === 0));\n        assertArgument(primaryTypes.length !== 0, \"missing primary type\", \"types\", _types);\n        assertArgument(primaryTypes.length === 1, `ambiguous primary types or unused types: ${ primaryTypes.map((t) => (JSON.stringify(t))).join(\", \") }`, \"types\", _types);\n\n        defineProperties<TypedDataEncoder>(this, { primaryType: primaryTypes[0] });\n\n        // Check for circular type references\n        function checkCircular(type: string, found: Set<string>) {\n            assertArgument(!found.has(type), `circular type reference to ${ JSON.stringify(type) }`, \"types\", _types);\n\n            found.add(type);\n\n            for (const child of (links.get(type) as Set<string>)) {\n                if (!parents.has(child)) { continue; }\n\n                // Recursively check children\n                checkCircular(child, found);\n\n                // Mark all ancestors as having this decendant\n                for (const subtype of found) {\n                    (subtypes.get(subtype) as Set<string>).add(child);\n                }\n            }\n\n            found.delete(type);\n        }\n        checkCircular(this.primaryType, new Set());\n\n        // Compute each fully describe type\n        for (const [ name, set ] of subtypes) {\n            const st = Array.from(set);\n            st.sort();\n            this.#fullTypes.set(name, encodeType(name, types[name]) + st.map((t) => encodeType(t, types[t])).join(\"\"));\n        }\n    }\n\n    /**\n     *  Returnthe encoder for the specific %%type%%.\n     */\n    getEncoder(type: string): (value: any) => string {\n        let encoder = this.#encoderCache.get(type);\n        if (!encoder) {\n            encoder = this.#getEncoder(type);\n            this.#encoderCache.set(type, encoder);\n        }\n        return encoder;\n    }\n\n    #getEncoder(type: string): (value: any) => string {\n\n        // Basic encoder type (address, bool, uint256, etc)\n        {\n            const encoder = getBaseEncoder(type);\n            if (encoder) { return encoder; }\n        }\n\n        // Array\n        const array = splitArray(type).array;\n        if (array) {\n            const subtype = array.prefix;\n            const subEncoder = this.getEncoder(subtype);\n            return (value: Array<any>) => {\n                assertArgument(array.count === -1 || array.count === value.length, `array length mismatch; expected length ${ array.count }`, \"value\", value);\n\n                let result = value.map(subEncoder);\n                if (this.#fullTypes.has(subtype)) {\n                    result = result.map(keccak256);\n                }\n\n                return keccak256(concat(result));\n            };\n        }\n\n        // Struct\n        const fields = this.types[type];\n        if (fields) {\n            const encodedType = id(this.#fullTypes.get(type) as string);\n            return (value: Record<string, any>) => {\n                const values = fields.map(({ name, type }) => {\n                    const result = this.getEncoder(type)(value[name]);\n                    if (this.#fullTypes.has(type)) { return keccak256(result); }\n                    return result;\n                });\n                values.unshift(encodedType);\n                return concat(values);\n            }\n        }\n\n        assertArgument(false, `unknown type: ${ type }`, \"type\", type);\n    }\n\n    /**\n     *  Return the full type for %%name%%.\n     */\n    encodeType(name: string): string {\n        const result = this.#fullTypes.get(name);\n        assertArgument(result, `unknown type: ${ JSON.stringify(name) }`, \"name\", name);\n        return result;\n    }\n\n    /**\n     *  Return the encoded %%value%% for the %%type%%.\n     */\n    encodeData(type: string, value: any): string {\n        return this.getEncoder(type)(value);\n    }\n\n    /**\n     *  Returns the hash of %%value%% for the type of %%name%%.\n     */\n    hashStruct(name: string, value: Record<string, any>): string {\n        return keccak256(this.encodeData(name, value));\n    }\n\n    /**\n     *  Return the fulled encoded %%value%% for the [[types]].\n     */\n    encode(value: Record<string, any>): string {\n        return this.encodeData(this.primaryType, value);\n    }\n\n    /**\n     *  Return the hash of the fully encoded %%value%% for the [[types]].\n     */\n    hash(value: Record<string, any>): string {\n        return this.hashStruct(this.primaryType, value);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    _visit(type: string, value: any, callback: (type: string, data: any) => any): any {\n        // Basic encoder type (address, bool, uint256, etc)\n        {\n            const encoder = getBaseEncoder(type);\n            if (encoder) { return callback(type, value); }\n        }\n\n        // Array\n        const array = splitArray(type).array;\n        if (array) {\n            assertArgument(array.count === -1 || array.count === value.length, `array length mismatch; expected length ${ array.count }`, \"value\", value);\n            return value.map((v: any) => this._visit(array.prefix, v, callback));\n        }\n\n        // Struct\n        const fields = this.types[type];\n        if (fields) {\n            return fields.reduce((accum, { name, type }) => {\n                accum[name] = this._visit(type, value[name], callback);\n                return accum;\n            }, <Record<string, any>>{});\n        }\n\n        assertArgument(false, `unknown type: ${ type }`, \"type\", type);\n    }\n\n    /**\n     *  Call %%calback%% for each value in %%value%%, passing the type and\n     *  component within %%value%%.\n     *\n     *  This is useful for replacing addresses or other transformation that\n     *  may be desired on each component, based on its type.\n     */\n    visit(value: Record<string, any>, callback: (type: string, data: any) => any): any {\n        return this._visit(this.primaryType, value, callback);\n    }\n\n    /**\n     *  Create a new **TypedDataEncoder** for %%types%%.\n     */\n    static from(types: Record<string, Array<TypedDataField>>): TypedDataEncoder {\n        return new TypedDataEncoder(types);\n    }\n\n    /**\n     *  Return the primary type for %%types%%.\n     */\n    static getPrimaryType(types: Record<string, Array<TypedDataField>>): string {\n        return TypedDataEncoder.from(types).primaryType;\n    }\n\n    /**\n     *  Return the hashed struct for %%value%% using %%types%% and %%name%%.\n     */\n    static hashStruct(name: string, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string {\n        return TypedDataEncoder.from(types).hashStruct(name, value);\n    }\n\n    /**\n     *  Return the domain hash for %%domain%%.\n     */\n    static hashDomain(domain: TypedDataDomain): string {\n        const domainFields: Array<TypedDataField> = [ ];\n        for (const name in domain) {\n            if ((<Record<string, any>>domain)[name] == null) { continue; }\n            const type = domainFieldTypes[name];\n            assertArgument(type, `invalid typed-data domain key: ${ JSON.stringify(name) }`, \"domain\", domain);\n            domainFields.push({ name, type });\n        }\n\n        domainFields.sort((a, b) => {\n            return domainFieldNames.indexOf(a.name) - domainFieldNames.indexOf(b.name);\n        });\n\n        return TypedDataEncoder.hashStruct(\"EIP712Domain\", { EIP712Domain: domainFields }, domain);\n    }\n\n    /**\n     *  Return the fully encoded [[link-eip-712]] %%value%% for %%types%% with %%domain%%.\n     */\n    static encode(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string {\n        return concat([\n            \"0x1901\",\n            TypedDataEncoder.hashDomain(domain),\n            TypedDataEncoder.from(types).hash(value)\n        ]);\n    }\n\n    /**\n     *  Return the hash of the fully encoded [[link-eip-712]] %%value%% for %%types%% with %%domain%%.\n     */\n    static hash(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string {\n        return keccak256(TypedDataEncoder.encode(domain, types, value));\n    }\n\n    // Replaces all address types with ENS names with their looked up address\n    /**\n     * Resolves to the value from resolving all addresses in %%value%% for\n     * %%types%% and the %%domain%%.\n     */\n    static async resolveNames(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>, resolveName: (name: string) => Promise<string>): Promise<{ domain: TypedDataDomain, value: any }> {\n        // Make a copy to isolate it from the object passed in\n        domain = Object.assign({ }, domain);\n\n        // Allow passing null to ignore value\n        for (const key in domain) {\n            if ((<Record<string, any>>domain)[key] == null) {\n                delete (<Record<string, any>>domain)[key];\n            }\n        }\n\n        // Look up all ENS names\n        const ensCache: Record<string, string> = { };\n\n        // Do we need to look up the domain's verifyingContract?\n        if (domain.verifyingContract && !isHexString(domain.verifyingContract, 20)) {\n            ensCache[domain.verifyingContract] = \"0x\";\n        }\n\n        // We are going to use the encoder to visit all the base values\n        const encoder = TypedDataEncoder.from(types);\n\n        // Get a list of all the addresses\n        encoder.visit(value, (type: string, value: any) => {\n            if (type === \"address\" && !isHexString(value, 20)) {\n                ensCache[value] = \"0x\";\n            }\n            return value;\n        });\n\n        // Lookup each name\n        for (const name in ensCache) {\n            ensCache[name] = await resolveName(name);\n        }\n\n        // Replace the domain verifyingContract if needed\n        if (domain.verifyingContract && ensCache[domain.verifyingContract]) {\n            domain.verifyingContract = ensCache[domain.verifyingContract];\n        }\n\n        // Replace all ENS names with their address\n        value = encoder.visit(value, (type: string, value: any) => {\n            if (type === \"address\" && ensCache[value]) { return ensCache[value]; }\n            return value;\n        });\n\n        return { domain, value };\n    }\n\n    /**\n     *  Returns the JSON-encoded payload expected by nodes which implement\n     *  the JSON-RPC [[link-eip-712]] method.\n     */\n    static getPayload(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): any {\n        // Validate the domain fields\n        TypedDataEncoder.hashDomain(domain);\n\n        // Derive the EIP712Domain Struct reference type\n        const domainValues: Record<string, any> = { };\n        const domainTypes: Array<{ name: string, type:string }> = [ ];\n\n        domainFieldNames.forEach((name) => {\n            const value = (<any>domain)[name];\n            if (value == null) { return; }\n            domainValues[name] = domainChecks[name](value);\n            domainTypes.push({ name, type: domainFieldTypes[name] });\n        });\n\n        const encoder = TypedDataEncoder.from(types);\n\n        // Get the normalized types\n        types = encoder.types;\n\n        const typesWithDomain = Object.assign({ }, types);\n        assertArgument(typesWithDomain.EIP712Domain == null, \"types must not contain EIP712Domain type\", \"types.EIP712Domain\", types);\n\n        typesWithDomain.EIP712Domain = domainTypes;\n\n        // Validate the data structures and types\n        encoder.encode(value);\n\n        return {\n            types: typesWithDomain,\n            domain: domainValues,\n            primaryType: encoder.primaryType,\n            message: encoder.visit(value, (type: string, value: any) => {\n\n                // bytes\n                if (type.match(/^bytes(\\d*)/)) {\n                    return hexlify(getBytes(value));\n                }\n\n                // uint or int\n                if (type.match(/^u?int/)) {\n                    return getBigInt(value).toString();\n                }\n\n                switch (type) {\n                    case \"address\":\n                        return value.toLowerCase();\n                    case \"bool\":\n                        return !!value;\n                    case \"string\":\n                        assertArgument(typeof(value) === \"string\", \"invalid string\", \"value\", value);\n                        return value;\n                }\n\n                assertArgument(false, \"unsupported type\", \"type\", type);\n            })\n        };\n    }\n}\n\n/**\n *  Compute the address used to sign the typed data for the %%signature%%.\n */\nexport function verifyTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>, signature: SignatureLike): string {\n    return recoverAddress(TypedDataEncoder.hash(domain, types, value), signature);\n}\n", "/**\n *  A fragment is a single item from an ABI, which may represent any of:\n *\n *  - [Functions](FunctionFragment)\n *  - [Events](EventFragment)\n *  - [Constructors](ConstructorFragment)\n *  - Custom [Errors](ErrorFragment)\n *  - [Fallback or Receive](FallbackFragment) functions\n *\n *  @_subsection api/abi/abi-coder:Fragments  [about-fragments]\n */\n\nimport {\n    defineProperties, getBigInt, getNumber,\n    assert, assertPrivate, assertArgument\n} from \"../utils/index.js\";\nimport { id } from \"../hash/index.js\";\n\n/**\n *  A Type description in a [JSON ABI format](link-solc-jsonabi).\n */\nexport interface JsonFragmentType {\n    /**\n     *  The parameter name.\n     */\n    readonly name?: string;\n\n    /**\n     *  If the parameter is indexed.\n     */\n    readonly indexed?: boolean;\n\n    /**\n     *  The type of the parameter.\n     */\n    readonly type?: string;\n\n    /**\n     *  The internal Solidity type.\n     */\n    readonly internalType?: string;\n\n    /**\n     *  The components for a tuple.\n     */\n    readonly components?: ReadonlyArray<JsonFragmentType>;\n}\n\n/**\n *  A fragment for a method, event or error in a [JSON ABI format](link-solc-jsonabi).\n */\nexport interface JsonFragment {\n    /**\n     *  The name of the error, event, function, etc.\n     */\n    readonly name?: string;\n\n    /**\n     *  The type of the fragment (e.g. ``event``, ``\"function\"``, etc.)\n     */\n    readonly type?: string;\n\n    /**\n     *  If the event is anonymous.\n     */\n    readonly anonymous?: boolean;\n\n    /**\n     *  If the function is payable.\n     */\n    readonly payable?: boolean;\n\n    /**\n     *  If the function is constant.\n     */\n    readonly constant?: boolean;\n\n    /**\n     *  The mutability state of the function.\n     */\n    readonly stateMutability?: string;\n\n    /**\n     *  The input parameters.\n     */\n    readonly inputs?: ReadonlyArray<JsonFragmentType>;\n\n    /**\n     *  The output parameters.\n     */\n    readonly outputs?: ReadonlyArray<JsonFragmentType>;\n\n    /**\n     *  The gas limit to use when sending a transaction for this function.\n     */\n    readonly gas?: string;\n};\n\n/**\n *  The format to serialize the output as.\n *\n *  **``\"sighash\"``** - the bare formatting, used to compute the selector\n *  or topic hash; this format cannot be reversed (as it discards ``indexed``)\n *  so cannot by used to export an [[Interface]].\n *\n *  **``\"minimal\"``** - Human-Readable ABI with minimal spacing and without\n *  names, so it is compact, but will result in Result objects that cannot\n *  be accessed by name.\n *\n *  **``\"full\"``** - Full Human-Readable ABI, with readable spacing and names\n *  intact; this is generally the recommended format.\n *\n *  **``\"json\"``** - The [JSON ABI format](link-solc-jsonabi).\n */\nexport type FormatType = \"sighash\" | \"minimal\" | \"full\" | \"json\";\n\n// [ \"a\", \"b\" ] => { \"a\": 1, \"b\": 1 }\nfunction setify(items: Array<string>): ReadonlySet<string> {\n    const result: Set<string> = new Set();\n    items.forEach((k) => result.add(k));\n    return Object.freeze(result);\n}\n\nconst _kwVisibDeploy = \"external public payable override\";\nconst KwVisibDeploy = setify(_kwVisibDeploy.split(\" \"));\n\n// Visibility Keywords\nconst _kwVisib = \"constant external internal payable private public pure view override\";\nconst KwVisib = setify(_kwVisib.split(\" \"));\n\nconst _kwTypes = \"constructor error event fallback function receive struct\";\nconst KwTypes = setify(_kwTypes.split(\" \"));\n\nconst _kwModifiers = \"calldata memory storage payable indexed\";\nconst KwModifiers = setify(_kwModifiers.split(\" \"));\n\nconst _kwOther = \"tuple returns\";\n\n// All Keywords\nconst _keywords = [ _kwTypes, _kwModifiers, _kwOther, _kwVisib ].join(\" \");\nconst Keywords = setify(_keywords.split(\" \"));\n\n// Single character tokens\nconst SimpleTokens: Record<string, string> = {\n  \"(\": \"OPEN_PAREN\", \")\": \"CLOSE_PAREN\",\n  \"[\": \"OPEN_BRACKET\", \"]\": \"CLOSE_BRACKET\",\n  \",\": \"COMMA\", \"@\": \"AT\"\n};\n\n// Parser regexes to consume the next token\nconst regexWhitespacePrefix = new RegExp(\"^(\\\\s*)\");\nconst regexNumberPrefix = new RegExp(\"^([0-9]+)\");\nconst regexIdPrefix = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)\");\n\n// Parser regexs to check validity\nconst regexId = new RegExp(\"^([a-zA-Z$_][a-zA-Z0-9$_]*)$\");\nconst regexType = new RegExp(\"^(address|bool|bytes([0-9]*)|string|u?int([0-9]*))$\");\n\n/**\n *  @ignore:\n */\ntype Token = Readonly<{\n    // Type of token (e.g. TYPE, KEYWORD, NUMBER, etc)\n    type: string;\n\n    // Offset into the original source code\n    offset: number;\n\n    // Actual text content of the token\n    text: string;\n\n    // The parenthesis depth\n    depth: number;\n\n    // If a parenthesis, the offset (in tokens) that balances it\n    match: number;\n\n    // For parenthesis and commas, the offset (in tokens) to the\n    // previous/next parenthesis or comma in the list\n    linkBack: number;\n    linkNext: number;\n\n    // If a BRACKET, the value inside\n    value: number;\n}>;\n\nclass TokenString {\n    #offset: number;\n    #tokens: ReadonlyArray<Token>;\n\n    get offset(): number { return this.#offset; }\n    get length(): number { return this.#tokens.length - this.#offset; }\n\n    constructor(tokens: ReadonlyArray<Token>) {\n        this.#offset = 0;\n        this.#tokens = tokens.slice();\n    }\n\n    clone(): TokenString { return new TokenString(this.#tokens); }\n    reset(): void { this.#offset = 0; }\n\n    #subTokenString(from: number = 0, to: number = 0): TokenString {\n        return new TokenString(this.#tokens.slice(from, to).map((t) => {\n            return Object.freeze(Object.assign({ }, t, {\n                match: (t.match - from),\n                linkBack: (t.linkBack - from),\n                linkNext: (t.linkNext - from),\n            }));\n        }));\n    }\n\n    // Pops and returns the value of the next token, if it is a keyword in allowed; throws if out of tokens\n    popKeyword(allowed: ReadonlySet<string>): string {\n        const top = this.peek();\n        if (top.type !== \"KEYWORD\" || !allowed.has(top.text)) { throw new Error(`expected keyword ${ top.text }`); }\n        return this.pop().text;\n    }\n\n    // Pops and returns the value of the next token if it is `type`; throws if out of tokens\n    popType(type: string): string {\n        if (this.peek().type !== type) {\n            const top = this.peek();\n            throw new Error(`expected ${ type }; got ${ top.type } ${ JSON.stringify(top.text) }`);\n        }\n        return this.pop().text;\n    }\n\n    // Pops and returns a \"(\" TOKENS \")\"\n    popParen(): TokenString {\n        const top = this.peek();\n        if (top.type !== \"OPEN_PAREN\") { throw new Error(\"bad start\"); }\n        const result = this.#subTokenString(this.#offset + 1, top.match + 1);\n        this.#offset = top.match + 1;\n        return result;\n    }\n\n    // Pops and returns the items within \"(\" ITEM1 \",\" ITEM2 \",\" ... \")\"\n    popParams(): Array<TokenString> {\n        const top = this.peek();\n\n        if (top.type !== \"OPEN_PAREN\") { throw new Error(\"bad start\"); }\n\n        const result: Array<TokenString> = [ ];\n\n        while(this.#offset < top.match - 1) {\n            const link = this.peek().linkNext;\n            result.push(this.#subTokenString(this.#offset + 1, link));\n            this.#offset = link;\n        }\n\n        this.#offset = top.match + 1;\n\n        return result;\n    }\n\n    // Returns the top Token, throwing if out of tokens\n    peek(): Token {\n        if (this.#offset >= this.#tokens.length) {\n            throw new Error(\"out-of-bounds\");\n        }\n        return this.#tokens[this.#offset];\n    }\n\n    // Returns the next value, if it is a keyword in `allowed`\n    peekKeyword(allowed: ReadonlySet<string>): null | string {\n        const top = this.peekType(\"KEYWORD\");\n        return (top != null && allowed.has(top)) ? top: null;\n    }\n\n    // Returns the value of the next token if it is `type`\n    peekType(type: string): null | string {\n        if (this.length === 0) { return null; }\n        const top = this.peek();\n        return (top.type === type) ? top.text: null;\n    }\n\n    // Returns the next token; throws if out of tokens\n    pop(): Token {\n        const result = this.peek();\n        this.#offset++;\n        return result;\n    }\n\n    toString(): string {\n        const tokens: Array<string> = [ ];\n        for (let i = this.#offset; i < this.#tokens.length; i++) {\n            const token = this.#tokens[i];\n            tokens.push(`${ token.type }:${ token.text }`);\n        }\n        return `<TokenString ${ tokens.join(\" \") }>`\n    }\n}\n\ntype Writeable<T> = { -readonly [P in keyof T]: T[P] };\n\nfunction lex(text: string): TokenString {\n    const tokens: Array<Token> = [ ];\n\n    const throwError = (message: string) => {\n        const token = (offset < text.length) ? JSON.stringify(text[offset]): \"$EOI\";\n        throw new Error(`invalid token ${ token } at ${ offset }: ${ message }`);\n    };\n\n    let brackets: Array<number> = [ ];\n    let commas: Array<number> = [ ];\n\n    let offset = 0;\n    while (offset < text.length) {\n\n        // Strip off any leading whitespace\n        let cur = text.substring(offset);\n        let match = cur.match(regexWhitespacePrefix);\n        if (match) {\n            offset += match[1].length;\n            cur = text.substring(offset);\n        }\n\n        const token = { depth: brackets.length, linkBack: -1, linkNext: -1, match: -1, type: \"\", text: \"\", offset, value: -1 };\n        tokens.push(token);\n\n        let type = (SimpleTokens[cur[0]] || \"\");\n        if (type) {\n            token.type = type;\n            token.text = cur[0];\n            offset++;\n\n            if (type === \"OPEN_PAREN\") {\n                brackets.push(tokens.length - 1);\n                commas.push(tokens.length - 1);\n\n            } else if (type == \"CLOSE_PAREN\") {\n                if (brackets.length === 0) { throwError(\"no matching open bracket\"); }\n\n                token.match = brackets.pop() as number;\n                (<Writeable<Token>>(tokens[token.match])).match = tokens.length - 1;\n                token.depth--;\n\n                token.linkBack = commas.pop() as number;\n                (<Writeable<Token>>(tokens[token.linkBack])).linkNext = tokens.length - 1;\n\n            } else if (type === \"COMMA\") {\n                token.linkBack = commas.pop() as number;\n                (<Writeable<Token>>(tokens[token.linkBack])).linkNext = tokens.length - 1;\n                commas.push(tokens.length - 1);\n\n            } else if (type === \"OPEN_BRACKET\") {\n                token.type = \"BRACKET\";\n\n            } else if (type === \"CLOSE_BRACKET\") {\n                // Remove the CLOSE_BRACKET\n                let suffix = (tokens.pop() as Token).text;\n                if (tokens.length > 0 && tokens[tokens.length - 1].type === \"NUMBER\") {\n                    const value = (tokens.pop() as Token).text;\n                    suffix = value + suffix;\n                    (<Writeable<Token>>(tokens[tokens.length - 1])).value = getNumber(value);\n                }\n                if (tokens.length === 0 || tokens[tokens.length - 1].type !== \"BRACKET\") {\n                    throw new Error(\"missing opening bracket\");\n                }\n                (<Writeable<Token>>(tokens[tokens.length - 1])).text += suffix;\n            }\n\n            continue;\n        }\n\n        match = cur.match(regexIdPrefix);\n        if (match) {\n            token.text = match[1];\n            offset += token.text.length;\n\n            if (Keywords.has(token.text)) {\n                token.type = \"KEYWORD\";\n                continue;\n            }\n\n            if (token.text.match(regexType)) {\n                token.type = \"TYPE\";\n                continue;\n            }\n\n            token.type = \"ID\";\n            continue;\n        }\n\n        match = cur.match(regexNumberPrefix);\n        if (match) {\n            token.text = match[1];\n            token.type = \"NUMBER\";\n            offset += token.text.length;\n            continue;\n        }\n\n        throw new Error(`unexpected token ${ JSON.stringify(cur[0]) } at position ${ offset }`);\n    }\n\n    return new TokenString(tokens.map((t) => Object.freeze(t)));\n}\n\n// Check only one of `allowed` is in `set`\nfunction allowSingle(set: ReadonlySet<string>, allowed: ReadonlySet<string>): void {\n    let included: Array<string> = [ ];\n    for (const key in allowed.keys()) {\n        if (set.has(key)) { included.push(key); }\n    }\n    if (included.length > 1) { throw new Error(`conflicting types: ${ included.join(\", \") }`); }\n}\n\n// Functions to process a Solidity Signature TokenString from left-to-right for...\n\n// ...the name with an optional type, returning the name\nfunction consumeName(type: string, tokens: TokenString): string {\n    if (tokens.peekKeyword(KwTypes)) {\n        const keyword = tokens.pop().text;\n        if (keyword !== type) {\n            throw new Error(`expected ${ type }, got ${ keyword }`);\n        }\n    }\n\n    return tokens.popType(\"ID\");\n}\n\n// ...all keywords matching allowed, returning the keywords\nfunction consumeKeywords(tokens: TokenString, allowed?: ReadonlySet<string>): ReadonlySet<string> {\n    const keywords: Set<string> = new Set();\n    while (true) {\n        const keyword = tokens.peekType(\"KEYWORD\");\n\n        if (keyword == null || (allowed && !allowed.has(keyword))) { break; }\n        tokens.pop();\n\n        if (keywords.has(keyword)) { throw new Error(`duplicate keywords: ${ JSON.stringify(keyword) }`); }\n        keywords.add(keyword);\n    }\n\n    return Object.freeze(keywords);\n}\n\n// ...all visibility keywords, returning the coalesced mutability\nfunction consumeMutability(tokens: TokenString): \"payable\" | \"nonpayable\" | \"view\" | \"pure\" {\n    let modifiers = consumeKeywords(tokens, KwVisib);\n\n    // Detect conflicting modifiers\n    allowSingle(modifiers, setify(\"constant payable nonpayable\".split(\" \")));\n    allowSingle(modifiers, setify(\"pure view payable nonpayable\".split(\" \")));\n\n    // Process mutability states\n    if (modifiers.has(\"view\")) { return \"view\"; }\n    if (modifiers.has(\"pure\")) { return \"pure\"; }\n    if (modifiers.has(\"payable\")) { return \"payable\"; }\n    if (modifiers.has(\"nonpayable\")) { return \"nonpayable\"; }\n\n    // Process legacy `constant` last\n    if (modifiers.has(\"constant\")) { return \"view\"; }\n\n    return \"nonpayable\";\n}\n\n// ...a parameter list, returning the ParamType list\nfunction consumeParams(tokens: TokenString, allowIndexed?: boolean): Array<ParamType> {\n    return tokens.popParams().map((t) => ParamType.from(t, allowIndexed));\n}\n\n// ...a gas limit, returning a BigNumber or null if none\nfunction consumeGas(tokens: TokenString): null | bigint {\n    if (tokens.peekType(\"AT\")) {\n        tokens.pop();\n        if (tokens.peekType(\"NUMBER\")) {\n            return getBigInt(tokens.pop().text);\n        }\n        throw new Error(\"invalid gas\");\n    }\n    return null;\n}\n\nfunction consumeEoi(tokens: TokenString): void {\n    if (tokens.length) {\n        throw new Error(`unexpected tokens at offset ${ tokens.offset }: ${ tokens.toString() }`);\n    }\n}\n\nconst regexArrayType = new RegExp(/^(.*)\\[([0-9]*)\\]$/);\n\nfunction verifyBasicType(type: string): string {\n    const match = type.match(regexType);\n    assertArgument(match, \"invalid type\", \"type\", type);\n    if (type === \"uint\") { return \"uint256\"; }\n    if (type === \"int\") { return \"int256\"; }\n\n    if (match[2]) {\n        // bytesXX\n        const length = parseInt(match[2]);\n        assertArgument(length !== 0 && length <= 32, \"invalid bytes length\", \"type\", type);\n\n    } else if (match[3]) {\n        // intXX or uintXX\n        const size = parseInt(match[3] as string);\n        assertArgument(size !== 0 && size <= 256 && (size % 8) === 0, \"invalid numeric width\", \"type\", type);\n    }\n\n    return type;\n}\n\n// Make the Fragment constructors effectively private\nconst _guard = { };\n\n\n/**\n *  When [walking](ParamType-walk) a [[ParamType]], this is called\n *  on each component.\n */\nexport type ParamTypeWalkFunc = (type: string, value: any) => any;\n\n/**\n *  When [walking asynchronously](ParamType-walkAsync) a [[ParamType]],\n *  this is called on each component.\n */\nexport type ParamTypeWalkAsyncFunc = (type: string, value: any) => any | Promise<any>;\n\nconst internal = Symbol.for(\"_ethers_internal\");\n\nconst ParamTypeInternal = \"_ParamTypeInternal\";\nconst ErrorFragmentInternal = \"_ErrorInternal\";\nconst EventFragmentInternal = \"_EventInternal\";\nconst ConstructorFragmentInternal = \"_ConstructorInternal\";\nconst FallbackFragmentInternal = \"_FallbackInternal\";\nconst FunctionFragmentInternal = \"_FunctionInternal\";\nconst StructFragmentInternal = \"_StructInternal\";\n\n/**\n *  Each input and output of a [[Fragment]] is an Array of **ParamType**.\n */\nexport class ParamType {\n\n    /**\n     *  The local name of the parameter (or ``\"\"`` if unbound)\n     */\n    readonly name!: string;\n\n    /**\n     *  The fully qualified type (e.g. ``\"address\"``, ``\"tuple(address)\"``,\n     *  ``\"uint256[3][]\"``)\n     */\n    readonly type!: string;\n\n    /**\n     *  The base type (e.g. ``\"address\"``, ``\"tuple\"``, ``\"array\"``)\n     */\n    readonly baseType!: string;\n\n    /**\n     *  True if the parameters is indexed.\n     *\n     *  For non-indexable types this is ``null``.\n     */\n    readonly indexed!: null | boolean;\n\n    /**\n     *  The components for the tuple.\n     *\n     *  For non-tuple types this is ``null``.\n     */\n    readonly components!: null | ReadonlyArray<ParamType>;\n\n    /**\n     *  The array length, or ``-1`` for dynamic-lengthed arrays.\n     *\n     *  For non-array types this is ``null``.\n     */\n    readonly arrayLength!: null | number;\n\n    /**\n     *  The type of each child in the array.\n     *\n     *  For non-array types this is ``null``.\n     */\n    readonly arrayChildren!: null | ParamType;\n\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, type: string, baseType: string, indexed: null | boolean, components: null | ReadonlyArray<ParamType>, arrayLength: null | number, arrayChildren: null | ParamType) {\n        assertPrivate(guard, _guard, \"ParamType\");\n        Object.defineProperty(this, internal, { value: ParamTypeInternal });\n\n        if (components) { components = Object.freeze(components.slice()); }\n\n        if (baseType === \"array\") {\n            if (arrayLength == null || arrayChildren == null) {\n                throw new Error(\"\");\n            }\n        } else if (arrayLength != null || arrayChildren != null) {\n            throw new Error(\"\");\n        }\n\n        if (baseType === \"tuple\") {\n            if (components == null) { throw new Error(\"\"); }\n        } else if (components != null) {\n            throw new Error(\"\");\n        }\n\n        defineProperties<ParamType>(this, {\n            name, type, baseType, indexed, components, arrayLength, arrayChildren\n        });\n    }\n\n    /**\n     *  Return a string representation of this type.\n     *\n     *  For example,\n     *\n     *  ``sighash\" => \"(uint256,address)\"``\n     *\n     *  ``\"minimal\" => \"tuple(uint256,address) indexed\"``\n     *\n     *  ``\"full\" => \"tuple(uint256 foo, address bar) indexed baz\"``\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            const name = this.name || \"\";\n\n            if (this.isArray()) {\n                const result = JSON.parse(this.arrayChildren.format(\"json\"));\n                result.name = name;\n                result.type += `[${ (this.arrayLength < 0 ? \"\": String(this.arrayLength)) }]`;\n                return JSON.stringify(result);\n            }\n\n            const result: any = {\n                type: ((this.baseType === \"tuple\") ? \"tuple\": this.type),\n                name\n            };\n\n\n            if (typeof(this.indexed) === \"boolean\") { result.indexed = this.indexed; }\n            if (this.isTuple()) {\n                result.components = this.components.map((c) => JSON.parse(c.format(format)));\n            }\n            return JSON.stringify(result);\n        }\n\n        let result = \"\";\n\n        // Array\n        if (this.isArray()) {\n            result += this.arrayChildren.format(format);\n            result += `[${ (this.arrayLength < 0 ? \"\": String(this.arrayLength)) }]`;\n        } else {\n            if (this.isTuple()) {\n                result += \"(\" + this.components.map(\n                    (comp) => comp.format(format)\n                ).join((format === \"full\") ? \", \": \",\") + \")\";\n            } else {\n                result += this.type;\n            }\n        }\n\n        if (format !== \"sighash\") {\n            if (this.indexed === true) { result += \" indexed\"; }\n            if (format === \"full\" && this.name) {\n                result += \" \" + this.name;\n            }\n        }\n\n        return result;\n    }\n\n    /**\n     *  Returns true if %%this%% is an Array type.\n     *\n     *  This provides a type gaurd ensuring that [[arrayChildren]]\n     *  and [[arrayLength]] are non-null.\n     */\n    isArray(): this is (ParamType & { arrayChildren: ParamType, arrayLength: number }) {\n        return (this.baseType === \"array\")\n    }\n\n    /**\n     *  Returns true if %%this%% is a Tuple type.\n     *\n     *  This provides a type gaurd ensuring that [[components]]\n     *  is non-null.\n     */\n    isTuple(): this is (ParamType & { components: ReadonlyArray<ParamType> }) {\n        return (this.baseType === \"tuple\");\n    }\n\n    /**\n     *  Returns true if %%this%% is an Indexable type.\n     *\n     *  This provides a type gaurd ensuring that [[indexed]]\n     *  is non-null.\n     */\n    isIndexable(): this is (ParamType & { indexed: boolean }) {\n        return (this.indexed != null);\n    }\n\n    /**\n     *  Walks the **ParamType** with %%value%%, calling %%process%%\n     *  on each type, destructing the %%value%% recursively.\n     */\n    walk(value: any, process: ParamTypeWalkFunc): any {\n        if (this.isArray()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid array value\"); }\n            if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n                throw new Error(\"array is wrong length\");\n            }\n            const _this = this;\n            return value.map((v) => (_this.arrayChildren.walk(v, process)));\n        }\n\n        if (this.isTuple()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid tuple value\"); }\n            if (value.length !== this.components.length) {\n                throw new Error(\"array is wrong length\");\n            }\n            const _this = this;\n            return value.map((v, i) => (_this.components[i].walk(v, process)));\n        }\n\n        return process(this.type, value);\n    }\n\n    #walkAsync(promises: Array<Promise<void>>, value: any, process: ParamTypeWalkAsyncFunc, setValue: (value: any) => void): void {\n\n        if (this.isArray()) {\n            if (!Array.isArray(value)) { throw new Error(\"invalid array value\"); }\n            if (this.arrayLength !== -1 && value.length !== this.arrayLength) {\n                throw new Error(\"array is wrong length\");\n            }\n            const childType = this.arrayChildren;\n\n            const result = value.slice();\n            result.forEach((value, index) => {\n                childType.#walkAsync(promises, value, process, (value: any) => {\n                    result[index] = value;\n                });\n            });\n            setValue(result);\n            return;\n        }\n\n        if (this.isTuple()) {\n            const components = this.components;\n\n            // Convert the object into an array\n            let result: Array<any>;\n            if (Array.isArray(value)) {\n                result = value.slice();\n\n            } else {\n                if (value == null || typeof(value) !== \"object\") {\n                    throw new Error(\"invalid tuple value\");\n                }\n\n                result = components.map((param) => {\n                    if (!param.name) { throw new Error(\"cannot use object value with unnamed components\"); }\n                    if (!(param.name in value)) {\n                        throw new Error(`missing value for component ${ param.name }`);\n                    }\n                    return value[param.name];\n                });\n            }\n\n            if (result.length !== this.components.length) {\n                throw new Error(\"array is wrong length\");\n            }\n\n            result.forEach((value, index) => {\n                components[index].#walkAsync(promises, value, process, (value: any) => {\n                    result[index] = value;\n                });\n            });\n            setValue(result);\n            return;\n        }\n\n        const result = process(this.type, value);\n        if (result.then) {\n            promises.push((async function() { setValue(await result); })());\n        } else {\n            setValue(result);\n        }\n    }\n\n    /**\n     *  Walks the **ParamType** with %%value%%, asynchronously calling\n     *  %%process%% on each type, destructing the %%value%% recursively.\n     *\n     *  This can be used to resolve ENS names by walking and resolving each\n     *  ``\"address\"`` type.\n     */\n    async walkAsync(value: any, process: ParamTypeWalkAsyncFunc): Promise<any> {\n        const promises: Array<Promise<void>> = [ ];\n        const result: [ any ] = [ value ];\n        this.#walkAsync(promises, value, process, (value: any) => {\n            result[0] = value;\n        });\n        if (promises.length) { await Promise.all(promises); }\n        return result[0];\n    }\n\n    /**\n     *  Creates a new **ParamType** for %%obj%%.\n     *\n     *  If %%allowIndexed%% then the ``indexed`` keyword is permitted,\n     *  otherwise the ``indexed`` keyword will throw an error.\n     */\n    static from(obj: any, allowIndexed?: boolean): ParamType {\n        if (ParamType.isParamType(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return ParamType.from(lex(obj), allowIndexed);\n            } catch (error) {\n                assertArgument(false, \"invalid param type\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            let type = \"\", baseType = \"\";\n            let comps: null | Array<ParamType> = null;\n\n            if (consumeKeywords(obj, setify([ \"tuple\" ])).has(\"tuple\") || obj.peekType(\"OPEN_PAREN\")) {\n                // Tuple\n                baseType = \"tuple\";\n                comps = obj.popParams().map((t) => ParamType.from(t));\n                type = `tuple(${ comps.map((c) => c.format()).join(\",\") })`;\n            } else {\n                // Normal\n                type = verifyBasicType(obj.popType(\"TYPE\"));\n                baseType = type;\n            }\n\n            // Check for Array\n            let arrayChildren: null | ParamType  = null;\n            let arrayLength: null | number = null;\n\n            while (obj.length && obj.peekType(\"BRACKET\")) {\n                const bracket = obj.pop(); //arrays[i];\n                arrayChildren = new ParamType(_guard, \"\", type, baseType, null, comps, arrayLength, arrayChildren);\n                arrayLength = bracket.value;\n                type += bracket.text;\n                baseType = \"array\";\n                comps = null;\n            }\n\n            let indexed: null | boolean = null;\n            const keywords = consumeKeywords(obj, KwModifiers);\n            if (keywords.has(\"indexed\")) {\n                if (!allowIndexed) { throw new Error(\"\"); }\n                indexed = true;\n            }\n\n            const name = (obj.peekType(\"ID\") ? obj.pop().text: \"\");\n\n            if (obj.length) { throw new Error(\"leftover tokens\"); }\n\n            return new ParamType(_guard, name, type, baseType, indexed, comps, arrayLength, arrayChildren);\n        }\n\n        const name = obj.name;\n        assertArgument(!name || (typeof(name) === \"string\" && name.match(regexId)),\n            \"invalid name\", \"obj.name\", name);\n\n        let indexed = obj.indexed;\n        if (indexed != null) {\n            assertArgument(allowIndexed, \"parameter cannot be indexed\", \"obj.indexed\", obj.indexed);\n            indexed = !!indexed;\n        }\n\n        let type = obj.type;\n\n        let arrayMatch = type.match(regexArrayType);\n        if (arrayMatch) {\n            const arrayLength = parseInt(arrayMatch[2] || \"-1\");\n            const arrayChildren = ParamType.from({\n                type: arrayMatch[1],\n                components: obj.components\n            });\n\n            return new ParamType(_guard, name || \"\", type, \"array\", indexed, null, arrayLength, arrayChildren);\n        }\n\n        if (type === \"tuple\" || type.startsWith(\"tuple(\"/* fix: ) */) || type.startsWith(\"(\" /* fix: ) */)) {\n            const comps = (obj.components != null) ? obj.components.map((c: any) => ParamType.from(c)): null;\n            const tuple = new ParamType(_guard, name || \"\", type, \"tuple\", indexed, comps, null, null);\n            // @TODO: use lexer to validate and normalize type\n            return tuple;\n        }\n\n        type = verifyBasicType(obj.type);\n\n        return new ParamType(_guard, name || \"\", type, type, indexed, null, null, null);\n    }\n\n    /**\n     *  Returns true if %%value%% is a **ParamType**.\n     */\n    static isParamType(value: any): value is ParamType {\n        return (value && value[internal] === ParamTypeInternal);\n    }\n}\n\n/**\n *  The type of a [[Fragment]].\n */\nexport type FragmentType = \"constructor\" | \"error\" | \"event\" | \"fallback\" | \"function\" | \"struct\";\n\n/**\n *  An abstract class to represent An individual fragment from a parse ABI.\n */\nexport abstract class Fragment {\n    /**\n     *  The type of the fragment.\n     */\n    readonly type!: FragmentType;\n\n    /**\n     *  The inputs for the fragment.\n     */\n    readonly inputs!: ReadonlyArray<ParamType>;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, inputs: ReadonlyArray<ParamType>) {\n        assertPrivate(guard, _guard, \"Fragment\");\n        inputs = Object.freeze(inputs.slice());\n        defineProperties<Fragment>(this, { type, inputs });\n    }\n\n    /**\n     *  Returns a string representation of this fragment as %%format%%.\n     */\n    abstract format(format?: FormatType): string;\n\n    /**\n     *  Creates a new **Fragment** for %%obj%%, wich can be any supported\n     *  ABI frgament type.\n     */\n    static from(obj: any): Fragment {\n        if (typeof(obj) === \"string\") {\n\n            // Try parsing JSON...\n            try {\n                Fragment.from(JSON.parse(obj));\n            } catch (e) { }\n\n            // ...otherwise, use the human-readable lexer\n            return Fragment.from(lex(obj));\n        }\n\n        if (obj instanceof TokenString) {\n            // Human-readable ABI (already lexed)\n\n            const type = obj.peekKeyword(KwTypes);\n\n            switch (type) {\n                case \"constructor\": return ConstructorFragment.from(obj);\n                case \"error\": return ErrorFragment.from(obj);\n                case \"event\": return EventFragment.from(obj);\n                case \"fallback\": case \"receive\":\n                    return FallbackFragment.from(obj);\n                case \"function\": return FunctionFragment.from(obj);\n                case \"struct\": return StructFragment.from(obj);\n            }\n\n        } else if (typeof(obj) === \"object\") {\n            // JSON ABI\n\n            switch (obj.type) {\n                case \"constructor\": return ConstructorFragment.from(obj);\n                case \"error\": return ErrorFragment.from(obj);\n                case \"event\": return EventFragment.from(obj);\n                case \"fallback\": case \"receive\":\n                    return FallbackFragment.from(obj);\n                case \"function\": return FunctionFragment.from(obj);\n                case \"struct\": return StructFragment.from(obj);\n            }\n\n            assert(false, `unsupported type: ${ obj.type }`, \"UNSUPPORTED_OPERATION\", {\n                operation: \"Fragment.from\"\n            });\n        }\n\n        assertArgument(false, \"unsupported frgament object\", \"obj\", obj);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[ConstructorFragment]].\n     */\n    static isConstructor(value: any): value is ConstructorFragment {\n        return ConstructorFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is an [[ErrorFragment]].\n     */\n    static isError(value: any): value is ErrorFragment {\n        return ErrorFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is an [[EventFragment]].\n     */\n    static isEvent(value: any): value is EventFragment {\n        return EventFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[FunctionFragment]].\n     */\n    static isFunction(value: any): value is FunctionFragment {\n        return FunctionFragment.isFragment(value);\n    }\n\n    /**\n     *  Returns true if %%value%% is a [[StructFragment]].\n     */\n    static isStruct(value: any): value is StructFragment {\n        return StructFragment.isFragment(value);\n    }\n}\n\n/**\n *  An abstract class to represent An individual fragment\n *  which has a name from a parse ABI.\n */\nexport abstract class NamedFragment extends Fragment {\n    /**\n     *  The name of the fragment.\n     */\n    readonly name!: string;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, type, inputs);\n        assertArgument(typeof(name) === \"string\" && name.match(regexId),\n            \"invalid identifier\", \"name\", name);\n        inputs = Object.freeze(inputs.slice());\n        defineProperties<NamedFragment>(this, { name });\n    }\n}\n\nfunction joinParams(format: FormatType, params: ReadonlyArray<ParamType>): string { \n    return \"(\" + params.map((p) => p.format(format)).join((format === \"full\") ? \", \": \",\") + \")\";\n}\n\n/**\n *  A Fragment which represents a //Custom Error//.\n */\nexport class ErrorFragment extends NamedFragment {\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, \"error\", name, inputs);\n        Object.defineProperty(this, internal, { value: ErrorFragmentInternal });\n    }\n\n    /**\n     *  The Custom Error selector.\n     */\n    get selector(): string {\n        return id(this.format(\"sighash\")).substring(0, 10);\n    }\n\n    /**\n     *  Returns a string representation of this fragment as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"error\",\n                name: this.name,\n                inputs: this.inputs.map((input) => JSON.parse(input.format(format))),\n            });\n        }\n\n        const result: Array<string> = [ ];\n        if (format !== \"sighash\") { result.push(\"error\"); }\n        result.push(this.name + joinParams(format, this.inputs));\n        return result.join(\" \");\n    }\n\n    /**\n     *  Returns a new **ErrorFragment** for %%obj%%.\n     */\n    static from(obj: any): ErrorFragment {\n        if (ErrorFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            return ErrorFragment.from(lex(obj));\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"error\", obj);\n            const inputs = consumeParams(obj);\n            consumeEoi(obj);\n\n            return new ErrorFragment(_guard, name, inputs);\n        }\n\n        return new ErrorFragment(_guard, obj.name,\n            obj.inputs ? obj.inputs.map(ParamType.from): [ ]);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is an\n     *  **ErrorFragment**.\n     */\n    static isFragment(value: any): value is ErrorFragment {\n        return (value && value[internal] === ErrorFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents an Event.\n */\nexport class EventFragment extends NamedFragment {\n    /**\n     *  Whether this event is anonymous.\n     */\n    readonly anonymous!: boolean;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>, anonymous: boolean) {\n        super(guard, \"event\", name, inputs);\n        Object.defineProperty(this, internal, { value: EventFragmentInternal });\n        defineProperties<EventFragment>(this, { anonymous });\n    }\n\n    /**\n     *  The Event topic hash.\n     */\n    get topicHash(): string {\n        return id(this.format(\"sighash\"));\n    }\n\n    /**\n     *  Returns a string representation of this event as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"event\",\n                anonymous: this.anonymous,\n                name: this.name,\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n            });\n        }\n\n        const result: Array<string> = [ ];\n        if (format !== \"sighash\") { result.push(\"event\"); }\n        result.push(this.name + joinParams(format, this.inputs));\n        if (format !== \"sighash\" && this.anonymous) { result.push(\"anonymous\"); }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Return the topic hash for an event with %%name%% and %%params%%.\n     */\n    static getTopicHash(name: string, params?: Array<any>): string {\n        params = (params || []).map((p) => ParamType.from(p));\n        const fragment = new EventFragment(_guard, name, params, false);\n        return fragment.topicHash;\n    }\n\n    /**\n     *  Returns a new **EventFragment** for %%obj%%.\n     */\n    static from(obj: any): EventFragment {\n        if (EventFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return EventFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid event fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"event\", obj);\n            const inputs = consumeParams(obj, true);\n            const anonymous = !!consumeKeywords(obj, setify([ \"anonymous\" ])).has(\"anonymous\");\n            consumeEoi(obj);\n\n            return new EventFragment(_guard, name, inputs, anonymous);\n        }\n\n        return new EventFragment(_guard, obj.name,\n            obj.inputs ? obj.inputs.map((p: any) => ParamType.from(p, true)): [ ], !!obj.anonymous);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is an\n     *  **EventFragment**.\n     */\n    static isFragment(value: any): value is EventFragment {\n        return (value && value[internal] === EventFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a constructor.\n */\nexport class ConstructorFragment extends Fragment {\n\n    /**\n     *  Whether the constructor can receive an endowment.\n     */\n    readonly payable!: boolean;\n\n    /**\n     *  The recommended gas limit for deployment or ``null``.\n     */\n    readonly gas!: null | bigint;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, type: FragmentType, inputs: ReadonlyArray<ParamType>, payable: boolean, gas: null | bigint) {\n        super(guard, type, inputs);\n        Object.defineProperty(this, internal, { value: ConstructorFragmentInternal });\n        defineProperties<ConstructorFragment>(this, { payable, gas });\n    }\n\n    /**\n     *  Returns a string representation of this constructor as %%format%%.\n     */\n    format(format?: FormatType): string {\n        assert(format != null && format !== \"sighash\", \"cannot format a constructor for sighash\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"format(sighash)\" });\n\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"constructor\",\n                stateMutability: (this.payable ? \"payable\": \"undefined\"),\n                payable: this.payable,\n                gas: ((this.gas != null) ? this.gas: undefined),\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format)))\n            });\n        }\n\n        const result = [ `constructor${ joinParams(format, this.inputs) }` ];\n        if (this.payable) { result.push(\"payable\"); }\n        if (this.gas != null) { result.push(`@${ this.gas.toString() }`); }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Returns a new **ConstructorFragment** for %%obj%%.\n     */\n    static from(obj: any): ConstructorFragment {\n        if (ConstructorFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return ConstructorFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid constuctor fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            consumeKeywords(obj, setify([ \"constructor\" ]));\n            const inputs = consumeParams(obj);\n            const payable = !!consumeKeywords(obj, KwVisibDeploy).has(\"payable\");\n            const gas = consumeGas(obj);\n            consumeEoi(obj);\n\n            return new ConstructorFragment(_guard, \"constructor\", inputs, payable, gas);\n        }\n\n        return new ConstructorFragment(_guard, \"constructor\",\n            obj.inputs ? obj.inputs.map(ParamType.from): [ ],\n            !!obj.payable, (obj.gas != null) ? obj.gas: null);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **ConstructorFragment**.\n     */\n    static isFragment(value: any): value is ConstructorFragment {\n        return (value && value[internal] === ConstructorFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a method.\n */\nexport class FallbackFragment extends Fragment {\n\n    /**\n     *  If the function can be sent value during invocation.\n     */\n    readonly payable!: boolean;\n\n    constructor(guard: any, inputs: ReadonlyArray<ParamType>, payable: boolean) {\n        super(guard, \"fallback\", inputs);\n        Object.defineProperty(this, internal, { value: FallbackFragmentInternal });\n        defineProperties<FallbackFragment>(this, { payable });\n    }\n\n    /**\n     *  Returns a string representation of this fallback as %%format%%.\n     */\n    format(format?: FormatType): string {\n        const type = ((this.inputs.length === 0) ? \"receive\": \"fallback\");\n\n        if (format === \"json\") {\n            const stateMutability = (this.payable ? \"payable\": \"nonpayable\");\n            return JSON.stringify({ type, stateMutability });\n        }\n\n        return `${ type }()${ this.payable ? \" payable\": \"\" }`;\n    }\n\n    /**\n     *  Returns a new **FallbackFragment** for %%obj%%.\n     */\n    static from(obj: any): FallbackFragment {\n        if (FallbackFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return FallbackFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid fallback fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const errorObj = obj.toString();\n\n            const topIsValid = obj.peekKeyword(setify([ \"fallback\", \"receive\" ]));\n            assertArgument(topIsValid, \"type must be fallback or receive\", \"obj\", errorObj);\n\n            const type = obj.popKeyword(setify([ \"fallback\", \"receive\" ]));\n\n            // receive()\n            if (type === \"receive\") {\n                const inputs = consumeParams(obj);\n                assertArgument(inputs.length === 0, `receive cannot have arguments`, \"obj.inputs\", inputs);\n                consumeKeywords(obj, setify([ \"payable\" ]));\n                consumeEoi(obj);\n                return new FallbackFragment(_guard, [ ], true);\n            }\n\n            // fallback() [payable]\n            // fallback(bytes) [payable] returns (bytes)\n            let inputs = consumeParams(obj);\n            if (inputs.length) {\n                assertArgument(inputs.length === 1 && inputs[0].type === \"bytes\",\n                    \"invalid fallback inputs\", \"obj.inputs\",\n                    inputs.map((i) => i.format(\"minimal\")).join(\", \"));\n            } else {\n                inputs = [ ParamType.from(\"bytes\") ];\n            }\n\n            const mutability = consumeMutability(obj);\n            assertArgument(mutability === \"nonpayable\" || mutability === \"payable\", \"fallback cannot be constants\", \"obj.stateMutability\", mutability);\n\n            if (consumeKeywords(obj, setify([ \"returns\" ])).has(\"returns\")) {\n                const outputs = consumeParams(obj);\n                assertArgument(outputs.length === 1 && outputs[0].type === \"bytes\",\n                    \"invalid fallback outputs\", \"obj.outputs\",\n                    outputs.map((i) => i.format(\"minimal\")).join(\", \"));\n            }\n\n            consumeEoi(obj);\n\n            return new FallbackFragment(_guard, inputs, mutability === \"payable\");\n        }\n\n        if (obj.type === \"receive\") {\n            return new FallbackFragment(_guard, [ ], true);\n        }\n\n        if (obj.type === \"fallback\") {\n            const inputs = [ ParamType.from(\"bytes\") ];\n            const payable = (obj.stateMutability === \"payable\");\n            return new FallbackFragment(_guard, inputs, payable);\n        }\n\n        assertArgument(false, \"invalid fallback description\", \"obj\", obj);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **FallbackFragment**.\n     */\n    static isFragment(value: any): value is FallbackFragment {\n        return (value && value[internal] === FallbackFragmentInternal);\n    }\n}\n\n\n/**\n *  A Fragment which represents a method.\n */\nexport class FunctionFragment extends NamedFragment {\n    /**\n     *  If the function is constant (e.g. ``pure`` or ``view`` functions).\n     */\n    readonly constant!: boolean;\n\n    /**\n     *  The returned types for the result of calling this function.\n     */\n    readonly outputs!: ReadonlyArray<ParamType>;\n\n    /**\n     *  The state mutability (e.g. ``payable``, ``nonpayable``, ``view``\n     *  or ``pure``)\n     */\n    readonly stateMutability!: \"payable\" | \"nonpayable\" | \"view\" | \"pure\";\n\n    /**\n     *  If the function can be sent value during invocation.\n     */\n    readonly payable!: boolean;\n\n    /**\n     *  The recommended gas limit to send when calling this function.\n     */\n    readonly gas!: null | bigint;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, stateMutability: \"payable\" | \"nonpayable\" | \"view\" | \"pure\", inputs: ReadonlyArray<ParamType>, outputs: ReadonlyArray<ParamType>, gas: null | bigint) {\n        super(guard, \"function\", name, inputs);\n        Object.defineProperty(this, internal, { value: FunctionFragmentInternal });\n        outputs = Object.freeze(outputs.slice());\n        const constant = (stateMutability === \"view\" || stateMutability === \"pure\");\n        const payable = (stateMutability === \"payable\");\n        defineProperties<FunctionFragment>(this, { constant, gas, outputs, payable, stateMutability });\n    }\n\n    /**\n     *  The Function selector.\n     */\n    get selector(): string {\n        return id(this.format(\"sighash\")).substring(0, 10);\n    }\n\n    /**\n     *  Returns a string representation of this function as %%format%%.\n     */\n    format(format?: FormatType): string {\n        if (format == null) { format = \"sighash\"; }\n        if (format === \"json\") {\n            return JSON.stringify({\n                type: \"function\",\n                name: this.name,\n                constant: this.constant,\n                stateMutability: ((this.stateMutability !== \"nonpayable\") ? this.stateMutability: undefined),\n                payable: this.payable,\n                gas: ((this.gas != null) ? this.gas: undefined),\n                inputs: this.inputs.map((i) => JSON.parse(i.format(format))),\n                outputs: this.outputs.map((o) => JSON.parse(o.format(format))),\n            });\n        }\n\n        const result: Array<string> = [];\n\n        if (format !== \"sighash\") { result.push(\"function\"); }\n\n        result.push(this.name + joinParams(format, this.inputs));\n\n        if (format !== \"sighash\") {\n            if (this.stateMutability !== \"nonpayable\") {\n                result.push(this.stateMutability);\n            }\n\n            if (this.outputs && this.outputs.length) {\n                result.push(\"returns\");\n                result.push(joinParams(format, this.outputs));\n            }\n\n            if (this.gas != null) { result.push(`@${ this.gas.toString() }`); }\n        }\n        return result.join(\" \");\n    }\n\n    /**\n     *  Return the selector for a function with %%name%% and %%params%%.\n     */\n    static getSelector(name: string, params?: Array<any>): string {\n        params = (params || []).map((p) => ParamType.from(p));\n        const fragment = new FunctionFragment(_guard, name, \"view\", params, [ ], null);\n        return fragment.selector;\n    }\n\n    /**\n     *  Returns a new **FunctionFragment** for %%obj%%.\n     */\n    static from(obj: any): FunctionFragment {\n        if (FunctionFragment.isFragment(obj)) { return obj; }\n\n        if (typeof(obj) === \"string\") {\n            try {\n                return FunctionFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid function fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"function\", obj);\n            const inputs = consumeParams(obj);\n            const mutability = consumeMutability(obj);\n\n            let outputs: Array<ParamType> = [ ];\n            if (consumeKeywords(obj, setify([ \"returns\" ])).has(\"returns\")) {\n                outputs = consumeParams(obj);\n            }\n\n            const gas = consumeGas(obj);\n\n            consumeEoi(obj);\n\n            return new FunctionFragment(_guard, name, mutability, inputs, outputs, gas);\n        }\n\n        let stateMutability = obj.stateMutability;\n\n        // Use legacy Solidity ABI logic if stateMutability is missing\n        if (stateMutability == null) {\n            stateMutability = \"payable\";\n\n            if (typeof(obj.constant) === \"boolean\") {\n                stateMutability = \"view\";\n                if (!obj.constant) {\n                    stateMutability = \"payable\"\n                    if (typeof(obj.payable) === \"boolean\" && !obj.payable) {\n                        stateMutability = \"nonpayable\";\n                    }\n                }\n            } else if (typeof(obj.payable) === \"boolean\" && !obj.payable) {\n                stateMutability = \"nonpayable\";\n            }\n        }\n\n        // @TODO: verifyState for stateMutability (e.g. throw if\n        //        payable: false but stateMutability is \"nonpayable\")\n\n        return new FunctionFragment(_guard, obj.name, stateMutability,\n             obj.inputs ? obj.inputs.map(ParamType.from): [ ],\n             obj.outputs ? obj.outputs.map(ParamType.from): [ ],\n             (obj.gas != null) ? obj.gas: null);\n    }\n\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **FunctionFragment**.\n     */\n    static isFragment(value: any): value is FunctionFragment {\n        return (value && value[internal] === FunctionFragmentInternal);\n    }\n}\n\n/**\n *  A Fragment which represents a structure.\n */\nexport class StructFragment extends NamedFragment {\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, name: string, inputs: ReadonlyArray<ParamType>) {\n        super(guard, \"struct\", name, inputs);\n        Object.defineProperty(this, internal, { value: StructFragmentInternal });\n    }\n\n    /**\n     *  Returns a string representation of this struct as %%format%%.\n     */\n    format(): string {\n        throw new Error(\"@TODO\");\n    }\n\n    /**\n     *  Returns a new **StructFragment** for %%obj%%.\n     */\n    static from(obj: any): StructFragment {\n        if (typeof(obj) === \"string\") {\n            try {\n                return StructFragment.from(lex(obj));\n            } catch (error) {\n                assertArgument(false, \"invalid struct fragment\", \"obj\", obj);\n            }\n\n        } else if (obj instanceof TokenString) {\n            const name = consumeName(\"struct\", obj);\n            const inputs = consumeParams(obj);\n            consumeEoi(obj);\n            return new StructFragment(_guard, name, inputs);\n        }\n\n        return new StructFragment(_guard, obj.name, obj.inputs ? obj.inputs.map(ParamType.from): [ ]);\n    }\n\n// @TODO: fix this return type\n    /**\n     *  Returns ``true`` and provides a type guard if %%value%% is a\n     *  **StructFragment**.\n     */\n    static isFragment(value: any): value is FunctionFragment {\n        return (value && value[internal] === StructFragmentInternal);\n    }\n}\n\n", "/**\n *  When sending values to or receiving values from a [[Contract]], the\n *  data is generally encoded using the [ABI standard](link-solc-abi).\n *\n *  The AbiCoder provides a utility to encode values to ABI data and\n *  decode values from ABI data.\n *\n *  Most of the time, developers should favour the [[Contract]] class,\n *  which further abstracts a lot of the finer details of ABI data.\n *\n *  @_section api/abi/abi-coder:ABI Encoding\n */\n\n// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI\n\nimport { assertArgumentCount, assertArgument } from \"../utils/index.js\";\n\nimport { Coder, Reader, Result, Writer } from \"./coders/abstract-coder.js\";\nimport { AddressCoder } from \"./coders/address.js\";\nimport { ArrayCoder } from \"./coders/array.js\";\nimport { BooleanCoder } from \"./coders/boolean.js\";\nimport { BytesCoder } from \"./coders/bytes.js\";\nimport { FixedBytesCoder } from \"./coders/fixed-bytes.js\";\nimport { NullCoder } from \"./coders/null.js\";\nimport { NumberCoder } from \"./coders/number.js\";\nimport { StringCoder } from \"./coders/string.js\";\nimport { TupleCoder } from \"./coders/tuple.js\";\nimport { ParamType } from \"./fragments.js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { getBytes, hexlify, makeError } from \"../utils/index.js\";\n\nimport type {\n    BytesLike,\n    CallExceptionAction, CallExceptionError, CallExceptionTransaction\n} from \"../utils/index.js\";\n\n// https://docs.soliditylang.org/en/v0.8.17/control-structures.html\nconst PanicReasons: Map<number, string> = new Map();\nPanicReasons.set(0x00, \"GENERIC_PANIC\");\nPanicReasons.set(0x01, \"ASSERT_FALSE\");\nPanicReasons.set(0x11, \"OVERFLOW\");\nPanicReasons.set(0x12, \"DIVIDE_BY_ZERO\");\nPanicReasons.set(0x21, \"ENUM_RANGE_ERROR\");\nPanicReasons.set(0x22, \"BAD_STORAGE_DATA\");\nPanicReasons.set(0x31, \"STACK_UNDERFLOW\");\nPanicReasons.set(0x32, \"ARRAY_RANGE_ERROR\");\nPanicReasons.set(0x41, \"OUT_OF_MEMORY\");\nPanicReasons.set(0x51, \"UNINITIALIZED_FUNCTION_CALL\");\n\nconst paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);\nconst paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);\n\n\nlet defaultCoder: null | AbiCoder = null;\nlet defaultMaxInflation = 1024;\n\nfunction getBuiltinCallException(action: CallExceptionAction, tx: { to?: null | string, from?: null | string, data?: string }, data: null | BytesLike, abiCoder: AbiCoder): CallExceptionError {\n    let message = \"missing revert data\";\n\n    let reason: null | string = null;\n    const invocation = null;\n    let revert: null | { signature: string, name: string, args: Array<any> } = null;\n\n    if (data) {\n        message = \"execution reverted\";\n\n        const bytes = getBytes(data);\n        data = hexlify(data);\n\n        if (bytes.length === 0) {\n            message += \" (no data present; likely require(false) occurred\";\n            reason = \"require(false)\";\n\n        } else if (bytes.length % 32 !== 4) {\n            message += \" (could not decode reason; invalid data length)\";\n\n        } else if (hexlify(bytes.slice(0, 4)) === \"0x08c379a0\") {\n            // Error(string)\n            try {\n                reason = abiCoder.decode([ \"string\" ], bytes.slice(4))[0]\n                revert = {\n                    signature: \"Error(string)\",\n                    name: \"Error\",\n                    args: [ reason ]\n                };\n                message += `: ${ JSON.stringify(reason) }`;\n\n            } catch (error) {\n                message += \" (could not decode reason; invalid string data)\";\n            }\n\n        } else if (hexlify(bytes.slice(0, 4)) === \"0x4e487b71\") {\n            // Panic(uint256)\n            try {\n                const code = Number(abiCoder.decode([ \"uint256\" ], bytes.slice(4))[0]);\n                revert = {\n                    signature: \"Panic(uint256)\",\n                    name: \"Panic\",\n                    args: [ code ]\n                };\n                reason = `Panic due to ${ PanicReasons.get(code) || \"UNKNOWN\" }(${ code })`;\n                message += `: ${ reason }`;\n            } catch (error) {\n                message += \" (could not decode panic code)\";\n            }\n        } else {\n            message += \" (unknown custom error)\";\n        }\n    }\n\n    const transaction: CallExceptionTransaction = {\n        to: (tx.to ? getAddress(tx.to): null),\n        data: (tx.data || \"0x\")\n    };\n    if (tx.from) { transaction.from = getAddress(tx.from); }\n\n    return makeError(message, \"CALL_EXCEPTION\", {\n        action, data, reason, transaction, invocation, revert\n    });\n}\n\n/**\n *  The **AbiCoder** is a low-level class responsible for encoding JavaScript\n *  values into binary data and decoding binary data into JavaScript values.\n */\nexport class AbiCoder {\n\n    #getCoder(param: ParamType): Coder {\n        if (param.isArray()) {\n            return new ArrayCoder(this.#getCoder(param.arrayChildren), param.arrayLength, param.name);\n        }\n\n        if (param.isTuple()) {\n            return new TupleCoder(param.components.map((c) => this.#getCoder(c)), param.name);\n        }\n\n        switch (param.baseType) {\n            case \"address\":\n                return new AddressCoder(param.name);\n            case \"bool\":\n                return new BooleanCoder(param.name);\n            case \"string\":\n                return new StringCoder(param.name);\n            case \"bytes\":\n                return new BytesCoder(param.name);\n            case \"\":\n                return new NullCoder(param.name);\n        }\n\n        // u?int[0-9]*\n        let match = param.type.match(paramTypeNumber);\n        if (match) {\n            let size = parseInt(match[2] || \"256\");\n            assertArgument(size !== 0 && size <= 256 && (size % 8) === 0,\n                \"invalid \" + match[1] + \" bit length\", \"param\", param);\n            return new NumberCoder(size / 8, (match[1] === \"int\"), param.name);\n        }\n\n        // bytes[0-9]+\n        match = param.type.match(paramTypeBytes);\n        if (match) {\n            let size = parseInt(match[1]);\n            assertArgument(size !== 0 && size <= 32, \"invalid bytes length\", \"param\", param);\n            return new FixedBytesCoder(size, param.name);\n        }\n\n        assertArgument(false, \"invalid type\", \"type\", param.type);\n    }\n\n    /**\n     *  Get the default values for the given %%types%%.\n     *\n     *  For example, a ``uint`` is by default ``0`` and ``bool``\n     *  is by default ``false``.\n     */\n    getDefaultValue(types: ReadonlyArray<string | ParamType>): Result {\n        const coders: Array<Coder> = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = new TupleCoder(coders, \"_\");\n        return coder.defaultValue();\n    }\n\n    /**\n     *  Encode the %%values%% as the %%types%% into ABI data.\n     *\n     *  @returns DataHexstring\n     */\n    encode(types: ReadonlyArray<string | ParamType>, values: ReadonlyArray<any>): string {\n        assertArgumentCount(values.length, types.length, \"types/values length mismatch\");\n\n        const coders = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = (new TupleCoder(coders, \"_\"));\n\n        const writer = new Writer();\n        coder.encode(writer, values);\n        return writer.data;\n    }\n\n    /**\n     *  Decode the ABI %%data%% as the %%types%% into values.\n     *\n     *  If %%loose%% decoding is enabled, then strict padding is\n     *  not enforced. Some older versions of Solidity incorrectly\n     *  padded event data emitted from ``external`` functions.\n     */\n    decode(types: ReadonlyArray<string | ParamType>, data: BytesLike, loose?: boolean): Result {\n        const coders: Array<Coder> = types.map((type) => this.#getCoder(ParamType.from(type)));\n        const coder = new TupleCoder(coders, \"_\");\n        return coder.decode(new Reader(data, loose, defaultMaxInflation));\n    }\n\n    static _setDefaultMaxInflation(value: number): void {\n        assertArgument(typeof(value) === \"number\" && Number.isInteger(value), \"invalid defaultMaxInflation factor\", \"value\", value);\n        defaultMaxInflation = value;\n    }\n\n    /**\n     *  Returns the shared singleton instance of a default [[AbiCoder]].\n     *\n     *  On the first call, the instance is created internally.\n     */\n    static defaultAbiCoder(): AbiCoder {\n        if (defaultCoder == null) {\n            defaultCoder = new AbiCoder();\n        }\n        return defaultCoder;\n    }\n\n    /**\n     *  Returns an ethers-compatible [[CallExceptionError]] Error for the given\n     *  result %%data%% for the [[CallExceptionAction]] %%action%% against\n     *  the Transaction %%tx%%.\n     */\n    static getBuiltinCallException(action: CallExceptionAction, tx: { to?: null | string, from?: null | string, data?: string }, data: null | BytesLike): CallExceptionError {\n        return getBuiltinCallException(action, tx, data, AbiCoder.defaultAbiCoder());\n    }\n}\n", "/**\n *  About bytes32 strings...\n *\n *  @_docloc: api/utils:Bytes32 Strings\n */\n\nimport {\n    getBytes, toUtf8Bytes, toUtf8String, zeroPadBytes\n} from \"../utils/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\n/**\n *  Encodes %%text%% as a Bytes32 string.\n */\nexport function encodeBytes32String(text: string): string {\n\n    // Get the bytes\n    const bytes = toUtf8Bytes(text);\n\n    // Check we have room for null-termination\n    if (bytes.length > 31) { throw new Error(\"bytes32 string must be less than 32 bytes\"); }\n\n    // Zero-pad (implicitly null-terminates)\n    return zeroPadBytes(bytes, 32);\n}\n\n/**\n *  Encodes the Bytes32-encoded %%bytes%% into a string.\n */\nexport function decodeBytes32String(_bytes: BytesLike): string {\n    const data = getBytes(_bytes, \"bytes\");\n\n    // Must be 32 bytes with a null-termination\n    if (data.length !== 32) { throw new Error(\"invalid bytes32 - not 32 bytes long\"); }\n    if (data[31] !== 0) { throw new Error(\"invalid bytes32 string - no null terminator\"); }\n\n    // Find the null termination\n    let length = 31;\n    while (data[length - 1] === 0) { length--; }\n\n    // Determine the string value\n    return toUtf8String(data.slice(0, length));\n}\n\n", "/**\n *  The Interface class is a low-level class that accepts an\n *  ABI and provides all the necessary functionality to encode\n *  and decode paramaters to and results from methods, events\n *  and errors.\n *\n *  It also provides several convenience methods to automatically\n *  search and find matching transactions and events to parse them.\n *\n *  @_subsection api/abi:Interfaces  [interfaces]\n */\n\nimport { keccak256 } from \"../crypto/index.js\"\nimport { id } from \"../hash/index.js\"\nimport {\n    concat, dataSlice, getBigInt, getBytes, getBytesCopy,\n    hexlify, zeroPadBytes, zeroPadValue, isHexString, defineProperties,\n    assertArgument, toBeHex, assert\n} from \"../utils/index.js\";\n\nimport { AbiCoder } from \"./abi-coder.js\";\nimport { checkResultErrors, Result } from \"./coders/abstract-coder.js\";\nimport {\n    ConstructorFragment, ErrorFragment, EventFragment, FallbackFragment,\n    Fragment, FunctionFragment, ParamType\n} from \"./fragments.js\";\nimport { Typed } from \"./typed.js\";\n\nimport type { BigNumberish, BytesLike, CallExceptionError, CallExceptionTransaction } from \"../utils/index.js\";\n\nimport type { JsonFragment } from \"./fragments.js\";\n\n\nexport { checkResultErrors, Result };\n\n/**\n *  When using the [[Interface-parseLog]] to automatically match a Log to its event\n *  for parsing, a **LogDescription** is returned.\n */\nexport class LogDescription {\n    /**\n     *  The matching fragment for the ``topic0``.\n     */\n    readonly fragment!: EventFragment;\n\n    /**\n     *  The name of the Event.\n     */\n    readonly name!: string;\n\n    /**\n     *  The full Event signature.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The topic hash for the Event.\n     */\n    readonly topic!: string;\n\n    /**\n     *  The arguments passed into the Event with ``emit``.\n     */\n    readonly args!: Result\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: EventFragment, topic: string, args: Result) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<LogDescription>(this, {\n            fragment, name, signature, topic, args\n        });\n    }\n}\n\n/**\n *  When using the [[Interface-parseTransaction]] to automatically match\n *  a transaction data to its function for parsing,\n *  a **TransactionDescription** is returned.\n */\nexport class TransactionDescription {\n    /**\n     *  The matching fragment from the transaction ``data``.\n     */\n    readonly fragment!: FunctionFragment;\n\n    /**\n     *  The name of the Function from the transaction ``data``.\n     */\n    readonly name!: string;\n\n    /**\n     *  The arguments passed to the Function from the transaction ``data``.\n     */\n    readonly args!: Result;\n\n    /**\n     *  The full Function signature from the transaction ``data``.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The selector for the Function from the transaction ``data``.\n     */\n    readonly selector!: string;\n\n    /**\n     *  The ``value`` (in wei) from the transaction.\n     */\n    readonly value!: bigint;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: FunctionFragment, selector: string, args: Result, value: bigint) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<TransactionDescription>(this, {\n            fragment, name, args, signature, selector, value\n        });\n    }\n}\n\n/**\n *  When using the [[Interface-parseError]] to automatically match an\n *  error for a call result for parsing, an **ErrorDescription** is returned.\n */\nexport class ErrorDescription {\n    /**\n     *  The matching fragment.\n     */\n    readonly fragment!: ErrorFragment;\n\n    /**\n     *  The name of the Error.\n     */\n    readonly name!: string;\n\n    /**\n     *  The arguments passed to the Error with ``revert``.\n     */\n    readonly args!: Result;\n\n    /**\n     *  The full Error signature.\n     */\n    readonly signature!: string;\n\n    /**\n     *  The selector for the Error.\n     */\n    readonly selector!: string;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(fragment: ErrorFragment, selector: string, args: Result) {\n        const name = fragment.name, signature = fragment.format();\n        defineProperties<ErrorDescription>(this, {\n            fragment, name, args, signature, selector\n        });\n    }\n}\n\n/**\n *  An **Indexed** is used as a value when a value that does not\n *  fit within a topic (i.e. not a fixed-length, 32-byte type). It\n *  is the ``keccak256`` of the value, and used for types such as\n *  arrays, tuples, bytes and strings.\n */\nexport class Indexed {\n    /**\n     *  The ``keccak256`` of the value logged.\n     */\n    readonly hash!: null | string;\n\n    /**\n     *  @_ignore:\n     */\n    readonly _isIndexed!: boolean;\n\n    /**\n     *  Returns ``true`` if %%value%% is an **Indexed**.\n     *\n     *  This provides a Type Guard for property access.\n     */\n    static isIndexed(value: any): value is Indexed {\n        return !!(value && value._isIndexed);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    constructor(hash: null | string) {\n        defineProperties<Indexed>(this, { hash, _isIndexed: true })\n    }\n}\n\ntype ErrorInfo = {\n    signature: string,\n    inputs: Array<string>,\n    name: string,\n    reason: (...args: Array<any>) => string;\n};\n\n// https://docs.soliditylang.org/en/v0.8.13/control-structures.html?highlight=panic#panic-via-assert-and-error-via-require\nconst PanicReasons: Record<string, string> = {\n    \"0\": \"generic panic\",\n    \"1\": \"assert(false)\",\n    \"17\": \"arithmetic overflow\",\n    \"18\": \"division or modulo by zero\",\n    \"33\": \"enum overflow\",\n    \"34\": \"invalid encoded storage byte array accessed\",\n    \"49\": \"out-of-bounds array access; popping on an empty array\",\n    \"50\": \"out-of-bounds access of an array or bytesN\",\n    \"65\": \"out of memory\",\n    \"81\": \"uninitialized function\",\n}\n\nconst BuiltinErrors: Record<string, ErrorInfo> = {\n    \"0x08c379a0\": {\n        signature: \"Error(string)\",\n        name: \"Error\",\n        inputs: [ \"string\" ],\n        reason: (message: string) => {\n            return `reverted with reason string ${ JSON.stringify(message) }`;\n        }\n    },\n    \"0x4e487b71\": {\n        signature: \"Panic(uint256)\",\n        name: \"Panic\",\n        inputs: [ \"uint256\" ],\n        reason: (code: bigint) => {\n            let reason = \"unknown panic code\";\n            if (code >= 0 && code <= 0xff && PanicReasons[code.toString()]) {\n                reason = PanicReasons[code.toString()];\n            }\n            return `reverted with panic code 0x${ code.toString(16) } (${ reason })`;\n        }\n    }\n}\n\n/*\nfunction wrapAccessError(property: string, error: Error): Error {\n    const wrap = new Error(`deferred error during ABI decoding triggered accessing ${ property }`);\n    (<any>wrap).error = error;\n    return wrap;\n}\n*/\n/*\nfunction checkNames(fragment: Fragment, type: \"input\" | \"output\", params: Array<ParamType>): void {\n    params.reduce((accum, param) => {\n        if (param.name) {\n            if (accum[param.name]) {\n                logger.throwArgumentError(`duplicate ${ type } parameter ${ JSON.stringify(param.name) } in ${ fragment.format(\"full\") }`, \"fragment\", fragment);\n            }\n            accum[param.name] = true;\n        }\n        return accum;\n    }, <{ [ name: string ]: boolean }>{ });\n}\n*/\n\n/**\n *  An **InterfaceAbi** may be any supported ABI format.\n *\n *  A string is expected to be a JSON string, which will be parsed\n *  using ``JSON.parse``. This means that the value **must** be a valid\n *  JSON string, with no stray commas, etc.\n *\n *  An array may contain any combination of:\n *  - Human-Readable fragments\n *  - Parsed JSON fragment\n *  - [[Fragment]] instances\n *\n *  A **Human-Readable Fragment** is a string which resembles a Solidity\n *  signature and is introduced in [this blog entry](link-ricmoo-humanreadableabi).\n *  For example, ``function balanceOf(address) view returns (uint)``.\n *\n *  A **Parsed JSON Fragment** is a JavaScript Object desribed in the\n *  [Solidity documentation](link-solc-jsonabi).\n */\nexport type InterfaceAbi = string | ReadonlyArray<Fragment | JsonFragment | string>;\n\n/**\n *  An Interface abstracts many of the low-level details for\n *  encoding and decoding the data on the blockchain.\n *\n *  An ABI provides information on how to encode data to send to\n *  a Contract, how to decode the results and events and how to\n *  interpret revert errors.\n *\n *  The ABI can be specified by [any supported format](InterfaceAbi).\n */\nexport class Interface {\n\n    /**\n     *  All the Contract ABI members (i.e. methods, events, errors, etc).\n     */\n    readonly fragments!: ReadonlyArray<Fragment>;\n\n    /**\n     *  The Contract constructor.\n     */\n    readonly deploy!: ConstructorFragment;\n\n    /**\n     *  The Fallback method, if any.\n     */\n    readonly fallback!: null | FallbackFragment;\n\n    /**\n     *  If receiving ether is supported.\n     */\n    readonly receive!: boolean;\n\n    #errors: Map<string, ErrorFragment>;\n    #events: Map<string, EventFragment>;\n    #functions: Map<string, FunctionFragment>;\n//    #structs: Map<string, StructFragment>;\n\n    #abiCoder: AbiCoder;\n\n    /**\n     *  Create a new Interface for the %%fragments%%.\n     */\n    constructor(fragments: InterfaceAbi) {\n        let abi: ReadonlyArray<Fragment | JsonFragment | string> = [ ];\n        if (typeof(fragments) === \"string\") {\n            abi = JSON.parse(fragments);\n        } else {\n            abi = fragments;\n        }\n\n        this.#functions = new Map();\n        this.#errors = new Map();\n        this.#events = new Map();\n//        this.#structs = new Map();\n\n\n        const frags: Array<Fragment> = [ ];\n        for (const a of abi) {\n            try {\n                frags.push(Fragment.from(a));\n            } catch (error: any) {\n                console.log(`[Warning] Invalid Fragment ${ JSON.stringify(a) }:`, error.message);\n            }\n        }\n\n        defineProperties<Interface>(this, {\n            fragments: Object.freeze(frags)\n        });\n\n        let fallback: null | FallbackFragment = null;\n        let receive = false;\n\n        this.#abiCoder = this.getAbiCoder();\n\n        // Add all fragments by their signature\n        this.fragments.forEach((fragment, index) => {\n            let bucket: Map<string, Fragment>;\n            switch (fragment.type) {\n                case \"constructor\":\n                    if (this.deploy) {\n                        console.log(\"duplicate definition - constructor\");\n                        return;\n                    }\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    defineProperties<Interface>(this, { deploy: <ConstructorFragment>fragment });\n                    return;\n\n                case \"fallback\":\n                    if (fragment.inputs.length === 0) {\n                        receive = true;\n                    } else {\n                        assertArgument(!fallback || (<FallbackFragment>fragment).payable !== fallback.payable,\n                            \"conflicting fallback fragments\", `fragments[${ index }]`, fragment);\n                        fallback = <FallbackFragment>fragment;\n                        receive = fallback.payable;\n                    }\n                    return;\n\n                case \"function\":\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    //checkNames(fragment, \"output\", (<FunctionFragment>fragment).outputs);\n                    bucket = this.#functions;\n                    break;\n\n                case \"event\":\n                    //checkNames(fragment, \"input\", fragment.inputs);\n                    bucket = this.#events;\n                    break;\n\n                case \"error\":\n                    bucket = this.#errors;\n                    break;\n\n                default:\n                    return;\n            }\n\n            // Two identical entries; ignore it\n            const signature = fragment.format();\n            if (bucket.has(signature)) { return; }\n\n            bucket.set(signature, fragment);\n        });\n\n        // If we do not have a constructor add a default\n        if (!this.deploy) {\n            defineProperties<Interface>(this, {\n                deploy: ConstructorFragment.from(\"constructor()\")\n            });\n        }\n\n        defineProperties<Interface>(this, { fallback, receive });\n    }\n\n    /**\n     *  Returns the entire Human-Readable ABI, as an array of\n     *  signatures, optionally as %%minimal%% strings, which\n     *  removes parameter names and unneceesary spaces.\n     */\n    format(minimal?: boolean): Array<string> {\n        const format = (minimal ? \"minimal\": \"full\");\n        const abi = this.fragments.map((f) => f.format(format));\n        return abi;\n    }\n\n    /**\n     *  Return the JSON-encoded ABI. This is the format Solidiy\n     *  returns.\n     */\n    formatJson(): string {\n        const abi = this.fragments.map((f) => f.format(\"json\"));\n\n        // We need to re-bundle the JSON fragments a bit\n        return JSON.stringify(abi.map((j) => JSON.parse(j)));\n    }\n\n    /**\n     *  The ABI coder that will be used to encode and decode binary\n     *  data.\n     */\n    getAbiCoder(): AbiCoder {\n        return AbiCoder.defaultAbiCoder();\n    }\n\n    // Find a function definition by any means necessary (unless it is ambiguous)\n    #getFunction(key: string, values: null | Array<any | Typed>, forceUnique: boolean): null | FunctionFragment {\n\n        // Selector\n        if (isHexString(key)) {\n            const selector = key.toLowerCase();\n            for (const fragment of this.#functions.values()) {\n                if (selector === fragment.selector) { return fragment; }\n            }\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<FunctionFragment> = [ ];\n            for (const [ name, fragment ] of this.#functions) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (values) {\n                const lastValue = (values.length > 0) ? values[values.length - 1]: null;\n\n                let valueLength = values.length;\n                let allowOptions = true;\n                if (Typed.isTyped(lastValue) && lastValue.type === \"overrides\") {\n                    allowOptions = false;\n                    valueLength--;\n                }\n\n                // Remove all matches that don't have a compatible length. The args\n                // may contain an overrides, so the match may have n or n - 1 parameters\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs.length;\n                    if (inputs !== valueLength && (!allowOptions || inputs !== valueLength - 1)) {\n                        matching.splice(i, 1);\n                    }\n                }\n\n                // Remove all matches that don't match the Typed signature\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs;\n                    for (let j = 0; j < values.length; j++) {\n                        // Not a typed value\n                        if (!Typed.isTyped(values[j])) { continue; }\n\n                        // We are past the inputs\n                        if (j >= inputs.length) {\n                            if (values[j].type === \"overrides\") { continue; }\n                            matching.splice(i, 1);\n                            break;\n                        }\n\n                        // Make sure the value type matches the input type\n                        if (values[j].type !== inputs[j].baseType) {\n                            matching.splice(i, 1);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            // We found a single matching signature with an overrides, but the\n            // last value is something that cannot possibly be an options\n            if (matching.length === 1 && values && values.length !== matching[0].inputs.length) {\n                const lastArg = values[values.length - 1];\n                if (lastArg == null || Array.isArray(lastArg) || typeof(lastArg) !== \"object\") {\n                    matching.splice(0, 1);\n                }\n            }\n\n            if (matching.length === 0) { return null; }\n\n            if (matching.length > 1 && forceUnique) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous function description (i.e. matches ${ matchStr })`, \"key\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        const result = this.#functions.get(FunctionFragment.from(key).format());\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Get the function name for %%key%%, which may be a function selector,\n     *  function name or function signature that belongs to the ABI.\n     */\n    getFunctionName(key: string): string {\n        const fragment = this.#getFunction(key, null, false);\n        assertArgument(fragment, \"no matching function\", \"key\", key);\n        return fragment.name;\n    }\n\n    /**\n     *  Returns true if %%key%% (a function selector, function name or\n     *  function signature) is present in the ABI.\n     *\n     *  In the case of a function name, the name may be ambiguous, so\n     *  accessing the [[FunctionFragment]] may require refinement.\n     */\n    hasFunction(key: string): boolean {\n        return !!this.#getFunction(key, null, false);\n    }\n\n    /**\n     *  Get the [[FunctionFragment]] for %%key%%, which may be a function\n     *  selector, function name or function signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple functions match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single function in\n     *  the ABI, this will throw.\n     */\n    getFunction(key: string, values?: Array<any | Typed>): null | FunctionFragment {\n        return this.#getFunction(key, values || null, true);\n    }\n\n    /**\n     *  Iterate over all functions, calling %%callback%%, sorted by their name.\n     */\n    forEachFunction(callback: (func: FunctionFragment, index: number) => void): void {\n        const names = Array.from(this.#functions.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<FunctionFragment>(this.#functions.get(name)), i);\n        }\n    }\n\n\n    // Find an event definition by any means necessary (unless it is ambiguous)\n    #getEvent(key: string, values: null | Array<null | any | Typed>, forceUnique: boolean): null | EventFragment {\n\n        // EventTopic\n        if (isHexString(key)) {\n            const eventTopic = key.toLowerCase();\n            for (const fragment of this.#events.values()) {\n                if (eventTopic === fragment.topicHash) { return fragment; }\n            }\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<EventFragment> = [ ];\n            for (const [ name, fragment ] of this.#events) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (values) {\n                // Remove all matches that don't have a compatible length.\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    if (matching[i].inputs.length < values.length) {\n                        matching.splice(i, 1);\n                    }\n                }\n\n                // Remove all matches that don't match the Typed signature\n                for (let i = matching.length - 1; i >= 0; i--) {\n                    const inputs = matching[i].inputs;\n                    for (let j = 0; j < values.length; j++) {\n                        // Not a typed value\n                        if (!Typed.isTyped(values[j])) { continue; }\n\n                        // Make sure the value type matches the input type\n                        if (values[j].type !== inputs[j].baseType) {\n                            matching.splice(i, 1);\n                            break;\n                        }\n                    }\n                }\n            }\n\n            if (matching.length === 0) { return null; }\n\n            if (matching.length > 1 && forceUnique) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous event description (i.e. matches ${ matchStr })`, \"key\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        const result = this.#events.get(EventFragment.from(key).format());\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Get the event name for %%key%%, which may be a topic hash,\n     *  event name or event signature that belongs to the ABI.\n     */\n    getEventName(key: string): string {\n        const fragment = this.#getEvent(key, null, false);\n        assertArgument(fragment, \"no matching event\", \"key\", key);\n\n        return fragment.name;\n    }\n\n    /**\n     *  Returns true if %%key%% (an event topic hash, event name or\n     *  event signature) is present in the ABI.\n     *\n     *  In the case of an event name, the name may be ambiguous, so\n     *  accessing the [[EventFragment]] may require refinement.\n     */\n    hasEvent(key: string): boolean {\n        return !!this.#getEvent(key, null, false);\n    }\n\n    /**\n     *  Get the [[EventFragment]] for %%key%%, which may be a topic hash,\n     *  event name or event signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple events match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single event in\n     *  the ABI, this will throw.\n     */\n    getEvent(key: string, values?: Array<any | Typed>): null | EventFragment {\n        return this.#getEvent(key, values || null, true)\n    }\n\n    /**\n     *  Iterate over all events, calling %%callback%%, sorted by their name.\n     */\n    forEachEvent(callback: (func: EventFragment, index: number) => void): void {\n        const names = Array.from(this.#events.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<EventFragment>(this.#events.get(name)), i);\n        }\n    }\n\n    /**\n     *  Get the [[ErrorFragment]] for %%key%%, which may be an error\n     *  selector, error name or error signature that belongs to the ABI.\n     *\n     *  If %%values%% is provided, it will use the Typed API to handle\n     *  ambiguous cases where multiple errors match by name.\n     *\n     *  If the %%key%% and %%values%% do not refine to a single error in\n     *  the ABI, this will throw.\n     */\n    getError(key: string, values?: Array<any | Typed>): null | ErrorFragment {\n        if (isHexString(key)) {\n            const selector = key.toLowerCase();\n\n            if (BuiltinErrors[selector]) {\n                return ErrorFragment.from(BuiltinErrors[selector].signature);\n            }\n\n            for (const fragment of this.#errors.values()) {\n                if (selector === fragment.selector) { return fragment; }\n            }\n\n            return null;\n        }\n\n        // It is a bare name, look up the function (will return null if ambiguous)\n        if (key.indexOf(\"(\") === -1) {\n            const matching: Array<ErrorFragment> = [ ];\n            for (const [ name, fragment ] of this.#errors) {\n                if (name.split(\"(\"/* fix:) */)[0] === key) { matching.push(fragment); }\n            }\n\n            if (matching.length === 0) {\n                if (key === \"Error\") { return ErrorFragment.from(\"error Error(string)\"); }\n                if (key === \"Panic\") { return ErrorFragment.from(\"error Panic(uint256)\"); }\n                return null;\n            } else if (matching.length > 1) {\n                const matchStr = matching.map((m) => JSON.stringify(m.format())).join(\", \");\n                assertArgument(false, `ambiguous error description (i.e. ${ matchStr })`, \"name\", key);\n            }\n\n            return matching[0];\n        }\n\n        // Normalize the signature and lookup the function\n        key = ErrorFragment.from(key).format()\n        if (key === \"Error(string)\") { return ErrorFragment.from(\"error Error(string)\"); }\n        if (key === \"Panic(uint256)\") { return ErrorFragment.from(\"error Panic(uint256)\"); }\n\n        const result = this.#errors.get(key);\n        if (result) { return result; }\n\n        return null;\n    }\n\n    /**\n     *  Iterate over all errors, calling %%callback%%, sorted by their name.\n     */\n    forEachError(callback: (func: ErrorFragment, index: number) => void): void {\n        const names = Array.from(this.#errors.keys());\n        names.sort((a, b) => a.localeCompare(b));\n        for (let i = 0; i < names.length; i++) {\n            const name = names[i];\n            callback(<ErrorFragment>(this.#errors.get(name)), i);\n        }\n    }\n\n    // Get the 4-byte selector used by Solidity to identify a function\n        /*\n    getSelector(fragment: ErrorFragment | FunctionFragment): string {\n        if (typeof(fragment) === \"string\") {\n            const matches: Array<Fragment> = [ ];\n\n            try { matches.push(this.getFunction(fragment)); } catch (error) { }\n            try { matches.push(this.getError(<string>fragment)); } catch (_) { }\n\n            if (matches.length === 0) {\n                logger.throwArgumentError(\"unknown fragment\", \"key\", fragment);\n            } else if (matches.length > 1) {\n                logger.throwArgumentError(\"ambiguous fragment matches function and error\", \"key\", fragment);\n            }\n\n            fragment = matches[0];\n        }\n\n        return dataSlice(id(fragment.format()), 0, 4);\n    }\n        */\n\n    // Get the 32-byte topic hash used by Solidity to identify an event\n    /*\n    getEventTopic(fragment: EventFragment): string {\n        //if (typeof(fragment) === \"string\") { fragment = this.getEvent(eventFragment); }\n        return id(fragment.format());\n    }\n    */\n\n\n    _decodeParams(params: ReadonlyArray<ParamType>, data: BytesLike): Result {\n        return this.#abiCoder.decode(params, data)\n    }\n\n    _encodeParams(params: ReadonlyArray<ParamType>, values: ReadonlyArray<any>): string {\n        return this.#abiCoder.encode(params, values)\n    }\n\n    /**\n     *  Encodes a ``tx.data`` object for deploying the Contract with\n     *  the %%values%% as the constructor arguments.\n     */\n    encodeDeploy(values?: ReadonlyArray<any>): string {\n        return this._encodeParams(this.deploy.inputs, values || [ ]);\n    }\n\n    /**\n     *  Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n     *  specified error (see [[getError]] for valid values for\n     *  %%key%%).\n     *\n     *  Most developers should prefer the [[parseCallResult]] method instead,\n     *  which will automatically detect a ``CALL_EXCEPTION`` and throw the\n     *  corresponding error.\n     */\n    decodeErrorResult(fragment: ErrorFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getError(fragment);\n            assertArgument(f, \"unknown error\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        assertArgument(dataSlice(data, 0, 4) === fragment.selector,\n            `data signature does not match error ${ fragment.name }.`, \"data\", data);\n\n        return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n    }\n\n    /**\n     *  Encodes the transaction revert data for a call result that\n     *  reverted from the the Contract with the sepcified %%error%%\n     *  (see [[getError]] for valid values for %%fragment%%) with the %%values%%.\n     *\n     *  This is generally not used by most developers, unless trying to mock\n     *  a result from a Contract.\n     */\n    encodeErrorResult(fragment: ErrorFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getError(fragment);\n            assertArgument(f, \"unknown error\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        return concat([\n            fragment.selector,\n            this._encodeParams(fragment.inputs, values || [ ])\n        ]);\n    }\n\n    /**\n     *  Decodes the %%data%% from a transaction ``tx.data`` for\n     *  the function specified (see [[getFunction]] for valid values\n     *  for %%fragment%%).\n     *\n     *  Most developers should prefer the [[parseTransaction]] method\n     *  instead, which will automatically detect the fragment.\n     */\n    decodeFunctionData(fragment: FunctionFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        assertArgument(dataSlice(data, 0, 4) === fragment.selector,\n            `data signature does not match function ${ fragment.name }.`, \"data\", data);\n\n        return this._decodeParams(fragment.inputs, dataSlice(data, 4));\n    }\n\n    /**\n     *  Encodes the ``tx.data`` for a transaction that calls the function\n     *  specified (see [[getFunction]] for valid values for %%fragment%%) with\n     *  the %%values%%.\n     */\n    encodeFunctionData(fragment: FunctionFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        return concat([\n            fragment.selector,\n            this._encodeParams(fragment.inputs, values || [ ])\n        ]);\n    }\n\n    /**\n     *  Decodes the result %%data%% (e.g. from an ``eth_call``) for the\n     *  specified function (see [[getFunction]] for valid values for\n     *  %%key%%).\n     *\n     *  Most developers should prefer the [[parseCallResult]] method instead,\n     *  which will automatically detect a ``CALL_EXCEPTION`` and throw the\n     *  corresponding error.\n     */\n    decodeFunctionResult(fragment: FunctionFragment | string, data: BytesLike): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n\n        let message = \"invalid length for result data\";\n\n        const bytes = getBytesCopy(data);\n        if ((bytes.length % 32) === 0) {\n            try {\n                return this.#abiCoder.decode(fragment.outputs, bytes);\n            } catch (error) {\n                message = \"could not decode result data\";\n            }\n        }\n\n        // Call returned data with no error, but the data is junk\n        assert(false, message, \"BAD_DATA\", {\n            value: hexlify(bytes),\n            info: { method: fragment.name, signature: fragment.format() }\n        });\n    }\n\n    makeError(_data: BytesLike, tx: CallExceptionTransaction): CallExceptionError {\n        const data = getBytes(_data, \"data\");\n\n        const error = AbiCoder.getBuiltinCallException(\"call\", tx, data);\n\n        // Not a built-in error; try finding a custom error\n        const customPrefix = \"execution reverted (unknown custom error)\";\n        if (error.message.startsWith(customPrefix)) {\n            const selector = hexlify(data.slice(0, 4));\n\n            const ef = this.getError(selector);\n            if (ef) {\n                try {\n                    const args = this.#abiCoder.decode(ef.inputs, data.slice(4));\n                    error.revert = {\n                        name: ef.name, signature: ef.format(), args\n                    };\n                    error.reason = error.revert.signature;\n                    error.message = `execution reverted: ${ error.reason }`\n                 } catch (e) {\n                    error.message = `execution reverted (coult not decode custom error)`\n                }\n            }\n        }\n\n        // Add the invocation, if available\n        const parsed = this.parseTransaction(tx);\n        if (parsed) {\n            error.invocation = {\n                method: parsed.name,\n                signature: parsed.signature,\n                args: parsed.args\n            };\n        }\n\n        return error;\n    }\n\n    /**\n     *  Encodes the result data (e.g. from an ``eth_call``) for the\n     *  specified function (see [[getFunction]] for valid values\n     *  for %%fragment%%) with %%values%%.\n     *\n     *  This is generally not used by most developers, unless trying to mock\n     *  a result from a Contract.\n     */\n    encodeFunctionResult(fragment: FunctionFragment | string, values?: ReadonlyArray<any>): string {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getFunction(fragment);\n            assertArgument(f, \"unknown function\", \"fragment\", fragment);\n            fragment = f;\n        }\n        return hexlify(this.#abiCoder.encode(fragment.outputs, values || [ ]));\n    }\n/*\n    spelunk(inputs: Array<ParamType>, values: ReadonlyArray<any>, processfunc: (type: string, value: any) => Promise<any>): Promise<Array<any>> {\n        const promises: Array<Promise<>> = [ ];\n        const process = function(type: ParamType, value: any): any {\n            if (type.baseType === \"array\") {\n                return descend(type.child\n            }\n            if (type. === \"address\") {\n            }\n        };\n\n        const descend = function (inputs: Array<ParamType>, values: ReadonlyArray<any>) {\n            if (inputs.length !== values.length) { throw new Error(\"length mismatch\"); }\n            \n        };\n\n        const result: Array<any> = [ ];\n        values.forEach((value, index) => {\n            if (value == null) {\n                topics.push(null);\n            } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n                logger.throwArgumentError(\"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n            } else if (Array.isArray(value)) {\n                topics.push(value.map((value) => encodeTopic(param, value)));\n            } else {\n                topics.push(encodeTopic(param, value));\n            }\n        });\n    }\n*/\n    // Create the filter for the event with search criteria (e.g. for eth_filterLog)\n    encodeFilterTopics(fragment: EventFragment | string, values: ReadonlyArray<any>): Array<null | string | Array<string>> {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        assert(values.length <= fragment.inputs.length, `too many arguments for ${ fragment.format() }`,\n            \"UNEXPECTED_ARGUMENT\", { count: values.length, expectedCount: fragment.inputs.length })\n\n        const topics: Array<null | string | Array<string>> = [];\n        if (!fragment.anonymous) { topics.push(fragment.topicHash); }\n\n        // @TODO: Use the coders for this; to properly support tuples, etc.\n        const encodeTopic = (param: ParamType, value: any): string => {\n            if (param.type === \"string\") {\n                 return id(value);\n            } else if (param.type === \"bytes\") {\n                 return keccak256(hexlify(value));\n            }\n\n            if (param.type === \"bool\" && typeof(value) === \"boolean\") {\n                value = (value ? \"0x01\": \"0x00\");\n            } else if (param.type.match(/^u?int/)) {\n                value = toBeHex(value);  // @TODO: Should this toTwos??\n            } else if (param.type.match(/^bytes/)) {\n                value = zeroPadBytes(value, 32);\n            } else if (param.type === \"address\") {\n                // Check addresses are valid\n                this.#abiCoder.encode( [ \"address\" ], [ value ]);\n            }\n\n            return zeroPadValue(hexlify(value), 32);\n        };\n\n        values.forEach((value, index) => {\n\n            const param = (<EventFragment>fragment).inputs[index];\n\n            if (!param.indexed) {\n                assertArgument(value == null,\n                    \"cannot filter non-indexed parameters; must be null\", (\"contract.\" + param.name), value);\n                return;\n            }\n\n            if (value == null) {\n                topics.push(null);\n            } else if (param.baseType === \"array\" || param.baseType === \"tuple\") {\n                assertArgument(false, \"filtering with tuples or arrays not supported\", (\"contract.\" + param.name), value);\n            } else if (Array.isArray(value)) {\n                topics.push(value.map((value) => encodeTopic(param, value)));\n            } else {\n                topics.push(encodeTopic(param, value));\n            }\n        });\n\n        // Trim off trailing nulls\n        while (topics.length && topics[topics.length - 1] === null) {\n            topics.pop();\n        }\n\n        return topics;\n    }\n\n    encodeEventLog(fragment: EventFragment | string, values: ReadonlyArray<any>): { data: string, topics: Array<string> } {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        const topics: Array<string> = [ ];\n\n        const dataTypes: Array<ParamType> = [ ];\n        const dataValues: Array<string> = [ ];\n\n        if (!fragment.anonymous) {\n            topics.push(fragment.topicHash);\n        }\n\n        assertArgument(values.length === fragment.inputs.length,\n            \"event arguments/values mismatch\", \"values\", values);\n\n        fragment.inputs.forEach((param, index) => {\n            const value = values[index];\n            if (param.indexed) {\n                if (param.type === \"string\") {\n                    topics.push(id(value))\n                } else if (param.type === \"bytes\") {\n                    topics.push(keccak256(value))\n                } else if (param.baseType === \"tuple\" || param.baseType === \"array\") {\n                    // @TODO\n                    throw new Error(\"not implemented\");\n                } else {\n                    topics.push(this.#abiCoder.encode([ param.type] , [ value ]));\n                }\n            } else {\n                dataTypes.push(param);\n                dataValues.push(value);\n            }\n        });\n\n        return {\n            data: this.#abiCoder.encode(dataTypes , dataValues),\n            topics: topics\n        };\n    }\n\n    // Decode a filter for the event and the search criteria\n    decodeEventLog(fragment: EventFragment | string, data: BytesLike, topics?: ReadonlyArray<string>): Result {\n        if (typeof(fragment) === \"string\") {\n            const f = this.getEvent(fragment);\n            assertArgument(f, \"unknown event\", \"eventFragment\", fragment);\n            fragment = f;\n        }\n\n        if (topics != null && !fragment.anonymous) {\n            const eventTopic = fragment.topicHash;\n            assertArgument(isHexString(topics[0], 32) && topics[0].toLowerCase() === eventTopic,\n                \"fragment/topic mismatch\", \"topics[0]\", topics[0]);\n            topics = topics.slice(1);\n        }\n\n        const indexed: Array<ParamType> = [];\n        const nonIndexed: Array<ParamType> = [];\n        const dynamic: Array<boolean> = [];\n\n        fragment.inputs.forEach((param, index) => {\n            if (param.indexed) {\n                if (param.type === \"string\" || param.type === \"bytes\" || param.baseType === \"tuple\" || param.baseType === \"array\") {\n                    indexed.push(ParamType.from({ type: \"bytes32\", name: param.name }));\n                    dynamic.push(true);\n                } else {\n                    indexed.push(param);\n                    dynamic.push(false);\n                }\n            } else {\n                nonIndexed.push(param);\n                dynamic.push(false);\n            }\n        });\n\n        const resultIndexed = (topics != null) ? this.#abiCoder.decode(indexed, concat(topics)): null;\n        const resultNonIndexed = this.#abiCoder.decode(nonIndexed, data, true);\n\n        //const result: (Array<any> & { [ key: string ]: any }) = [ ];\n        const values: Array<any> = [ ];\n        const keys: Array<null | string> = [ ];\n        let nonIndexedIndex = 0, indexedIndex = 0;\n        fragment.inputs.forEach((param, index) => {\n            let value: null | Indexed | Error = null;\n            if (param.indexed) {\n                if (resultIndexed == null) {\n                    value = new Indexed(null);\n\n                } else if (dynamic[index]) {\n                    value = new Indexed(resultIndexed[indexedIndex++]);\n\n                } else {\n                    try {\n                        value = resultIndexed[indexedIndex++];\n                    } catch (error: any) {\n                        value = error;\n                    }\n                }\n            } else {\n                try {\n                    value = resultNonIndexed[nonIndexedIndex++];\n                } catch (error: any) {\n                    value = error;\n                }\n            }\n\n            values.push(value);\n            keys.push(param.name || null);\n        });\n\n        return Result.fromItems(values, keys);\n    }\n\n    /**\n     *  Parses a transaction, finding the matching function and extracts\n     *  the parameter values along with other useful function details.\n     *\n     *  If the matching function cannot be found, return null.\n     */\n    parseTransaction(tx: { data: string, value?: BigNumberish }): null | TransactionDescription {\n        const data = getBytes(tx.data, \"tx.data\");\n        const value = getBigInt((tx.value != null) ? tx.value: 0, \"tx.value\");\n\n        const fragment = this.getFunction(hexlify(data.slice(0, 4)));\n\n        if (!fragment) { return null; }\n\n        const args = this.#abiCoder.decode(fragment.inputs, data.slice(4));\n        return new TransactionDescription(fragment, fragment.selector, args, value);\n    }\n\n    parseCallResult(data: BytesLike): Result {\n        throw new Error(\"@TODO\");\n    }\n\n    /**\n     *  Parses a receipt log, finding the matching event and extracts\n     *  the parameter values along with other useful event details.\n     *\n     *  If the matching event cannot be found, returns null.\n     */\n    parseLog(log: { topics: ReadonlyArray<string>, data: string}): null | LogDescription {\n        const fragment = this.getEvent(log.topics[0]);\n\n        if (!fragment || fragment.anonymous) { return null; }\n\n        // @TODO: If anonymous, and the only method, and the input count matches, should we parse?\n        //        Probably not, because just because it is the only event in the ABI does\n        //        not mean we have the full ABI; maybe just a fragment?\n\n\n       return new LogDescription(fragment, fragment.topicHash, this.decodeEventLog(fragment, log.data, log.topics));\n    }\n\n    /**\n     *  Parses a revert data, finding the matching error and extracts\n     *  the parameter values along with other useful error details.\n     *\n     *  If the matching error cannot be found, returns null.\n     */\n    parseError(data: BytesLike): null | ErrorDescription {\n        const hexData = hexlify(data);\n\n        const fragment = this.getError(dataSlice(hexData, 0, 4));\n\n        if (!fragment) { return null; }\n\n        const args = this.#abiCoder.decode(fragment.inputs, dataSlice(hexData, 4));\n        return new ErrorDescription(fragment, fragment.selector, args);\n    }\n\n    /**\n     *  Creates a new [[Interface]] from the ABI %%value%%.\n     *\n     *  The %%value%% may be provided as an existing [[Interface]] object,\n     *  a JSON-encoded ABI or any Human-Readable ABI format.\n     */\n    static from(value: InterfaceAbi | Interface): Interface {\n        // Already an Interface, which is immutable\n        if (value instanceof Interface) { return value; }\n\n        // JSON\n        if (typeof(value) === \"string\") { return new Interface(JSON.parse(value)); }\n\n        // An Interface; possibly from another v6 instance\n        if (typeof((<any>value).formatJson) === \"function\") {\n            return new Interface((<any>value).formatJson());\n        }\n\n        // A legacy Interface; from an older version\n        if (typeof((<any>value).format) === \"function\") {\n            return new Interface((<any>value).format(\"json\"));\n        }\n\n        // Array of fragments\n        return new Interface(value);\n    }\n}\n", "//import { resolveAddress } from \"@ethersproject/address\";\nimport {\n    defineProperties, getBigInt, getNumber, hexlify, isBytesLike,\n    resolveProperties,\n    assert, assertArgument, isError, makeError\n} from \"../utils/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\n\nimport type { AddressLike, NameResolver } from \"../address/index.js\";\nimport type { BigNumberish, EventEmitterable } from \"../utils/index.js\";\nimport type { Signature } from \"../crypto/index.js\";\nimport type {\n    AccessList, AccessListish, BlobLike, KzgLibrary, TransactionLike\n} from \"../transaction/index.js\";\n\nimport type { ContractRunner } from \"./contracts.js\";\nimport type { Network } from \"./network.js\";\n\n\nconst BN_0 = BigInt(0);\n\n/**\n *  A **BlockTag** specifies a specific block.\n *\n *  **numeric value** - specifies the block height, where\n *  the genesis block is block 0; many operations accept a negative\n *  value which indicates the block number should be deducted from\n *  the most recent block. A numeric value may be a ``number``, ``bigint``,\n *  or a decimal of hex string.\n *\n *  **blockhash** - specifies a specific block by its blockhash; this allows\n *  potentially orphaned blocks to be specifed, without ambiguity, but many\n *  backends do not support this for some operations.\n */\nexport type BlockTag = BigNumberish | string;\n\nimport {\n    BlockParams, LogParams, TransactionReceiptParams,\n    TransactionResponseParams\n} from \"./formatting.js\";\n\n// -----------------------\n\nfunction getValue<T>(value: undefined | null | T): null | T {\n    if (value == null) { return null; }\n    return value;\n}\n\nfunction toJson(value: null | bigint): null | string {\n    if (value == null) { return null; }\n    return value.toString();\n}\n\n// @TODO? <T extends FeeData = { }> implements Required<T>\n\n/**\n *  A **FeeData** wraps all the fee-related values associated with\n *  the network.\n */\nexport class FeeData {\n    /**\n     *  The gas price for legacy networks.\n     */\n    readonly gasPrice!: null | bigint;\n\n    /**\n     *  The maximum fee to pay per gas.\n     *\n     *  The base fee per gas is defined by the network and based on\n     *  congestion, increasing the cost during times of heavy load\n     *  and lowering when less busy.\n     *\n     *  The actual fee per gas will be the base fee for the block\n     *  and the priority fee, up to the max fee per gas.\n     *\n     *  This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n     */\n    readonly maxFeePerGas!: null | bigint;\n\n    /**\n     *  The additional amout to pay per gas to encourage a validator\n     *  to include the transaction.\n     *\n     *  The purpose of this is to compensate the validator for the\n     *  adjusted risk for including a given transaction.\n     *\n     *  This will be ``null`` on legacy networks (i.e. [pre-EIP-1559](link-eip-1559))\n     */\n    readonly maxPriorityFeePerGas!: null | bigint;\n\n    /**\n     *  Creates a new FeeData for %%gasPrice%%, %%maxFeePerGas%% and\n     *  %%maxPriorityFeePerGas%%.\n     */\n    constructor(gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint) {\n        defineProperties<FeeData>(this, {\n            gasPrice: getValue(gasPrice),\n            maxFeePerGas: getValue(maxFeePerGas),\n            maxPriorityFeePerGas: getValue(maxPriorityFeePerGas)\n        });\n    }\n\n    /**\n     *  Returns a JSON-friendly value.\n     */\n    toJSON(): any {\n        const {\n            gasPrice, maxFeePerGas, maxPriorityFeePerGas\n        } = this;\n        return {\n            _type: \"FeeData\",\n            gasPrice: toJson(gasPrice),\n            maxFeePerGas: toJson(maxFeePerGas),\n            maxPriorityFeePerGas: toJson(maxPriorityFeePerGas),\n        };\n    }\n}\n\n\n/**\n *  A **TransactionRequest** is a transactions with potentially various\n *  properties not defined, or with less strict types for its values.\n *\n *  This is used to pass to various operations, which will internally\n *  coerce any types and populate any necessary values.\n */\nexport interface TransactionRequest {\n    /**\n     *  The transaction type.\n     */\n    type?: null | number;\n\n    /**\n     *  The target of the transaction.\n     */\n    to?: null | AddressLike;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: null | AddressLike;\n\n    /**\n     *  The nonce of the transaction, used to prevent replay attacks.\n     */\n    nonce?: null | number;\n\n    /**\n     *  The maximum amount of gas to allow this transaction to consume.\n     */\n    gasLimit?: null | BigNumberish;\n\n    /**\n     *  The gas price to use for legacy transactions or transactions on\n     *  legacy networks.\n     *\n     *  Most of the time the ``max*FeePerGas`` is preferred.\n     */\n    gasPrice?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-1559]] maximum priority fee to pay per gas.\n     */\n    maxPriorityFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n     *  value used is protocol enforced to be the block's base fee.\n     */\n    maxFeePerGas?: null | BigNumberish;\n\n    /**\n     *  The transaction data.\n     */\n    data?: null | string;\n\n    /**\n     *  The transaction value (in wei).\n     */\n    value?: null | BigNumberish;\n\n    /**\n     *  The chain ID for the network this transaction is valid on.\n     */\n    chainId?: null | BigNumberish;\n\n    /**\n     *  The [[link-eip-2930]] access list. Storage slots included in the access\n     *  list are //warmed// by pre-loading them, so their initial cost to\n     *  fetch is guaranteed, but then each additional access is cheaper.\n     */\n    accessList?: null | AccessListish;\n\n    /**\n     *  A custom object, which can be passed along for network-specific\n     *  values.\n     */\n    customData?: any;\n\n    // Only meaningful when used for call\n\n    /**\n     *  When using ``call`` or ``estimateGas``, this allows a specific\n     *  block to be queried. Many backends do not support this and when\n     *  unsupported errors are silently squelched and ``\"latest\"`` is used. \n     */\n    blockTag?: BlockTag;\n\n    /**\n     *  When using ``call``, this enables CCIP-read, which permits the\n     *  provider to be redirected to web-based content during execution,\n     *  which is then further validated by the contract.\n     *\n     *  There are potential security implications allowing CCIP-read, as\n     *  it could be used to expose the IP address or user activity during\n     *  the fetch to unexpected parties.\n     */\n    enableCcipRead?: boolean;\n\n    /**\n     *  The blob versioned hashes (see [[link-eip-4844]]).\n     */\n    blobVersionedHashes?: null | Array<string>\n\n    /**\n     *  The maximum fee per blob gas (see [[link-eip-4844]]).\n     */\n    maxFeePerBlobGas?: null | BigNumberish;\n\n    /**\n     *  Any blobs to include in the transaction (see [[link-eip-4844]]).\n     */\n    blobs?: null | Array<BlobLike>;\n\n    /**\n     *  An external library for computing the KZG commitments and\n     *  proofs necessary for EIP-4844 transactions (see [[link-eip-4844]]).\n     *\n     *  This is generally ``null``, unless you are creating BLOb\n     *  transactions.\n     */\n    kzg?: null | KzgLibrary;\n\n    // Todo?\n    //gasMultiplier?: number;\n};\n\n/**\n *  A **PreparedTransactionRequest** is identical to a [[TransactionRequest]]\n *  except all the property types are strictly enforced.\n */\nexport interface PreparedTransactionRequest {\n    /**\n     *  The transaction type.\n     */\n    type?: number;\n\n\n    /**\n     *  The target of the transaction.\n     */\n    to?: AddressLike;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: AddressLike;\n\n    /**\n     *  The nonce of the transaction, used to prevent replay attacks.\n     */\n\n    nonce?: number;\n\n    /**\n     *  The maximum amount of gas to allow this transaction to consime.\n     */\n    gasLimit?: bigint;\n\n    /**\n     *  The gas price to use for legacy transactions or transactions on\n     *  legacy networks.\n     *\n     *  Most of the time the ``max*FeePerGas`` is preferred.\n     */\n    gasPrice?: bigint;\n\n    /**\n     *  The [[link-eip-1559]] maximum priority fee to pay per gas.\n     */\n    maxPriorityFeePerGas?: bigint;\n\n    /**\n     *  The [[link-eip-1559]] maximum total fee to pay per gas. The actual\n     *  value used is protocol enforced to be the block's base fee.\n     */\n    maxFeePerGas?: bigint;\n\n    /**\n     *  The transaction data.\n     */\n    data?: string;\n\n\n    /**\n     *  The transaction value (in wei).\n     */\n    value?: bigint;\n\n    /**\n     *  The chain ID for the network this transaction is valid on.\n     */\n    chainId?: bigint;\n\n    /**\n     *  The [[link-eip-2930]] access list. Storage slots included in the access\n     *  list are //warmed// by pre-loading them, so their initial cost to\n     *  fetch is guaranteed, but then each additional access is cheaper.\n     */\n    accessList?: AccessList;\n\n    /**\n     *  A custom object, which can be passed along for network-specific\n     *  values.\n     */\n    customData?: any;\n\n\n\n    /**\n     *  When using ``call`` or ``estimateGas``, this allows a specific\n     *  block to be queried. Many backends do not support this and when\n     *  unsupported errors are silently squelched and ``\"latest\"`` is used. \n     */\n    blockTag?: BlockTag;\n\n    /**\n     *  When using ``call``, this enables CCIP-read, which permits the\n     *  provider to be redirected to web-based content during execution,\n     *  which is then further validated by the contract.\n     *\n     *  There are potential security implications allowing CCIP-read, as\n     *  it could be used to expose the IP address or user activity during\n     *  the fetch to unexpected parties.\n     */\n    enableCcipRead?: boolean;\n}\n\n/**\n *  Returns a copy of %%req%% with all properties coerced to their strict\n *  types.\n */\nexport function copyRequest(req: TransactionRequest): PreparedTransactionRequest {\n    const result: any = { };\n\n    // These could be addresses, ENS names or Addressables\n    if (req.to) { result.to = req.to; }\n    if (req.from) { result.from = req.from; }\n\n    if (req.data) { result.data = hexlify(req.data); }\n\n    const bigIntKeys = \"chainId,gasLimit,gasPrice,maxFeePerBlobGas,maxFeePerGas,maxPriorityFeePerGas,value\".split(/,/);\n    for (const key of bigIntKeys) {\n        if (!(key in req) || (<any>req)[key] == null) { continue; }\n        result[key] = getBigInt((<any>req)[key], `request.${ key }`);\n    }\n\n    const numberKeys = \"type,nonce\".split(/,/);\n    for (const key of numberKeys) {\n        if (!(key in req) || (<any>req)[key] == null) { continue; }\n        result[key] = getNumber((<any>req)[key], `request.${ key }`);\n    }\n\n    if (req.accessList) {\n        result.accessList = accessListify(req.accessList);\n    }\n\n    if (\"blockTag\" in req) { result.blockTag = req.blockTag; }\n\n    if (\"enableCcipRead\" in req) {\n        result.enableCcipRead = !!req.enableCcipRead\n    }\n\n    if (\"customData\" in req) {\n        result.customData = req.customData;\n    }\n\n    if (\"blobVersionedHashes\" in req && req.blobVersionedHashes) {\n        result.blobVersionedHashes = req.blobVersionedHashes.slice();\n    }\n\n    if (\"kzg\" in req) { result.kzg = req.kzg; }\n\n    if (\"blobs\" in req && req.blobs) {\n        result.blobs = req.blobs.map((b) => {\n            if (isBytesLike(b)) { return hexlify(b); }\n            return Object.assign({ }, b);\n        });\n    }\n\n    return result;\n}\n\n//////////////////////\n// Block\n\n/**\n *  An Interface to indicate a [[Block]] has been included in the\n *  blockchain. This asserts a Type Guard that necessary properties\n *  are non-null.\n *\n *  Before a block is included, it is a //pending// block.\n */\nexport interface MinedBlock extends Block {\n    /**\n     *  The block number also known as the block height.\n     */\n    readonly number: number;\n\n    /**\n     *  The block hash.\n     */\n    readonly hash: string;\n\n    /**\n     *  The block timestamp, in seconds from epoch.\n     */\n    readonly timestamp: number;\n\n    /**\n     *  The block date, created from the [[timestamp]].\n     */\n    readonly date: Date;\n\n    /**\n     *  The miner of the block, also known as the ``author`` or\n     *  block ``producer``.\n     */\n    readonly miner: string;\n}\n\n/**\n *  A **Block** represents the data associated with a full block on\n *  Ethereum.\n */\nexport class Block implements BlockParams, Iterable<string> {\n\n    /**\n     *  The provider connected to the block used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider!: Provider;\n\n    /**\n     *  The block number, sometimes called the block height. This is a\n     *  sequential number that is one higher than the parent block.\n     */\n    readonly number!: number;\n\n    /**\n     *  The block hash.\n     *\n     *  This hash includes all properties, so can be safely used to identify\n     *  an exact set of block properties.\n     */\n    readonly hash!: null | string;\n\n    /**\n     *  The timestamp for this block, which is the number of seconds since\n     *  epoch that this block was included.\n     */\n    readonly timestamp!: number;\n\n    /**\n     *  The block hash of the parent block.\n     */\n    readonly parentHash!: string;\n\n    /**\n     *  The hash tree root of the parent beacon block for the given\n     *  execution block. See [[link-eip-4788]].\n     */\n    parentBeaconBlockRoot!: null | string;\n\n    /**\n     *  The nonce.\n     *\n     *  On legacy networks, this is the random number inserted which\n     *  permitted the difficulty target to be reached.\n     */\n    readonly nonce!: string;\n\n    /**\n     *  The difficulty target.\n     *\n     *  On legacy networks, this is the proof-of-work target required\n     *  for a block to meet the protocol rules to be included.\n     *\n     *  On modern networks, this is a random number arrived at using\n     *  randao.  @TODO: Find links?\n     */\n    readonly difficulty!: bigint;\n\n\n    /**\n     *  The total gas limit for this block.\n     */\n    readonly gasLimit!: bigint;\n\n    /**\n     *  The total gas used in this block.\n     */\n    readonly gasUsed!: bigint;\n\n\n    /**\n     *  The root hash for the global state after applying changes\n     *  in this block.\n     */\n    readonly stateRoot!: null | string;\n\n    /**\n     *  The hash of the transaction receipts trie.\n     */\n    readonly receiptsRoot!: null | string;\n\n    /**\n     *  The total amount of blob gas consumed by the transactions\n     *  within the block. See [[link-eip-4844]].\n     */\n    readonly blobGasUsed!: null | bigint;\n\n    /**\n     *  The running total of blob gas consumed in excess of the\n     *  target, prior to the block. See [[link-eip-4844]].\n     */\n    readonly excessBlobGas!: null | bigint;\n\n    /**\n     *  The miner coinbase address, wihch receives any subsidies for\n     *  including this block.\n     */\n    readonly miner!: string;\n\n    /**\n     *  The latest RANDAO mix of the post beacon state of\n     *  the previous block.\n     */\n    readonly prevRandao!: null | string;\n\n    /**\n     *  Any extra data the validator wished to include.\n     */\n    readonly extraData!: string;\n\n    /**\n     *  The base fee per gas that all transactions in this block were\n     *  charged.\n     *\n     *  This adjusts after each block, depending on how congested the network\n     *  is.\n     */\n    readonly baseFeePerGas!: null | bigint;\n\n    readonly #transactions: Array<string | TransactionResponse>;\n\n    /**\n     *  Create a new **Block** object.\n     *\n     *  This should generally not be necessary as the unless implementing a\n     *  low-level library.\n     */\n    constructor(block: BlockParams, provider: Provider) {\n\n        this.#transactions = block.transactions.map((tx) => {\n            if (typeof(tx) !== \"string\") {\n                return new TransactionResponse(tx, provider);\n            }\n            return tx;\n        });\n\n        defineProperties<Block>(this, {\n            provider,\n\n            hash: getValue(block.hash),\n\n            number: block.number,\n            timestamp: block.timestamp,\n\n            parentHash: block.parentHash,\n            parentBeaconBlockRoot: block.parentBeaconBlockRoot,\n\n            nonce: block.nonce,\n            difficulty: block.difficulty,\n\n            gasLimit: block.gasLimit,\n            gasUsed: block.gasUsed,\n            blobGasUsed: block.blobGasUsed,\n            excessBlobGas: block.excessBlobGas,\n            miner: block.miner,\n            prevRandao: getValue(block.prevRandao),\n            extraData: block.extraData,\n\n            baseFeePerGas: getValue(block.baseFeePerGas),\n\n            stateRoot: block.stateRoot,\n            receiptsRoot: block.receiptsRoot,\n        });\n    }\n\n    /**\n     *  Returns the list of transaction hashes, in the order\n     *  they were executed within the block.\n     */\n    get transactions(): ReadonlyArray<string> {\n        return this.#transactions.map((tx) => {\n            if (typeof(tx) === \"string\") { return tx; }\n            return tx.hash;\n        });\n    }\n\n    /**\n     *  Returns the complete transactions, in the order they\n     *  were executed within the block.\n     *\n     *  This is only available for blocks which prefetched\n     *  transactions, by passing ``true`` to %%prefetchTxs%%\n     *  into [[Provider-getBlock]].\n     */\n    get prefetchedTransactions(): Array<TransactionResponse> {\n        const txs = this.#transactions.slice();\n\n        // Doesn't matter...\n        if (txs.length === 0) { return [ ]; }\n\n        // Make sure we prefetched the transactions\n        assert(typeof(txs[0]) === \"object\", \"transactions were not prefetched with block request\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"transactionResponses()\"\n        });\n\n        return <Array<TransactionResponse>>txs;\n    }\n\n    /**\n     *  Returns a JSON-friendly value.\n     */\n    toJSON(): any {\n        const {\n            baseFeePerGas, difficulty, extraData, gasLimit, gasUsed, hash,\n            miner, prevRandao, nonce, number, parentHash, parentBeaconBlockRoot,\n            stateRoot, receiptsRoot, timestamp, transactions\n        } = this;\n\n        return {\n            _type: \"Block\",\n            baseFeePerGas: toJson(baseFeePerGas),\n            difficulty: toJson(difficulty),\n            extraData,\n            gasLimit: toJson(gasLimit),\n            gasUsed: toJson(gasUsed),\n            blobGasUsed: toJson(this.blobGasUsed),\n            excessBlobGas: toJson(this.excessBlobGas),\n            hash, miner, prevRandao, nonce, number, parentHash, timestamp,\n            parentBeaconBlockRoot, stateRoot, receiptsRoot,\n            transactions,\n        };\n    }\n\n    [Symbol.iterator](): Iterator<string> {\n        let index = 0;\n        const txs = this.transactions;\n        return {\n            next: () => {\n                if (index < this.length) {\n                    return {\n                        value: txs[index++], done: false\n                    }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The number of transactions in this block.\n     */\n    get length(): number { return this.#transactions.length; }\n\n    /**\n     *  The [[link-js-date]] this block was included at.\n     */\n    get date(): null | Date {\n        if (this.timestamp == null) { return null; }\n        return new Date(this.timestamp * 1000);\n    }\n\n    /**\n     *  Get the transaction at %%indexe%% within this block.\n     */\n    async getTransaction(indexOrHash: number | string): Promise<TransactionResponse> {\n        // Find the internal value by its index or hash\n        let tx: string | TransactionResponse | undefined = undefined;\n        if (typeof(indexOrHash) === \"number\") {\n            tx = this.#transactions[indexOrHash];\n\n        } else {\n            const hash = indexOrHash.toLowerCase();\n            for (const v of this.#transactions) {\n                if (typeof(v) === \"string\") {\n                    if (v !== hash) { continue; }\n                    tx = v;\n                    break;\n                } else {\n                    if (v.hash === hash) { continue; }\n                    tx = v;\n                    break;\n                }\n            }\n        }\n        if (tx == null) { throw new Error(\"no such tx\"); }\n\n        if (typeof(tx) === \"string\") {\n            return <TransactionResponse>(await this.provider.getTransaction(tx));\n        } else {\n            return tx;\n        }\n    }\n\n    /**\n     *  If a **Block** was fetched with a request to include the transactions\n     *  this will allow synchronous access to those transactions.\n     *\n     *  If the transactions were not prefetched, this will throw.\n     */\n    getPrefetchedTransaction(indexOrHash: number | string): TransactionResponse {\n        const txs = this.prefetchedTransactions;\n        if (typeof(indexOrHash) === \"number\") {\n            return txs[indexOrHash];\n        }\n\n        indexOrHash = indexOrHash.toLowerCase();\n        for (const tx of txs) {\n            if (tx.hash === indexOrHash) { return tx; }\n        }\n\n        assertArgument(false, \"no matching transaction\", \"indexOrHash\", indexOrHash);\n    }\n\n    /**\n     *  Returns true if this block been mined. This provides a type guard\n     *  for all properties on a [[MinedBlock]].\n     */\n    isMined(): this is MinedBlock { return !!this.hash; }\n\n    /**\n     *  Returns true if this block is an [[link-eip-2930]] block.\n     */\n    isLondon(): this is (Block & { baseFeePerGas: bigint }) {\n        return !!this.baseFeePerGas;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    orphanedEvent(): OrphanFilter {\n        if (!this.isMined()) { throw new Error(\"\"); }\n        return createOrphanedBlockFilter(this);\n    }\n}\n\n//////////////////////\n// Log\n\n/**\n *  A **Log** in Ethereum represents an event that has been included in a\n *  transaction using the ``LOG*`` opcodes, which are most commonly used by\n *  Solidity's emit for announcing events.\n */\nexport class Log implements LogParams {\n\n    /**\n     *  The provider connected to the log used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider: Provider;\n\n    /**\n     *  The transaction hash of the transaction this log occurred in. Use the\n     *  [[Log-getTransaction]] to get the [[TransactionResponse]].\n     */\n    readonly transactionHash!: string;\n\n    /**\n     *  The block hash of the block this log occurred in. Use the\n     *  [[Log-getBlock]] to get the [[Block]].\n     */\n    readonly blockHash!: string;\n\n    /**\n     *  The block number of the block this log occurred in. It is preferred\n     *  to use the [[Block-hash]] when fetching the related [[Block]],\n     *  since in the case of an orphaned block, the block at that height may\n     *  have changed.\n     */\n    readonly blockNumber!: number;\n\n    /**\n     *  If the **Log** represents a block that was removed due to an orphaned\n     *  block, this will be true.\n     *\n     *  This can only happen within an orphan event listener.\n     */\n    readonly removed!: boolean;\n\n    /**\n     *  The address of the contract that emitted this log.\n     */\n    readonly address!: string;\n\n    /**\n     *  The data included in this log when it was emitted.\n     */\n    readonly data!: string;\n\n    /**\n     *  The indexed topics included in this log when it was emitted.\n     *\n     *  All topics are included in the bloom filters, so they can be\n     *  efficiently filtered using the [[Provider-getLogs]] method.\n     */\n    readonly topics!: ReadonlyArray<string>;\n\n    /**\n     *  The index within the block this log occurred at. This is generally\n     *  not useful to developers, but can be used with the various roots\n     *  to proof inclusion within a block.\n     */\n    readonly index!: number;\n\n    /**\n     *  The index within the transaction of this log.\n     */\n    readonly transactionIndex!: number;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(log: LogParams, provider: Provider) {\n        this.provider = provider;\n\n        const topics = Object.freeze(log.topics.slice());\n        defineProperties<Log>(this, {\n            transactionHash: log.transactionHash,\n            blockHash: log.blockHash,\n            blockNumber: log.blockNumber,\n\n            removed: log.removed,\n\n            address: log.address,\n            data: log.data,\n\n            topics,\n\n            index: log.index,\n            transactionIndex: log.transactionIndex,\n        });\n    }\n\n    /**\n     *  Returns a JSON-compatible object.\n     */\n    toJSON(): any {\n        const {\n            address, blockHash, blockNumber, data, index,\n            removed, topics, transactionHash, transactionIndex\n        } = this;\n\n        return {\n            _type: \"log\",\n            address, blockHash, blockNumber, data, index,\n            removed, topics, transactionHash, transactionIndex\n        };\n    }\n\n    /**\n     *  Returns the block that this log occurred in.\n     */\n    async getBlock(): Promise<Block> {\n        const block = await this.provider.getBlock(this.blockHash);\n        assert(!!block, \"failed to find transaction\", \"UNKNOWN_ERROR\", { });\n        return block;\n    }\n\n    /**\n     *  Returns the transaction that this log occurred in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        const tx = await this.provider.getTransaction(this.transactionHash);\n        assert(!!tx, \"failed to find transaction\", \"UNKNOWN_ERROR\", { });\n        return tx;\n    }\n\n    /**\n     *  Returns the transaction receipt fot the transaction that this\n     *  log occurred in.\n     */\n    async getTransactionReceipt(): Promise<TransactionReceipt> {\n        const receipt = await this.provider.getTransactionReceipt(this.transactionHash);\n        assert(!!receipt, \"failed to find transaction receipt\", \"UNKNOWN_ERROR\", { });\n        return receipt;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    removedEvent(): OrphanFilter {\n        return createRemovedLogFilter(this);\n    }\n}\n\n//////////////////////\n// Transaction Receipt\n\n/*\nexport interface LegacyTransactionReceipt {\n    byzantium: false;\n    status: null;\n    root: string;\n}\n\nexport interface ByzantiumTransactionReceipt {\n    byzantium: true;\n    status: number;\n    root: null;\n}\n*/\n\n/**\n *  A **TransactionReceipt** includes additional information about a\n *  transaction that is only available after it has been mined.\n */\nexport class TransactionReceipt implements TransactionReceiptParams, Iterable<Log> {\n    /**\n     *  The provider connected to the log used to fetch additional details\n     *  if necessary.\n     */\n    readonly provider!: Provider;\n\n    /**\n     *  The address the transaction was sent to.\n     */\n    readonly to!: null | string;\n\n    /**\n     *  The sender of the transaction.\n     */\n    readonly from!: string;\n\n    /**\n     *  The address of the contract if the transaction was directly\n     *  responsible for deploying one.\n     *\n     *  This is non-null **only** if the ``to`` is empty and the ``data``\n     *  was successfully executed as initcode.\n     */\n    readonly contractAddress!: null | string;\n\n    /**\n     *  The transaction hash.\n     */\n    readonly hash!: string;\n\n    /**\n     *  The index of this transaction within the block transactions.\n     */\n    readonly index!: number;\n\n    /**\n     *  The block hash of the [[Block]] this transaction was included in.\n     */\n    readonly blockHash!: string;\n\n    /**\n     *  The block number of the [[Block]] this transaction was included in.\n     */\n    readonly blockNumber!: number;\n\n    /**\n     *  The bloom filter bytes that represent all logs that occurred within\n     *  this transaction. This is generally not useful for most developers,\n     *  but can be used to validate the included logs.\n     */\n    readonly logsBloom!: string;\n\n    /**\n     *  The actual amount of gas used by this transaction.\n     *\n     *  When creating a transaction, the amount of gas that will be used can\n     *  only be approximated, but the sender must pay the gas fee for the\n     *  entire gas limit. After the transaction, the difference is refunded.\n     */\n    readonly gasUsed!: bigint;\n\n    /**\n     *  The gas used for BLObs. See [[link-eip-4844]].\n     */\n    readonly blobGasUsed!: null | bigint;\n\n    /**\n     *  The amount of gas used by all transactions within the block for this\n     *  and all transactions with a lower ``index``.\n     *\n     *  This is generally not useful for developers but can be used to\n     *  validate certain aspects of execution.\n     */\n    readonly cumulativeGasUsed!: bigint;\n\n    /**\n     *  The actual gas price used during execution.\n     *\n     *  Due to the complexity of [[link-eip-1559]] this value can only\n     *  be caluclated after the transaction has been mined, snce the base\n     *  fee is protocol-enforced.\n     */\n    readonly gasPrice!: bigint;\n\n    /**\n     *  The price paid per BLOB in gas. See [[link-eip-4844]].\n     */\n    readonly blobGasPrice!: null | bigint;\n\n    /**\n     *  The [[link-eip-2718]] transaction type.\n     */\n    readonly type!: number;\n    //readonly byzantium!: boolean;\n\n    /**\n     *  The status of this transaction, indicating success (i.e. ``1``) or\n     *  a revert (i.e. ``0``).\n     *\n     *  This is available in post-byzantium blocks, but some backends may\n     *  backfill this value.\n     */\n    readonly status!: null | number;\n\n    /**\n     *  The root hash of this transaction.\n     *\n     *  This is no present and was only included in pre-byzantium blocks, but\n     *  could be used to validate certain parts of the receipt.\n     */\n    readonly root!: null | string;\n\n    readonly #logs: ReadonlyArray<Log>;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(tx: TransactionReceiptParams, provider: Provider) {\n        this.#logs = Object.freeze(tx.logs.map((log) => {\n            return new Log(log, provider);\n        }));\n\n        let gasPrice = BN_0;\n        if (tx.effectiveGasPrice != null) {\n            gasPrice = tx.effectiveGasPrice;\n        } else if (tx.gasPrice != null) {\n            gasPrice = tx.gasPrice;\n        }\n\n        defineProperties<TransactionReceipt>(this, {\n            provider,\n\n            to: tx.to,\n            from: tx.from,\n            contractAddress: tx.contractAddress,\n\n            hash: tx.hash,\n            index: tx.index,\n\n            blockHash: tx.blockHash,\n            blockNumber: tx.blockNumber,\n\n            logsBloom: tx.logsBloom,\n\n            gasUsed: tx.gasUsed,\n            cumulativeGasUsed: tx.cumulativeGasUsed,\n            blobGasUsed: tx.blobGasUsed,\n            gasPrice,\n            blobGasPrice: tx.blobGasPrice,\n\n            type: tx.type,\n            //byzantium: tx.byzantium,\n            status: tx.status,\n            root: tx.root\n        });\n    }\n\n    /**\n     *  The logs for this transaction.\n     */\n    get logs(): ReadonlyArray<Log> { return this.#logs; }\n\n    /**\n     *  Returns a JSON-compatible representation.\n     */\n    toJSON(): any {\n        const {\n            to, from, contractAddress, hash, index,\n            blockHash, blockNumber, logsBloom,\n            logs, //byzantium, \n            status, root\n        } = this;\n\n        return {\n            _type: \"TransactionReceipt\",\n            blockHash, blockNumber,\n            //byzantium, \n            contractAddress,\n            cumulativeGasUsed: toJson(this.cumulativeGasUsed),\n            from,\n            gasPrice: toJson(this.gasPrice),\n            blobGasUsed: toJson(this.blobGasUsed),\n            blobGasPrice: toJson(this.blobGasPrice),\n            gasUsed: toJson(this.gasUsed),\n            hash, index, logs, logsBloom, root, status, to\n        };\n    }\n\n    /**\n     *  @_ignore:\n     */\n    get length(): number { return this.logs.length; }\n\n    [Symbol.iterator](): Iterator<Log> {\n        let index = 0;\n        return {\n            next: () => {\n                if (index < this.length) {\n                    return { value: this.logs[index++], done: false }\n                }\n                return { value: undefined, done: true };\n            }\n        };\n    }\n\n    /**\n     *  The total fee for this transaction, in wei.\n     */\n    get fee(): bigint {\n        return this.gasUsed * this.gasPrice;\n    }\n\n    /**\n     *  Resolves to the block this transaction occurred in.\n     */\n    async getBlock(): Promise<Block> {\n        const block = await this.provider.getBlock(this.blockHash);\n        if (block == null) { throw new Error(\"TODO\"); }\n        return block;\n    }\n\n    /**\n     *  Resolves to the transaction this transaction occurred in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        const tx = await this.provider.getTransaction(this.hash);\n        if (tx == null) { throw new Error(\"TODO\"); }\n        return tx;\n    }\n\n    /**\n     *  Resolves to the return value of the execution of this transaction.\n     *\n     *  Support for this feature is limited, as it requires an archive node\n     *  with the ``debug_`` or ``trace_`` API enabled.\n     */\n    async getResult(): Promise<string> {\n        return <string>(await this.provider.getTransactionResult(this.hash));\n    }\n\n    /**\n     *  Resolves to the number of confirmations this transaction has.\n     */\n    async confirmations(): Promise<number> {\n        return (await this.provider.getBlockNumber()) - this.blockNumber + 1;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    removedEvent(): OrphanFilter {\n        return createRemovedTransactionFilter(this);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    reorderedEvent(other?: TransactionResponse): OrphanFilter {\n        assert(!other || other.isMined(), \"unmined 'other' transction cannot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"reorderedEvent(other)\" });\n        return createReorderedTransactionFilter(this, other);\n    }\n}\n\n\n//////////////////////\n// Transaction Response\n\n/**\n *  A **MinedTransactionResponse** is an interface representing a\n *  transaction which has been mined and allows for a type guard for its\n *  property values being defined.\n */\nexport interface MinedTransactionResponse extends TransactionResponse {\n    /**\n     *  The block number this transaction occurred in.\n     */\n    blockNumber: number;\n\n    /**\n     *  The block hash this transaction occurred in.\n     */\n    blockHash: string;\n\n    /**\n     *  The date this transaction occurred on.\n     */\n    date: Date;\n}\n\n\n/**\n *  A **TransactionResponse** includes all properties about a transaction\n *  that was sent to the network, which may or may not be included in a\n *  block.\n *\n *  The [[TransactionResponse-isMined]] can be used to check if the\n *  transaction has been mined as well as type guard that the otherwise\n *  possibly ``null`` properties are defined.\n */\nexport class TransactionResponse implements TransactionLike<string>, TransactionResponseParams {\n    /**\n     *  The provider this is connected to, which will influence how its\n     *  methods will resolve its async inspection methods.\n     */\n    readonly provider: Provider;\n\n    /**\n     *  The block number of the block that this transaction was included in.\n     *\n     *  This is ``null`` for pending transactions.\n     */\n    readonly blockNumber: null | number;\n\n    /**\n     *  The blockHash of the block that this transaction was included in.\n     *\n     *  This is ``null`` for pending transactions.\n     */\n    readonly blockHash: null | string;\n\n    /**\n     *  The index within the block that this transaction resides at.\n     */\n    readonly index!: number;\n\n    /**\n     *  The transaction hash.\n     */\n    readonly hash!: string;\n\n    /**\n     *  The [[link-eip-2718]] transaction envelope type. This is\n     *  ``0`` for legacy transactions types.\n     */\n    readonly type!: number;\n\n    /**\n     *  The receiver of this transaction.\n     *\n     *  If ``null``, then the transaction is an initcode transaction.\n     *  This means the result of executing the [[data]] will be deployed\n     *  as a new contract on chain (assuming it does not revert) and the\n     *  address may be computed using [[getCreateAddress]].\n     */\n    readonly to!: null | string;\n\n    /**\n     *  The sender of this transaction. It is implicitly computed\n     *  from the transaction pre-image hash (as the digest) and the\n     *  [[signature]] using ecrecover.\n     */\n    readonly from!: string;\n\n    /**\n     *  The nonce, which is used to prevent replay attacks and offer\n     *  a method to ensure transactions from a given sender are explicitly\n     *  ordered.\n     *\n     *  When sending a transaction, this must be equal to the number of\n     *  transactions ever sent by [[from]].\n     */\n    readonly nonce!: number;\n\n    /**\n     *  The maximum units of gas this transaction can consume. If execution\n     *  exceeds this, the entries transaction is reverted and the sender\n     *  is charged for the full amount, despite not state changes being made.\n     */\n    readonly gasLimit!: bigint;\n\n    /**\n     *  The gas price can have various values, depending on the network.\n     *\n     *  In modern networks, for transactions that are included this is\n     *  the //effective gas price// (the fee per gas that was actually\n     *  charged), while for transactions that have not been included yet\n     *  is the [[maxFeePerGas]].\n     *\n     *  For legacy transactions, or transactions on legacy networks, this\n     *  is the fee that will be charged per unit of gas the transaction\n     *  consumes.\n     */\n    readonly gasPrice!: bigint;\n\n    /**\n     *  The maximum priority fee (per unit of gas) to allow a\n     *  validator to charge the sender. This is inclusive of the\n     *  [[maxFeeFeePerGas]].\n     */\n    readonly maxPriorityFeePerGas!: null | bigint;\n\n    /**\n     *  The maximum fee (per unit of gas) to allow this transaction\n     *  to charge the sender.\n     */\n    readonly maxFeePerGas!: null | bigint;\n\n    /**\n     *  The [[link-eip-4844]] max fee per BLOb gas.\n     */\n    readonly maxFeePerBlobGas!: null | bigint;\n\n    /**\n     *  The data.\n     */\n    readonly data!: string;\n\n    /**\n     *  The value, in wei. Use [[formatEther]] to format this value\n     *  as ether.\n     */\n    readonly value!: bigint;\n\n    /**\n     *  The chain ID.\n     */\n    readonly chainId!: bigint;\n\n    /**\n     *  The signature.\n     */\n    readonly signature!: Signature;\n\n    /**\n     *  The [[link-eip-2930]] access list for transaction types that\n     *  support it, otherwise ``null``.\n     */\n    readonly accessList!: null | AccessList;\n\n    /**\n     *  The [[link-eip-4844]] BLOb versioned hashes.\n     */\n    readonly blobVersionedHashes!: null | Array<string>;\n\n    #startBlock: number;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(tx: TransactionResponseParams, provider: Provider) {\n        this.provider = provider;\n\n        this.blockNumber = (tx.blockNumber != null) ? tx.blockNumber: null;\n        this.blockHash = (tx.blockHash != null) ? tx.blockHash: null;\n\n        this.hash = tx.hash;\n        this.index = tx.index;\n\n        this.type = tx.type;\n\n        this.from = tx.from;\n        this.to = tx.to || null;\n\n        this.gasLimit = tx.gasLimit;\n        this.nonce = tx.nonce;\n        this.data = tx.data;\n        this.value = tx.value;\n\n        this.gasPrice = tx.gasPrice;\n        this.maxPriorityFeePerGas = (tx.maxPriorityFeePerGas != null) ? tx.maxPriorityFeePerGas: null;\n        this.maxFeePerGas = (tx.maxFeePerGas != null) ? tx.maxFeePerGas: null;\n        this.maxFeePerBlobGas = (tx.maxFeePerBlobGas != null) ? tx.maxFeePerBlobGas: null;\n\n        this.chainId = tx.chainId;\n        this.signature = tx.signature;\n\n        this.accessList = (tx.accessList != null) ? tx.accessList: null;\n        this.blobVersionedHashes = (tx.blobVersionedHashes != null) ? tx.blobVersionedHashes: null;\n\n        this.#startBlock = -1;\n    }\n\n    /**\n     *  Returns a JSON-compatible representation of this transaction.\n     */\n    toJSON(): any {\n        const {\n            blockNumber, blockHash, index, hash, type, to, from, nonce,\n            data, signature, accessList, blobVersionedHashes\n        } = this;\n\n        return {\n            _type: \"TransactionResponse\",\n            accessList, blockNumber, blockHash,\n            blobVersionedHashes,\n            chainId: toJson(this.chainId),\n            data, from,\n            gasLimit: toJson(this.gasLimit),\n            gasPrice: toJson(this.gasPrice),\n            hash,\n            maxFeePerGas: toJson(this.maxFeePerGas),\n            maxPriorityFeePerGas: toJson(this.maxPriorityFeePerGas),\n            maxFeePerBlobGas: toJson(this.maxFeePerBlobGas),\n            nonce, signature, to, index, type,\n            value: toJson(this.value),\n        };\n    }\n\n    /**\n     *  Resolves to the Block that this transaction was included in.\n     *\n     *  This will return null if the transaction has not been included yet.\n     */\n    async getBlock(): Promise<null | Block> {\n        let blockNumber = this.blockNumber;\n        if (blockNumber == null) {\n            const tx = await this.getTransaction();\n            if (tx) { blockNumber = tx.blockNumber; }\n        }\n        if (blockNumber == null) { return null; }\n        const block = this.provider.getBlock(blockNumber);\n        if (block == null) { throw new Error(\"TODO\"); }\n        return block;\n    }\n\n    /**\n     *  Resolves to this transaction being re-requested from the\n     *  provider. This can be used if you have an unmined transaction\n     *  and wish to get an up-to-date populated instance.\n     */\n    async getTransaction(): Promise<null | TransactionResponse> {\n        return this.provider.getTransaction(this.hash);\n    }\n\n    /**\n     *  Resolve to the number of confirmations this transaction has.\n     */\n    async confirmations(): Promise<number> {\n        if (this.blockNumber == null) {\n            const { tx, blockNumber } = await resolveProperties({\n                tx: this.getTransaction(),\n                blockNumber: this.provider.getBlockNumber()\n            });\n\n            // Not mined yet...\n            if (tx == null || tx.blockNumber == null) { return 0; }\n\n            return blockNumber - tx.blockNumber + 1;\n        }\n\n        const blockNumber = await this.provider.getBlockNumber();\n        return blockNumber - this.blockNumber + 1;\n    }\n\n    /**\n     *  Resolves once this transaction has been mined and has\n     *  %%confirms%% blocks including it (default: ``1``) with an\n     *  optional %%timeout%%.\n     *\n     *  This can resolve to ``null`` only if %%confirms%% is ``0``\n     *  and the transaction has not been mined, otherwise this will\n     *  wait until enough confirmations have completed.\n     */\n    async wait(_confirms?: number, _timeout?: number): Promise<null | TransactionReceipt> {\n        const confirms = (_confirms == null) ? 1: _confirms;\n        const timeout = (_timeout == null) ? 0: _timeout;\n\n        let startBlock = this.#startBlock\n        let nextScan = -1;\n        let stopScanning = (startBlock === -1) ? true: false;\n        const checkReplacement = async () => {\n            // Get the current transaction count for this sender\n            if (stopScanning) { return null; }\n            const { blockNumber, nonce } = await resolveProperties({\n                blockNumber: this.provider.getBlockNumber(),\n                nonce: this.provider.getTransactionCount(this.from)\n            });\n\n            // No transaction or our nonce has not been mined yet; but we\n            // can start scanning later when we do start\n            if (nonce < this.nonce) {\n                startBlock = blockNumber;\n                return;\n            }\n\n            // We were mined; no replacement\n            if (stopScanning) { return null; }\n            const mined = await this.getTransaction();\n            if (mined && mined.blockNumber != null) { return; }\n\n            // We were replaced; start scanning for that transaction\n\n            // Starting to scan; look back a few extra blocks for safety\n            if (nextScan === -1) {\n                nextScan = startBlock - 3;\n                if (nextScan < this.#startBlock) { nextScan = this.#startBlock; }\n            }\n\n            while (nextScan <= blockNumber) {\n                // Get the next block to scan\n                if (stopScanning) { return null; }\n                const block = await this.provider.getBlock(nextScan, true);\n\n                // This should not happen; but we'll try again shortly\n                if (block == null) { return; }\n\n                // We were mined; no replacement\n                for (const hash of block) {\n                    if (hash === this.hash) { return; }\n                }\n\n                // Search for the transaction that replaced us\n                for (let i = 0; i < block.length; i++) {\n                    const tx: TransactionResponse = await block.getTransaction(i);\n\n                    if (tx.from === this.from && tx.nonce === this.nonce) {\n                        // Get the receipt\n                        if (stopScanning) { return null; }\n                        const receipt = await this.provider.getTransactionReceipt(tx.hash);\n\n                        // This should not happen; but we'll try again shortly\n                        if (receipt == null) { return; }\n\n                        // We will retry this on the next block (this case could be optimized)\n                        if ((blockNumber - receipt.blockNumber + 1) < confirms) { return; }\n\n                        // The reason we were replaced\n                        let reason: \"replaced\" | \"repriced\" | \"cancelled\" = \"replaced\";\n                        if (tx.data === this.data && tx.to === this.to && tx.value === this.value) {\n                            reason = \"repriced\";\n                        } else  if (tx.data === \"0x\" && tx.from === tx.to && tx.value === BN_0) {\n                            reason = \"cancelled\"\n                        }\n\n                        assert(false, \"transaction was replaced\", \"TRANSACTION_REPLACED\", {\n                            cancelled: (reason === \"replaced\" || reason === \"cancelled\"),\n                            reason,\n                            replacement: tx.replaceableTransaction(startBlock),\n                            hash: tx.hash,\n                            receipt\n                        });\n                    }\n                }\n\n                nextScan++;\n            }\n            return;\n        };\n\n        const checkReceipt = (receipt: null | TransactionReceipt) => {\n            if (receipt == null || receipt.status !== 0) { return receipt; }\n            assert(false, \"transaction execution reverted\", \"CALL_EXCEPTION\", {\n                action: \"sendTransaction\",\n                data: null, reason: null, invocation: null, revert: null,\n                transaction: {\n                    to: receipt.to,\n                    from: receipt.from,\n                    data: \"\" // @TODO: in v7, split out sendTransaction properties\n                }, receipt\n            });\n        };\n\n        const receipt = await this.provider.getTransactionReceipt(this.hash);\n\n        if (confirms === 0) { return checkReceipt(receipt); }\n\n        if (receipt) {\n            if ((await receipt.confirmations()) >= confirms) {\n                return checkReceipt(receipt);\n            }\n\n        } else {\n            // Check for a replacement; throws if a replacement was found\n            await checkReplacement();\n\n            // Allow null only when the confirms is 0\n            if (confirms === 0) { return null; }\n        }\n\n        const waiter = new Promise((resolve, reject) => {\n            // List of things to cancel when we have a result (one way or the other)\n            const cancellers: Array<() => void> = [ ];\n            const cancel = () => { cancellers.forEach((c) => c()); };\n\n            // On cancel, stop scanning for replacements\n            cancellers.push(() => { stopScanning = true; });\n\n            // Set up any timeout requested\n            if (timeout > 0) {\n                const timer = setTimeout(() => {\n                    cancel();\n                    reject(makeError(\"wait for transaction timeout\", \"TIMEOUT\"));\n                }, timeout);\n                cancellers.push(() => { clearTimeout(timer); });\n            }\n\n            const txListener = async (receipt: TransactionReceipt) => {\n                // Done; return it!\n                if ((await receipt.confirmations()) >= confirms) {\n                    cancel();\n                    try {\n                        resolve(checkReceipt(receipt));\n                    } catch (error) { reject(error); }\n                }\n            };\n            cancellers.push(() => { this.provider.off(this.hash, txListener); });\n            this.provider.on(this.hash, txListener);\n            // We support replacement detection; start checking\n            if (startBlock >= 0) {\n                const replaceListener = async () => {\n                    try {\n                        // Check for a replacement; this throws only if one is found\n                        await checkReplacement();\n\n                    } catch (error) {\n                        // We were replaced (with enough confirms); re-throw the error\n                        if (isError(error, \"TRANSACTION_REPLACED\")) {\n                            cancel();\n                            reject(error);\n                            return;\n                        }\n                    }\n\n                    // Rescheudle a check on the next block\n                    if (!stopScanning) {\n                        this.provider.once(\"block\", replaceListener);\n                    }\n                };\n                cancellers.push(() => { this.provider.off(\"block\", replaceListener); });\n                this.provider.once(\"block\", replaceListener);\n            }\n        });\n\n        return await <Promise<TransactionReceipt>>waiter;\n    }\n\n    /**\n     *  Returns ``true`` if this transaction has been included.\n     *\n     *  This is effective only as of the time the TransactionResponse\n     *  was instantiated. To get up-to-date information, use\n     *  [[getTransaction]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  non-null property values for properties that are null for\n     *  unmined transactions.\n     */\n    isMined(): this is MinedTransactionResponse {\n        return (this.blockHash != null);\n    }\n\n    /**\n     *  Returns true if the transaction is a legacy (i.e. ``type == 0``)\n     *  transaction.\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isLegacy(): this is (TransactionResponse & { accessList: null, maxFeePerGas: null, maxPriorityFeePerGas: null }) {\n        return (this.type === 0)\n    }\n\n    /**\n     *  Returns true if the transaction is a Berlin (i.e. ``type == 1``)\n     *  transaction. See [[link-eip-2070]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isBerlin(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: null, maxPriorityFeePerGas: null }) {\n        return (this.type === 1);\n    }\n\n    /**\n     *  Returns true if the transaction is a London (i.e. ``type == 2``)\n     *  transaction. See [[link-eip-1559]].\n     *\n     *  This provides a Type Guard that this transaction will have\n     *  the ``null``-ness for hardfork-specific properties set correctly.\n     */\n    isLondon(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint }){\n        return (this.type === 2);\n    }\n\n    /**\n     *  Returns true if hte transaction is a Cancun (i.e. ``type == 3``)\n     *  transaction. See [[link-eip-4844]].\n     */\n    isCancun(): this is (TransactionResponse & { accessList: AccessList, maxFeePerGas: bigint, maxPriorityFeePerGas: bigint, maxFeePerBlobGas: bigint, blobVersionedHashes: Array<string> }){\n        return (this.type === 3);\n    }\n\n    /**\n     *  Returns a filter which can be used to listen for orphan events\n     *  that evict this transaction.\n     */\n    removedEvent(): OrphanFilter {\n        assert(this.isMined(), \"unmined transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n        return createRemovedTransactionFilter(this);\n    }\n\n    /**\n     *  Returns a filter which can be used to listen for orphan events\n     *  that re-order this event against %%other%%.\n     */\n    reorderedEvent(other?: TransactionResponse): OrphanFilter {\n        assert(this.isMined(), \"unmined transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n\n        assert(!other || other.isMined(), \"unmined 'other' transaction canot be orphaned\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"removeEvent()\" });\n\n        return createReorderedTransactionFilter(this, other);\n    }\n\n    /**\n     *  Returns a new TransactionResponse instance which has the ability to\n     *  detect (and throw an error) if the transaction is replaced, which\n     *  will begin scanning at %%startBlock%%.\n     *\n     *  This should generally not be used by developers and is intended\n     *  primarily for internal use. Setting an incorrect %%startBlock%% can\n     *  have devastating performance consequences if used incorrectly.\n     */\n    replaceableTransaction(startBlock: number): TransactionResponse {\n        assertArgument(Number.isInteger(startBlock) && startBlock >= 0, \"invalid startBlock\", \"startBlock\", startBlock);\n        const tx = new TransactionResponse(this, this.provider);\n        tx.#startBlock = startBlock;\n        return tx;\n    }\n}\n\n\n//////////////////////\n// OrphanFilter\n\n/**\n *  An Orphan Filter allows detecting when an orphan block has\n *  resulted in dropping a block or transaction or has resulted\n *  in transactions changing order.\n *\n *  Not currently fully supported.\n */\nexport type OrphanFilter = {\n    orphan: \"drop-block\",\n    hash: string,\n    number: number\n} | {\n    orphan: \"drop-transaction\",\n    tx: { hash: string, blockHash: string, blockNumber: number },\n    other?: { hash: string, blockHash: string, blockNumber: number }\n} | {\n    orphan: \"reorder-transaction\",\n    tx: { hash: string, blockHash: string, blockNumber: number },\n    other?: { hash: string, blockHash: string, blockNumber: number }\n} | {\n    orphan: \"drop-log\",\n    log: {\n        transactionHash: string,\n        blockHash: string,\n        blockNumber: number,\n        address: string,\n        data: string,\n        topics: ReadonlyArray<string>,\n        index: number\n    }\n};\n\nfunction createOrphanedBlockFilter(block: { hash: string, number: number }): OrphanFilter {\n    return { orphan: \"drop-block\", hash: block.hash, number: block.number };\n}\n\nfunction createReorderedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }, other?: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter {\n    return { orphan: \"reorder-transaction\", tx, other };\n}\n\nfunction createRemovedTransactionFilter(tx: { hash: string, blockHash: string, blockNumber: number }): OrphanFilter {\n    return { orphan: \"drop-transaction\", tx };\n}\n\nfunction createRemovedLogFilter(log: { blockHash: string, transactionHash: string, blockNumber: number, address: string, data: string, topics: ReadonlyArray<string>, index: number }): OrphanFilter {\n    return { orphan: \"drop-log\", log: {\n        transactionHash: log.transactionHash,\n        blockHash: log.blockHash,\n        blockNumber: log.blockNumber,\n        address: log.address,\n        data: log.data,\n        topics: Object.freeze(log.topics.slice()),\n        index: log.index\n    } };\n}\n\n//////////////////////\n// EventFilter\n\n/**\n *  A **TopicFilter** provides a struture to define bloom-filter\n *  queries.\n *\n *  Each field that is ``null`` matches **any** value, a field that is\n *  a ``string`` must match exactly that value and ``array`` is\n *  effectively an ``OR``-ed set, where any one of those values must\n *  match.\n */\nexport type TopicFilter = Array<null | string | Array<string>>;\n\n// @TODO:\n//export type DeferableTopicFilter = Array<null | string | Promise<string> | Array<string | Promise<string>>>;\n\n/**\n *  An **EventFilter** allows efficiently filtering logs (also known as\n *  events) using bloom filters included within blocks.\n */\nexport interface EventFilter {\n    address?: AddressLike | Array<AddressLike>;\n    topics?: TopicFilter;\n}\n\n/**\n *  A **Filter** allows searching a specific range of blocks for mathcing\n *  logs.\n */\nexport interface Filter extends EventFilter {\n\n    /**\n     *  The start block for the filter (inclusive).\n     */\n    fromBlock?: BlockTag;\n\n    /**\n     *  The end block for the filter (inclusive).\n     */\n    toBlock?: BlockTag;\n}\n\n/**\n *  A **FilterByBlockHash** allows searching a specific block for mathcing\n *  logs.\n */\nexport interface FilterByBlockHash extends EventFilter {\n    /**\n     *  The blockhash of the specific block for the filter.\n     */\n    blockHash?: string;\n}\n\n\n//////////////////////\n// ProviderEvent\n\n/**\n *  A **ProviderEvent** provides the types of events that can be subscribed\n *  to on a [[Provider]].\n *\n *  Each provider may include additional possible events it supports, but\n *  the most commonly supported are:\n *\n *  **``\"block\"``** - calls the listener with the current block number on each\n *  new block.\n *\n *  **``\"error\"``** - calls the listener on each async error that occurs during\n *  the event loop, with the error.\n *\n *  **``\"debug\"``** - calls the listener on debug events, which can be used to\n *  troubleshoot network errors, provider problems, etc.\n *\n *  **``transaction hash``** - calls the listener on each block after the\n *  transaction has been mined; generally ``.once`` is more appropriate for\n *  this event.\n *\n *  **``Array``** - calls the listener on each log that matches the filter.\n *\n *  [[EventFilter]] - calls the listener with each matching log\n */\nexport type ProviderEvent = string | Array<string | Array<string>> | EventFilter | OrphanFilter;\n\n\n//////////////////////\n// Provider\n\n/**\n *  A **Provider** is the primary method to interact with the read-only\n *  content on Ethereum.\n *\n *  It allows access to details about accounts, blocks and transactions\n *  and the ability to query event logs and simulate contract execution.\n *\n *  Account data includes the [balance](getBalance),\n *  [transaction count](getTransactionCount), [code](getCode) and\n *  [state trie storage](getStorage).\n *\n *  Simulating execution can be used to [call](call),\n *  [estimate gas](estimateGas) and\n *  [get transaction results](getTransactionResult).\n *\n *  The [[broadcastTransaction]] is the only method which allows updating\n *  the blockchain, but it is usually accessed by a [[Signer]], since a\n *  private key must be used to sign the transaction before it can be\n *  broadcast.\n */\nexport interface Provider extends ContractRunner, EventEmitterable<ProviderEvent>, NameResolver {\n\n    /**\n     *  The provider iteself.\n     *\n     *  This is part of the necessary API for executing a contract, as\n     *  it provides a common property on any [[ContractRunner]] that\n     *  can be used to access the read-only portion of the runner.\n     */\n    provider: this;\n\n    /**\n     *  Shutdown any resources this provider is using. No additional\n     *  calls should be made to this provider after calling this.\n     */\n    destroy(): void;\n\n    ////////////////////\n    // State\n\n    /**\n     *  Get the current block number.\n     */\n    getBlockNumber(): Promise<number>;\n\n    /**\n     *  Get the connected [[Network]].\n     */\n    getNetwork(): Promise<Network>;\n\n    /**\n     *  Get the best guess at the recommended [[FeeData]].\n     */\n    getFeeData(): Promise<FeeData>;\n\n\n    ////////////////////\n    // Account\n\n    /**\n     *  Get the account balance (in wei) of %%address%%. If %%blockTag%%\n     *  is specified and the node supports archive access for that\n     *  %%blockTag%%, the balance is as of that [[BlockTag]].\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getBalance(address: AddressLike, blockTag?: BlockTag): Promise<bigint>;\n\n    /**\n     *  Get the number of transactions ever sent for %%address%%, which\n     *  is used as the ``nonce`` when sending a transaction. If\n     *  %%blockTag%% is specified and the node supports archive access\n     *  for that %%blockTag%%, the transaction count is as of that\n     *  [[BlockTag]].\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise<number>;\n\n    /**\n     *  Get the bytecode for %%address%%.\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getCode(address: AddressLike, blockTag?: BlockTag): Promise<string>\n\n    /**\n     *  Get the storage slot value for %%address%% at slot %%position%%.\n     *\n     *  @note On nodes without archive access enabled, the %%blockTag%% may be\n     *        **silently ignored** by the node, which may cause issues if relied on.\n     */\n    getStorage(address: AddressLike, position: BigNumberish, blockTag?: BlockTag): Promise<string>\n\n\n    ////////////////////\n    // Execution\n\n    /**\n     *  Estimates the amount of gas required to execute %%tx%%.\n     */\n    estimateGas(tx: TransactionRequest): Promise<bigint>;\n\n    /**\n     *  Simulate the execution of %%tx%%. If the call reverts, it will\n     *  throw a [[CallExceptionError]] which includes the revert data.\n     */\n    call(tx: TransactionRequest): Promise<string>\n\n    /**\n     *  Broadcasts the %%signedTx%% to the network, adding it to the\n     *  memory pool of any node for which the transaction meets the\n     *  rebroadcast requirements.\n     */\n    broadcastTransaction(signedTx: string): Promise<TransactionResponse>;\n\n\n    ////////////////////\n    // Queries\n\n    /**\n     *  Resolves to the block for %%blockHashOrBlockTag%%.\n     *\n     *  If %%prefetchTxs%%, and the backend supports including transactions\n     *  with block requests, all transactions will be included and the\n     *  [[Block]] object will not need to make remote calls for getting\n     *  transactions.\n     */\n    getBlock(blockHashOrBlockTag: BlockTag | string, prefetchTxs?: boolean): Promise<null | Block>;\n\n    /**\n     *  Resolves to the transaction for %%hash%%.\n     *\n     *  If the transaction is unknown or on pruning nodes which\n     *  discard old transactions this resolves to ``null``.\n     */\n    getTransaction(hash: string): Promise<null | TransactionResponse>;\n\n    /**\n     *  Resolves to the transaction receipt for %%hash%%, if mined.\n     *\n     *  If the transaction has not been mined, is unknown or on\n     *  pruning nodes which discard old transactions this resolves to\n     *  ``null``.\n     */\n    getTransactionReceipt(hash: string): Promise<null | TransactionReceipt>;\n\n    /**\n     *  Resolves to the result returned by the executions of %%hash%%.\n     *\n     *  This is only supported on nodes with archive access and with\n     *  the necessary debug APIs enabled.\n     */\n    getTransactionResult(hash: string): Promise<null | string>;\n\n\n    ////////////////////\n    // Bloom-filter Queries\n\n    /**\n     *  Resolves to the list of Logs that match %%filter%%\n     */\n    getLogs(filter: Filter | FilterByBlockHash): Promise<Array<Log>>;\n\n\n    ////////////////////\n    // ENS\n\n    /**\n     *  Resolves to the address configured for the %%ensName%% or\n     *  ``null`` if unconfigured.\n     */\n    resolveName(ensName: string): Promise<null | string>;\n\n    /**\n     *  Resolves to the ENS name associated for the %%address%% or\n     *  ``null`` if the //primary name// is not configured.\n     *\n     *  Users must perform additional steps to configure a //primary name//,\n     *  which is not currently common.\n     */\n    lookupAddress(address: string): Promise<null | string>;\n\n    /**\n     *  Waits until the transaction %%hash%% is mined and has %%confirms%%\n     *  confirmations.\n     */\n    waitForTransaction(hash: string, confirms?: number, timeout?: number): Promise<null | TransactionReceipt>;\n\n    /**\n     *  Resolves to the block at %%blockTag%% once it has been mined.\n     *\n     *  This can be useful for waiting some number of blocks by using\n     *  the ``currentBlockNumber + N``.\n     */\n    waitForBlock(blockTag?: BlockTag): Promise<Block>;\n}\n", "// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport {\n    Block, Log, TransactionReceipt, TransactionResponse\n} from \"../providers/provider.js\";\nimport { defineProperties, EventPayload } from \"../utils/index.js\";\n\nimport type { EventFragment, Interface, Result } from \"../abi/index.js\";\nimport type { Listener } from \"../utils/index.js\";\nimport type {\n    Provider\n} from \"../providers/index.js\";\n\nimport type { BaseContract } from \"./contract.js\";\nimport type { ContractEventName } from \"./types.js\";\n\n/**\n *  An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class EventLog extends Log {\n    /**\n     *  The Contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The matching event.\n     */\n    readonly fragment!: EventFragment;\n\n    /**\n     *  The parsed arguments passed to the event by ``emit``.\n     */\n    readonly args!: Result;\n\n    /**\n     * @_ignore:\n     */\n    constructor(log: Log, iface: Interface, fragment: EventFragment) {\n        super(log, log.provider);\n        const args = iface.decodeEventLog(fragment, log.data, log.topics);\n        defineProperties<EventLog>(this, { args, fragment, interface: iface });\n    }\n\n    /**\n     *  The name of the event.\n     */\n    get eventName(): string { return this.fragment.name; }\n\n    /**\n     *  The signature of the event.\n     */\n    get eventSignature(): string { return this.fragment.format(); }\n}\n\n/**\n *  An **EventLog** contains additional properties parsed from the [[Log]].\n */\nexport class UndecodedEventLog extends Log {\n\n    /**\n     *  The error encounted when trying to decode the log.\n     */\n    readonly error!: Error;\n\n    /**\n     * @_ignore:\n     */\n    constructor(log: Log, error: Error) {\n        super(log, log.provider);\n        defineProperties<UndecodedEventLog>(this, { error });\n    }\n}\n\n/**\n *  A **ContractTransactionReceipt** includes the parsed logs from a\n *  [[TransactionReceipt]].\n */\nexport class ContractTransactionReceipt extends TransactionReceipt {\n    readonly #iface: Interface;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(iface: Interface, provider: Provider, tx: TransactionReceipt) {\n        super(tx, provider);\n        this.#iface = iface;\n    }\n\n    /**\n     *  The parsed logs for any [[Log]] which has a matching event in the\n     *  Contract ABI.\n     */\n    get logs(): Array<EventLog | Log> {\n        return super.logs.map((log) => {\n            const fragment = log.topics.length ? this.#iface.getEvent(log.topics[0]): null;\n            if (fragment) {\n                try {\n                    return new EventLog(log, this.#iface, fragment)\n                } catch (error: any) {\n                    return new UndecodedEventLog(log, error);\n                }\n            }\n\n            return log;\n        });\n    }\n\n}\n\n/**\n *  A **ContractTransactionResponse** will return a\n *  [[ContractTransactionReceipt]] when waited on.\n */\nexport class ContractTransactionResponse extends TransactionResponse {\n    readonly #iface: Interface;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(iface: Interface, provider: Provider, tx: TransactionResponse) {\n        super(tx, provider);\n        this.#iface = iface;\n    }\n\n    /**\n     *  Resolves once this transaction has been mined and has\n     *  %%confirms%% blocks including it (default: ``1``) with an\n     *  optional %%timeout%%.\n     *\n     *  This can resolve to ``null`` only if %%confirms%% is ``0``\n     *  and the transaction has not been mined, otherwise this will\n     *  wait until enough confirmations have completed.\n     */\n    async wait(confirms?: number, timeout?: number): Promise<null | ContractTransactionReceipt> {\n        const receipt = await super.wait(confirms, timeout);\n        if (receipt == null) { return null; }\n        return new ContractTransactionReceipt(this.#iface, this.provider, receipt);\n    }\n}\n\n/**\n *  A **ContractUnknownEventPayload** is included as the last parameter to\n *  Contract Events when the event does not match any events in the ABI.\n */\nexport  class ContractUnknownEventPayload extends EventPayload<ContractEventName> {\n    /**\n     *  The log with no matching events.\n     */\n    readonly log!: Log;\n\n    /**\n     *  @_event:\n     */\n    constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, log: Log) {\n        super(contract, listener, filter);\n        defineProperties<ContractUnknownEventPayload>(this, { log });\n    }\n\n    /**\n     *  Resolves to the block the event occured in.\n     */\n    async getBlock(): Promise<Block> {\n        return await this.log.getBlock();\n    }\n\n    /**\n     *  Resolves to the transaction the event occured in.\n     */\n    async getTransaction(): Promise<TransactionResponse> {\n        return await this.log.getTransaction();\n    }\n\n    /**\n     *  Resolves to the transaction receipt the event occured in.\n     */\n    async getTransactionReceipt(): Promise<TransactionReceipt> {\n        return await this.log.getTransactionReceipt();\n    }\n}\n\n/**\n *  A **ContractEventPayload** is included as the last parameter to\n *  Contract Events when the event is known.\n */\nexport class ContractEventPayload extends ContractUnknownEventPayload {\n\n    /**\n     *  The matching event.\n     */\n    declare readonly fragment: EventFragment;\n\n    /**\n     *  The log, with parsed properties.\n     */\n    declare readonly log: EventLog;\n\n    /**\n     *  The parsed arguments passed to the event by ``emit``.\n     */\n    declare readonly args: Result;\n\n    /**\n     *  @_ignore:\n     */\n    constructor(contract: BaseContract, listener: null | Listener, filter: ContractEventName, fragment: EventFragment, _log: Log) {\n        super(contract, listener, filter, new EventLog(_log, contract.interface, fragment));\n        const args = contract.interface.decodeEventLog(fragment, this.log.data, this.log.topics);\n        defineProperties<ContractEventPayload>(this, { args, fragment });\n    }\n\n    /**\n     *  The event name.\n     */\n    get eventName(): string {\n        return this.fragment.name;\n    }\n\n    /**\n     *  The event signature.\n     */\n    get eventSignature(): string {\n        return this.fragment.format();\n    }\n}\n", "import { Interface, Typed } from \"../abi/index.js\";\nimport { isAddressable, resolveAddress } from \"../address/index.js\";\n// import from provider.ts instead of index.ts to prevent circular dep\n// from EtherscanProvider\nimport { copyRequest, Log, TransactionResponse } from \"../providers/provider.js\";\nimport {\n    defineProperties, getBigInt, isCallException, isHexString, resolveProperties,\n    isError, makeError, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport {\n    ContractEventPayload, ContractUnknownEventPayload,\n    ContractTransactionResponse,\n    EventLog, UndecodedEventLog\n} from \"./wrappers.js\";\n\nimport type { EventFragment, FunctionFragment, InterfaceAbi, ParamType, Result } from \"../abi/index.js\";\nimport type { Addressable, NameResolver } from \"../address/index.js\";\nimport type { EventEmitterable, Listener } from \"../utils/index.js\";\nimport type {\n    BlockTag, ContractRunner, Provider, TransactionRequest, TopicFilter\n} from \"../providers/index.js\";\n\nimport type {\n    BaseContractMethod,\n    ContractEventName,\n    ContractInterface,\n    ContractMethodArgs,\n    ContractMethod,\n    ContractEventArgs,\n    ContractEvent,\n    ContractTransaction,\n    DeferredTopicFilter,\n    WrappedFallback\n} from \"./types.js\";\n\nconst BN_0 = BigInt(0);\n\ninterface ContractRunnerCaller extends ContractRunner {\n    call: (tx: TransactionRequest) => Promise<string>;\n}\n\ninterface ContractRunnerEstimater extends ContractRunner {\n    estimateGas: (tx: TransactionRequest) => Promise<bigint>;\n}\n\ninterface ContractRunnerSender extends ContractRunner {\n    sendTransaction: (tx: TransactionRequest) => Promise<TransactionResponse>;\n}\n\ninterface ContractRunnerResolver extends ContractRunner {\n    resolveName: (name: string | Addressable) => Promise<null | string>;\n}\n\nfunction canCall(value: any): value is ContractRunnerCaller {\n    return (value && typeof(value.call) === \"function\");\n}\n\nfunction canEstimate(value: any): value is ContractRunnerEstimater {\n    return (value && typeof(value.estimateGas) === \"function\");\n}\n\nfunction canResolve(value: any): value is ContractRunnerResolver {\n    return (value && typeof(value.resolveName) === \"function\");\n}\n\nfunction canSend(value: any): value is ContractRunnerSender {\n    return (value && typeof(value.sendTransaction) === \"function\");\n}\n\nfunction getResolver(value: any): undefined | NameResolver {\n    if (value != null) {\n        if (canResolve(value)) { return value; }\n        if (value.provider) { return value.provider; }\n    }\n    return undefined;\n}\n\nclass PreparedTopicFilter implements DeferredTopicFilter {\n    #filter: Promise<TopicFilter>;\n    readonly fragment!: EventFragment;\n\n    constructor(contract: BaseContract, fragment: EventFragment, args: Array<any>) {\n        defineProperties<PreparedTopicFilter>(this, { fragment });\n        if (fragment.inputs.length < args.length) {\n            throw new Error(\"too many arguments\");\n        }\n\n        // Recursively descend into args and resolve any addresses\n        const runner = getRunner(contract.runner, \"resolveName\");\n        const resolver = canResolve(runner) ? runner: null;\n        this.#filter = (async function() {\n            const resolvedArgs = await Promise.all(fragment.inputs.map((param, index) => {\n                const arg = args[index];\n                if (arg == null) { return null; }\n\n                return param.walkAsync(args[index], (type, value) => {\n                    if (type === \"address\") {\n                        if (Array.isArray(value)) {\n                            return Promise.all(value.map((v) => resolveAddress(v, resolver)));\n                        }\n                        return resolveAddress(value, resolver);\n                    }\n                    return value;\n                });\n            }));\n\n            return contract.interface.encodeFilterTopics(fragment, resolvedArgs);\n        })();\n    }\n\n    getTopicFilter(): Promise<TopicFilter> {\n        return this.#filter;\n    }\n}\n\n\n// A = Arguments passed in as a tuple\n// R = The result type of the call (i.e. if only one return type,\n//     the qualified type, otherwise Result)\n// D = The type the default call will return (i.e. R for view/pure,\n//     TransactionResponse otherwise)\n//export interface ContractMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse> {\n\nfunction getRunner<T extends ContractRunner>(value: any, feature: keyof ContractRunner): null | T {\n    if (value == null) { return null; }\n    if (typeof(value[feature]) === \"function\") { return value; }\n    if (value.provider && typeof(value.provider[feature]) === \"function\") {\n        return value.provider;\n    }\n    return null;\n}\n\nfunction getProvider(value: null | ContractRunner): null | Provider {\n    if (value == null) { return null; }\n    return value.provider || null;\n}\n\n/**\n *  @_ignore:\n */\nexport async function copyOverrides<O extends string = \"data\" | \"to\">(arg: any, allowed?: Array<string>): Promise<Omit<ContractTransaction, O>> {\n\n    // Make sure the overrides passed in are a valid overrides object\n    const _overrides = Typed.dereference(arg, \"overrides\");\n    assertArgument(typeof(_overrides) === \"object\", \"invalid overrides parameter\", \"overrides\", arg);\n\n    // Create a shallow copy (we'll deep-ify anything needed during normalizing)\n    const overrides = copyRequest(_overrides);\n\n    assertArgument(overrides.to == null || (allowed || [ ]).indexOf(\"to\") >= 0,\n      \"cannot override to\", \"overrides.to\", overrides.to);\n    assertArgument(overrides.data == null || (allowed || [ ]).indexOf(\"data\") >= 0,\n      \"cannot override data\", \"overrides.data\", overrides.data);\n\n    // Resolve any from\n    if (overrides.from) { overrides.from = overrides.from; }\n\n    return <Omit<ContractTransaction, O>>overrides;\n}\n\n/**\n *  @_ignore:\n */\nexport async function resolveArgs(_runner: null | ContractRunner, inputs: ReadonlyArray<ParamType>, args: Array<any>): Promise<Array<any>> {\n    // Recursively descend into args and resolve any addresses\n    const runner = getRunner(_runner, \"resolveName\");\n    const resolver = canResolve(runner) ? runner: null;\n    return await Promise.all(inputs.map((param, index) => {\n        return param.walkAsync(args[index], (type, value) => {\n            value = Typed.dereference(value, type);\n            if (type === \"address\") { return resolveAddress(value, resolver); }\n            return value;\n        });\n    }));\n}\n\nfunction buildWrappedFallback(contract: BaseContract): WrappedFallback {\n\n    const populateTransaction = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<ContractTransaction> {\n        // If an overrides was passed in, copy it and normalize the values\n\n        const tx: ContractTransaction = <any>(await copyOverrides<\"data\">(overrides, [ \"data\" ]));\n        tx.to = await contract.getAddress();\n\n        if (tx.from) {\n            tx.from = await resolveAddress(tx.from, getResolver(contract.runner));\n        }\n\n        const iface = contract.interface;\n\n        const noValue = (getBigInt((tx.value || BN_0), \"overrides.value\") === BN_0);\n        const noData = ((tx.data || \"0x\") === \"0x\");\n\n        if (iface.fallback && !iface.fallback.payable && iface.receive && !noData && !noValue) {\n            assertArgument(false, \"cannot send data to receive or send value to non-payable fallback\", \"overrides\", overrides);\n        }\n\n        assertArgument(iface.fallback || noData,\n          \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n\n        // Only allow payable contracts to set non-zero value\n        const payable = iface.receive || (iface.fallback && iface.fallback.payable);\n        assertArgument(payable || noValue,\n          \"cannot send value to non-payable fallback\", \"overrides.value\", tx.value);\n\n        // Only allow fallback contracts to set non-empty data\n        assertArgument(iface.fallback || noData,\n          \"cannot send data to receive-only contract\", \"overrides.data\", tx.data);\n\n        return tx;\n    }\n\n    const staticCall = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<string> {\n        const runner = getRunner(contract.runner, \"call\");\n        assert(canCall(runner), \"contract runner does not support calling\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n\n        const tx = await populateTransaction(overrides);\n\n        try {\n            return await runner.call(tx);\n        } catch (error: any) {\n            if (isCallException(error) && error.data) {\n                throw contract.interface.makeError(error.data, tx);\n            }\n            throw error;\n        }\n    }\n\n    const send = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<ContractTransactionResponse> {\n        const runner = contract.runner;\n        assert(canSend(runner), \"contract runner does not support sending transactions\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n\n        const tx = await runner.sendTransaction(await populateTransaction(overrides));\n        const provider = getProvider(contract.runner);\n        // @TODO: the provider can be null; make a custom dummy provider that will throw a\n        // meaningful error\n        return new ContractTransactionResponse(contract.interface, <Provider>provider, tx);\n    }\n\n    const estimateGas = async function(overrides?: Omit<TransactionRequest, \"to\">): Promise<bigint> {\n        const runner = getRunner(contract.runner, \"estimateGas\");\n        assert(canEstimate(runner), \"contract runner does not support gas estimation\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n\n        return await runner.estimateGas(await populateTransaction(overrides));\n    }\n\n    const method = async (overrides?: Omit<TransactionRequest, \"to\">) => {\n        return await send(overrides);\n    };\n\n    defineProperties<any>(method, {\n        _contract: contract,\n\n        estimateGas,\n        populateTransaction,\n        send, staticCall\n    });\n\n    return <WrappedFallback>method;\n}\n\nfunction buildWrappedMethod<A extends Array<any> = Array<any>, R = any, D extends R | ContractTransactionResponse = ContractTransactionResponse>(contract: BaseContract, key: string): BaseContractMethod<A, R, D> {\n\n    const getFragment = function(...args: ContractMethodArgs<A>): FunctionFragment {\n        const fragment = contract.interface.getFunction(key, args);\n        assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fragment\",\n            info: { key, args }\n        });\n        return fragment;\n    }\n\n    const populateTransaction = async function(...args: ContractMethodArgs<A>): Promise<ContractTransaction> {\n        const fragment = getFragment(...args);\n\n        // If an overrides was passed in, copy it and normalize the values\n        let overrides: Omit<ContractTransaction, \"data\" | \"to\"> = { };\n        if (fragment.inputs.length + 1 === args.length) {\n            overrides = await copyOverrides(args.pop());\n\n            if (overrides.from) {\n                overrides.from = await resolveAddress(overrides.from, getResolver(contract.runner));\n            }\n        }\n\n        if (fragment.inputs.length !== args.length) {\n            throw new Error(\"internal error: fragment inputs doesn't match arguments; should not happen\");\n        }\n\n        const resolvedArgs = await resolveArgs(contract.runner, fragment.inputs, args);\n\n        return Object.assign({ }, overrides, await resolveProperties({\n            to: contract.getAddress(),\n            data: contract.interface.encodeFunctionData(fragment, resolvedArgs)\n        }));\n    }\n\n    const staticCall = async function(...args: ContractMethodArgs<A>): Promise<R> {\n        const result = await staticCallResult(...args);\n        if (result.length === 1) { return result[0]; }\n        return <R><unknown>result;\n    }\n\n    const send = async function(...args: ContractMethodArgs<A>): Promise<ContractTransactionResponse> {\n        const runner = contract.runner;\n        assert(canSend(runner), \"contract runner does not support sending transactions\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"sendTransaction\" });\n\n        const tx = await runner.sendTransaction(await populateTransaction(...args));\n        const provider = getProvider(contract.runner);\n        // @TODO: the provider can be null; make a custom dummy provider that will throw a\n        // meaningful error\n        return new ContractTransactionResponse(contract.interface, <Provider>provider, tx);\n    }\n\n    const estimateGas = async function(...args: ContractMethodArgs<A>): Promise<bigint> {\n        const runner = getRunner(contract.runner, \"estimateGas\");\n        assert(canEstimate(runner), \"contract runner does not support gas estimation\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"estimateGas\" });\n\n        return await runner.estimateGas(await populateTransaction(...args));\n    }\n\n    const staticCallResult = async function(...args: ContractMethodArgs<A>): Promise<Result> {\n        const runner = getRunner(contract.runner, \"call\");\n        assert(canCall(runner), \"contract runner does not support calling\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"call\" });\n\n        const tx = await populateTransaction(...args);\n\n        let result = \"0x\";\n        try {\n            result = await runner.call(tx);\n        } catch (error: any) {\n            if (isCallException(error) && error.data) {\n                throw contract.interface.makeError(error.data, tx);\n            }\n            throw error;\n        }\n\n        const fragment = getFragment(...args);\n        return contract.interface.decodeFunctionResult(fragment, result);\n    };\n\n    const method = async (...args: ContractMethodArgs<A>) => {\n        const fragment = getFragment(...args);\n        if (fragment.constant) { return await staticCall(...args); }\n        return await send(...args);\n    };\n\n    defineProperties<any>(method, {\n        name: contract.interface.getFunctionName(key),\n        _contract: contract, _key: key,\n\n        getFragment,\n\n        estimateGas,\n        populateTransaction,\n        send, staticCall, staticCallResult,\n    });\n\n    // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n    Object.defineProperty(method, \"fragment\", {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n            const fragment = contract.interface.getFunction(key);\n            assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"fragment\",\n                info: { key }\n            });\n            return fragment;\n        }\n    });\n\n    return <BaseContractMethod<A, R, D>>method;\n}\n\nfunction buildWrappedEvent<A extends Array<any> = Array<any>>(contract: BaseContract, key: string): ContractEvent<A> {\n\n    const getFragment = function(...args: ContractEventArgs<A>): EventFragment {\n        const fragment = contract.interface.getEvent(key, args);\n\n        assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"fragment\",\n            info: { key, args }\n        });\n\n        return fragment;\n    }\n\n    const method = function(...args: ContractMethodArgs<A>): PreparedTopicFilter {\n        return new PreparedTopicFilter(contract, getFragment(...args), args);\n    };\n\n    defineProperties<any>(method, {\n        name: contract.interface.getEventName(key),\n        _contract: contract, _key: key,\n\n        getFragment\n    });\n\n    // Only works on non-ambiguous keys (refined fragment is always non-ambiguous)\n    Object.defineProperty(method, \"fragment\", {\n        configurable: false,\n        enumerable: true,\n        get: () => {\n            const fragment = contract.interface.getEvent(key);\n\n            assert(fragment, \"no matching fragment\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"fragment\",\n                info: { key }\n            });\n\n            return fragment;\n        }\n    });\n\n    return <ContractEvent<A>><unknown>method;\n}\n\ntype Sub = {\n    tag: string;\n    listeners: Array<{ listener: Listener, once: boolean }>,\n    start: () => void;\n    stop: () => void;\n};\n\n\n// The combination of TypeScrype, Private Fields and Proxies makes\n// the world go boom; so we hide variables with some trickery keeping\n// a symbol attached to each BaseContract which its sub-class (even\n// via a Proxy) can reach and use to look up its internal values.\n\nconst internal = Symbol.for(\"_ethersInternal_contract\");\ntype Internal = {\n    addrPromise: Promise<string>;\n    addr: null | string;\n\n    deployTx: null | ContractTransactionResponse;\n\n    subs: Map<string, Sub>;\n};\n\nconst internalValues: WeakMap<BaseContract, Internal> = new WeakMap();\n\nfunction setInternal(contract: BaseContract, values: Internal): void {\n    internalValues.set(contract[internal], values);\n}\n\nfunction getInternal(contract: BaseContract): Internal {\n    return internalValues.get(contract[internal]) as Internal;\n}\n\nfunction isDeferred(value: any): value is DeferredTopicFilter {\n    return (value && typeof(value) === \"object\" && (\"getTopicFilter\" in value) &&\n      (typeof(value.getTopicFilter) === \"function\") && value.fragment);\n}\n\nasync function getSubInfo(contract: BaseContract, event: ContractEventName): Promise<{ fragment: null | EventFragment, tag: string, topics: TopicFilter }> {\n    let topics: Array<null | string | Array<string>>;\n    let fragment: null | EventFragment = null;\n\n    // Convert named events to topicHash and get the fragment for\n    // events which need deconstructing.\n\n    if (Array.isArray(event)) {\n        const topicHashify = function(name: string): string {\n            if (isHexString(name, 32)) { return name; }\n            const fragment = contract.interface.getEvent(name);\n            assertArgument(fragment, \"unknown fragment\", \"name\", name);\n            return fragment.topicHash;\n        }\n\n        // Array of Topics and Names; e.g. `[ \"0x1234...89ab\", \"Transfer(address)\" ]`\n        topics = event.map((e) => {\n            if (e == null) { return null; }\n            if (Array.isArray(e)) { return e.map(topicHashify); }\n            return topicHashify(e);\n        });\n\n    } else if (event === \"*\") {\n        topics = [ null ];\n\n    } else if (typeof(event) === \"string\") {\n        if (isHexString(event, 32)) {\n            // Topic Hash\n            topics = [ event ];\n        } else {\n           // Name or Signature; e.g. `\"Transfer\", `\"Transfer(address)\"`\n            fragment = contract.interface.getEvent(event);\n            assertArgument(fragment, \"unknown fragment\", \"event\", event);\n            topics = [ fragment.topicHash ];\n        }\n\n    } else if (isDeferred(event)) {\n        // Deferred Topic Filter; e.g. `contract.filter.Transfer(from)`\n        topics = await event.getTopicFilter();\n\n    } else if (\"fragment\" in event) {\n        // ContractEvent; e.g. `contract.filter.Transfer`\n        fragment = event.fragment;\n        topics = [ fragment.topicHash ];\n\n    } else {\n        assertArgument(false, \"unknown event name\", \"event\", event);\n    }\n\n    // Normalize topics and sort TopicSets\n    topics = topics.map((t) => {\n        if (t == null) { return null; }\n        if (Array.isArray(t)) {\n            const items = Array.from(new Set(t.map((t) => t.toLowerCase())).values());\n            if (items.length === 1) { return items[0]; }\n            items.sort();\n            return items;\n        }\n        return t.toLowerCase();\n    });\n\n    const tag = topics.map((t) => {\n        if (t == null) { return \"null\"; }\n        if (Array.isArray(t)) { return t.join(\"|\"); }\n        return t;\n    }).join(\"&\");\n\n    return { fragment, tag, topics }\n}\n\nasync function hasSub(contract: BaseContract, event: ContractEventName): Promise<null | Sub> {\n    const { subs } = getInternal(contract);\n    return subs.get((await getSubInfo(contract, event)).tag) || null;\n}\n\nasync function getSub(contract: BaseContract, operation: string, event: ContractEventName): Promise<Sub> {\n    // Make sure our runner can actually subscribe to events\n    const provider = getProvider(contract.runner);\n    assert(provider, \"contract runner does not support subscribing\",\n        \"UNSUPPORTED_OPERATION\", { operation });\n\n    const { fragment, tag, topics } = await getSubInfo(contract, event);\n\n    const { addr, subs } = getInternal(contract);\n\n    let sub = subs.get(tag);\n    if (!sub) {\n        const address: string | Addressable = (addr ? addr: contract);\n        const filter = { address, topics };\n        const listener = (log: Log) => {\n            let foundFragment = fragment;\n            if (foundFragment == null) {\n                try {\n                    foundFragment = contract.interface.getEvent(log.topics[0]);\n                } catch (error) { }\n            }\n\n            // If fragment is null, we do not deconstruct the args to emit\n\n            if (foundFragment) {\n                const _foundFragment = foundFragment;\n                const args = fragment ? contract.interface.decodeEventLog(fragment, log.data, log.topics): [ ];\n                emit(contract, event, args, (listener: null | Listener) => {\n                    return new ContractEventPayload(contract, listener, event, _foundFragment, log);\n                });\n            } else {\n                emit(contract, event, [ ], (listener: null | Listener) => {\n                    return new ContractUnknownEventPayload(contract, listener, event, log);\n                });\n            }\n        };\n\n        let starting: Array<Promise<any>> = [ ];\n        const start = () => {\n            if (starting.length) { return; }\n            starting.push(provider.on(filter, listener));\n        };\n\n        const stop = async () => {\n            if (starting.length == 0) { return; }\n\n            let started = starting;\n            starting = [ ];\n            await Promise.all(started);\n            provider.off(filter, listener);\n        };\n\n        sub = { tag, listeners: [ ], start, stop };\n        subs.set(tag, sub);\n    }\n    return sub;\n}\n\n// We use this to ensure one emit resolves before firing the next to\n// ensure correct ordering (note this cannot throw and just adds the\n// notice to the event queu using setTimeout).\nlet lastEmit: Promise<any> = Promise.resolve();\n\ntype PayloadFunc = (listener: null | Listener) => ContractUnknownEventPayload;\n\nasync function _emit(contract: BaseContract, event: ContractEventName, args: Array<any>, payloadFunc: null | PayloadFunc): Promise<boolean> {\n    await lastEmit;\n\n    const sub = await hasSub(contract, event);\n    if (!sub) { return false; }\n\n    const count = sub.listeners.length;\n    sub.listeners = sub.listeners.filter(({ listener, once }) => {\n        const passArgs = Array.from(args);\n        if (payloadFunc) {\n            passArgs.push(payloadFunc(once ? null: listener));\n        }\n        try {\n            listener.call(contract, ...passArgs);\n        } catch (error) { }\n        return !once;\n    });\n\n    if (sub.listeners.length === 0) {\n        sub.stop();\n        getInternal(contract).subs.delete(sub.tag);\n    }\n\n    return (count > 0);\n}\n\nasync function emit(contract: BaseContract, event: ContractEventName, args: Array<any>, payloadFunc: null | PayloadFunc): Promise<boolean> {\n    try {\n        await lastEmit;\n    } catch (error) { }\n\n    const resultPromise = _emit(contract, event, args, payloadFunc);\n    lastEmit = resultPromise;\n    return await resultPromise;\n}\n\nconst passProperties = [ \"then\" ];\nexport class BaseContract implements Addressable, EventEmitterable<ContractEventName> {\n    /**\n     *  The target to connect to.\n     *\n     *  This can be an address, ENS name or any [[Addressable]], such as\n     *  another contract. To get the resovled address, use the ``getAddress``\n     *  method.\n     */\n    readonly target!: string | Addressable;\n\n    /**\n     *  The contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The connected runner. This is generally a [[Provider]] or a\n     *  [[Signer]], which dictates what operations are supported.\n     *\n     *  For example, a **Contract** connected to a [[Provider]] may\n     *  only execute read-only operations.\n     */\n    readonly runner!: null | ContractRunner;\n\n    /**\n     *  All the Events available on this contract.\n     */\n    readonly filters!: Record<string, ContractEvent>;\n\n    /**\n     *  @_ignore:\n     */\n    readonly [internal]: any;\n\n    /**\n     *  The fallback or receive function if any.\n     */\n    readonly fallback!: null | WrappedFallback;\n\n    /**\n     *  Creates a new contract connected to %%target%% with the %%abi%% and\n     *  optionally connected to a %%runner%% to perform operations on behalf\n     *  of.\n     */\n    constructor(target: string | Addressable, abi: Interface | InterfaceAbi, runner?: null | ContractRunner, _deployTx?: null | TransactionResponse) {\n        assertArgument(typeof(target) === \"string\" || isAddressable(target),\n            \"invalid value for Contract target\", \"target\", target);\n\n        if (runner == null) { runner = null; }\n        const iface = Interface.from(abi);\n        defineProperties<BaseContract>(this, { target, runner, interface: iface });\n\n        Object.defineProperty(this, internal, { value: { } });\n\n        let addrPromise;\n        let addr: null | string = null;\n\n        let deployTx: null | ContractTransactionResponse = null;\n        if (_deployTx) {\n            const provider = getProvider(runner);\n            // @TODO: the provider can be null; make a custom dummy provider that will throw a\n            // meaningful error\n            deployTx = new ContractTransactionResponse(this.interface, <Provider>provider, _deployTx);\n        }\n\n        let subs = new Map();\n\n        // Resolve the target as the address\n        if (typeof(target) === \"string\") {\n            if (isHexString(target)) {\n                addr = target;\n                addrPromise = Promise.resolve(target);\n\n            } else {\n                const resolver = getRunner(runner, \"resolveName\");\n                if (!canResolve(resolver)) {\n                    throw makeError(\"contract runner does not support name resolution\", \"UNSUPPORTED_OPERATION\", {\n                        operation: \"resolveName\"\n                    });\n                }\n\n                addrPromise = resolver.resolveName(target).then((addr) => {\n                    if (addr == null) {\n                        throw makeError(\"an ENS name used for a contract target must be correctly configured\", \"UNCONFIGURED_NAME\", {\n                            value: target\n                        });\n                    }\n                    getInternal(this).addr = addr;\n                    return addr;\n                });\n            }\n        } else {\n            addrPromise = target.getAddress().then((addr) => {\n                if (addr == null) { throw new Error(\"TODO\"); }\n                getInternal(this).addr = addr;\n                return addr;\n            });\n        }\n\n        // Set our private values\n        setInternal(this, { addrPromise, addr, deployTx, subs });\n\n        // Add the event filters\n        const filters = new Proxy({ }, {\n            get: (target, prop, receiver) => {\n                // Pass important checks (like `then` for Promise) through\n                if (typeof(prop) === \"symbol\" || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.get(target, prop, receiver);\n                }\n\n                try {\n                    return this.getEvent(prop);\n                } catch (error) {\n                    if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n                        throw error;\n                    }\n                }\n\n                return undefined;\n            },\n            has: (target, prop) => {\n                // Pass important checks (like `then` for Promise) through\n                if (passProperties.indexOf(<string>prop) >= 0) {\n                    return Reflect.has(target, prop);\n                }\n\n                return Reflect.has(target, prop) || this.interface.hasEvent(String(prop));\n            }\n        });\n        defineProperties<BaseContract>(this, { filters });\n\n        defineProperties<BaseContract>(this, {\n            fallback: ((iface.receive || iface.fallback) ? (buildWrappedFallback(this)): null)\n        });\n\n        // Return a Proxy that will respond to functions\n        return new Proxy(this, {\n            get: (target, prop, receiver) => {\n                if (typeof(prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.get(target, prop, receiver);\n                }\n\n                // Undefined properties should return undefined\n                try {\n                    return target.getFunction(prop);\n                } catch (error) {\n                    if (!isError(error, \"INVALID_ARGUMENT\") || error.argument !== \"key\") {\n                        throw error;\n                    }\n                }\n\n                return undefined;\n            },\n            has: (target, prop) => {\n                if (typeof(prop) === \"symbol\" || prop in target || passProperties.indexOf(prop) >= 0) {\n                    return Reflect.has(target, prop);\n                }\n\n                return target.interface.hasFunction(prop);\n            }\n        });\n\n    }\n\n    /**\n     *  Return a new Contract instance with the same target and ABI, but\n     *  a different %%runner%%.\n     */\n    connect(runner: null | ContractRunner): BaseContract {\n        return new BaseContract(this.target, this.interface, runner);\n    }\n\n    /**\n     *  Return a new Contract instance with the same ABI and runner, but\n     *  a different %%target%%.\n     */\n    attach(target: string | Addressable): BaseContract {\n        return new BaseContract(target, this.interface, this.runner);\n    }\n\n    /**\n     *  Return the resolved address of this Contract.\n     */\n    async getAddress(): Promise<string> { return await getInternal(this).addrPromise; }\n\n    /**\n     *  Return the deployed bytecode or null if no bytecode is found.\n     */\n    async getDeployedCode(): Promise<null | string> {\n        const provider = getProvider(this.runner);\n        assert(provider, \"runner does not support .provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"getDeployedCode\" });\n\n        const code = await provider.getCode(await this.getAddress());\n        if (code === \"0x\") { return null; }\n        return code;\n    }\n\n    /**\n     *  Resolve to this Contract once the bytecode has been deployed, or\n     *  resolve immediately if already deployed.\n     */\n    async waitForDeployment(): Promise<this> {\n        // We have the deployement transaction; just use that (throws if deployement fails)\n        const deployTx = this.deploymentTransaction();\n        if (deployTx) {\n            await deployTx.wait();\n            return this;\n        }\n\n        // Check for code\n        const code = await this.getDeployedCode();\n        if (code != null) { return this; }\n\n        // Make sure we can subscribe to a provider event\n        const provider = getProvider(this.runner);\n        assert(provider != null, \"contract runner does not support .provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"waitForDeployment\" });\n\n        return new Promise((resolve, reject) => {\n            const checkCode = async () => {\n                try {\n                    const code = await this.getDeployedCode();\n                    if (code != null) { return resolve(this); }\n                    provider.once(\"block\", checkCode);\n                } catch (error) {\n                    reject(error);\n                }\n            };\n            checkCode();\n        });\n    }\n\n    /**\n     *  Return the transaction used to deploy this contract.\n     *\n     *  This is only available if this instance was returned from a\n     *  [[ContractFactory]].\n     */\n    deploymentTransaction(): null | ContractTransactionResponse {\n        return getInternal(this).deployTx;\n    }\n\n    /**\n     *  Return the function for a given name. This is useful when a contract\n     *  method name conflicts with a JavaScript name such as ``prototype`` or\n     *  when using a Contract programatically.\n     */\n    getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T {\n        if (typeof(key) !== \"string\") { key = key.format(); }\n        const func = buildWrappedMethod(this, key);\n        return <T>func;\n    }\n\n    /**\n     *  Return the event for a given name. This is useful when a contract\n     *  event name conflicts with a JavaScript name such as ``prototype`` or\n     *  when using a Contract programatically.\n     */\n    getEvent(key: string | EventFragment): ContractEvent {\n        if (typeof(key) !== \"string\") { key = key.format(); }\n        return buildWrappedEvent(this, key);\n    }\n\n    /**\n     *  @_ignore:\n     */\n    async queryTransaction(hash: string): Promise<Array<EventLog>> {\n        throw new Error(\"@TODO\");\n    }\n\n    /*\n    // @TODO: this is a non-backwards compatible change, but will be added\n    //        in v7 and in a potential SmartContract class in an upcoming\n    //        v6 release\n    async getTransactionReceipt(hash: string): Promise<null | ContractTransactionReceipt> {\n        const provider = getProvider(this.runner);\n        assert(provider, \"contract runner does not have a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"queryTransaction\" });\n\n        const receipt = await provider.getTransactionReceipt(hash);\n        if (receipt == null) { return null; }\n\n        return new ContractTransactionReceipt(this.interface, provider, receipt);\n    }\n    */\n\n    /**\n     *  Provide historic access to event data for %%event%% in the range\n     *  %%fromBlock%% (default: ``0``) to %%toBlock%% (default: ``\"latest\"``)\n     *  inclusive.\n     */\n    async queryFilter(event: ContractEventName, fromBlock?: BlockTag, toBlock?: BlockTag): Promise<Array<EventLog | Log>> {\n        if (fromBlock == null) { fromBlock = 0; }\n        if (toBlock == null) { toBlock = \"latest\"; }\n        const { addr, addrPromise } = getInternal(this);\n        const address = (addr ? addr: (await addrPromise));\n        const { fragment, topics } = await getSubInfo(this, event);\n        const filter = { address, topics, fromBlock, toBlock };\n\n        const provider = getProvider(this.runner);\n        assert(provider, \"contract runner does not have a provider\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"queryFilter\" });\n\n        return (await provider.getLogs(filter)).map((log) => {\n            let foundFragment = fragment;\n            if (foundFragment == null) {\n                try {\n                    foundFragment = this.interface.getEvent(log.topics[0]);\n                } catch (error) { }\n            }\n\n            if (foundFragment) {\n                try {\n                    return new EventLog(log, this.interface, foundFragment);\n                } catch (error: any) {\n                    return new UndecodedEventLog(log, error);\n                }\n            }\n\n            return new Log(log, provider);\n        });\n    }\n\n    /**\n     *  Add an event %%listener%% for the %%event%%.\n     */\n    async on(event: ContractEventName, listener: Listener): Promise<this> {\n        const sub = await getSub(this, \"on\", event);\n        sub.listeners.push({ listener, once: false });\n        sub.start();\n        return this;\n    }\n\n    /**\n     *  Add an event %%listener%% for the %%event%%, but remove the listener\n     *  after it is fired once.\n     */\n    async once(event: ContractEventName, listener: Listener): Promise<this> {\n        const sub = await getSub(this, \"once\", event);\n        sub.listeners.push({ listener, once: true });\n        sub.start();\n        return this;\n    }\n\n    /**\n     *  Emit an %%event%% calling all listeners with %%args%%.\n     *\n     *  Resolves to ``true`` if any listeners were called.\n     */\n    async emit(event: ContractEventName, ...args: Array<any>): Promise<boolean> {\n        return await emit(this, event, args, null);\n    }\n\n    /**\n     *  Resolves to the number of listeners of %%event%% or the total number\n     *  of listeners if unspecified.\n     */\n    async listenerCount(event?: ContractEventName): Promise<number> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return 0; }\n            return sub.listeners.length;\n        }\n\n        const { subs } = getInternal(this);\n\n        let total = 0;\n        for (const { listeners } of subs.values()) {\n            total += listeners.length;\n        }\n        return total;\n    }\n\n    /**\n     *  Resolves to the listeners subscribed to %%event%% or all listeners\n     *  if unspecified.\n     */\n    async listeners(event?: ContractEventName): Promise<Array<Listener>> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return [ ]; }\n            return sub.listeners.map(({ listener }) => listener);\n        }\n\n        const { subs } = getInternal(this);\n\n        let result: Array<Listener> = [ ];\n        for (const { listeners } of subs.values()) {\n            result = result.concat(listeners.map(({ listener }) => listener));\n        }\n        return result;\n    }\n\n    /**\n     *  Remove the %%listener%% from the listeners for %%event%% or remove\n     *  all listeners if unspecified.\n     */\n    async off(event: ContractEventName, listener?: Listener): Promise<this> {\n        const sub = await hasSub(this, event);\n        if (!sub) { return this; }\n\n        if (listener) {\n            const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n            if (index >= 0) { sub.listeners.splice(index, 1); }\n        }\n\n        if (listener == null || sub.listeners.length === 0) {\n            sub.stop();\n            getInternal(this).subs.delete(sub.tag);\n        }\n\n        return this;\n    }\n\n    /**\n     *  Remove all the listeners for %%event%% or remove all listeners if\n     *  unspecified.\n     */\n    async removeAllListeners(event?: ContractEventName): Promise<this> {\n        if (event) {\n            const sub = await hasSub(this, event);\n            if (!sub) { return this; }\n            sub.stop();\n            getInternal(this).subs.delete(sub.tag);\n        } else {\n            const { subs } = getInternal(this);\n            for (const { tag, stop } of subs.values()) {\n                stop();\n                subs.delete(tag);\n            }\n        }\n\n        return this;\n    }\n\n    /**\n     *  Alias for [on].\n     */\n    async addListener(event: ContractEventName, listener: Listener): Promise<this> {\n        return await this.on(event, listener);\n    }\n\n    /**\n     *  Alias for [off].\n     */\n    async removeListener(event: ContractEventName, listener: Listener): Promise<this> {\n        return await this.off(event, listener);\n    }\n\n    /**\n     *  Create a new Class for the %%abi%%.\n     */\n    static buildClass<T = ContractInterface>(abi: Interface | InterfaceAbi): new (target: string, runner?: null | ContractRunner) => BaseContract & Omit<T, keyof BaseContract> {\n        class CustomContract extends BaseContract {\n            constructor(address: string, runner: null | ContractRunner = null) {\n                super(address, abi, runner);\n            }\n        }\n        return CustomContract as any;\n    };\n\n    /**\n     *  Create a new BaseContract with a specified Interface.\n     */\n    static from<T = ContractInterface>(target: string, abi: Interface | InterfaceAbi, runner?: null | ContractRunner): BaseContract & Omit<T, keyof BaseContract> {\n        if (runner == null) { runner = null; }\n        const contract = new this(target, abi, runner );\n        return contract as any;\n    }\n}\n\nfunction _ContractBase(): new (target: string | Addressable, abi: Interface | InterfaceAbi, runner?: null | ContractRunner) => BaseContract & Omit<ContractInterface, keyof BaseContract> {\n    return BaseContract as any;\n}\n\n/**\n *  A [[BaseContract]] with no type guards on its methods or events.\n */\nexport class Contract extends _ContractBase() { }\n", "\nimport { Interface } from \"../abi/index.js\";\nimport { getCreateAddress } from \"../address/index.js\";\nimport {\n    concat, defineProperties, getBytes, hexlify,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { BaseContract, copyOverrides, resolveArgs } from \"./contract.js\";\n\nimport type { InterfaceAbi } from \"../abi/index.js\";\nimport type { Addressable } from \"../address/index.js\";\nimport type { ContractRunner } from \"../providers/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type {\n    ContractInterface, ContractMethodArgs, ContractDeployTransaction,\n} from \"./types.js\";\nimport type { ContractTransactionResponse } from \"./wrappers.js\";\n\n\n// A = Arguments to the constructor\n// I = Interface of deployed contracts\n\n/**\n *  A **ContractFactory** is used to deploy a Contract to the blockchain.\n */\nexport class ContractFactory<A extends Array<any> = Array<any>, I = BaseContract> {\n\n    /**\n     *  The Contract Interface.\n     */\n    readonly interface!: Interface;\n\n    /**\n     *  The Contract deployment bytecode. Often called the initcode.\n     */\n    readonly bytecode!: string;\n\n    /**\n     *  The ContractRunner to deploy the Contract as.\n     */\n    readonly runner!: null | ContractRunner;\n\n    /**\n     *  Create a new **ContractFactory** with %%abi%% and %%bytecode%%,\n     *  optionally connected to %%runner%%.\n     *\n     *  The %%bytecode%% may be the ``bytecode`` property within the\n     *  standard Solidity JSON output.\n     */\n    constructor(abi: Interface | InterfaceAbi, bytecode: BytesLike | { object: string }, runner?: null | ContractRunner) {\n        const iface = Interface.from(abi);\n\n        // Dereference Solidity bytecode objects and allow a missing `0x`-prefix\n        if (bytecode instanceof Uint8Array) {\n            bytecode = hexlify(getBytes(bytecode));\n        } else {\n            if (typeof(bytecode) === \"object\") { bytecode = bytecode.object; }\n            if (!bytecode.startsWith(\"0x\")) { bytecode = \"0x\" + bytecode; }\n            bytecode = hexlify(getBytes(bytecode));\n        }\n\n        defineProperties<ContractFactory>(this, {\n            bytecode, interface: iface, runner: (runner || null)\n        });\n    }\n\n    attach(target: string | Addressable): BaseContract & Omit<I, keyof BaseContract> {\n        return new (<any>BaseContract)(target, this.interface, this.runner);\n    }\n\n    /**\n     *  Resolves to the transaction to deploy the contract, passing %%args%%\n     *  into the constructor.\n     */\n    async getDeployTransaction(...args: ContractMethodArgs<A>): Promise<ContractDeployTransaction> {\n        let overrides: Omit<ContractDeployTransaction, \"data\"> = { };\n\n        const fragment = this.interface.deploy;\n\n        if (fragment.inputs.length + 1 === args.length) {\n            overrides = await copyOverrides(args.pop());\n        }\n\n        if (fragment.inputs.length !== args.length) {\n            throw new Error(\"incorrect number of arguments to constructor\");\n        }\n\n        const resolvedArgs = await resolveArgs(this.runner, fragment.inputs, args);\n\n        const data = concat([ this.bytecode, this.interface.encodeDeploy(resolvedArgs) ]);\n        return Object.assign({ }, overrides, { data });\n    }\n\n    /**\n     *  Resolves to the Contract deployed by passing %%args%% into the\n     *  constructor.\n     *\n     *  This will resolve to the Contract before it has been deployed to the\n     *  network, so the [[BaseContract-waitForDeployment]] should be used before\n     *  sending any transactions to it.\n     */\n    async deploy(...args: ContractMethodArgs<A>): Promise<BaseContract & { deploymentTransaction(): ContractTransactionResponse } & Omit<I, keyof BaseContract>> {\n        const tx = await this.getDeployTransaction(...args);\n\n        assert(this.runner && typeof(this.runner.sendTransaction) === \"function\",\n            \"factory runner does not support sending transactions\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"sendTransaction\" });\n\n        const sentTx = await this.runner.sendTransaction(tx);\n        const address = getCreateAddress(sentTx);\n        return new (<any>BaseContract)(address, this.interface, this.runner, sentTx);\n    }\n\n    /**\n     *  Return a new **ContractFactory** with the same ABI and bytecode,\n     *  but connected to %%runner%%.\n     */\n    connect(runner: null | ContractRunner): ContractFactory<A, I> {\n        return new ContractFactory(this.interface, this.bytecode, runner);\n    }\n\n    /**\n     *  Create a new **ContractFactory** from the standard Solidity JSON output.\n     */\n    static fromSolidity<A extends Array<any> = Array<any>, I = ContractInterface>(output: any, runner?: ContractRunner): ContractFactory<A, I> {\n        assertArgument(output != null, \"bad compiler output\", \"output\", output);\n\n        if (typeof(output) === \"string\") { output = JSON.parse(output); }\n\n        const abi = output.abi;\n\n        let bytecode = \"\";\n        if (output.bytecode) {\n            bytecode = output.bytecode;\n        } else if (output.evm && output.evm.bytecode) {\n            bytecode = output.evm.bytecode;\n        }\n\n        return new this(abi, bytecode, runner);\n    }\n}\n", "/**\n *  ENS is a service which allows easy-to-remember names to map to\n *  network addresses.\n *\n *  @_section: api/providers/ens-resolver:ENS Resolver  [about-ens-rsolver]\n */\n\nimport { getAddress } from \"../address/index.js\";\nimport { ZeroAddress } from \"../constants/index.js\";\nimport { Contract } from \"../contract/index.js\";\nimport { dnsEncode, namehash } from \"../hash/index.js\";\nimport {\n    hexlify, isHexString, toBeHex,\n    defineProperties, encodeBase58,\n    assert, assertArgument, isError,\n    FetchRequest\n} from \"../utils/index.js\";\n\nimport type { FunctionFragment } from \"../abi/index.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport type { AbstractProvider, AbstractProviderPlugin } from \"./abstract-provider.js\";\nimport type { EnsPlugin } from \"./plugins-network.js\";\nimport type { Provider } from \"./provider.js\";\n\n// @TODO: This should use the fetch-data:ipfs gateway\n// Trim off the ipfs:// prefix and return the default gateway URL\nfunction getIpfsLink(link: string): string {\n    if (link.match(/^ipfs:\\/\\/ipfs\\//i)) {\n        link = link.substring(12);\n    } else if (link.match(/^ipfs:\\/\\//i)) {\n        link = link.substring(7);\n    } else {\n        assertArgument(false, \"unsupported IPFS format\", \"link\", link);\n    }\n\n    return `https:/\\/gateway.ipfs.io/ipfs/${ link }`;\n}\n\n/**\n *  The type of data found during a steip during avatar resolution.\n */\nexport type AvatarLinkageType = \"name\" | \"avatar\" | \"!avatar\" | \"url\" | \"data\" | \"ipfs\" |\n    \"erc721\" | \"erc1155\" | \"!erc721-caip\" | \"!erc1155-caip\" |\n    \"!owner\" | \"owner\" | \"!balance\" | \"balance\" |\n    \"metadata-url-base\" | \"metadata-url-expanded\" | \"metadata-url\" | \"!metadata-url\" |\n    \"!metadata\" | \"metadata\" |\n    \"!imageUrl\" | \"imageUrl-ipfs\" | \"imageUrl\" | \"!imageUrl-ipfs\";\n\n/**\n *  An individual record for each step during avatar resolution.\n */\nexport interface AvatarLinkage {\n    /**\n     *  The type of linkage.\n     */\n    type: AvatarLinkageType;\n\n    /**\n     *  The linkage value.\n     */\n    value: string;\n};\n\n/**\n *  When resolving an avatar for an ENS name, there are many\n *  steps involved, fetching metadata, validating results, et cetera.\n *\n *  Some applications may wish to analyse this data, or use this data\n *  to diagnose promblems, so an **AvatarResult** provides details of\n *  each completed step during avatar resolution.\n */\nexport interface AvatarResult {\n    /**\n     *  How the [[url]] was arrived at, resolving the many steps required\n     *  for an avatar URL.\n     */\n    linkage: Array<AvatarLinkage>;\n\n    /**\n     *  The avatar URL or null if the avatar was not set, or there was\n     *  an issue during validation (such as the address not owning the\n     *  avatar or a metadata error).\n     */\n    url: null | string;\n};\n\n/**\n *  A provider plugin super-class for processing multicoin address types.\n */\nexport abstract class MulticoinProviderPlugin implements AbstractProviderPlugin {\n    /**\n     *  The name.\n     */\n    readonly name!: string;\n\n    /**\n     *  Creates a new **MulticoinProviderPluing** for %%name%%.\n     */\n    constructor(name: string) {\n        defineProperties<MulticoinProviderPlugin>(this, { name });\n    }\n\n    connect(proivder: Provider): MulticoinProviderPlugin {\n        return this;\n    }\n\n    /**\n     *  Returns ``true`` if %%coinType%% is supported by this plugin.\n     */\n    supportsCoinType(coinType: number): boolean {\n        return false;\n    }\n\n    /**\n     *  Resolves to the encoded %%address%% for %%coinType%%.\n     */\n    async encodeAddress(coinType: number, address: string): Promise<string> {\n        throw new Error(\"unsupported coin\");\n    }\n\n    /**\n     *  Resolves to the decoded %%data%% for %%coinType%%.\n     */\n    async decodeAddress(coinType: number, data: BytesLike): Promise<string> {\n        throw new Error(\"unsupported coin\");\n    }\n}\n\nconst BasicMulticoinPluginId = \"org.ethers.plugins.provider.BasicMulticoin\";\n\n/**\n *  A **BasicMulticoinProviderPlugin** provides service for common\n *  coin types, which do not require additional libraries to encode or\n *  decode.\n */\nexport class BasicMulticoinProviderPlugin extends MulticoinProviderPlugin {\n    /**\n     *  Creates a new **BasicMulticoinProviderPlugin**.\n     */\n    constructor() {\n        super(BasicMulticoinPluginId);\n    }\n}\n\nconst matcherIpfs = new RegExp(\"^(ipfs):/\\/(.*)$\", \"i\");\nconst matchers = [\n    new RegExp(\"^(https):/\\/(.*)$\", \"i\"),\n    new RegExp(\"^(data):(.*)$\", \"i\"),\n    matcherIpfs,\n    new RegExp(\"^eip155:[0-9]+/(erc[0-9]+):(.*)$\", \"i\"),\n];\n\n/**\n *  A connected object to a resolved ENS name resolver, which can be\n *  used to query additional details.\n */\nexport class EnsResolver {\n    /**\n     *  The connected provider.\n     */\n    provider!: AbstractProvider;\n\n    /**\n     *  The address of the resolver.\n     */\n    address!: string;\n\n    /**\n     *  The name this resolver was resolved against.\n     */\n    name!: string;\n\n    // For EIP-2544 names, the ancestor that provided the resolver\n    #supports2544: null | Promise<boolean>;\n\n    #resolver: Contract;\n\n    constructor(provider: AbstractProvider, address: string, name: string) {\n        defineProperties<EnsResolver>(this, { provider, address, name });\n        this.#supports2544 = null;\n\n        this.#resolver = new Contract(address, [\n            \"function supportsInterface(bytes4) view returns (bool)\",\n            \"function resolve(bytes, bytes) view returns (bytes)\",\n            \"function addr(bytes32) view returns (address)\",\n            \"function addr(bytes32, uint) view returns (bytes)\",\n            \"function text(bytes32, string) view returns (string)\",\n            \"function contenthash(bytes32) view returns (bytes)\",\n        ], provider);\n\n    }\n\n    /**\n     *  Resolves to true if the resolver supports wildcard resolution.\n     */\n    async supportsWildcard(): Promise<boolean> {\n        if (this.#supports2544 == null) {\n            this.#supports2544 = (async () => {\n                try {\n                    return await this.#resolver.supportsInterface(\"0x9061b923\");\n                } catch (error) {\n                    // Wildcard resolvers must understand supportsInterface\n                    // and return true.\n                    if (isError(error, \"CALL_EXCEPTION\")) { return false; }\n\n                    // Let future attempts try again...\n                    this.#supports2544 = null;\n\n                    throw error;\n                }\n            })();\n        }\n\n        return await this.#supports2544;\n    }\n\n    async #fetch(funcName: string, params?: Array<any>): Promise<null | any> {\n        params = (params || []).slice();\n        const iface = this.#resolver.interface;\n\n        // The first parameters is always the nodehash\n        params.unshift(namehash(this.name))\n\n        let fragment: null | FunctionFragment = null;\n        if (await this.supportsWildcard()) {\n            fragment = iface.getFunction(funcName);\n            assert(fragment, \"missing fragment\", \"UNKNOWN_ERROR\", {\n                info: { funcName }\n            });\n\n            params = [\n                dnsEncode(this.name, 255),\n                iface.encodeFunctionData(fragment, params)\n            ];\n\n            funcName = \"resolve(bytes,bytes)\";\n        }\n\n        params.push({\n            enableCcipRead: true\n        });\n\n        try {\n            const result = await this.#resolver[funcName](...params);\n\n            if (fragment) {\n                return iface.decodeFunctionResult(fragment, result)[0];\n            }\n\n            return result;\n        } catch (error: any) {\n            if (!isError(error, \"CALL_EXCEPTION\")) { throw error; }\n        }\n\n        return null;\n    }\n\n    /**\n     *  Resolves to the address for %%coinType%% or null if the\n     *  provided %%coinType%% has not been configured.\n     */\n    async getAddress(coinType?: number): Promise<null | string> {\n        if (coinType == null) { coinType = 60; }\n        if (coinType === 60) {\n            try {\n                const result = await this.#fetch(\"addr(bytes32)\");\n\n                // No address\n                if (result == null || result === ZeroAddress) { return null; }\n\n                return result;\n            } catch (error: any) {\n                if (isError(error, \"CALL_EXCEPTION\")) { return null; }\n                throw error;\n            }\n        }\n\n        // Try decoding its EVM canonical chain as an EVM chain address first\n        if (coinType >= 0 && coinType < 0x80000000) {\n            let ethCoinType = coinType + 0x80000000;\n\n            const data = await this.#fetch(\"addr(bytes32,uint)\", [ ethCoinType ]);\n            if (isHexString(data, 20)) { return getAddress(data); }\n        }\n\n        let coinPlugin: null | MulticoinProviderPlugin = null;\n        for (const plugin of this.provider.plugins) {\n            if (!(plugin instanceof MulticoinProviderPlugin)) { continue; }\n            if (plugin.supportsCoinType(coinType)) {\n                coinPlugin = plugin;\n                break;\n            }\n        }\n\n        if (coinPlugin == null) { return null; }\n\n        // keccak256(\"addr(bytes32,uint256\")\n        const data = await this.#fetch(\"addr(bytes32,uint)\", [ coinType ]);\n\n        // No address\n        if (data == null || data === \"0x\") { return null; }\n\n        // Compute the address\n        const address = await coinPlugin.decodeAddress(coinType, data);\n\n        if (address != null) { return address; }\n\n        assert(false, `invalid coin data`, \"UNSUPPORTED_OPERATION\", {\n            operation: `getAddress(${ coinType })`,\n            info: { coinType, data }\n        });\n    }\n\n    /**\n     *  Resolves to the EIP-634 text record for %%key%%, or ``null``\n     *  if unconfigured.\n     */\n    async getText(key: string): Promise<null | string> {\n        const data = await this.#fetch(\"text(bytes32,string)\", [ key ]);\n        if (data == null || data === \"0x\") { return null; }\n        return data;\n    }\n\n    /**\n     *  Rsolves to the content-hash or ``null`` if unconfigured.\n     */\n    async getContentHash(): Promise<null | string> {\n        // keccak256(\"contenthash()\")\n        const data = await this.#fetch(\"contenthash(bytes32)\");\n\n        // No contenthash\n        if (data == null || data === \"0x\") { return null; }\n\n        // IPFS (CID: 1, Type: 70=DAG-PB, 72=libp2p-key)\n        const ipfs = data.match(/^0x(e3010170|e5010172)(([0-9a-f][0-9a-f])([0-9a-f][0-9a-f])([0-9a-f]*))$/);\n        if (ipfs) {\n            const scheme = (ipfs[1] === \"e3010170\") ? \"ipfs\": \"ipns\";\n            const length = parseInt(ipfs[4], 16);\n            if (ipfs[5].length === length * 2) {\n                return `${ scheme }:/\\/${ encodeBase58(\"0x\" + ipfs[2])}`;\n            }\n        }\n\n        // Swarm (CID: 1, Type: swarm-manifest; hash/length hard-coded to keccak256/32)\n        const swarm = data.match(/^0xe40101fa011b20([0-9a-f]*)$/)\n        if (swarm && swarm[1].length === 64) {\n            return `bzz:/\\/${ swarm[1] }`;\n        }\n\n        assert(false, `invalid or unsupported content hash data`, \"UNSUPPORTED_OPERATION\", {\n            operation: \"getContentHash()\",\n            info: { data }\n        });\n    }\n\n    /**\n     *  Resolves to the avatar url or ``null`` if the avatar is either\n     *  unconfigured or incorrectly configured (e.g. references an NFT\n     *  not owned by the address).\n     *\n     *  If diagnosing issues with configurations, the [[_getAvatar]]\n     *  method may be useful.\n     */\n    async getAvatar(): Promise<null | string> {\n        const avatar = await this._getAvatar();\n        return avatar.url;\n    }\n\n    /**\n     *  When resolving an avatar, there are many steps involved, such\n     *  fetching metadata and possibly validating ownership of an\n     *  NFT.\n     *\n     *  This method can be used to examine each step and the value it\n     *  was working from.\n     */\n    async _getAvatar(): Promise<AvatarResult> {\n        const linkage: Array<AvatarLinkage> = [ { type: \"name\", value: this.name } ];\n        try {\n            // test data for ricmoo.eth\n            //const avatar = \"eip155:1/erc721:0x265385c7f4132228A0d54EB1A9e7460b91c0cC68/29233\";\n            const avatar = await this.getText(\"avatar\");\n            if (avatar == null) {\n                linkage.push({ type: \"!avatar\", value: \"\" });\n                return { url: null, linkage };\n            }\n            linkage.push({ type: \"avatar\", value: avatar });\n\n            for (let i = 0; i < matchers.length; i++) {\n                const match = avatar.match(matchers[i]);\n                if (match == null) { continue; }\n\n                const scheme = match[1].toLowerCase();\n\n                switch (scheme) {\n                    case \"https\":\n                    case \"data\":\n                        linkage.push({ type: \"url\", value: avatar });\n                        return { linkage, url: avatar };\n                    case \"ipfs\": {\n                        const url = getIpfsLink(avatar);\n                        linkage.push({ type: \"ipfs\", value: avatar });\n                        linkage.push({ type: \"url\", value: url });\n                        return { linkage, url };\n                    }\n\n                    case \"erc721\":\n                    case \"erc1155\": {\n                        // Depending on the ERC type, use tokenURI(uint256) or url(uint256)\n                        const selector = (scheme === \"erc721\") ? \"tokenURI(uint256)\": \"uri(uint256)\";\n                        linkage.push({ type: scheme, value: avatar });\n\n                        // The owner of this name\n                        const owner = await this.getAddress();\n                        if (owner == null) {\n                            linkage.push({ type: \"!owner\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        const comps = (match[2] || \"\").split(\"/\");\n                        if (comps.length !== 2) {\n                            linkage.push({ type: <any>`!${ scheme }caip`, value: (match[2] || \"\") });\n                            return { url: null, linkage };\n                        }\n\n                        const tokenId = comps[1];\n\n                        const contract = new Contract(comps[0], [\n                            // ERC-721\n                            \"function tokenURI(uint) view returns (string)\",\n                            \"function ownerOf(uint) view returns (address)\",\n\n                            // ERC-1155\n                            \"function uri(uint) view returns (string)\",\n                            \"function balanceOf(address, uint256) view returns (uint)\"\n                        ], this.provider);\n\n                        // Check that this account owns the token\n                        if (scheme === \"erc721\") {\n                            const tokenOwner = await contract.ownerOf(tokenId);\n\n                            if (owner !== tokenOwner) {\n                                linkage.push({ type: \"!owner\", value: tokenOwner });\n                                return { url: null, linkage };\n                            }\n                            linkage.push({ type: \"owner\", value: tokenOwner });\n\n                        } else if (scheme === \"erc1155\") {\n                            const balance = await contract.balanceOf(owner, tokenId);\n                            if (!balance) {\n                                linkage.push({ type: \"!balance\", value: \"0\" });\n                                return { url: null, linkage };\n                            }\n                            linkage.push({ type: \"balance\", value: balance.toString() });\n                        }\n\n                        // Call the token contract for the metadata URL\n                        let metadataUrl = await contract[selector](tokenId);\n                        if (metadataUrl == null || metadataUrl === \"0x\") {\n                            linkage.push({ type: \"!metadata-url\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        linkage.push({ type: \"metadata-url-base\", value: metadataUrl });\n\n                        // ERC-1155 allows a generic {id} in the URL\n                        if (scheme === \"erc1155\") {\n                            metadataUrl = metadataUrl.replace(\"{id}\", toBeHex(tokenId, 32).substring(2));\n                            linkage.push({ type: \"metadata-url-expanded\", value: metadataUrl });\n                        }\n\n                        // Transform IPFS metadata links\n                        if (metadataUrl.match(/^ipfs:/i)) {\n                            metadataUrl = getIpfsLink(metadataUrl);\n                        }\n                        linkage.push({ type: \"metadata-url\", value: metadataUrl });\n\n                        // Get the token metadata\n                        let metadata: any = { };\n                        const response = await (new FetchRequest(metadataUrl)).send();\n                        response.assertOk();\n\n                        try {\n                            metadata = response.bodyJson;\n                        } catch (error) {\n                            try {\n                                linkage.push({ type: \"!metadata\", value: response.bodyText });\n                            } catch (error) {\n                                const bytes = response.body;\n                                if (bytes) {\n                                    linkage.push({ type: \"!metadata\", value: hexlify(bytes) });\n                                }\n                                return { url: null, linkage };\n                            }\n                            return { url: null, linkage };\n                        }\n\n                        if (!metadata) {\n                            linkage.push({ type: \"!metadata\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        linkage.push({ type: \"metadata\", value: JSON.stringify(metadata) });\n\n                        // Pull the image URL out\n                        let imageUrl = metadata.image;\n                        if (typeof(imageUrl) !== \"string\") {\n                            linkage.push({ type: \"!imageUrl\", value: \"\" });\n                            return { url: null, linkage };\n                        }\n\n                        if (imageUrl.match(/^(https:\\/\\/|data:)/i)) {\n                            // Allow\n                        } else {\n                            // Transform IPFS link to gateway\n                            const ipfs = imageUrl.match(matcherIpfs);\n                            if (ipfs == null) {\n                                linkage.push({ type: \"!imageUrl-ipfs\", value: imageUrl });\n                                return { url: null, linkage };\n                            }\n\n                            linkage.push({ type: \"imageUrl-ipfs\", value: imageUrl });\n                            imageUrl = getIpfsLink(imageUrl);\n                        }\n\n                        linkage.push({ type: \"url\", value: imageUrl });\n\n                        return { linkage, url: imageUrl };\n                    }\n                }\n            }\n        } catch (error) { }\n\n        return { linkage, url: null };\n    }\n\n    static async getEnsAddress(provider: Provider): Promise<string> {\n        const network = await provider.getNetwork();\n\n        const ensPlugin = network.getPlugin<EnsPlugin>(\"org.ethers.plugins.network.Ens\");\n\n        // No ENS...\n        assert(ensPlugin, \"network does not support ENS\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"getEnsAddress\", info: { network } });\n\n        return ensPlugin.address;\n    }\n\n    static async #getResolver(provider: Provider, name: string): Promise<null | string> {\n        const ensAddr = await EnsResolver.getEnsAddress(provider);\n\n        try {\n            const contract = new Contract(ensAddr, [\n                \"function resolver(bytes32) view returns (address)\"\n            ], provider);\n\n            const addr = await contract.resolver(namehash(name), {\n                enableCcipRead: true\n            });\n\n            if (addr === ZeroAddress) { return null; }\n            return addr;\n\n        } catch (error) {\n            // ENS registry cannot throw errors on resolver(bytes32),\n            // so probably a link error\n            throw error;\n        }\n\n        return null;\n    }\n\n    /**\n     *  Resolve to the ENS resolver for %%name%% using %%provider%% or\n     *  ``null`` if unconfigured.\n     */\n    static async fromName(provider: AbstractProvider, name: string): Promise<null | EnsResolver> {\n\n        let currentName = name;\n        while (true) {\n            if (currentName === \"\" || currentName === \".\") { return null; }\n\n            // Optimization since the eth node cannot change and does\n            // not have a wildcard resolver\n            if (name !== \"eth\" && currentName === \"eth\") { return null; }\n\n            // Check the current node for a resolver\n            const addr = await EnsResolver.#getResolver(provider, currentName);\n\n            // Found a resolver!\n            if (addr != null) {\n                const resolver = new EnsResolver(provider, addr, name);\n\n                // Legacy resolver found, using EIP-2544 so it isn't safe to use\n                if (currentName !== name && !(await resolver.supportsWildcard())) { return null; }\n\n                return resolver;\n            }\n\n            // Get the parent node\n            currentName = currentName.split(\".\").slice(1).join(\".\");\n        }\n    }\n}\n", "/**\n *  @_ignore\n */\nimport { getAddress, getCreateAddress } from \"../address/index.js\";\nimport { Signature } from \"../crypto/index.js\"\nimport { accessListify } from \"../transaction/index.js\";\nimport {\n    getBigInt, getNumber, hexlify, isHexString, zeroPadValue,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport type {\n    BlockParams, LogParams,\n    TransactionReceiptParams, TransactionResponseParams,\n} from \"./formatting.js\";\n\n\nconst BN_0 = BigInt(0);\n\nexport type FormatFunc = (value: any) => any;\n\nexport function allowNull(format: FormatFunc, nullValue?: any): FormatFunc {\n    return (function(value: any) {\n        if (value == null) { return nullValue; }\n        return format(value);\n    });\n}\n\nexport function arrayOf(format: FormatFunc, allowNull?: boolean): FormatFunc {\n    return ((array: any) => {\n        if (allowNull && array == null) { return null; }\n        if (!Array.isArray(array)) { throw new Error(\"not an array\"); }\n        return array.map((i) => format(i));\n    });\n}\n\n// Requires an object which matches a fleet of other formatters\n// Any FormatFunc may return `undefined` to have the value omitted\n// from the result object. Calls preserve `this`.\nexport function object(format: Record<string, FormatFunc>, altNames?: Record<string, Array<string>>): FormatFunc {\n    return ((value: any) => {\n        const result: any = { };\n        for (const key in format) {\n            let srcKey = key;\n            if (altNames && key in altNames && !(srcKey in value)) {\n                for (const altKey of altNames[key]) {\n                    if (altKey in value) {\n                        srcKey = altKey;\n                        break;\n                    }\n                }\n            }\n\n            try {\n                const nv = format[key](value[srcKey]);\n                if (nv !== undefined) { result[key] = nv; }\n            } catch (error) {\n                const message = (error instanceof Error) ? error.message: \"not-an-error\";\n                assert(false, `invalid value for value.${ key } (${ message })`, \"BAD_DATA\", { value })\n            }\n        }\n        return result;\n    });\n}\n\nexport function formatBoolean(value: any): boolean {\n    switch (value) {\n        case true: case \"true\":\n            return true;\n        case false: case \"false\":\n            return false;\n    }\n    assertArgument(false, `invalid boolean; ${ JSON.stringify(value) }`, \"value\", value);\n}\n\nexport function formatData(value: string): string {\n    assertArgument(isHexString(value, true), \"invalid data\", \"value\", value);\n    return value;\n}\n\nexport function formatHash(value: any): string {\n    assertArgument(isHexString(value, 32), \"invalid hash\", \"value\", value);\n    return value;\n}\n\nexport function formatUint256(value: any): string {\n    if (!isHexString(value)) {\n        throw new Error(\"invalid uint256\");\n    }\n    return zeroPadValue(value, 32);\n}\n\nconst _formatLog = object({\n    address: getAddress,\n    blockHash: formatHash,\n    blockNumber: getNumber,\n    data: formatData,\n    index: getNumber,\n    removed: allowNull(formatBoolean, false),\n    topics: arrayOf(formatHash),\n    transactionHash: formatHash,\n    transactionIndex: getNumber,\n}, {\n    index: [ \"logIndex\" ]\n});\n\nexport function formatLog(value: any): LogParams {\n    return _formatLog(value);\n}\n\nconst _formatBlock = object({\n    hash: allowNull(formatHash),\n    parentHash: formatHash,\n    parentBeaconBlockRoot: allowNull(formatHash, null),\n\n    number: getNumber,\n\n    timestamp: getNumber,\n    nonce: allowNull(formatData),\n    difficulty: getBigInt,\n\n    gasLimit: getBigInt,\n    gasUsed: getBigInt,\n\n    stateRoot: allowNull(formatHash, null),\n    receiptsRoot: allowNull(formatHash, null),\n\n    blobGasUsed: allowNull(getBigInt, null),\n    excessBlobGas: allowNull(getBigInt, null),\n\n    miner: allowNull(getAddress),\n    prevRandao: allowNull(formatHash, null),\n    extraData: formatData,\n\n    baseFeePerGas: allowNull(getBigInt)\n}, {\n    prevRandao: [ \"mixHash\" ]\n});\n\nexport function formatBlock(value: any): BlockParams {\n    const result = _formatBlock(value);\n    result.transactions = value.transactions.map((tx: string | TransactionResponseParams) => {\n        if (typeof(tx) === \"string\") { return tx; }\n        return formatTransactionResponse(tx);\n    });\n    return result;\n}\n\nconst _formatReceiptLog = object({\n    transactionIndex: getNumber,\n    blockNumber: getNumber,\n    transactionHash: formatHash,\n    address: getAddress,\n    topics: arrayOf(formatHash),\n    data: formatData,\n    index: getNumber,\n    blockHash: formatHash,\n}, {\n    index: [ \"logIndex\" ]\n});\n\nexport function formatReceiptLog(value: any): LogParams {\n    return _formatReceiptLog(value);\n}\n\nconst _formatTransactionReceipt = object({\n    to: allowNull(getAddress, null),\n    from: allowNull(getAddress, null),\n    contractAddress: allowNull(getAddress, null),\n    // should be allowNull(hash), but broken-EIP-658 support is handled in receipt\n    index: getNumber,\n    root: allowNull(hexlify),\n    gasUsed: getBigInt,\n    blobGasUsed: allowNull(getBigInt, null),\n    logsBloom: allowNull(formatData),\n    blockHash: formatHash,\n    hash: formatHash,\n    logs: arrayOf(formatReceiptLog),\n    blockNumber: getNumber,\n    //confirmations: allowNull(getNumber, null),\n    cumulativeGasUsed: getBigInt,\n    effectiveGasPrice: allowNull(getBigInt),\n    blobGasPrice: allowNull(getBigInt, null),\n    status: allowNull(getNumber),\n    type: allowNull(getNumber, 0)\n}, {\n    effectiveGasPrice: [ \"gasPrice\" ],\n    hash: [ \"transactionHash\" ],\n    index: [ \"transactionIndex\" ],\n});\n\nexport function formatTransactionReceipt(value: any): TransactionReceiptParams {\n    return _formatTransactionReceipt(value);\n}\n\nexport function formatTransactionResponse(value: any): TransactionResponseParams {\n\n    // Some clients (TestRPC) do strange things like return 0x0 for the\n    // 0 address; correct this to be a real address\n    if (value.to && getBigInt(value.to) === BN_0) {\n        value.to = \"0x0000000000000000000000000000000000000000\";\n    }\n\n    const result = object({\n        hash: formatHash,\n\n        // Some nodes do not return this, usually test nodes (like Ganache)\n        index: allowNull(getNumber, undefined),\n\n        type: (value: any) => {\n            if (value === \"0x\" || value == null) { return 0; }\n            return getNumber(value);\n        },\n        accessList: allowNull(accessListify, null),\n        blobVersionedHashes: allowNull(arrayOf(formatHash, true), null),\n\n        blockHash: allowNull(formatHash, null),\n        blockNumber: allowNull(getNumber, null),\n        transactionIndex: allowNull(getNumber, null),\n\n        from: getAddress,\n\n        // either (gasPrice) or (maxPriorityFeePerGas + maxFeePerGas) must be set\n        gasPrice: allowNull(getBigInt),\n        maxPriorityFeePerGas: allowNull(getBigInt),\n        maxFeePerGas: allowNull(getBigInt),\n        maxFeePerBlobGas: allowNull(getBigInt, null),\n\n        gasLimit: getBigInt,\n        to: allowNull(getAddress, null),\n        value: getBigInt,\n        nonce: getNumber,\n        data: formatData,\n\n        creates: allowNull(getAddress, null),\n\n        chainId: allowNull(getBigInt, null)\n    }, {\n        data: [ \"input\" ],\n        gasLimit: [ \"gas\" ],\n        index: [ \"transactionIndex\" ]\n    })(value);\n\n    // If to and creates are empty, populate the creates from the value\n    if (result.to == null && result.creates == null) {\n        result.creates = getCreateAddress(result);\n    }\n\n    // @TODO: Check fee data\n\n    // Add an access list to supported transaction types\n    if ((value.type === 1 || value.type === 2) && value.accessList == null) {\n        result.accessList = [ ];\n    }\n\n    // Compute the signature\n    if (value.signature) {\n        result.signature = Signature.from(value.signature);\n    } else {\n        result.signature = Signature.from(value);\n    }\n\n    // Some backends omit ChainId on legacy transactions, but we can compute it\n    if (result.chainId == null) {\n        const chainId = result.signature.legacyChainId;\n        if (chainId != null) { result.chainId = chainId; }\n    }\n\n\n    // @TODO: check chainID\n    /*\n    if (value.chainId != null) {\n        let chainId = value.chainId;\n\n        if (isHexString(chainId)) {\n            chainId = BigNumber.from(chainId).toNumber();\n        }\n\n        result.chainId = chainId;\n\n    } else {\n        let chainId = value.networkId;\n\n        // geth-etc returns chainId\n        if (chainId == null && result.v == null) {\n            chainId = value.chainId;\n        }\n\n        if (isHexString(chainId)) {\n            chainId = BigNumber.from(chainId).toNumber();\n        }\n\n        if (typeof(chainId) !== \"number\" && result.v != null) {\n            chainId = (result.v - 35) / 2;\n            if (chainId < 0) { chainId = 0; }\n            chainId = parseInt(chainId);\n        }\n\n        if (typeof(chainId) !== \"number\") { chainId = 0; }\n\n        result.chainId = chainId;\n    }\n    */\n\n    // 0x0000... should actually be null\n    if (result.blockHash && getBigInt(result.blockHash) === BN_0) {\n        result.blockHash = null;\n    }\n\n    return result;\n}\n", "import { defineProperties } from \"../utils/properties.js\";\n\nimport { assertArgument } from \"../utils/index.js\";\n\nimport type { FeeData, Provider } from \"./provider.js\";\nimport type { FetchRequest } from \"../utils/fetch.js\";\n\n\nconst EnsAddress = \"0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e\";\n\n/**\n *  A **NetworkPlugin** provides additional functionality on a [[Network]].\n */\nexport class NetworkPlugin {\n    /**\n     *  The name of the plugin.\n     *\n     *  It is recommended to use reverse-domain-notation, which permits\n     *  unique names with a known authority as well as hierarchal entries.\n     */\n    readonly name!: string;\n\n    /**\n     *  Creates a new **NetworkPlugin**.\n     */\n    constructor(name: string) {\n        defineProperties<NetworkPlugin>(this, { name });\n    }\n\n    /**\n     *  Creates a copy of this plugin.\n     */\n    clone(): NetworkPlugin {\n        return new NetworkPlugin(this.name);\n    }\n\n//    validate(network: Network): NetworkPlugin {\n//        return this;\n//    }\n}\n\n\n/**\n *  The gas cost parameters for a [[GasCostPlugin]].\n */\nexport type GasCostParameters = {\n    /**\n     *  The transactions base fee.\n     */\n    txBase?: number;\n\n    /**\n     *  The fee for creating a new account.\n     */\n    txCreate?: number;\n\n    /**\n     *  The fee per zero-byte in the data.\n     */\n    txDataZero?: number;\n\n    /**\n     *  The fee per non-zero-byte in the data.\n     */\n    txDataNonzero?: number;\n\n    /**\n     *  The fee per storage key in the [[link-eip-2930]] access list.\n     */\n    txAccessListStorageKey?: number;\n\n    /**\n     *  The fee per address in the [[link-eip-2930]] access list.\n     */\n    txAccessListAddress?: number;\n};\n\n/**\n *  A **GasCostPlugin** allows a network to provide alternative values when\n *  computing the intrinsic gas required for a transaction.\n */\nexport class GasCostPlugin extends NetworkPlugin implements GasCostParameters {\n    /**\n     *  The block number to treat these values as valid from.\n     *\n     *  This allows a hardfork to have updated values included as well as\n     *  mulutiple hardforks to be supported.\n     */\n    readonly effectiveBlock!: number;\n\n    /**\n     *  The transactions base fee.\n     */\n    readonly txBase!: number;\n\n    /**\n     *  The fee for creating a new account.\n     */\n    readonly txCreate!: number;\n\n    /**\n     *  The fee per zero-byte in the data.\n     */\n    readonly txDataZero!: number;\n\n    /**\n     *  The fee per non-zero-byte in the data.\n     */\n    readonly txDataNonzero!: number;\n\n    /**\n     *  The fee per storage key in the [[link-eip-2930]] access list.\n     */\n    readonly txAccessListStorageKey!: number;\n\n    /**\n     *  The fee per address in the [[link-eip-2930]] access list.\n     */\n    readonly txAccessListAddress!: number;\n\n\n    /**\n     *  Creates a new GasCostPlugin from %%effectiveBlock%% until the\n     *  latest block or another GasCostPlugin supercedes that block number,\n     *  with the associated %%costs%%.\n     */\n    constructor(effectiveBlock?: number, costs?: GasCostParameters) {\n        if (effectiveBlock == null) { effectiveBlock = 0; }\n        super(`org.ethers.network.plugins.GasCost#${ (effectiveBlock || 0) }`);\n\n        const props: Record<string, number> = { effectiveBlock };\n        function set(name: keyof GasCostParameters, nullish: number): void {\n            let value = (costs || { })[name];\n            if (value == null) { value = nullish; }\n            assertArgument(typeof(value) === \"number\", `invalud value for ${ name }`, \"costs\", costs);\n            props[name] = value;\n        }\n\n        set(\"txBase\", 21000);\n        set(\"txCreate\", 32000);\n        set(\"txDataZero\", 4);\n        set(\"txDataNonzero\", 16);\n        set(\"txAccessListStorageKey\", 1900);\n        set(\"txAccessListAddress\", 2400);\n\n        defineProperties<GasCostPlugin>(this, props);\n    }\n\n    clone(): GasCostPlugin {\n        return new GasCostPlugin(this.effectiveBlock, this);\n    }\n}\n\n/**\n *  An **EnsPlugin** allows a [[Network]] to specify the ENS Registry\n *  Contract address and the target network to use when using that\n *  contract.\n *\n *  Various testnets have their own instance of the contract to use, but\n *  in general, the mainnet instance supports multi-chain addresses and\n *  should be used.\n */\nexport class EnsPlugin extends NetworkPlugin {\n\n    /**\n     *  The ENS Registrty Contract address.\n     */\n    readonly address!: string;\n\n    /**\n     *  The chain ID that the ENS contract lives on.\n     */\n    readonly targetNetwork!: number;\n\n    /**\n     *  Creates a new **EnsPlugin** connected to %%address%% on the\n     *  %%targetNetwork%%. The default ENS address and mainnet is used\n     *  if unspecified.\n     */\n    constructor(address?: null | string, targetNetwork?: null | number) {\n        super(\"org.ethers.plugins.network.Ens\");\n        defineProperties<EnsPlugin>(this, {\n            address: (address || EnsAddress),\n            targetNetwork: ((targetNetwork == null) ? 1: targetNetwork)\n        });\n    }\n\n    clone(): EnsPlugin {\n        return new EnsPlugin(this.address, this.targetNetwork);\n    }\n}\n\n/**\n *  A **FeeDataNetworkPlugin** allows a network to provide and alternate\n *  means to specify its fee data.\n *\n *  For example, a network which does not support [[link-eip-1559]] may\n *  choose to use a Gas Station site to approximate the gas price.\n */\nexport class FeeDataNetworkPlugin extends NetworkPlugin {\n    readonly #feeDataFunc: (provider: Provider) => Promise<FeeData>;\n\n    /**\n     *  The fee data function provided to the constructor.\n     */\n    get feeDataFunc(): (provider: Provider) => Promise<FeeData> {\n        return this.#feeDataFunc;\n    }\n\n    /**\n     *  Creates a new **FeeDataNetworkPlugin**.\n     */\n    constructor(feeDataFunc: (provider: Provider) => Promise<FeeData>) {\n        super(\"org.ethers.plugins.network.FeeData\");\n        this.#feeDataFunc = feeDataFunc;\n    }\n\n    /**\n     *  Resolves to the fee data.\n     */\n    async getFeeData(provider: Provider): Promise<FeeData> {\n        return await this.#feeDataFunc(provider);\n    }\n\n    clone(): FeeDataNetworkPlugin {\n        return new FeeDataNetworkPlugin(this.#feeDataFunc);\n    }\n}\n\nexport class FetchUrlFeeDataNetworkPlugin extends NetworkPlugin {\n    readonly #url: string;\n    readonly #processFunc: (f: () => Promise<FeeData>, p: Provider, r: FetchRequest) => Promise<{ gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint }>;\n\n    /**\n     *  The URL to initialize the FetchRequest with in %%processFunc%%.\n     */\n    get url(): string { return this.#url; }\n\n    /**\n     *  The callback to use when computing the FeeData.\n     */\n    get processFunc(): (f: () => Promise<FeeData>, p: Provider, r: FetchRequest) => Promise<{ gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint }> { return this.#processFunc; }\n\n    /**\n     *  Creates a new **FetchUrlFeeDataNetworkPlugin** which will\n     *  be used when computing the fee data for the network.\n     */\n    constructor(url: string, processFunc: (f: () => Promise<FeeData>, p: Provider, r: FetchRequest) => Promise<{ gasPrice?: null | bigint, maxFeePerGas?: null | bigint, maxPriorityFeePerGas?: null | bigint }>) {\n        super(\"org.ethers.plugins.network.FetchUrlFeeDataPlugin\");\n        this.#url = url;\n        this.#processFunc = processFunc;\n    }\n\n    // We are immutable, so we can serve as our own clone\n    clone(): FetchUrlFeeDataNetworkPlugin { return this; }\n}\n\n/*\nexport class CustomBlockNetworkPlugin extends NetworkPlugin {\n    readonly #blockFunc: (provider: Provider, block: BlockParams<string>) => Block<string>;\n    readonly #blockWithTxsFunc: (provider: Provider, block: BlockParams<TransactionResponseParams>) => Block<TransactionResponse>;\n\n    constructor(blockFunc: (provider: Provider, block: BlockParams<string>) => Block<string>, blockWithTxsFunc: (provider: Provider, block: BlockParams<TransactionResponseParams>) => Block<TransactionResponse>) {\n        super(\"org.ethers.network-plugins.custom-block\");\n        this.#blockFunc = blockFunc;\n        this.#blockWithTxsFunc = blockWithTxsFunc;\n    }\n\n    async getBlock(provider: Provider, block: BlockParams<string>): Promise<Block<string>> {\n        return await this.#blockFunc(provider, block);\n    }\n\n    async getBlockions(provider: Provider, block: BlockParams<TransactionResponseParams>): Promise<Block<TransactionResponse>> {\n        return await this.#blockWithTxsFunc(provider, block);\n    }\n\n    clone(): CustomBlockNetworkPlugin {\n        return new CustomBlockNetworkPlugin(this.#blockFunc, this.#blockWithTxsFunc);\n    }\n}\n*/\n", "/**\n *  A **Network** encapsulates the various properties required to\n *  interact with a specific chain.\n *\n *  @_subsection: api/providers:Networks  [networks]\n */\n\nimport { accessListify } from \"../transaction/index.js\";\nimport { getBigInt, assert, assertArgument } from \"../utils/index.js\";\n\nimport {\n    EnsPlugin, FetchUrlFeeDataNetworkPlugin, GasCostPlugin\n} from \"./plugins-network.js\";\n\nimport type { BigNumberish } from \"../utils/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\nimport type { NetworkPlugin } from \"./plugins-network.js\";\n\n\n/**\n *  A Networkish can be used to allude to a Network, by specifing:\n *  - a [[Network]] object\n *  - a well-known (or registered) network name\n *  - a well-known (or registered) chain ID\n *  - an object with sufficient details to describe a network\n */\nexport type Networkish = Network | number | bigint | string | {\n    name?: string,\n    chainId?: number,\n    //layerOneConnection?: Provider,\n    ensAddress?: string,\n    ensNetwork?: number\n};\n\n\n\n\n/* * * *\n// Networks which operation against an L2 can use this plugin to\n// specify how to access L1, for the purpose of resolving ENS,\n// for example.\nexport class LayerOneConnectionPlugin extends NetworkPlugin {\n    readonly provider!: Provider;\n// @TODO: Rename to ChainAccess and allow for connecting to any chain\n    constructor(provider: Provider) {\n        super(\"org.ethers.plugins.layer-one-connection\");\n        defineProperties<LayerOneConnectionPlugin>(this, { provider });\n    }\n\n    clone(): LayerOneConnectionPlugin {\n        return new LayerOneConnectionPlugin(this.provider);\n    }\n}\n*/\n\n\nconst Networks: Map<string | bigint, () => Network> = new Map();\n\n\n/**\n *  A **Network** provides access to a chain's properties and allows\n *  for plug-ins to extend functionality.\n */\nexport class Network {\n    #name: string;\n    #chainId: bigint;\n\n    #plugins: Map<string, NetworkPlugin>;\n\n    /**\n     *  Creates a new **Network** for %%name%% and %%chainId%%.\n     */\n    constructor(name: string, chainId: BigNumberish) {\n        this.#name = name;\n        this.#chainId = getBigInt(chainId);\n        this.#plugins = new Map();\n    }\n\n    /**\n     *  Returns a JSON-compatible representation of a Network.\n     */\n    toJSON(): any {\n        return { name: this.name, chainId: String(this.chainId) };\n    }\n\n    /**\n     *  The network common name.\n     *\n     *  This is the canonical name, as networks migh have multiple\n     *  names.\n     */\n    get name(): string { return this.#name; }\n    set name(value: string) { this.#name =  value; }\n\n    /**\n     *  The network chain ID.\n     */\n    get chainId(): bigint { return this.#chainId; }\n    set chainId(value: BigNumberish) { this.#chainId = getBigInt(value, \"chainId\"); }\n\n    /**\n     *  Returns true if %%other%% matches this network. Any chain ID\n     *  must match, and if no chain ID is present, the name must match.\n     *\n     *  This method does not currently check for additional properties,\n     *  such as ENS address or plug-in compatibility.\n     */\n    matches(other: Networkish): boolean {\n        if (other == null) { return false; }\n\n        if (typeof(other) === \"string\") {\n            try {\n                return (this.chainId === getBigInt(other));\n            } catch (error) { }\n            return (this.name === other);\n        }\n\n        if (typeof(other) === \"number\" || typeof(other) === \"bigint\") {\n            try {\n                return (this.chainId === getBigInt(other));\n            } catch (error) { }\n            return false;\n        }\n\n        if (typeof(other) === \"object\") {\n            if (other.chainId != null) {\n                try {\n                    return (this.chainId === getBigInt(other.chainId));\n                } catch (error) { }\n                return false;\n            }\n            if (other.name != null) {\n                return (this.name === other.name);\n            }\n            return false;\n        }\n\n        return false;\n    }\n\n    /**\n     *  Returns the list of plugins currently attached to this Network.\n     */\n    get plugins(): Array<NetworkPlugin> {\n        return Array.from(this.#plugins.values());\n    }\n\n    /**\n     *  Attach a new %%plugin%% to this Network. The network name\n     *  must be unique, excluding any fragment.\n     */\n    attachPlugin(plugin: NetworkPlugin): this {\n        if (this.#plugins.get(plugin.name)) {\n            throw new Error(`cannot replace existing plugin: ${ plugin.name } `);\n        }\n        this.#plugins.set(plugin.name, plugin.clone());\n        return this;\n    }\n\n    /**\n     *  Return the plugin, if any, matching %%name%% exactly. Plugins\n     *  with fragments will not be returned unless %%name%% includes\n     *  a fragment.\n     */\n    getPlugin<T extends NetworkPlugin = NetworkPlugin>(name: string): null | T {\n        return <T>(this.#plugins.get(name)) || null;\n    }\n\n    /**\n     *  Gets a list of all plugins that match %%name%%, with otr without\n     *  a fragment.\n     */\n    getPlugins<T extends NetworkPlugin = NetworkPlugin>(basename: string): Array<T> {\n        return <Array<T>>(this.plugins.filter((p) => (p.name.split(\"#\")[0] === basename)));\n    }\n\n    /**\n     *  Create a copy of this Network.\n     */\n    clone(): Network {\n        const clone = new Network(this.name, this.chainId);\n        this.plugins.forEach((plugin) => {\n            clone.attachPlugin(plugin.clone());\n        });\n        return clone;\n    }\n\n    /**\n     *  Compute the intrinsic gas required for a transaction.\n     *\n     *  A GasCostPlugin can be attached to override the default\n     *  values.\n     */\n    computeIntrinsicGas(tx: TransactionLike): number {\n        const costs = this.getPlugin<GasCostPlugin>(\"org.ethers.plugins.network.GasCost\") || (new GasCostPlugin());\n\n        let gas = costs.txBase;\n        if (tx.to == null) { gas += costs.txCreate; }\n        if (tx.data) {\n            for (let i = 2; i < tx.data.length; i += 2) {\n                if (tx.data.substring(i, i + 2) === \"00\") {\n                    gas += costs.txDataZero;\n                } else {\n                    gas += costs.txDataNonzero;\n                }\n            }\n        }\n\n        if (tx.accessList) {\n            const accessList = accessListify(tx.accessList);\n            for (const addr in accessList) {\n                gas += costs.txAccessListAddress + costs.txAccessListStorageKey * accessList[addr].storageKeys.length;\n            }\n        }\n\n        return gas;\n    }\n\n    /**\n     *  Returns a new Network for the %%network%% name or chainId.\n     */\n    static from(network?: Networkish): Network {\n        injectCommonNetworks();\n\n        // Default network\n        if (network == null) { return Network.from(\"mainnet\"); }\n\n        // Canonical name or chain ID\n        if (typeof(network) === \"number\") { network = BigInt(network); }\n        if (typeof(network) === \"string\" || typeof(network) === \"bigint\") {\n            const networkFunc = Networks.get(network);\n            if (networkFunc) { return networkFunc(); }\n            if (typeof(network) === \"bigint\") {\n                return new Network(\"unknown\", network);\n            }\n\n            assertArgument(false, \"unknown network\", \"network\", network);\n        }\n\n        // Clonable with network-like abilities\n        if (typeof((<Network>network).clone) === \"function\") {\n            const clone = (<Network>network).clone();\n            //if (typeof(network.name) !== \"string\" || typeof(network.chainId) !== \"number\") {\n            //}\n            return clone;\n        }\n\n        // Networkish\n        if (typeof(network) === \"object\") {\n            assertArgument(typeof(network.name) === \"string\" && typeof(network.chainId) === \"number\",\n                \"invalid network object name or chainId\", \"network\", network);\n\n            const custom = new Network(<string>(network.name), <number>(network.chainId));\n\n            if ((<any>network).ensAddress || (<any>network).ensNetwork != null) {\n                custom.attachPlugin(new EnsPlugin((<any>network).ensAddress, (<any>network).ensNetwork));\n            }\n\n            //if ((<any>network).layerOneConnection) {\n            //    custom.attachPlugin(new LayerOneConnectionPlugin((<any>network).layerOneConnection));\n            //}\n\n            return custom;\n        }\n\n        assertArgument(false, \"invalid network\", \"network\", network);\n    }\n\n    /**\n     *  Register %%nameOrChainId%% with a function which returns\n     *  an instance of a Network representing that chain.\n     */\n    static register(nameOrChainId: string | number | bigint, networkFunc: () => Network): void {\n        if (typeof(nameOrChainId) === \"number\") { nameOrChainId = BigInt(nameOrChainId); }\n        const existing = Networks.get(nameOrChainId);\n        if (existing) {\n            assertArgument(false, `conflicting network for ${ JSON.stringify(existing.name) }`, \"nameOrChainId\", nameOrChainId);\n        }\n        Networks.set(nameOrChainId, networkFunc);\n    }\n}\n\n\ntype Options = {\n    ensNetwork?: number;\n    altNames?: Array<string>;\n    plugins?: Array<NetworkPlugin>;\n};\n\n// We don't want to bring in formatUnits because it is backed by\n// FixedNumber and we want to keep Networks tiny. The values\n// included by the Gas Stations are also IEEE 754 with lots of\n// rounding issues and exceed the strict checks formatUnits has.\nfunction parseUnits(_value: number | string, decimals: number): bigint {\n    const value = String(_value);\n    if (!value.match(/^[0-9.]+$/)) {\n        throw new Error(`invalid gwei value: ${ _value }`);\n    }\n\n    // Break into [ whole, fraction ]\n    const comps = value.split(\".\");\n    if (comps.length === 1) { comps.push(\"\"); }\n\n    // More than 1 decimal point or too many fractional positions\n    if (comps.length !== 2) {\n        throw new Error(`invalid gwei value: ${ _value }`);\n    }\n\n    // Pad the fraction to 9 decimalplaces\n    while (comps[1].length < decimals) { comps[1] += \"0\"; }\n\n    // Too many decimals and some non-zero ending, take the ceiling\n    if (comps[1].length > 9) {\n        let frac = BigInt(comps[1].substring(0, 9));\n        if (!comps[1].substring(9).match(/^0+$/)) { frac++; }\n        comps[1] = frac.toString();\n    }\n\n    return BigInt(comps[0] + comps[1]);\n}\n\n// Used by Polygon to use a gas station for fee data\nfunction getGasStationPlugin(url: string) {\n    return new FetchUrlFeeDataNetworkPlugin(url, async (fetchFeeData, provider, request) => {\n\n        // Prevent Cloudflare from blocking our request in node.js\n        request.setHeader(\"User-Agent\", \"ethers\");\n\n        let response;\n        try {\n            const [ _response, _feeData ] = await Promise.all([\n                request.send(), fetchFeeData()\n            ]);\n            response = _response;\n            const payload = response.bodyJson.standard;\n            const feeData = {\n                gasPrice: _feeData.gasPrice,\n                maxFeePerGas: parseUnits(payload.maxFee, 9),\n                maxPriorityFeePerGas: parseUnits(payload.maxPriorityFee, 9),\n            };\n            return feeData;\n        } catch (error: any) {\n            assert(false, `error encountered with polygon gas station (${ JSON.stringify(request.url) })`, \"SERVER_ERROR\", { request, response, error });\n        }\n    });\n}\n\n// See: https://chainlist.org\nlet injected = false;\nfunction injectCommonNetworks(): void {\n    if (injected) { return; }\n    injected = true;\n\n    /// Register popular Ethereum networks\n    function registerEth(name: string, chainId: number, options: Options): void {\n        const func = function() {\n            const network = new Network(name, chainId);\n\n            // We use 0 to disable ENS\n            if (options.ensNetwork != null) {\n                network.attachPlugin(new EnsPlugin(null, options.ensNetwork));\n            }\n\n            network.attachPlugin(new GasCostPlugin());\n\n            (options.plugins || []).forEach((plugin) => {\n                network.attachPlugin(plugin);\n            });\n\n            return network;\n        };\n\n        // Register the network by name and chain ID\n        Network.register(name, func);\n        Network.register(chainId, func);\n\n        if (options.altNames) {\n            options.altNames.forEach((name) => {\n                Network.register(name, func);\n            });\n        }\n    }\n\n    registerEth(\"mainnet\", 1, { ensNetwork: 1, altNames: [ \"homestead\" ] });\n    registerEth(\"ropsten\", 3, { ensNetwork: 3 });\n    registerEth(\"rinkeby\", 4, { ensNetwork: 4 });\n    registerEth(\"goerli\", 5, { ensNetwork: 5 });\n    registerEth(\"kovan\", 42, { ensNetwork: 42 });\n    registerEth(\"sepolia\", 11155111, { ensNetwork: 11155111 });\n    registerEth(\"holesky\", 17000, { ensNetwork: 17000 });\n\n    registerEth(\"classic\", 61, { });\n    registerEth(\"classicKotti\", 6, { });\n\n    registerEth(\"arbitrum\", 42161, {\n        ensNetwork: 1,\n    });\n    registerEth(\"arbitrum-goerli\", 421613, { });\n    registerEth(\"arbitrum-sepolia\", 421614, { });\n\n    registerEth(\"base\", 8453, { ensNetwork: 1 });\n    registerEth(\"base-goerli\", 84531, { });\n    registerEth(\"base-sepolia\", 84532, { });\n\n    registerEth(\"bnb\", 56, { ensNetwork: 1 });\n    registerEth(\"bnbt\", 97, { });\n\n    registerEth(\"linea\", 59144, { ensNetwork: 1 });\n    registerEth(\"linea-goerli\", 59140, { });\n    registerEth(\"linea-sepolia\", 59141, { });\n\n    registerEth(\"matic\", 137, {\n        ensNetwork: 1,\n        plugins: [\n            getGasStationPlugin(\"https:/\\/gasstation.polygon.technology/v2\")\n        ]\n    });\n    registerEth(\"matic-amoy\", 80002, { });\n    registerEth(\"matic-mumbai\", 80001, {\n        altNames: [ \"maticMumbai\", \"maticmum\" ],  // @TODO: Future remove these alts\n        plugins: [\n            getGasStationPlugin(\"https:/\\/gasstation-testnet.polygon.technology/v2\")\n        ]\n    });\n\n    registerEth(\"optimism\", 10, {\n        ensNetwork: 1,\n        plugins: [ ]\n    });\n    registerEth(\"optimism-goerli\", 420, { });\n    registerEth(\"optimism-sepolia\", 11155420, { });\n\n    registerEth(\"xdai\", 100, { ensNetwork: 1 });\n}\n", "import { assert, isHexString } from \"../utils/index.js\";\n\nimport type { AbstractProvider, Subscriber } from \"./abstract-provider.js\";\nimport type { EventFilter, OrphanFilter, ProviderEvent } from \"./provider.js\";\n\nfunction copy(obj: any): any {\n    return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n *  Return the polling subscriber for common events.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport function getPollingSubscriber(provider: AbstractProvider, event: ProviderEvent): Subscriber {\n    if (event === \"block\") { return new PollingBlockSubscriber(provider); }\n    if (isHexString(event, 32)) { return new PollingTransactionSubscriber(provider, event); }\n\n    assert(false, \"unsupported polling event\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"getPollingSubscriber\", info: { event }\n    });\n}\n\n// @TODO: refactor this\n\n/**\n *  A **PollingBlockSubscriber** polls at a regular interval for a change\n *  in the block number.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingBlockSubscriber implements Subscriber {\n    #provider: AbstractProvider;\n    #poller: null | number;\n\n    #interval: number;\n\n    // The most recent block we have scanned for events. The value -2\n    // indicates we still need to fetch an initial block number\n    #blockNumber: number;\n\n    /**\n     *  Create a new **PollingBlockSubscriber** attached to %%provider%%.\n     */\n    constructor(provider: AbstractProvider) {\n        this.#provider = provider;\n        this.#poller = null;\n        this.#interval = 4000;\n\n        this.#blockNumber = -2;\n    }\n\n    /**\n     *  The polling interval.\n     */\n    get pollingInterval(): number { return this.#interval; }\n    set pollingInterval(value: number) { this.#interval = value; }\n\n    async #poll(): Promise<void> {\n        try {\n            const blockNumber = await this.#provider.getBlockNumber();\n\n            // Bootstrap poll to setup our initial block number\n            if (this.#blockNumber === -2) {\n                this.#blockNumber = blockNumber;\n                return;\n            }\n\n            // @TODO: Put a cap on the maximum number of events per loop?\n\n            if (blockNumber !== this.#blockNumber) {\n                for (let b = this.#blockNumber + 1; b <= blockNumber; b++) {\n                    // We have been stopped\n                    if (this.#poller == null) { return; }\n\n                    await this.#provider.emit(\"block\", b);\n                }\n\n                this.#blockNumber = blockNumber;\n            }\n\n        } catch (error) {\n            // @TODO: Minor bump, add an \"error\" event to let subscribers\n            //        know things went awry.\n            //console.log(error);\n        }\n\n        // We have been stopped\n        if (this.#poller == null) { return; }\n\n        this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);\n    }\n\n    start(): void {\n        if (this.#poller) { return; }\n        this.#poller = this.#provider._setTimeout(this.#poll.bind(this), this.#interval);\n        this.#poll();\n    }\n\n    stop(): void {\n        if (!this.#poller) { return; }\n        this.#provider._clearTimeout(this.#poller);\n        this.#poller = null;\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        this.stop();\n        if (dropWhilePaused) { this.#blockNumber = -2; }\n    }\n\n    resume(): void {\n        this.start();\n    }\n}\n\n\n/**\n *  An **OnBlockSubscriber** can be sub-classed, with a [[_poll]]\n *  implmentation which will be called on every new block.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class OnBlockSubscriber implements Subscriber {\n    #provider: AbstractProvider;\n    #poll: (b: number) => void;\n    #running: boolean;\n\n    /**\n     *  Create a new **OnBlockSubscriber** attached to %%provider%%.\n     */\n    constructor(provider: AbstractProvider) {\n        this.#provider = provider;\n        this.#running = false;\n        this.#poll = (blockNumber: number) => {\n            this._poll(blockNumber, this.#provider);\n        }\n    }\n\n    /**\n     *  Called on every new block.\n     */\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        throw new Error(\"sub-classes must override this\");\n    }\n\n    start(): void {\n        if (this.#running) { return; }\n        this.#running = true;\n\n        this.#poll(-2);\n        this.#provider.on(\"block\", this.#poll);\n    }\n\n    stop(): void {\n        if (!this.#running) { return; }\n        this.#running = false;\n\n        this.#provider.off(\"block\", this.#poll);\n    }\n\n    pause(dropWhilePaused?: boolean): void { this.stop(); }\n    resume(): void { this.start(); }\n}\n\nexport class PollingBlockTagSubscriber extends OnBlockSubscriber {\n    readonly #tag: string;\n    #lastBlock: number;\n\n    constructor(provider: AbstractProvider, tag: string) {\n        super(provider);\n        this.#tag = tag;\n        this.#lastBlock = -2;\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        if (dropWhilePaused) { this.#lastBlock = -2; }\n        super.pause(dropWhilePaused);\n    }\n\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        const block = await provider.getBlock(this.#tag);\n        if (block == null) { return; }\n\n        if (this.#lastBlock === -2) {\n            this.#lastBlock = block.number;\n        } else if (block.number > this.#lastBlock) {\n            provider.emit(this.#tag, block.number);\n            this.#lastBlock = block.number;\n        }\n    }\n}\n\n\n/**\n *  @_ignore:\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingOrphanSubscriber extends OnBlockSubscriber {\n    #filter: OrphanFilter;\n\n    constructor(provider: AbstractProvider, filter: OrphanFilter) {\n        super(provider);\n        this.#filter = copy(filter);\n    }\n\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        throw new Error(\"@TODO\");\n        console.log(this.#filter);\n    }\n}\n\n/**\n *  A **PollingTransactionSubscriber** will poll for a given transaction\n *  hash for its receipt.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingTransactionSubscriber extends OnBlockSubscriber {\n    #hash: string;\n\n    /**\n     *  Create a new **PollingTransactionSubscriber** attached to\n     *  %%provider%%, listening for %%hash%%.\n     */\n    constructor(provider: AbstractProvider, hash: string) {\n        super(provider);\n        this.#hash = hash;\n    }\n\n    async _poll(blockNumber: number, provider: AbstractProvider): Promise<void> {\n        const tx = await provider.getTransactionReceipt(this.#hash);\n        if (tx) { provider.emit(this.#hash, tx); }\n    }\n}\n\n/**\n *  A **PollingEventSubscriber** will poll for a given filter for its logs.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class PollingEventSubscriber implements Subscriber {\n    #provider: AbstractProvider;\n    #filter: EventFilter;\n    #poller: (b: number) => void;\n\n    #running: boolean;\n\n    // The most recent block we have scanned for events. The value -2\n    // indicates we still need to fetch an initial block number\n    #blockNumber: number;\n\n    /**\n     *  Create a new **PollingTransactionSubscriber** attached to\n     *  %%provider%%, listening for %%filter%%.\n     */\n    constructor(provider: AbstractProvider, filter: EventFilter) {\n        this.#provider = provider;\n        this.#filter = copy(filter);\n        this.#poller = this.#poll.bind(this);\n        this.#running = false;\n        this.#blockNumber = -2;\n    }\n\n    async #poll(blockNumber: number): Promise<void> {\n        // The initial block hasn't been determined yet\n        if (this.#blockNumber === -2) { return; }\n\n        const filter = copy(this.#filter);\n        filter.fromBlock = this.#blockNumber + 1;\n        filter.toBlock = blockNumber;\n\n        const logs = await this.#provider.getLogs(filter);\n\n        // No logs could just mean the node has not indexed them yet,\n        // so we keep a sliding window of 60 blocks to keep scanning\n        if (logs.length === 0) {\n            if (this.#blockNumber < blockNumber - 60) {\n                this.#blockNumber = blockNumber - 60;\n            }\n            return;\n        }\n\n        for (const log of logs) {\n            this.#provider.emit(this.#filter, log);\n\n            // Only advance the block number when logs were found to\n            // account for networks (like BNB and Polygon) which may\n            // sacrifice event consistency for block event speed\n            this.#blockNumber = log.blockNumber;\n        }\n    }\n\n    start(): void {\n        if (this.#running) { return; }\n        this.#running = true;\n\n        if (this.#blockNumber === -2) {\n            this.#provider.getBlockNumber().then((blockNumber) => {\n                this.#blockNumber = blockNumber;\n            });\n        }\n        this.#provider.on(\"block\", this.#poller);\n    }\n\n    stop(): void {\n        if (!this.#running) { return; }\n        this.#running = false;\n\n        this.#provider.off(\"block\", this.#poller);\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        this.stop();\n        if (dropWhilePaused) { this.#blockNumber = -2; }\n    }\n\n    resume(): void {\n        this.start();\n    }\n}\n", "/**\n *  The available providers should suffice for most developers purposes,\n *  but the [[AbstractProvider]] class has many features which enable\n *  sub-classing it for specific purposes.\n *\n *  @_section: api/providers/abstract-provider: Subclassing Provider  [abstract-provider]\n */\n\n// @TODO\n// Event coalescence\n//   When we register an event with an async value (e.g. address is a Signer\n//   or ENS name), we need to add it immeidately for the Event API, but also\n//   need time to resolve the address. Upon resolving the address, we need to\n//   migrate the listener to the static event. We also need to maintain a map\n//   of Signer/ENS name to address so we can sync respond to listenerCount.\n\nimport { getAddress, resolveAddress } from \"../address/index.js\";\nimport { ZeroAddress } from \"../constants/index.js\";\nimport { Contract } from \"../contract/index.js\";\nimport { namehash } from \"../hash/index.js\";\nimport { Transaction } from \"../transaction/index.js\";\nimport {\n    concat, dataLength, dataSlice, hexlify, isHexString,\n    getBigInt, getBytes, getNumber,\n    isCallException, isError, makeError, assert, assertArgument,\n    FetchRequest,\n    toBeArray, toQuantity,\n    defineProperties, EventPayload, resolveProperties,\n    toUtf8String\n} from \"../utils/index.js\";\n\nimport { EnsResolver } from \"./ens-resolver.js\";\nimport {\n    formatBlock, formatLog, formatTransactionReceipt, formatTransactionResponse\n} from \"./format.js\";\nimport { Network } from \"./network.js\";\nimport { copyRequest, Block, FeeData, Log, TransactionReceipt, TransactionResponse } from \"./provider.js\";\nimport {\n    PollingBlockSubscriber, PollingBlockTagSubscriber, PollingEventSubscriber,\n    PollingOrphanSubscriber, PollingTransactionSubscriber\n} from \"./subscriber-polling.js\";\n\nimport type { Addressable, AddressLike } from \"../address/index.js\";\nimport type { BigNumberish, BytesLike } from \"../utils/index.js\";\nimport type { FetchResponse, Listener } from \"../utils/index.js\";\n\nimport type { Networkish } from \"./network.js\";\nimport type { FetchUrlFeeDataNetworkPlugin } from \"./plugins-network.js\";\n//import type { MaxPriorityFeePlugin } from \"./plugins-network.js\";\nimport type {\n    BlockParams, LogParams, TransactionReceiptParams,\n    TransactionResponseParams\n} from \"./formatting.js\";\n\nimport type {\n    BlockTag, EventFilter, Filter, FilterByBlockHash, OrphanFilter,\n    PreparedTransactionRequest, Provider, ProviderEvent,\n    TransactionRequest\n} from \"./provider.js\";\n\ntype Timer = ReturnType<typeof setTimeout>;\n\n\n// Constants\nconst BN_2 = BigInt(2);\n\nconst MAX_CCIP_REDIRECTS = 10;\n\nfunction isPromise<T = any>(value: any): value is Promise<T> {\n    return (value && typeof(value.then) === \"function\");\n}\n\nfunction getTag(prefix: string, value: any): string {\n    return prefix + \":\" + JSON.stringify(value, (k, v) => {\n        if (v == null) { return \"null\"; }\n        if (typeof(v) === \"bigint\") { return `bigint:${ v.toString() }`}\n        if (typeof(v) === \"string\") { return v.toLowerCase(); }\n\n        // Sort object keys\n        if (typeof(v) === \"object\" && !Array.isArray(v)) {\n            const keys = Object.keys(v);\n            keys.sort();\n            return keys.reduce((accum, key) => {\n                accum[key] = v[key];\n                return accum;\n            }, <any>{ });\n        }\n\n        return v;\n    });\n}\n\n/**\n *  The types of additional event values that can be emitted for the\n *  ``\"debug\"`` event.\n */\nexport type DebugEventAbstractProvider = {\n    action: \"sendCcipReadFetchRequest\",\n    request: FetchRequest\n    index: number\n    urls: Array<string>\n} | {\n    action: \"receiveCcipReadFetchResult\",\n    request: FetchRequest,\n    result: any\n} | {\n    action: \"receiveCcipReadFetchError\",\n    request: FetchRequest,\n    result: any\n} | {\n    action: \"sendCcipReadCall\",\n    transaction: { to: string, data: string }\n} | {\n    action: \"receiveCcipReadCallResult\",\n    transaction: { to: string, data: string }\n    result: string\n} | {\n    action: \"receiveCcipReadCallError\",\n    transaction: { to: string, data: string }\n    error: Error\n};\n\n\n/**\n *  The value passed to the [[AbstractProvider-_getSubscriber]] method.\n *\n *  Only developers sub-classing [[AbstractProvider[[ will care about this,\n *  if they are modifying a low-level feature of how subscriptions operate.\n */\nexport type Subscription = {\n    type: \"block\" | \"close\" | \"debug\" | \"error\" | \"finalized\" | \"network\" | \"pending\" | \"safe\",\n    tag: string\n} | {\n    type: \"transaction\",\n    tag: string,\n    hash: string\n} | {\n    type: \"event\",\n    tag: string,\n    filter: EventFilter\n} | {\n    type: \"orphan\",\n    tag: string,\n    filter: OrphanFilter\n};\n\n/**\n *  A **Subscriber** manages a subscription.\n *\n *  Only developers sub-classing [[AbstractProvider[[ will care about this,\n *  if they are modifying a low-level feature of how subscriptions operate.\n */\nexport interface Subscriber {\n    /**\n     *  Called initially when a subscriber is added the first time.\n     */\n    start(): void;\n\n    /**\n     *  Called when there are no more subscribers to the event.\n     */\n    stop(): void;\n\n    /**\n     *  Called when the subscription should pause.\n     *\n     *  If %%dropWhilePaused%%, events that occur while paused should not\n     *  be emitted [[resume]].\n     */\n    pause(dropWhilePaused?: boolean): void;\n\n    /**\n     *  Resume a paused subscriber.\n     */\n    resume(): void;\n\n    /**\n     *  The frequency (in ms) to poll for events, if polling is used by\n     *  the subscriber.\n     *\n     *  For non-polling subscribers, this must return ``undefined``.\n     */\n    pollingInterval?: number;\n}\n\n/**\n *  An **UnmanagedSubscriber** is useful for events which do not require\n *  any additional management, such as ``\"debug\"`` which only requires\n *  emit in synchronous event loop triggered calls.\n */\nexport class UnmanagedSubscriber implements Subscriber {\n    /**\n     *  The name fof the event.\n     */\n    name!: string;\n\n    /**\n     *  Create a new UnmanagedSubscriber with %%name%%.\n     */\n    constructor(name: string) { defineProperties<UnmanagedSubscriber>(this, { name }); }\n\n    start(): void { }\n    stop(): void { }\n\n    pause(dropWhilePaused?: boolean): void { }\n    resume(): void { }\n}\n\ntype Sub = {\n    tag: string;\n    nameMap: Map<string, string>\n    addressableMap: WeakMap<Addressable, string>;\n    listeners: Array<{ listener: Listener, once: boolean }>;\n    // @TODO: get rid of this, as it is (and has to be)\n    // tracked in subscriber\n    started: boolean;\n    subscriber: Subscriber;\n};\n\nfunction copy<T = any>(value: T): T {\n    return JSON.parse(JSON.stringify(value));\n}\n\nfunction concisify(items: Array<string>): Array<string> {\n    items = Array.from((new Set(items)).values())\n    items.sort();\n    return items;\n}\n\n\nasync function getSubscription(_event: ProviderEvent, provider: AbstractProvider): Promise<Subscription> {\n    if (_event == null) { throw new Error(\"invalid event\"); }\n\n    // Normalize topic array info an EventFilter\n    if (Array.isArray(_event)) { _event = { topics: _event }; }\n\n    if (typeof(_event) === \"string\") {\n        switch (_event) {\n            case \"block\":\n            case \"debug\":\n            case \"error\":\n            case \"finalized\":\n            case \"network\":\n            case \"pending\":\n            case \"safe\": {\n                return { type: _event, tag: _event };\n            }\n        }\n    }\n\n    if (isHexString(_event, 32)) {\n        const hash = _event.toLowerCase();\n        return { type: \"transaction\", tag: getTag(\"tx\", { hash }), hash };\n    }\n\n    if ((<any>_event).orphan) {\n        const event = <OrphanFilter>_event;\n        // @TODO: Should lowercase and whatnot things here instead of copy...\n        return { type: \"orphan\", tag: getTag(\"orphan\", event), filter: copy(event) };\n    }\n\n    if (((<any>_event).address || (<any>_event).topics)) {\n        const event = <EventFilter>_event;\n\n        const filter: any = {\n            topics: ((event.topics || []).map((t) => {\n                if (t == null) { return null; }\n                if (Array.isArray(t)) {\n                    return concisify(t.map((t) => t.toLowerCase()));\n                }\n                return t.toLowerCase();\n            }))\n        };\n\n        if (event.address) {\n            const addresses: Array<string> = [ ];\n            const promises: Array<Promise<void>> = [ ];\n\n            const addAddress = (addr: AddressLike) => {\n                if (isHexString(addr)) {\n                    addresses.push(addr);\n                } else {\n                    promises.push((async () => {\n                        addresses.push(await resolveAddress(addr, provider));\n                    })());\n                }\n            }\n\n            if (Array.isArray(event.address)) {\n                event.address.forEach(addAddress);\n            } else {\n                addAddress(event.address);\n            }\n            if (promises.length) { await Promise.all(promises); }\n            filter.address = concisify(addresses.map((a) => a.toLowerCase()));\n        }\n\n        return { filter, tag: getTag(\"event\", filter), type: \"event\" };\n    }\n\n    assertArgument(false, \"unknown ProviderEvent\", \"event\", _event);\n}\n\nfunction getTime(): number { return (new Date()).getTime(); }\n\n/**\n *  An **AbstractPlugin** is used to provide additional internal services\n *  to an [[AbstractProvider]] without adding backwards-incompatible changes\n *  to method signatures or other internal and complex logic.\n */\nexport interface AbstractProviderPlugin {\n    /**\n     *  The reverse domain notation of the plugin.\n     */\n    readonly name: string;\n\n    /**\n     *  Creates a new instance of the plugin, connected to %%provider%%.\n     */\n    connect(provider: AbstractProvider): AbstractProviderPlugin;\n}\n\n/**\n *  A normalized filter used for [[PerformActionRequest]] objects.\n */\nexport type PerformActionFilter = {\n    address?: string | Array<string>;\n    topics?: Array<null | string | Array<string>>;\n    fromBlock?: BlockTag;\n    toBlock?: BlockTag;\n} | {\n    address?: string | Array<string>;\n    topics?: Array<null | string | Array<string>>;\n    blockHash?: string;\n};\n\n/**\n *  A normalized transactions used for [[PerformActionRequest]] objects.\n */\nexport interface PerformActionTransaction extends PreparedTransactionRequest {\n    /**\n     *  The ``to`` address of the transaction.\n     */\n    to?: string;\n\n    /**\n     *  The sender of the transaction.\n     */\n    from?: string;\n}\n\n/**\n *  The [[AbstractProvider]] methods will normalize all values and pass this\n *  type to [[AbstractProvider-_perform]].\n */\nexport type PerformActionRequest = {\n    method: \"broadcastTransaction\",\n    signedTransaction: string\n} | {\n    method: \"call\",\n    transaction: PerformActionTransaction, blockTag: BlockTag\n} | {\n    method: \"chainId\"\n} | {\n    method: \"estimateGas\",\n    transaction: PerformActionTransaction\n} | {\n    method: \"getBalance\",\n    address: string, blockTag: BlockTag\n} | {\n    method: \"getBlock\",\n    blockTag: BlockTag, includeTransactions: boolean\n} | {\n    method: \"getBlock\",\n    blockHash: string, includeTransactions: boolean\n} | {\n    method: \"getBlockNumber\"\n} | {\n    method: \"getCode\",\n    address: string, blockTag: BlockTag\n} | {\n    method: \"getGasPrice\"\n} | {\n    method: \"getLogs\",\n    filter: PerformActionFilter\n} | {\n    method: \"getPriorityFee\"\n} | {\n    method: \"getStorage\",\n    address: string, position: bigint, blockTag: BlockTag\n} | {\n    method: \"getTransaction\",\n    hash: string\n} | {\n    method: \"getTransactionCount\",\n    address: string, blockTag: BlockTag\n} | {\n    method: \"getTransactionReceipt\",\n    hash: string\n} | {\n    method: \"getTransactionResult\",\n    hash: string\n};\n\ntype _PerformAccountRequest = {\n    method: \"getBalance\" | \"getTransactionCount\" | \"getCode\"\n} | {\n    method: \"getStorage\", position: bigint\n}\n\n/**\n *  Options for configuring some internal aspects of an [[AbstractProvider]].\n *\n *  **``cacheTimeout``** - how long to cache a low-level ``_perform``\n *  for, based on input parameters. This reduces the number of calls\n *  to getChainId and getBlockNumber, but may break test chains which\n *  can perform operations (internally) synchronously. Use ``-1`` to\n *  disable, ``0`` will only buffer within the same event loop and\n *  any other value is in ms. (default: ``250``)\n */\nexport type AbstractProviderOptions = {\n    cacheTimeout?: number;\n    pollingInterval?: number;\n};\n\nconst defaultOptions = {\n    cacheTimeout: 250,\n    pollingInterval: 4000\n};\n\ntype CcipArgs = {\n    sender: string;\n    urls: Array<string>;\n    calldata: string;\n    selector: string;\n    extraData: string;\n    errorArgs: Array<any>\n};\n\n/**\n *  An **AbstractProvider** provides a base class for other sub-classes to\n *  implement the [[Provider]] API by normalizing input arguments and\n *  formatting output results as well as tracking events for consistent\n *  behaviour on an eventually-consistent network.\n */\nexport class AbstractProvider implements Provider {\n\n    #subs: Map<string, Sub>;\n    #plugins: Map<string, AbstractProviderPlugin>;\n\n    // null=unpaused, true=paused+dropWhilePaused, false=paused\n    #pausedState: null | boolean;\n\n    #destroyed: boolean;\n\n    #networkPromise: null | Promise<Network>;\n    readonly #anyNetwork: boolean;\n\n    #performCache: Map<string, Promise<any>>;\n\n    // The most recent block number if running an event or -1 if no \"block\" event\n    #lastBlockNumber: number;\n\n    #nextTimer: number;\n    #timers: Map<number, { timer: null | Timer, func: () => void, time: number }>;\n\n    #disableCcipRead: boolean;\n\n    #options: Required<AbstractProviderOptions>;\n\n    /**\n     *  Create a new **AbstractProvider** connected to %%network%%, or\n     *  use the various network detection capabilities to discover the\n     *  [[Network]] if necessary.\n     */\n    constructor(_network?: \"any\" | Networkish, options?: AbstractProviderOptions) {\n        this.#options = Object.assign({ }, defaultOptions, options || { });\n\n        if (_network === \"any\") {\n            this.#anyNetwork = true;\n            this.#networkPromise = null;\n        } else if (_network) {\n            const network = Network.from(_network);\n            this.#anyNetwork = false;\n            this.#networkPromise = Promise.resolve(network);\n            setTimeout(() => { this.emit(\"network\", network, null); }, 0);\n        } else {\n            this.#anyNetwork = false;\n            this.#networkPromise = null;\n        }\n\n        this.#lastBlockNumber = -1;\n\n        this.#performCache = new Map();\n\n        this.#subs = new Map();\n        this.#plugins = new Map();\n        this.#pausedState = null;\n\n        this.#destroyed = false;\n\n        this.#nextTimer = 1;\n        this.#timers = new Map();\n\n        this.#disableCcipRead = false;\n    }\n\n    get pollingInterval(): number { return this.#options.pollingInterval; }\n\n    /**\n     *  Returns ``this``, to allow an **AbstractProvider** to implement\n     *  the [[ContractRunner]] interface.\n     */\n    get provider(): this { return this; }\n\n    /**\n     *  Returns all the registered plug-ins.\n     */\n    get plugins(): Array<AbstractProviderPlugin> {\n        return Array.from(this.#plugins.values());\n    }\n\n    /**\n     *  Attach a new plug-in.\n     */\n    attachPlugin(plugin: AbstractProviderPlugin): this {\n        if (this.#plugins.get(plugin.name)) {\n            throw new Error(`cannot replace existing plugin: ${ plugin.name } `);\n        }\n        this.#plugins.set(plugin.name,  plugin.connect(this));\n        return this;\n    }\n\n    /**\n     *  Get a plugin by name.\n     */\n    getPlugin<T extends AbstractProviderPlugin = AbstractProviderPlugin>(name: string): null | T {\n        return <T>(this.#plugins.get(name)) || null;\n    }\n\n    /**\n     *  Prevent any CCIP-read operation, regardless of whether requested\n     *  in a [[call]] using ``enableCcipRead``.\n     */\n    get disableCcipRead(): boolean { return this.#disableCcipRead; }\n    set disableCcipRead(value: boolean) { this.#disableCcipRead = !!value; }\n\n    // Shares multiple identical requests made during the same 250ms\n    async #perform<T = any>(req: PerformActionRequest): Promise<T> {\n        const timeout = this.#options.cacheTimeout;\n\n        // Caching disabled\n        if (timeout < 0) { return await this._perform(req); }\n\n        // Create a tag\n        const tag = getTag(req.method, req);\n\n        let perform = this.#performCache.get(tag);\n        if (!perform) {\n            perform = this._perform(req);\n\n            this.#performCache.set(tag, perform);\n\n            setTimeout(() => {\n                if (this.#performCache.get(tag) === perform) {\n                    this.#performCache.delete(tag);\n                }\n            }, timeout);\n        }\n\n        return await perform;\n    }\n\n    /**\n     *  Resolves to the data for executing the CCIP-read operations.\n     */\n    async ccipReadFetch(tx: PerformActionTransaction, calldata: string, urls: Array<string>): Promise<null | string> {\n        if (this.disableCcipRead || urls.length === 0 || tx.to == null) { return null; }\n\n        const sender = tx.to.toLowerCase();\n        const data = calldata.toLowerCase();\n\n        const errorMessages: Array<string> = [ ];\n\n        for (let i = 0; i < urls.length; i++) {\n            const url = urls[i];\n\n            // URL expansion\n            const href = url.replace(\"{sender}\", sender).replace(\"{data}\", data);\n\n            // If no {data} is present, use POST; otherwise GET\n            //const json: string | null = (url.indexOf(\"{data}\") >= 0) ? null: JSON.stringify({ data, sender });\n\n            //const result = await fetchJson({ url: href, errorPassThrough: true }, json, (value, response) => {\n            //    value.status = response.statusCode;\n            //    return value;\n            //});\n            const request = new FetchRequest(href);\n            if (url.indexOf(\"{data}\") === -1) {\n                request.body = { data, sender };\n            }\n\n            this.emit(\"debug\", { action: \"sendCcipReadFetchRequest\", request, index: i, urls });\n\n            let errorMessage = \"unknown error\";\n\n            // Fetch the resource...\n            let resp: FetchResponse;\n            try {\n                resp = await request.send();\n            } catch (error: any) {\n                // ...low-level fetch error (missing host, bad SSL, etc.),\n                // so try next URL\n                errorMessages.push(error.message);\n                this.emit(\"debug\", { action: \"receiveCcipReadFetchError\", request, result: { error } });\n                continue;\n            }\n\n            try {\n                const result = resp.bodyJson;\n                if (result.data) {\n                    this.emit(\"debug\", { action: \"receiveCcipReadFetchResult\", request, result });\n                    return result.data;\n                }\n                if (result.message) { errorMessage = result.message; }\n                this.emit(\"debug\", { action: \"receiveCcipReadFetchError\", request, result });\n            } catch (error) { }\n\n            // 4xx indicates the result is not present; stop\n            assert(resp.statusCode < 400 || resp.statusCode >= 500, `response not found during CCIP fetch: ${ errorMessage }`,\n                \"OFFCHAIN_FAULT\", { reason: \"404_MISSING_RESOURCE\", transaction: tx, info: { url, errorMessage } });\n\n            // 5xx indicates server issue; try the next url\n            errorMessages.push(errorMessage);\n        }\n\n        assert(false, `error encountered during CCIP fetch: ${ errorMessages.map((m) => JSON.stringify(m)).join(\", \") }`, \"OFFCHAIN_FAULT\", {\n            reason: \"500_SERVER_ERROR\",\n            transaction: tx, info: { urls, errorMessages }\n        });\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a block before\n     *  returning it, to add additional properties or an alternate\n     *  sub-class of [[Block]].\n     */\n    _wrapBlock(value: BlockParams, network: Network): Block {\n        return new Block(formatBlock(value), this);\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a log before\n     *  returning it, to add additional properties or an alternate\n     *  sub-class of [[Log]].\n     */\n    _wrapLog(value: LogParams, network: Network): Log {\n        return new Log(formatLog(value), this);\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a transaction\n     *  receipt before returning it, to add additional properties or an\n     *  alternate sub-class of [[TransactionReceipt]].\n     */\n    _wrapTransactionReceipt(value: TransactionReceiptParams, network: Network): TransactionReceipt {\n        return new TransactionReceipt(formatTransactionReceipt(value), this);\n    }\n\n    /**\n     *  Provides the opportunity for a sub-class to wrap a transaction\n     *  response before returning it, to add additional properties or an\n     *  alternate sub-class of [[TransactionResponse]].\n     */\n    _wrapTransactionResponse(tx: TransactionResponseParams, network: Network): TransactionResponse {\n        return new TransactionResponse(formatTransactionResponse(tx), this);\n    }\n\n    /**\n     *  Resolves to the Network, forcing a network detection using whatever\n     *  technique the sub-class requires.\n     *\n     *  Sub-classes **must** override this.\n     */\n    _detectNetwork(): Promise<Network> {\n        assert(false, \"sub-classes must implement this\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"_detectNetwork\"\n        });\n    }\n\n    /**\n     *  Sub-classes should use this to perform all built-in operations. All\n     *  methods sanitizes and normalizes the values passed into this.\n     *\n     *  Sub-classes **must** override this.\n     */\n    async _perform<T = any>(req: PerformActionRequest): Promise<T> {\n        assert(false, `unsupported method: ${ req.method }`, \"UNSUPPORTED_OPERATION\", {\n            operation: req.method,\n            info: req\n        });\n    }\n\n    // State\n\n    async getBlockNumber(): Promise<number> {\n        const blockNumber = getNumber(await this.#perform({ method: \"getBlockNumber\" }), \"%response\");\n        if (this.#lastBlockNumber >= 0) { this.#lastBlockNumber = blockNumber; }\n        return blockNumber;\n    }\n\n    /**\n     *  Returns or resolves to the address for %%address%%, resolving ENS\n     *  names and [[Addressable]] objects and returning if already an\n     *  address.\n     */\n    _getAddress(address: AddressLike): string | Promise<string> {\n        return resolveAddress(address, this);\n    }\n\n    /**\n     *  Returns or resolves to a valid block tag for %%blockTag%%, resolving\n     *  negative values and returning if already a valid block tag.\n     */\n    _getBlockTag(blockTag?: BlockTag): string | Promise<string> {\n        if (blockTag == null) { return \"latest\"; }\n\n        switch (blockTag) {\n            case \"earliest\":\n                return \"0x0\";\n            case \"finalized\":\n            case \"latest\":\n            case \"pending\":\n            case \"safe\":\n                return blockTag;\n        }\n\n\n        if (isHexString(blockTag)) {\n            if (isHexString(blockTag, 32)) { return blockTag; }\n            return toQuantity(blockTag);\n        }\n\n        if (typeof(blockTag) === \"bigint\") {\n            blockTag = getNumber(blockTag, \"blockTag\");\n        }\n\n        if (typeof(blockTag) === \"number\") {\n            if (blockTag >= 0) { return toQuantity(blockTag); }\n            if (this.#lastBlockNumber >= 0) { return toQuantity(this.#lastBlockNumber + blockTag); }\n            return this.getBlockNumber().then((b) => toQuantity(b + <number>blockTag));\n        }\n\n        assertArgument(false, \"invalid blockTag\", \"blockTag\", blockTag);\n    }\n\n    /**\n     *  Returns or resolves to a filter for %%filter%%, resolving any ENS\n     *  names or [[Addressable]] object and returning if already a valid\n     *  filter.\n     */\n    _getFilter(filter: Filter | FilterByBlockHash): PerformActionFilter | Promise<PerformActionFilter> {\n\n        // Create a canonical representation of the topics\n        const topics = (filter.topics || [ ]).map((t) => {\n            if (t == null) { return null; }\n            if (Array.isArray(t)) {\n                return concisify(t.map((t) => t.toLowerCase()));\n            }\n            return t.toLowerCase();\n        });\n\n        const blockHash = (\"blockHash\" in filter) ? filter.blockHash: undefined;\n\n        const resolve = (_address: Array<string>, fromBlock?: string, toBlock?: string) => {\n            let address: undefined | string | Array<string> = undefined;\n            switch (_address.length) {\n                case 0: break;\n                case 1:\n                    address = _address[0];\n                    break;\n                default:\n                    _address.sort();\n                    address = _address;\n            }\n\n            if (blockHash) {\n                if (fromBlock != null || toBlock != null) {\n                    throw new Error(\"invalid filter\");\n                }\n            }\n\n            const filter = <any>{ };\n            if (address) { filter.address = address; }\n            if (topics.length) { filter.topics = topics; }\n            if (fromBlock) { filter.fromBlock = fromBlock; }\n            if (toBlock) { filter.toBlock = toBlock; }\n            if (blockHash) { filter.blockHash = blockHash; }\n\n            return filter;\n        };\n\n        // Addresses could be async (ENS names or Addressables)\n        let address: Array<string | Promise<string>> = [ ];\n        if (filter.address) {\n            if (Array.isArray(filter.address)) {\n                for (const addr of filter.address) { address.push(this._getAddress(addr)); }\n            } else {\n                address.push(this._getAddress(filter.address));\n            }\n        }\n\n        let fromBlock: undefined | string | Promise<string> = undefined;\n        if (\"fromBlock\" in filter) { fromBlock = this._getBlockTag(filter.fromBlock); }\n\n        let toBlock: undefined | string | Promise<string> = undefined;\n        if (\"toBlock\" in filter) { toBlock = this._getBlockTag(filter.toBlock); }\n\n        if (address.filter((a) => (typeof(a) !== \"string\")).length ||\n            (fromBlock != null && typeof(fromBlock) !== \"string\") ||\n            (toBlock != null && typeof(toBlock) !== \"string\")) {\n\n            return Promise.all([ Promise.all(address), fromBlock, toBlock ]).then((result) => {\n                return resolve(result[0], result[1], result[2]);\n            });\n        }\n\n        return resolve(<Array<string>>address, fromBlock, toBlock);\n    }\n\n    /**\n     *  Returns or resolves to a transaction for %%request%%, resolving\n     *  any ENS names or [[Addressable]] and returning if already a valid\n     *  transaction.\n     */\n    _getTransactionRequest(_request: TransactionRequest): PerformActionTransaction | Promise<PerformActionTransaction> {\n        const request = <PerformActionTransaction>copyRequest(_request);\n\n        const promises: Array<Promise<void>> = [ ];\n        [ \"to\", \"from\" ].forEach((key) => {\n            if ((<any>request)[key] == null) { return; }\n\n            const addr = resolveAddress((<any>request)[key], this);\n            if (isPromise(addr)) {\n                promises.push((async function() { (<any>request)[key] = await addr; })());\n            } else {\n                (<any>request)[key] = addr;\n            }\n        });\n\n        if (request.blockTag != null) {\n            const blockTag = this._getBlockTag(request.blockTag);\n            if (isPromise(blockTag)) {\n                promises.push((async function() { request.blockTag = await blockTag; })());\n            } else {\n                request.blockTag = blockTag;\n            }\n        }\n\n        if (promises.length) {\n            return (async function() {\n                await Promise.all(promises);\n                return request;\n            })();\n        }\n\n        return request;\n    }\n\n    async getNetwork(): Promise<Network> {\n\n        // No explicit network was set and this is our first time\n        if (this.#networkPromise == null) {\n\n            // Detect the current network (shared with all calls)\n            const detectNetwork = (async () => {\n                try {\n                    const network = await this._detectNetwork();\n                    this.emit(\"network\", network, null);\n                    return network;\n                } catch (error) {\n                    if (this.#networkPromise === detectNetwork!) {\n                        this.#networkPromise = null;\n                    }\n                    throw error;\n                }\n            })();\n\n            this.#networkPromise = detectNetwork;\n            return (await detectNetwork).clone();\n        }\n\n        const networkPromise = this.#networkPromise;\n\n        const [ expected, actual ] = await Promise.all([\n            networkPromise,          // Possibly an explicit Network\n            this._detectNetwork()    // The actual connected network\n        ]);\n\n        if (expected.chainId !== actual.chainId) {\n            if (this.#anyNetwork) {\n                // The \"any\" network can change, so notify listeners\n                this.emit(\"network\", actual, expected);\n\n                // Update the network if something else hasn't already changed it\n                if (this.#networkPromise === networkPromise) {\n                    this.#networkPromise = Promise.resolve(actual);\n                }\n            } else {\n                // Otherwise, we do not allow changes to the underlying network\n                assert(false, `network changed: ${ expected.chainId } => ${ actual.chainId } `, \"NETWORK_ERROR\", {\n                    event: \"changed\"\n                });\n            }\n        }\n\n        return expected.clone();\n    }\n\n    async getFeeData(): Promise<FeeData> {\n        const network = await this.getNetwork();\n\n        const getFeeDataFunc = async () => {\n            const { _block, gasPrice, priorityFee } = await resolveProperties({\n                _block: this.#getBlock(\"latest\", false),\n                gasPrice: ((async () => {\n                    try {\n                        const value = await this.#perform({ method: \"getGasPrice\" });\n                        return getBigInt(value, \"%response\");\n                    } catch (error) { }\n                    return null\n                })()),\n                priorityFee: ((async () => {\n                    try {\n                        const value = await this.#perform({ method: \"getPriorityFee\" });\n                        return getBigInt(value, \"%response\");\n                    } catch (error) { }\n                    return null;\n                })())\n            });\n\n            let maxFeePerGas: null | bigint = null;\n            let maxPriorityFeePerGas: null | bigint = null;\n\n            // These are the recommended EIP-1559 heuristics for fee data\n            const block = this._wrapBlock(_block, network);\n            if (block && block.baseFeePerGas) {\n                maxPriorityFeePerGas = (priorityFee != null) ? priorityFee: BigInt(\"1000000000\");\n                maxFeePerGas = (block.baseFeePerGas * BN_2) + maxPriorityFeePerGas;\n            }\n\n            return new FeeData(gasPrice, maxFeePerGas, maxPriorityFeePerGas);\n        };\n\n        // Check for a FeeDataNetWorkPlugin\n        const plugin = <FetchUrlFeeDataNetworkPlugin>network.getPlugin(\"org.ethers.plugins.network.FetchUrlFeeDataPlugin\");\n        if (plugin) {\n            const req = new FetchRequest(plugin.url);\n            const feeData = await plugin.processFunc(getFeeDataFunc, this, req);\n            return new FeeData(feeData.gasPrice, feeData.maxFeePerGas, feeData.maxPriorityFeePerGas);\n        }\n\n        return await getFeeDataFunc();\n    }\n\n\n    async estimateGas(_tx: TransactionRequest): Promise<bigint> {\n        let tx = this._getTransactionRequest(_tx);\n        if (isPromise(tx)) { tx = await tx; }\n        return getBigInt(await this.#perform({\n            method: \"estimateGas\", transaction: tx\n        }), \"%response\");\n    }\n\n    async #call(tx: PerformActionTransaction, blockTag: string, attempt: number): Promise<string> {\n        assert (attempt < MAX_CCIP_REDIRECTS, \"CCIP read exceeded maximum redirections\", \"OFFCHAIN_FAULT\", {\n             reason: \"TOO_MANY_REDIRECTS\",\n             transaction: Object.assign({ }, tx, { blockTag, enableCcipRead: true })\n         });\n\n         // This came in as a PerformActionTransaction, so to/from are safe; we can cast\n         const transaction = <PerformActionTransaction>copyRequest(tx);\n\n         try {\n             return hexlify(await this._perform({ method: \"call\", transaction, blockTag }));\n\n         } catch (error: any) {\n             // CCIP Read OffchainLookup\n             if (!this.disableCcipRead && isCallException(error) && error.data && attempt >= 0 && blockTag === \"latest\" && transaction.to != null && dataSlice(error.data, 0, 4) === \"0x556f1830\") {\n                 const data = error.data;\n\n                 const txSender = await resolveAddress(transaction.to, this);\n\n                 // Parse the CCIP Read Arguments\n                 let ccipArgs: CcipArgs;\n                 try {\n                     ccipArgs = parseOffchainLookup(dataSlice(error.data, 4));\n                 } catch (error: any) {\n                     assert(false, error.message, \"OFFCHAIN_FAULT\", {\n                         reason: \"BAD_DATA\", transaction, info: { data } });\n                 }\n\n                 // Check the sender of the OffchainLookup matches the transaction\n                 assert(ccipArgs.sender.toLowerCase() === txSender.toLowerCase(),\n                     \"CCIP Read sender mismatch\", \"CALL_EXCEPTION\", {\n                         action: \"call\",\n                         data,\n                         reason: \"OffchainLookup\",\n                         transaction: <any>transaction, // @TODO: populate data?\n                         invocation: null,\n                         revert: {\n                             signature: \"OffchainLookup(address,string[],bytes,bytes4,bytes)\",\n                             name: \"OffchainLookup\",\n                             args: ccipArgs.errorArgs\n                         }\n                     });\n\n                 const ccipResult = await this.ccipReadFetch(transaction, ccipArgs.calldata, ccipArgs.urls);\n                 assert(ccipResult != null, \"CCIP Read failed to fetch data\", \"OFFCHAIN_FAULT\", {\n                     reason: \"FETCH_FAILED\", transaction, info: { data: error.data, errorArgs: ccipArgs.errorArgs } });\n\n                 const tx = {\n                     to: txSender,\n                     data: concat([ ccipArgs.selector, encodeBytes([ ccipResult, ccipArgs.extraData ]) ])\n                 };\n\n                 this.emit(\"debug\", { action: \"sendCcipReadCall\", transaction: tx });\n                 try {\n                     const result = await this.#call(tx, blockTag, attempt + 1);\n                     this.emit(\"debug\", { action: \"receiveCcipReadCallResult\", transaction: Object.assign({ }, tx), result });\n                     return result;\n                 } catch (error) {\n                     this.emit(\"debug\", { action: \"receiveCcipReadCallError\", transaction: Object.assign({ }, tx), error });\n                     throw error;\n                 }\n             }\n\n             throw error;\n         }\n    }\n\n    async #checkNetwork<T>(promise: Promise<T>): Promise<T> {\n        const { value } = await resolveProperties({\n            network: this.getNetwork(),\n            value: promise\n        });\n        return value;\n    }\n\n    async call(_tx: TransactionRequest): Promise<string> {\n        const { tx, blockTag } = await resolveProperties({\n            tx: this._getTransactionRequest(_tx),\n            blockTag: this._getBlockTag(_tx.blockTag)\n        });\n\n        return await this.#checkNetwork(this.#call(tx, blockTag, _tx.enableCcipRead ? 0: -1));\n    }\n\n    // Account\n    async #getAccountValue(request: _PerformAccountRequest, _address: AddressLike, _blockTag?: BlockTag): Promise<any> {\n        let address: string | Promise<string> = this._getAddress(_address);\n        let blockTag: string | Promise<string> = this._getBlockTag(_blockTag);\n\n        if (typeof(address) !== \"string\" || typeof(blockTag) !== \"string\") {\n            [ address, blockTag ] = await Promise.all([ address, blockTag ]);\n        }\n\n        return await this.#checkNetwork(this.#perform(Object.assign(request, { address, blockTag })));\n    }\n\n    async getBalance(address: AddressLike, blockTag?: BlockTag): Promise<bigint> {\n        return getBigInt(await this.#getAccountValue({ method: \"getBalance\" }, address, blockTag), \"%response\");\n    }\n\n    async getTransactionCount(address: AddressLike, blockTag?: BlockTag): Promise<number> {\n        return getNumber(await this.#getAccountValue({ method: \"getTransactionCount\" }, address, blockTag), \"%response\");\n    }\n\n    async getCode(address: AddressLike, blockTag?: BlockTag): Promise<string> {\n        return hexlify(await this.#getAccountValue({ method: \"getCode\" }, address, blockTag));\n    }\n\n    async getStorage(address: AddressLike, _position: BigNumberish, blockTag?: BlockTag): Promise<string> {\n        const position = getBigInt(_position, \"position\");\n        return hexlify(await this.#getAccountValue({ method: \"getStorage\", position }, address, blockTag));\n    }\n\n    // Write\n    async broadcastTransaction(signedTx: string): Promise<TransactionResponse> {\n        const { blockNumber, hash, network } = await resolveProperties({\n             blockNumber: this.getBlockNumber(),\n             hash: this._perform({\n                 method: \"broadcastTransaction\",\n                 signedTransaction: signedTx\n             }),\n             network: this.getNetwork()\n        });\n\n        const tx = Transaction.from(signedTx);\n        if (tx.hash !== hash) {\n            throw new Error(\"@TODO: the returned hash did not match\");\n        }\n\n        return this._wrapTransactionResponse(<any>tx, network).replaceableTransaction(blockNumber);\n    }\n\n    async #getBlock(block: BlockTag | string, includeTransactions: boolean): Promise<any> {\n        // @TODO: Add CustomBlockPlugin check\n\n        if (isHexString(block, 32)) {\n            return await this.#perform({\n                method: \"getBlock\", blockHash: block, includeTransactions\n            });\n        }\n\n        let blockTag = this._getBlockTag(block);\n        if (typeof(blockTag) !== \"string\") { blockTag = await blockTag; }\n\n        return await this.#perform({\n            method: \"getBlock\", blockTag, includeTransactions\n        });\n    }\n\n    // Queries\n    async getBlock(block: BlockTag | string, prefetchTxs?: boolean): Promise<null | Block> {\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#getBlock(block, !!prefetchTxs)\n        });\n        if (params == null) { return null; }\n\n        return this._wrapBlock(params, network);\n    }\n\n    async getTransaction(hash: string): Promise<null | TransactionResponse> {\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#perform({ method: \"getTransaction\", hash })\n        });\n        if (params == null) { return null; }\n\n        return this._wrapTransactionResponse(params, network);\n    }\n\n    async getTransactionReceipt(hash: string): Promise<null | TransactionReceipt> {\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#perform({ method: \"getTransactionReceipt\", hash })\n        });\n        if (params == null) { return null; }\n\n        // Some backends did not backfill the effectiveGasPrice into old transactions\n        // in the receipt, so we look it up manually and inject it.\n        if (params.gasPrice == null && params.effectiveGasPrice == null) {\n            const tx = await this.#perform({ method: \"getTransaction\", hash });\n            if (tx == null) { throw new Error(\"report this; could not find tx or effectiveGasPrice\"); }\n            params.effectiveGasPrice = tx.gasPrice;\n        }\n\n        return this._wrapTransactionReceipt(params, network);\n    }\n\n    async getTransactionResult(hash: string): Promise<null | string> {\n        const { result } = await resolveProperties({\n            network: this.getNetwork(),\n            result: this.#perform({ method: \"getTransactionResult\", hash })\n        });\n        if (result == null) { return null; }\n        return hexlify(result);\n    }\n\n    // Bloom-filter Queries\n    async getLogs(_filter: Filter | FilterByBlockHash): Promise<Array<Log>> {\n        let filter = this._getFilter(_filter);\n        if (isPromise(filter)) { filter = await filter; }\n\n        const { network, params } = await resolveProperties({\n            network: this.getNetwork(),\n            params: this.#perform<Array<LogParams>>({ method: \"getLogs\", filter })\n        });\n\n        return params.map((p) => this._wrapLog(p, network));\n    }\n\n    // ENS\n    _getProvider(chainId: number): AbstractProvider {\n        assert(false, \"provider cannot connect to target network\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"_getProvider()\"\n        });\n    }\n\n    async getResolver(name: string): Promise<null | EnsResolver> {\n        return await EnsResolver.fromName(this, name);\n    }\n\n    async getAvatar(name: string): Promise<null | string> {\n        const resolver = await this.getResolver(name);\n        if (resolver) { return await resolver.getAvatar(); }\n        return null;\n    }\n\n    async resolveName(name: string): Promise<null | string>{\n        const resolver = await this.getResolver(name);\n        if (resolver) { return await resolver.getAddress(); }\n        return null;\n    }\n\n    async lookupAddress(address: string): Promise<null | string> {\n        address = getAddress(address);\n        const node = namehash(address.substring(2).toLowerCase() + \".addr.reverse\");\n\n        try {\n\n            const ensAddr = await EnsResolver.getEnsAddress(this);\n            const ensContract = new Contract(ensAddr, [\n                \"function resolver(bytes32) view returns (address)\"\n            ], this);\n\n            const resolver = await ensContract.resolver(node);\n            if (resolver == null || resolver === ZeroAddress) { return null; }\n\n            const resolverContract = new Contract(resolver, [\n                \"function name(bytes32) view returns (string)\"\n            ], this);\n            const name = await resolverContract.name(node);\n\n            // Failed forward resolution\n            const check = await this.resolveName(name);\n            if (check !== address) { return null; }\n\n            return name;\n\n        } catch (error) {\n            // No data was returned from the resolver\n            if (isError(error, \"BAD_DATA\") && error.value === \"0x\") {\n                return null;\n            }\n\n            // Something reerted\n            if (isError(error, \"CALL_EXCEPTION\")) { return null; }\n\n            throw error;\n        }\n\n        return null;\n    }\n\n    async waitForTransaction(hash: string, _confirms?: null | number, timeout?: null | number): Promise<null | TransactionReceipt> {\n        const confirms = (_confirms != null) ? _confirms: 1;\n        if (confirms === 0) { return this.getTransactionReceipt(hash); }\n\n        return new Promise(async (resolve, reject) => {\n            let timer: null | Timer = null;\n\n            const listener = (async (blockNumber: number) => {\n                try {\n                    const receipt = await this.getTransactionReceipt(hash);\n                    if (receipt != null) {\n                        if (blockNumber - receipt.blockNumber + 1 >= confirms) {\n                            resolve(receipt);\n                            //this.off(\"block\", listener);\n                            if (timer) {\n                                clearTimeout(timer);\n                                timer = null;\n                            }\n                            return;\n                        }\n                    }\n                } catch (error) {\n                    console.log(\"EEE\", error);\n                }\n                this.once(\"block\", listener);\n            });\n\n            if (timeout != null) {\n                timer = setTimeout(() => {\n                    if (timer == null) { return; }\n                    timer = null;\n                    this.off(\"block\", listener);\n                    reject(makeError(\"timeout\", \"TIMEOUT\", { reason: \"timeout\" }));\n                }, timeout);\n            }\n\n            listener(await this.getBlockNumber());\n        });\n    }\n\n    async waitForBlock(blockTag?: BlockTag): Promise<Block> {\n        assert(false, \"not implemented yet\", \"NOT_IMPLEMENTED\", {\n            operation: \"waitForBlock\"\n        });\n    }\n\n    /**\n     *  Clear a timer created using the [[_setTimeout]] method.\n     */\n    _clearTimeout(timerId: number): void {\n        const timer = this.#timers.get(timerId);\n        if (!timer) { return; }\n        if (timer.timer) { clearTimeout(timer.timer); }\n        this.#timers.delete(timerId);\n    }\n\n    /**\n     *  Create a timer that will execute %%func%% after at least %%timeout%%\n     *  (in ms). If %%timeout%% is unspecified, then %%func%% will execute\n     *  in the next event loop.\n     *\n     *  [Pausing](AbstractProvider-paused) the provider will pause any\n     *  associated timers.\n     */\n    _setTimeout(_func: () => void, timeout?: number): number {\n        if (timeout == null) { timeout = 0; }\n        const timerId = this.#nextTimer++;\n        const func = () => {\n            this.#timers.delete(timerId);\n            _func();\n        };\n\n        if (this.paused) {\n            this.#timers.set(timerId, { timer: null, func, time: timeout });\n        } else {\n            const timer = setTimeout(func, timeout);\n            this.#timers.set(timerId, { timer, func, time: getTime() });\n        }\n\n        return timerId;\n    }\n\n    /**\n     *  Perform %%func%% on each subscriber.\n     */\n    _forEachSubscriber(func: (s: Subscriber) => void): void {\n        for (const sub of this.#subs.values()) {\n            func(sub.subscriber);\n        }\n    }\n\n    /**\n     *  Sub-classes may override this to customize subscription\n     *  implementations.\n     */\n    _getSubscriber(sub: Subscription): Subscriber {\n        switch (sub.type) {\n            case \"debug\":\n            case \"error\":\n            case \"network\":\n                return new UnmanagedSubscriber(sub.type);\n            case \"block\": {\n                const subscriber = new PollingBlockSubscriber(this);\n                subscriber.pollingInterval = this.pollingInterval;\n                return subscriber;\n            }\n            case \"safe\": case \"finalized\":\n                return new PollingBlockTagSubscriber(this, sub.type);\n            case \"event\":\n                return new PollingEventSubscriber(this, sub.filter);\n            case \"transaction\":\n                return new PollingTransactionSubscriber(this, sub.hash);\n            case \"orphan\":\n                return new PollingOrphanSubscriber(this, sub.filter);\n        }\n\n        throw new Error(`unsupported event: ${ sub.type }`);\n    }\n\n    /**\n     *  If a [[Subscriber]] fails and needs to replace itself, this\n     *  method may be used.\n     *\n     *  For example, this is used for providers when using the\n     *  ``eth_getFilterChanges`` method, which can return null if state\n     *  filters are not supported by the backend, allowing the Subscriber\n     *  to swap in a [[PollingEventSubscriber]].\n     */\n    _recoverSubscriber(oldSub: Subscriber, newSub: Subscriber): void {\n        for (const sub of this.#subs.values()) {\n            if (sub.subscriber === oldSub) {\n                if (sub.started) { sub.subscriber.stop(); }\n                sub.subscriber = newSub;\n                if (sub.started) { newSub.start(); }\n                if (this.#pausedState != null) { newSub.pause(this.#pausedState); }\n                break;\n            }\n        }\n    }\n\n    async #hasSub(event: ProviderEvent, emitArgs?: Array<any>): Promise<null | Sub> {\n        let sub = await getSubscription(event, this);\n        // This is a log that is removing an existing log; we actually want\n        // to emit an orphan event for the removed log\n        if (sub.type === \"event\" && emitArgs && emitArgs.length > 0 && emitArgs[0].removed === true) {\n            sub = await getSubscription({ orphan: \"drop-log\", log: emitArgs[0] }, this);\n        }\n        return this.#subs.get(sub.tag) || null;\n    }\n\n    async #getSub(event: ProviderEvent): Promise<Sub> {\n        const subscription = await getSubscription(event, this);\n\n        // Prevent tampering with our tag in any subclass' _getSubscriber\n        const tag = subscription.tag;\n\n        let sub = this.#subs.get(tag);\n        if (!sub) {\n            const subscriber = this._getSubscriber(subscription);\n\n            const addressableMap = new WeakMap();\n            const nameMap = new Map();\n            sub = { subscriber, tag, addressableMap, nameMap, started: false, listeners: [ ] };\n            this.#subs.set(tag, sub);\n        }\n\n        return sub;\n    }\n\n    async on(event: ProviderEvent, listener: Listener): Promise<this> {\n        const sub = await this.#getSub(event);\n        sub.listeners.push({ listener, once: false });\n        if (!sub.started) {\n            sub.subscriber.start();\n            sub.started = true;\n            if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); }\n        }\n        return this;\n    }\n\n    async once(event: ProviderEvent, listener: Listener): Promise<this> {\n        const sub = await this.#getSub(event);\n        sub.listeners.push({ listener, once: true });\n        if (!sub.started) {\n            sub.subscriber.start();\n            sub.started = true;\n            if (this.#pausedState != null) { sub.subscriber.pause(this.#pausedState); }\n        }\n        return this;\n    }\n\n    async emit(event: ProviderEvent, ...args: Array<any>): Promise<boolean> {\n        const sub = await this.#hasSub(event, args);\n        // If there is not subscription or if a recent emit removed\n        // the last of them (which also deleted the sub) do nothing\n        if (!sub || sub.listeners.length === 0) { return false; };\n\n        const count = sub.listeners.length;\n        sub.listeners = sub.listeners.filter(({ listener, once }) => {\n            const payload = new EventPayload(this, (once ? null: listener), event);\n            try {\n                listener.call(this, ...args, payload);\n            } catch(error) { }\n            return !once;\n        });\n\n        if (sub.listeners.length === 0) {\n            if (sub.started) { sub.subscriber.stop(); }\n            this.#subs.delete(sub.tag);\n        }\n\n        return (count > 0);\n    }\n\n    async listenerCount(event?: ProviderEvent): Promise<number> {\n        if (event) {\n            const sub = await this.#hasSub(event);\n            if (!sub) { return 0; }\n            return sub.listeners.length;\n        }\n\n        let total = 0;\n        for (const { listeners } of this.#subs.values()) {\n            total += listeners.length;\n        }\n        return total;\n    }\n\n    async listeners(event?: ProviderEvent): Promise<Array<Listener>> {\n        if (event) {\n            const sub = await this.#hasSub(event);\n            if (!sub) { return  [ ]; }\n            return sub.listeners.map(({ listener }) => listener);\n        }\n        let result: Array<Listener> = [ ];\n        for (const { listeners } of this.#subs.values()) {\n            result = result.concat(listeners.map(({ listener }) => listener));\n        }\n        return result;\n    }\n\n    async off(event: ProviderEvent, listener?: Listener): Promise<this> {\n        const sub = await this.#hasSub(event);\n        if (!sub) { return this; }\n\n        if (listener) {\n            const index = sub.listeners.map(({ listener }) => listener).indexOf(listener);\n            if (index >= 0) { sub.listeners.splice(index, 1); }\n        }\n\n        if (!listener || sub.listeners.length === 0) {\n            if (sub.started) { sub.subscriber.stop(); }\n            this.#subs.delete(sub.tag);\n        }\n\n        return this;\n    }\n\n    async removeAllListeners(event?: ProviderEvent): Promise<this> {\n        if (event) {\n            const { tag, started, subscriber } = await this.#getSub(event);\n            if (started) { subscriber.stop(); }\n            this.#subs.delete(tag);\n        } else {\n            for (const [ tag, { started, subscriber } ] of this.#subs) {\n                if (started) { subscriber.stop(); }\n                this.#subs.delete(tag);\n            }\n        }\n        return this;\n    }\n\n    // Alias for \"on\"\n    async addListener(event: ProviderEvent, listener: Listener): Promise<this> {\n       return await this.on(event, listener);\n    }\n\n    // Alias for \"off\"\n    async removeListener(event: ProviderEvent, listener: Listener): Promise<this> {\n       return this.off(event, listener);\n    }\n\n    /**\n     *  If this provider has been destroyed using the [[destroy]] method.\n     *\n     *  Once destroyed, all resources are reclaimed, internal event loops\n     *  and timers are cleaned up and no further requests may be sent to\n     *  the provider.\n     */\n    get destroyed(): boolean {\n        return this.#destroyed;\n    }\n\n    /**\n     *  Sub-classes may use this to shutdown any sockets or release their\n     *  resources and reject any pending requests.\n     *\n     *  Sub-classes **must** call ``super.destroy()``.\n     */\n    destroy(): void {\n        // Stop all listeners\n        this.removeAllListeners();\n\n        // Shut down all tiemrs\n        for (const timerId of this.#timers.keys()) {\n            this._clearTimeout(timerId);\n        }\n\n        this.#destroyed = true;\n    }\n\n    /**\n     *  Whether the provider is currently paused.\n     *\n     *  A paused provider will not emit any events, and generally should\n     *  not make any requests to the network, but that is up to sub-classes\n     *  to manage.\n     *\n     *  Setting ``paused = true`` is identical to calling ``.pause(false)``,\n     *  which will buffer any events that occur while paused until the\n     *  provider is unpaused.\n     */\n    get paused(): boolean { return (this.#pausedState != null); }\n    set paused(pause: boolean) {\n        if (!!pause === this.paused) { return; }\n\n        if (this.paused) {\n            this.resume();\n        } else {\n            this.pause(false);\n        }\n    }\n\n    /**\n     *  Pause the provider. If %%dropWhilePaused%%, any events that occur\n     *  while paused are dropped, otherwise all events will be emitted once\n     *  the provider is unpaused.\n     */\n    pause(dropWhilePaused?: boolean): void {\n        this.#lastBlockNumber = -1;\n\n        if (this.#pausedState != null) {\n            if (this.#pausedState == !!dropWhilePaused) { return; }\n            assert(false, \"cannot change pause type; resume first\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"pause\"\n            });\n        }\n\n        this._forEachSubscriber((s) => s.pause(dropWhilePaused));\n        this.#pausedState = !!dropWhilePaused;\n\n        for (const timer of this.#timers.values()) {\n            // Clear the timer\n            if (timer.timer) { clearTimeout(timer.timer); }\n\n            // Remaining time needed for when we become unpaused\n            timer.time = getTime() - timer.time;\n        }\n    }\n\n    /**\n     *  Resume the provider.\n     */\n    resume(): void {\n        if (this.#pausedState == null) { return; }\n\n        this._forEachSubscriber((s) => s.resume());\n        this.#pausedState = null;\n        for (const timer of this.#timers.values()) {\n            // Remaining time when we were paused\n            let timeout = timer.time;\n            if (timeout < 0) { timeout = 0; }\n\n            // Start time (in cause paused, so we con compute remaininf time)\n            timer.time = getTime();\n\n            // Start the timer\n            setTimeout(timer.func, timeout);\n        }\n    }\n}\n\n\nfunction _parseString(result: string, start: number): null | string {\n    try {\n        const bytes = _parseBytes(result, start);\n        if (bytes) { return toUtf8String(bytes); }\n    } catch(error) { }\n    return null;\n}\n\nfunction _parseBytes(result: string, start: number): null | string {\n    if (result === \"0x\") { return null; }\n    try {\n        const offset = getNumber(dataSlice(result, start, start + 32));\n        const length = getNumber(dataSlice(result, offset, offset + 32));\n\n        return dataSlice(result, offset + 32, offset + 32 + length);\n    } catch (error) { }\n    return null;\n}\n\nfunction numPad(value: number): Uint8Array {\n    const result = toBeArray(value);\n    if (result.length > 32) { throw new Error(\"internal; should not happen\"); }\n\n    const padded = new Uint8Array(32);\n    padded.set(result, 32 - result.length);\n    return padded;\n}\n\nfunction bytesPad(value: Uint8Array): Uint8Array {\n    if ((value.length % 32) === 0) { return value; }\n\n    const result = new Uint8Array(Math.ceil(value.length / 32) * 32);\n    result.set(value);\n    return result;\n}\n\nconst empty: Uint8Array = new Uint8Array([ ]);\n\n// ABI Encodes a series of (bytes, bytes, ...)\nfunction encodeBytes(datas: Array<BytesLike>): string {\n    const result: Array<Uint8Array> = [ ];\n\n    let byteCount = 0;\n\n    // Add place-holders for pointers as we add items\n    for (let i = 0; i < datas.length; i++) {\n        result.push(empty);\n        byteCount += 32;\n    }\n\n    for (let i = 0; i < datas.length; i++) {\n        const data = getBytes(datas[i]);\n\n        // Update the bytes offset\n        result[i] = numPad(byteCount);\n\n        // The length and padded value of data\n        result.push(numPad(data.length));\n        result.push(bytesPad(data));\n        byteCount += 32 + Math.ceil(data.length / 32) * 32;\n    }\n\n    return concat(result);\n}\n\nconst zeros = \"0x0000000000000000000000000000000000000000000000000000000000000000\"\nfunction parseOffchainLookup(data: string): CcipArgs {\n    const result: CcipArgs = {\n        sender: \"\", urls: [ ], calldata: \"\", selector: \"\", extraData: \"\", errorArgs: [ ]\n    };\n\n    assert(dataLength(data) >= 5 * 32, \"insufficient OffchainLookup data\", \"OFFCHAIN_FAULT\", {\n        reason: \"insufficient OffchainLookup data\"\n    });\n\n    const sender = dataSlice(data, 0, 32);\n    assert(dataSlice(sender, 0, 12) === dataSlice(zeros, 0, 12), \"corrupt OffchainLookup sender\", \"OFFCHAIN_FAULT\", {\n        reason: \"corrupt OffchainLookup sender\"\n    });\n    result.sender = dataSlice(sender, 12);\n\n    // Read the URLs from the response\n    try {\n        const urls: Array<string> = [];\n        const urlsOffset = getNumber(dataSlice(data, 32, 64));\n        const urlsLength = getNumber(dataSlice(data, urlsOffset, urlsOffset + 32));\n        const urlsData = dataSlice(data, urlsOffset + 32);\n        for (let u = 0; u < urlsLength; u++) {\n            const url = _parseString(urlsData, u * 32);\n            if (url == null) { throw new Error(\"abort\"); }\n            urls.push(url);\n        }\n        result.urls = urls;\n    } catch (error) {\n        assert(false, \"corrupt OffchainLookup urls\", \"OFFCHAIN_FAULT\", {\n            reason: \"corrupt OffchainLookup urls\"\n        });\n    }\n\n    // Get the CCIP calldata to forward\n    try {\n        const calldata = _parseBytes(data, 64);\n        if (calldata == null) { throw new Error(\"abort\"); }\n        result.calldata = calldata;\n    } catch (error) {\n        assert(false, \"corrupt OffchainLookup calldata\", \"OFFCHAIN_FAULT\", {\n            reason: \"corrupt OffchainLookup calldata\"\n        });\n    }\n\n    // Get the callbackSelector (bytes4)\n    assert(dataSlice(data, 100, 128) === dataSlice(zeros, 0, 28), \"corrupt OffchainLookup callbaackSelector\", \"OFFCHAIN_FAULT\", {\n        reason: \"corrupt OffchainLookup callbaackSelector\"\n    });\n    result.selector = dataSlice(data, 96, 100);\n\n    // Get the extra data to send back to the contract as context\n    try {\n        const extraData = _parseBytes(data, 128);\n        if (extraData == null) { throw new Error(\"abort\"); }\n        result.extraData = extraData;\n    } catch (error) {\n        assert(false, \"corrupt OffchainLookup extraData\", \"OFFCHAIN_FAULT\", {\n            reason: \"corrupt OffchainLookup extraData\"\n        });\n    }\n\n    result.errorArgs = \"sender,urls,calldata,selector,extraData\".split(/,/).map((k) => (<any>result)[k])\n\n    return result;\n}\n", "/**\n *  Generally the [[Wallet]] and [[JsonRpcSigner]] and their sub-classes\n *  are sufficent for most developers, but this is provided to\n *  fascilitate more complex Signers.\n *\n *  @_section: api/providers/abstract-signer: Subclassing Signer [abstract-signer]\n */\nimport { resolveAddress } from \"../address/index.js\";\nimport { Transaction } from \"../transaction/index.js\";\nimport {\n    defineProperties, getBigInt, resolveProperties,\n    assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { copyRequest } from \"./provider.js\";\n\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\nimport type {\n    BlockTag, Provider, TransactionRequest, TransactionResponse\n} from \"./provider.js\";\nimport type { Signer } from \"./signer.js\";\n\n\nfunction checkProvider(signer: AbstractSigner, operation: string): Provider {\n    if (signer.provider) { return signer.provider; }\n    assert(false, \"missing provider\", \"UNSUPPORTED_OPERATION\", { operation });\n}\n\nasync function populate(signer: AbstractSigner, tx: TransactionRequest): Promise<TransactionLike<string>> {\n    let pop: any = copyRequest(tx);\n\n    if (pop.to != null) { pop.to = resolveAddress(pop.to, signer); }\n\n    if (pop.from != null) {\n        const from = pop.from;\n        pop.from = Promise.all([\n            signer.getAddress(),\n            resolveAddress(from, signer)\n        ]).then(([ address, from ]) => {\n            assertArgument(address.toLowerCase() === from.toLowerCase(),\n                \"transaction from mismatch\", \"tx.from\", from);\n            return address;\n        });\n    } else {\n        pop.from = signer.getAddress();\n    }\n\n    return await resolveProperties(pop);\n}\n\n\n/**\n *  An **AbstractSigner** includes most of teh functionality required\n *  to get a [[Signer]] working as expected, but requires a few\n *  Signer-specific methods be overridden.\n *\n */\nexport abstract class AbstractSigner<P extends null | Provider = null | Provider> implements Signer {\n    /**\n     *  The provider this signer is connected to.\n     */\n    readonly provider!: P;\n\n    /**\n     *  Creates a new Signer connected to %%provider%%.\n     */\n    constructor(provider?: P) {\n        defineProperties<AbstractSigner>(this, { provider: (provider || null) });\n    }\n\n    /**\n     *  Resolves to the Signer address.\n     */\n    abstract getAddress(): Promise<string>;\n\n    /**\n     *  Returns the signer connected to %%provider%%.\n     *\n     *  This may throw, for example, a Signer connected over a Socket or\n     *  to a specific instance of a node may not be transferrable.\n     */\n    abstract connect(provider: null | Provider): Signer;\n\n    async getNonce(blockTag?: BlockTag): Promise<number> {\n        return checkProvider(this, \"getTransactionCount\").getTransactionCount(await this.getAddress(), blockTag);\n    }\n\n    async populateCall(tx: TransactionRequest): Promise<TransactionLike<string>> {\n        const pop = await populate(this, tx);\n        return pop;\n    }\n\n    async populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>> {\n        const provider = checkProvider(this, \"populateTransaction\");\n\n        const pop = await populate(this, tx);\n\n        if (pop.nonce == null) {\n            pop.nonce = await this.getNonce(\"pending\");\n        }\n\n        if (pop.gasLimit == null) {\n            pop.gasLimit = await this.estimateGas(pop);\n        }\n\n        // Populate the chain ID\n        const network = await (<Provider>(this.provider)).getNetwork();\n        if (pop.chainId != null) {\n            const chainId = getBigInt(pop.chainId);\n            assertArgument(chainId === network.chainId, \"transaction chainId mismatch\", \"tx.chainId\", tx.chainId);\n        } else {\n            pop.chainId = network.chainId;\n        }\n\n        // Do not allow mixing pre-eip-1559 and eip-1559 properties\n        const hasEip1559 = (pop.maxFeePerGas != null || pop.maxPriorityFeePerGas != null);\n        if (pop.gasPrice != null && (pop.type === 2 || hasEip1559)) {\n            assertArgument(false, \"eip-1559 transaction do not support gasPrice\", \"tx\", tx);\n        } else if ((pop.type === 0 || pop.type === 1) && hasEip1559) {\n            assertArgument(false, \"pre-eip-1559 transaction do not support maxFeePerGas/maxPriorityFeePerGas\", \"tx\", tx);\n        }\n\n        if ((pop.type === 2 || pop.type == null) && (pop.maxFeePerGas != null && pop.maxPriorityFeePerGas != null)) {\n            // Fully-formed EIP-1559 transaction (skip getFeeData)\n            pop.type = 2;\n\n        } else if (pop.type === 0 || pop.type === 1) {\n            // Explicit Legacy or EIP-2930 transaction\n\n            // We need to get fee data to determine things\n            const feeData = await provider.getFeeData();\n\n            assert(feeData.gasPrice != null, \"network does not support gasPrice\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"getGasPrice\" });\n\n            // Populate missing gasPrice\n            if (pop.gasPrice == null) { pop.gasPrice = feeData.gasPrice; }\n\n        } else {\n\n            // We need to get fee data to determine things\n            const feeData = await provider.getFeeData();\n\n            if (pop.type == null) {\n                // We need to auto-detect the intended type of this transaction...\n\n                if (feeData.maxFeePerGas != null && feeData.maxPriorityFeePerGas != null) {\n                    // The network supports EIP-1559!\n\n                    // Upgrade transaction from null to eip-1559\n                    pop.type = 2;\n\n                    if (pop.gasPrice != null) {\n                        // Using legacy gasPrice property on an eip-1559 network,\n                        // so use gasPrice as both fee properties\n                        const gasPrice = pop.gasPrice;\n                        delete pop.gasPrice;\n                        pop.maxFeePerGas = gasPrice;\n                        pop.maxPriorityFeePerGas = gasPrice;\n\n                    } else {\n                        // Populate missing fee data\n\n                        if (pop.maxFeePerGas == null) {\n                            pop.maxFeePerGas = feeData.maxFeePerGas;\n                        }\n\n                        if (pop.maxPriorityFeePerGas == null) {\n                            pop.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;\n                        }\n                    }\n\n                } else if (feeData.gasPrice != null) {\n                    // Network doesn't support EIP-1559...\n\n                    // ...but they are trying to use EIP-1559 properties\n                    assert(!hasEip1559, \"network does not support EIP-1559\", \"UNSUPPORTED_OPERATION\", {\n                            operation: \"populateTransaction\" });\n\n                    // Populate missing fee data\n                    if (pop.gasPrice == null) {\n                        pop.gasPrice = feeData.gasPrice;\n                    }\n\n                    // Explicitly set untyped transaction to legacy\n                    // @TODO: Maybe this shold allow type 1?\n                    pop.type = 0;\n\n               } else {\n                    // getFeeData has failed us.\n                    assert(false, \"failed to get consistent fee data\", \"UNSUPPORTED_OPERATION\", {\n                        operation: \"signer.getFeeData\" });\n                }\n\n            } else if (pop.type === 2 || pop.type === 3) {\n                // Explicitly using EIP-1559 or EIP-4844\n\n                // Populate missing fee data\n                if (pop.maxFeePerGas == null) {\n                    pop.maxFeePerGas = feeData.maxFeePerGas;\n                }\n\n                if (pop.maxPriorityFeePerGas == null) {\n                    pop.maxPriorityFeePerGas = feeData.maxPriorityFeePerGas;\n                }\n            }\n        }\n\n//@TOOD: Don't await all over the place; save them up for\n// the end for better batching\n        return await resolveProperties(pop);\n    }\n\n    async estimateGas(tx: TransactionRequest): Promise<bigint> {\n        return checkProvider(this, \"estimateGas\").estimateGas(await this.populateCall(tx));\n    }\n\n    async call(tx: TransactionRequest): Promise<string> {\n        return checkProvider(this, \"call\").call(await this.populateCall(tx));\n    }\n\n    async resolveName(name: string): Promise<null | string> {\n        const provider = checkProvider(this, \"resolveName\");\n        return await provider.resolveName(name);\n    }\n\n    async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {\n        const provider = checkProvider(this, \"sendTransaction\");\n\n        const pop = await this.populateTransaction(tx);\n        delete pop.from;\n        const txObj = Transaction.from(pop);\n        return await provider.broadcastTransaction(await this.signTransaction(txObj));\n    }\n\n    abstract signTransaction(tx: TransactionRequest): Promise<string>;\n    abstract signMessage(message: string | Uint8Array): Promise<string>;\n    abstract signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string>;\n}\n\n/**\n *  A **VoidSigner** is a class deisgned to allow an address to be used\n *  in any API which accepts a Signer, but for which there are no\n *  credentials available to perform any actual signing.\n *\n *  This for example allow impersonating an account for the purpose of\n *  static calls or estimating gas, but does not allow sending transactions.\n */\nexport class VoidSigner extends AbstractSigner {\n    /**\n     *  The signer address.\n     */\n    readonly address!: string;\n\n    /**\n     *  Creates a new **VoidSigner** with %%address%% attached to\n     *  %%provider%%.\n     */\n    constructor(address: string, provider?: null | Provider) {\n        super(provider);\n        defineProperties<VoidSigner>(this, { address });\n    }\n\n    async getAddress(): Promise<string> { return this.address; }\n\n    connect(provider: null | Provider): VoidSigner {\n        return new VoidSigner(this.address, provider);\n    }\n\n    #throwUnsupported(suffix: string, operation: string): never {\n        assert(false, `VoidSigner cannot sign ${ suffix }`, \"UNSUPPORTED_OPERATION\", { operation });\n    }\n\n    async signTransaction(tx: TransactionRequest): Promise<string> {\n        this.#throwUnsupported(\"transactions\", \"signTransaction\");\n    }\n\n    async signMessage(message: string | Uint8Array): Promise<string> {\n        this.#throwUnsupported(\"messages\", \"signMessage\");\n    }\n\n    async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {\n        this.#throwUnsupported(\"typed-data\", \"signTypedData\");\n    }\n}\n\n", "/**\n *  There are many awesome community services that provide Ethereum\n *  nodes both for developers just starting out and for large-scale\n *  communities.\n *\n *  @_section: api/providers/thirdparty: Community Providers  [thirdparty]\n */\n\n/**\n *  Providers which offer community credentials should extend this\n *  to notify any interested consumers whether community credentials\n *  are in-use.\n */\nexport interface CommunityResourcable {\n    /**\n     *  Returns true of the instance is connected using the community\n     *  credentials.\n     */\n    isCommunityResource(): boolean;\n}\n\n// Show the throttle message only once per service\nconst shown: Set<string> = new Set();\n\n/**\n *  Displays a warning in tht console when the community resource is\n *  being used too heavily by the app, recommending the developer\n *  acquire their own credentials instead of using the community\n *  credentials.\n *\n *  The notification will only occur once per service.\n */\nexport function showThrottleMessage(service: string): void {\n    if (shown.has(service)) { return; }\n    shown.add(service);\n\n    console.log(\"========= NOTICE =========\")\n    console.log(`Request-Rate Exceeded for ${ service } (this message will not be repeated)`);\n    console.log(\"\");\n    console.log(\"The default API keys for each service are provided as a highly-throttled,\");\n    console.log(\"community resource for low-traffic projects and early prototyping.\");\n    console.log(\"\");\n    console.log(\"While your application will continue to function, we highly recommended\");\n    console.log(\"signing up for your own API keys to improve performance, increase your\");\n    console.log(\"request rate/limit and enable other perks, such as metrics and advanced APIs.\");\n    console.log(\"\");\n    console.log(\"For more details: https:/\\/docs.ethers.org/api-keys/\");\n    console.log(\"==========================\");\n}\n", "import { isError } from \"../utils/index.js\";\n\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\n\nimport type { AbstractProvider, Subscriber } from \"./abstract-provider.js\";\nimport type { Network } from \"./network.js\";\nimport type { EventFilter } from \"./provider.js\";\nimport type { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\n\nfunction copy(obj: any): any {\n    return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n *  Some backends support subscribing to events using a Filter ID.\n *\n *  When subscribing with this technique, the node issues a unique\n *  //Filter ID//. At this point the node dedicates resources to\n *  the filter, so that periodic calls to follow up on the //Filter ID//\n *  will receive any events since the last call.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class FilterIdSubscriber implements Subscriber {\n    #provider: JsonRpcApiProvider;\n\n    #filterIdPromise: null | Promise<string>;\n    #poller: (b: number) => Promise<void>;\n\n    #running: boolean;\n\n    #network: null | Network;\n\n    #hault: boolean;\n\n    /**\n     *  Creates a new **FilterIdSubscriber** which will used [[_subscribe]]\n     *  and [[_emitResults]] to setup the subscription and provide the event\n     *  to the %%provider%%.\n     */\n    constructor(provider: JsonRpcApiProvider) {\n        this.#provider = provider;\n\n        this.#filterIdPromise = null;\n        this.#poller = this.#poll.bind(this);\n\n        this.#running = false;\n\n        this.#network = null;\n\n        this.#hault = false;\n    }\n\n    /**\n     *  Sub-classes **must** override this to begin the subscription.\n     */\n    _subscribe(provider: JsonRpcApiProvider): Promise<string> {\n        throw new Error(\"subclasses must override this\");\n    }\n\n    /**\n     *  Sub-classes **must** override this handle the events.\n     */\n    _emitResults(provider: AbstractProvider, result: Array<any>): Promise<void> {\n        throw new Error(\"subclasses must override this\");\n    }\n\n    /**\n     *  Sub-classes **must** override this handle recovery on errors.\n     */\n    _recover(provider: AbstractProvider): Subscriber {\n        throw new Error(\"subclasses must override this\");\n    }\n\n    async #poll(blockNumber: number): Promise<void> {\n        try {\n            // Subscribe if necessary\n            if (this.#filterIdPromise == null) {\n                this.#filterIdPromise = this._subscribe(this.#provider);\n            }\n\n            // Get the Filter ID\n            let filterId: null | string = null;\n            try {\n                filterId = await this.#filterIdPromise;\n            } catch (error) {\n                if (!isError(error, \"UNSUPPORTED_OPERATION\") || error.operation !== \"eth_newFilter\") {\n                    throw error;\n                }\n            }\n\n            // The backend does not support Filter ID; downgrade to\n            // polling\n            if (filterId == null) {\n                this.#filterIdPromise = null;\n                this.#provider._recoverSubscriber(this, this._recover(this.#provider));\n                return;\n            }\n\n            const network = await this.#provider.getNetwork();\n            if (!this.#network) { this.#network = network; }\n\n            if ((this.#network as Network).chainId !== network.chainId) {\n                throw new Error(\"chaid changed\");\n            }\n\n            if (this.#hault) { return; }\n\n            const result = await this.#provider.send(\"eth_getFilterChanges\", [ filterId ]);\n            await this._emitResults(this.#provider, result);\n        } catch (error) { console.log(\"@TODO\", error); }\n\n        this.#provider.once(\"block\", this.#poller);\n    }\n\n    #teardown(): void {\n        const filterIdPromise = this.#filterIdPromise;\n        if (filterIdPromise) {\n            this.#filterIdPromise = null;\n            filterIdPromise.then((filterId) => {\n                if (this.#provider.destroyed) { return; }\n                this.#provider.send(\"eth_uninstallFilter\", [ filterId ]);\n            });\n        }\n    }\n\n    start(): void {\n        if (this.#running) { return; }\n        this.#running = true;\n\n        this.#poll(-2);\n    }\n\n    stop(): void {\n        if (!this.#running) { return; }\n        this.#running = false;\n\n        this.#hault = true;\n        this.#teardown();\n        this.#provider.off(\"block\", this.#poller);\n    }\n\n    pause(dropWhilePaused?: boolean): void {\n        if (dropWhilePaused){ this.#teardown(); }\n        this.#provider.off(\"block\", this.#poller);\n    }\n\n    resume(): void { this.start(); }\n}\n\n/**\n *  A **FilterIdSubscriber** for receiving contract events.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class FilterIdEventSubscriber extends FilterIdSubscriber {\n    #event: EventFilter;\n\n    /**\n     *  Creates a new **FilterIdEventSubscriber** attached to %%provider%%\n     *  listening for %%filter%%.\n     */\n    constructor(provider: JsonRpcApiProvider, filter: EventFilter) {\n        super(provider);\n        this.#event = copy(filter);\n    }\n\n    _recover(provider: AbstractProvider): Subscriber {\n        return new PollingEventSubscriber(provider, this.#event);\n    }\n\n    async _subscribe(provider: JsonRpcApiProvider): Promise<string> {\n        const filterId = await provider.send(\"eth_newFilter\", [ this.#event ]);\n        return filterId;\n    }\n\n    async _emitResults(provider: JsonRpcApiProvider, results: Array<any>): Promise<void> {\n        for (const result of results) {\n            provider.emit(this.#event, provider._wrapLog(result, provider._network));\n        }\n    }\n}\n\n/**\n *  A **FilterIdSubscriber** for receiving pending transactions events.\n *\n *  @_docloc: api/providers/abstract-provider\n */\nexport class FilterIdPendingSubscriber extends FilterIdSubscriber {\n    async _subscribe(provider: JsonRpcApiProvider): Promise<string> {\n        return await provider.send(\"eth_newPendingTransactionFilter\", [ ]);\n    }\n\n    async _emitResults(provider: JsonRpcApiProvider, results: Array<any>): Promise<void> {\n        for (const result of results) {\n            provider.emit(\"pending\", result);\n        }\n    }\n}\n", "/**\n *  One of the most common ways to interact with the blockchain is\n *  by a node running a JSON-RPC interface which can be connected to,\n *  based on the transport, using:\n *\n *  - HTTP or HTTPS - [[JsonRpcProvider]]\n *  - WebSocket - [[WebSocketProvider]]\n *  - IPC - [[IpcSocketProvider]]\n *\n * @_section: api/providers/jsonrpc:JSON-RPC Provider  [about-jsonrpcProvider]\n */\n\n// @TODO:\n// - Add the batching API\n\n// https://playground.open-rpc.org/?schemaUrl=https://raw.githubusercontent.com/ethereum/eth1.0-apis/assembled-spec/openrpc.json&uiSchema%5BappBar%5D%5Bui:splitView%5D=true&uiSchema%5BappBar%5D%5Bui:input%5D=false&uiSchema%5BappBar%5D%5Bui:examplesDropdown%5D=false\n\nimport { AbiCoder } from \"../abi/index.js\";\nimport { getAddress, resolveAddress } from \"../address/index.js\";\nimport { TypedDataEncoder } from \"../hash/index.js\";\nimport { accessListify } from \"../transaction/index.js\";\nimport {\n    defineProperties, getBigInt, hexlify, isHexString, toQuantity, toUtf8Bytes,\n    isError, makeError, assert, assertArgument,\n    FetchRequest, resolveProperties\n} from \"../utils/index.js\";\n\nimport { AbstractProvider, UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { AbstractSigner } from \"./abstract-signer.js\";\nimport { Network } from \"./network.js\";\nimport { FilterIdEventSubscriber, FilterIdPendingSubscriber } from \"./subscriber-filterid.js\";\nimport { PollingEventSubscriber } from \"./subscriber-polling.js\";\n\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\nimport type { PerformActionRequest, Subscriber, Subscription } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\";\nimport type { Provider, TransactionRequest, TransactionResponse } from \"./provider.js\";\nimport type { Signer } from \"./signer.js\";\n\ntype Timer = ReturnType<typeof setTimeout>;\n\nconst Primitive = \"bigint,boolean,function,number,string,symbol\".split(/,/g);\n//const Methods = \"getAddress,then\".split(/,/g);\nfunction deepCopy<T = any>(value: T): T {\n    if (value == null || Primitive.indexOf(typeof(value)) >= 0) {\n        return value;\n    }\n\n    // Keep any Addressable\n    if (typeof((<any>value).getAddress) === \"function\") {\n        return value;\n    }\n\n    if (Array.isArray(value)) { return <any>(value.map(deepCopy)); }\n\n    if (typeof(value) === \"object\") {\n        return Object.keys(value).reduce((accum, key) => {\n            accum[key] = (<any>value)[key];\n            return accum;\n        }, <any>{ });\n    }\n\n    throw new Error(`should not happen: ${ value } (${ typeof(value) })`);\n}\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n\nfunction getLowerCase(value: string): string {\n    if (value) { return value.toLowerCase(); }\n    return value;\n}\n\ninterface Pollable {\n    pollingInterval: number;\n}\n\nfunction isPollable(value: any): value is Pollable {\n    return (value && typeof(value.pollingInterval) === \"number\");\n}\n\n/**\n *  A JSON-RPC payload, which are sent to a JSON-RPC server.\n */\nexport type JsonRpcPayload = {\n    /**\n     *  The JSON-RPC request ID.\n     */\n    id: number;\n\n    /**\n     *  The JSON-RPC request method.\n     */\n    method: string;\n\n    /**\n     *  The JSON-RPC request parameters.\n     */\n    params: Array<any> | Record<string, any>;\n\n    /**\n     *  A required constant in the JSON-RPC specification.\n     */\n    jsonrpc: \"2.0\";\n};\n\n/**\n *  A JSON-RPC result, which are returned on success from a JSON-RPC server.\n */\nexport type JsonRpcResult = {\n    /**\n     *  The response ID to match it to the relevant request.\n     */\n    id: number;\n\n    /**\n     *  The response result.\n     */\n    result: any;\n};\n\n/**\n *  A JSON-RPC error, which are returned on failure from a JSON-RPC server.\n */\nexport type JsonRpcError = {\n    /**\n     *  The response ID to match it to the relevant request.\n     */\n    id: number;\n\n    /**\n     *  The response error.\n     */\n    error: {\n        code: number;\n        message?: string;\n        data?: any;\n    }\n};\n\n/**\n *  When subscribing to the ``\"debug\"`` event, the [[Listener]] will\n *  receive this object as the first parameter.\n */\nexport type DebugEventJsonRpcApiProvider = {\n    action: \"sendRpcPayload\",\n    payload: JsonRpcPayload | Array<JsonRpcPayload>\n} | {\n    action: \"receiveRpcResult\",\n    result: Array<JsonRpcResult | JsonRpcError>\n} | {\n    action: \"receiveRpcError\",\n    error: Error\n};\n\n/**\n *  Options for configuring a [[JsonRpcApiProvider]]. Much of this\n *  is targetted towards sub-classes, which often will not expose\n *  any of these options to their consumers.\n *\n *  **``polling``** - use the polling strategy is used immediately\n *  for events; otherwise, attempt to use filters and fall back onto\n *  polling (default: ``false``)\n *\n *  **``staticNetwork``** - do not request chain ID on requests to\n *  validate the underlying chain has not changed (default: ``null``)\n *\n *  This should **ONLY** be used if it is **certain** that the network\n *  cannot change, such as when using INFURA (since the URL dictates the\n *  network). If the network is assumed static and it does change, this\n *  can have tragic consequences. For example, this **CANNOT** be used\n *  with MetaMask, since the user can select a new network from the\n *  drop-down at any time.\n *\n *  **``batchStallTime``** - how long (ms) to aggregate requests into a\n *  single batch. ``0`` indicates batching will only encompass the current\n *  event loop. If ``batchMaxCount = 1``, this is ignored. (default: ``10``)\n *\n *  **``batchMaxSize``** - target maximum size (bytes) to allow per batch\n *  request (default: 1Mb)\n *\n *  **``batchMaxCount``** - maximum number of requests to allow in a batch.\n *  If ``batchMaxCount = 1``, then batching is disabled. (default: ``100``)\n *\n *  **``cacheTimeout``** - passed as [[AbstractProviderOptions]].\n */\nexport type JsonRpcApiProviderOptions = {\n    polling?: boolean;\n    staticNetwork?: null | boolean | Network;\n    batchStallTime?: number;\n    batchMaxSize?: number;\n    batchMaxCount?: number;\n\n    cacheTimeout?: number;\n    pollingInterval?: number;\n};\n\nconst defaultOptions = {\n    polling: false,\n    staticNetwork: null,\n\n    batchStallTime: 10,      // 10ms\n    batchMaxSize: (1 << 20), // 1Mb\n    batchMaxCount: 100,      // 100 requests\n\n    cacheTimeout: 250,\n    pollingInterval: 4000\n}\n\n/**\n *  A **JsonRpcTransactionRequest** is formatted as needed by the JSON-RPC\n *  Ethereum API specification.\n */\nexport interface JsonRpcTransactionRequest {\n     /**\n      *  The sender address to use when signing.\n      */\n     from?: string;\n\n     /**\n      *  The target address.\n      */\n     to?: string;\n\n     /**\n      *  The transaction data.\n      */\n     data?: string;\n\n     /**\n      *  The chain ID the transaction is valid on.\n      */\n     chainId?: string;\n\n     /**\n      *  The [[link-eip-2718]] transaction type.\n      */\n     type?: string;\n\n     /**\n      *  The maximum amount of gas to allow a transaction to consume.\n      *\n      *  In most other places in ethers, this is called ``gasLimit`` which\n      *  differs from the JSON-RPC Ethereum API specification.\n      */\n     gas?: string;\n\n     /**\n      *  The gas price per wei for transactions prior to [[link-eip-1559]].\n      */\n     gasPrice?: string;\n\n     /**\n      *  The maximum fee per gas for [[link-eip-1559]] transactions.\n      */\n     maxFeePerGas?: string;\n\n     /**\n      *  The maximum priority fee per gas for [[link-eip-1559]] transactions.\n      */\n     maxPriorityFeePerGas?: string;\n\n     /**\n      *  The nonce for the transaction.\n      */\n     nonce?: string;\n\n     /**\n      *  The transaction value (in wei).\n      */\n     value?: string;\n\n     /**\n      *  The transaction access list.\n      */\n     accessList?: Array<{ address: string, storageKeys: Array<string> }>;\n}\n\n// @TODO: Unchecked Signers\n\nexport class JsonRpcSigner extends AbstractSigner<JsonRpcApiProvider> {\n    address!: string;\n\n    constructor(provider: JsonRpcApiProvider, address: string) {\n        super(provider);\n        address = getAddress(address);\n        defineProperties<JsonRpcSigner>(this, { address });\n    }\n\n    connect(provider: null | Provider): Signer {\n        assert(false, \"cannot reconnect JsonRpcSigner\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"signer.connect\"\n        });\n    }\n\n    async getAddress(): Promise<string> {\n        return this.address;\n    }\n\n    // JSON-RPC will automatially fill in nonce, etc. so we just check from\n    async populateTransaction(tx: TransactionRequest): Promise<TransactionLike<string>> {\n        return await this.populateCall(tx);\n    }\n\n    // Returns just the hash of the transaction after sent, which is what\n    // the bare JSON-RPC API does;\n    async sendUncheckedTransaction(_tx: TransactionRequest): Promise<string> {\n        const tx = deepCopy(_tx);\n\n        const promises: Array<Promise<void>> = [];\n\n        // Make sure the from matches the sender\n        if (tx.from) {\n            const _from = tx.from;\n            promises.push((async () => {\n                const from = await resolveAddress(_from, this.provider);\n                assertArgument(from != null && from.toLowerCase() === this.address.toLowerCase(),\n                    \"from address mismatch\", \"transaction\", _tx);\n                tx.from = from;\n            })());\n        } else {\n            tx.from = this.address;\n        }\n\n        // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user\n        // wishes to use this, it is easy to specify explicitly, otherwise\n        // we look it up for them.\n        if (tx.gasLimit == null) {\n            promises.push((async () => {\n                tx.gasLimit = await this.provider.estimateGas({ ...tx, from: this.address});\n            })());\n        }\n\n        // The address may be an ENS name or Addressable\n        if (tx.to != null) {\n            const _to = tx.to;\n            promises.push((async () => {\n                tx.to = await resolveAddress(_to, this.provider);\n            })());\n        }\n\n        // Wait until all of our properties are filled in\n        if (promises.length) { await Promise.all(promises); }\n\n        const hexTx = this.provider.getRpcTransaction(tx);\n\n        return this.provider.send(\"eth_sendTransaction\", [ hexTx ]);\n    }\n\n    async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {\n        // This cannot be mined any earlier than any recent block\n        const blockNumber = await this.provider.getBlockNumber();\n\n        // Send the transaction\n        const hash = await this.sendUncheckedTransaction(tx);\n\n        // Unfortunately, JSON-RPC only provides and opaque transaction hash\n        // for a response, and we need the actual transaction, so we poll\n        // for it; it should show up very quickly\n        return await (new Promise((resolve, reject) => {\n            const timeouts = [ 1000, 100 ];\n            let invalids = 0;\n\n            const checkTx = async () => {\n\n                try {\n                    // Try getting the transaction\n                    const tx = await this.provider.getTransaction(hash);\n\n                    if (tx != null) {\n                        resolve(tx.replaceableTransaction(blockNumber));\n                        return;\n                    }\n\n                } catch (error) {\n\n                    // If we were cancelled: stop polling.\n                    // If the data is bad: the node returns bad transactions\n                    // If the network changed: calling again will also fail\n                    // If unsupported: likely destroyed\n                    if (isError(error, \"CANCELLED\") || isError(error, \"BAD_DATA\") ||\n                        isError(error, \"NETWORK_ERROR\") || isError(error, \"UNSUPPORTED_OPERATION\")) {\n\n                        if (error.info == null) { error.info = { }; }\n                        error.info.sendTransactionHash = hash;\n\n                        reject(error);\n                        return;\n                    }\n\n                    // Stop-gap for misbehaving backends; see #4513\n                    if (isError(error, \"INVALID_ARGUMENT\")) {\n                        invalids++;\n                        if (error.info == null) { error.info = { }; }\n                        error.info.sendTransactionHash = hash;\n                        if (invalids > 10) {\n                            reject(error);\n                            return;\n                        }\n                    }\n\n                    // Notify anyone that cares; but we will try again, since\n                    // it is likely an intermittent service error\n                    this.provider.emit(\"error\", makeError(\"failed to fetch transation after sending (will try again)\", \"UNKNOWN_ERROR\", { error }));\n                }\n\n                // Wait another 4 seconds\n                this.provider._setTimeout(() => { checkTx(); }, timeouts.pop() || 4000);\n            };\n            checkTx();\n        }));\n    }\n\n    async signTransaction(_tx: TransactionRequest): Promise<string> {\n        const tx = deepCopy(_tx);\n\n        // Make sure the from matches the sender\n        if (tx.from) {\n            const from = await resolveAddress(tx.from, this.provider);\n            assertArgument(from != null && from.toLowerCase() === this.address.toLowerCase(),\n                \"from address mismatch\", \"transaction\", _tx);\n            tx.from = from;\n        } else {\n            tx.from = this.address;\n        }\n\n        const hexTx = this.provider.getRpcTransaction(tx);\n        return await this.provider.send(\"eth_signTransaction\", [ hexTx ]);\n    }\n\n\n    async signMessage(_message: string | Uint8Array): Promise<string> {\n        const message = ((typeof(_message) === \"string\") ? toUtf8Bytes(_message): _message);\n        return await this.provider.send(\"personal_sign\", [\n            hexlify(message), this.address.toLowerCase() ]);\n    }\n\n    async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, _value: Record<string, any>): Promise<string> {\n        const value = deepCopy(_value);\n\n        // Populate any ENS names (in-place)\n        const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (value: string) => {\n            const address = await resolveAddress(value);\n            assertArgument(address != null, \"TypedData does not support null address\", \"value\", value);\n            return address;\n        });\n\n        return await this.provider.send(\"eth_signTypedData_v4\", [\n            this.address.toLowerCase(),\n            JSON.stringify(TypedDataEncoder.getPayload(populated.domain, types, populated.value))\n        ]);\n    }\n\n    async unlock(password: string): Promise<boolean> {\n        return this.provider.send(\"personal_unlockAccount\", [\n            this.address.toLowerCase(), password, null ]);\n    }\n\n    // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign\n    async _legacySignMessage(_message: string | Uint8Array): Promise<string> {\n        const message = ((typeof(_message) === \"string\") ? toUtf8Bytes(_message): _message);\n        return await this.provider.send(\"eth_sign\", [\n            this.address.toLowerCase(), hexlify(message) ]);\n    }\n}\n\ntype ResolveFunc = (result: JsonRpcResult) => void;\ntype RejectFunc = (error: Error) => void;\n\ntype Payload = { payload: JsonRpcPayload, resolve: ResolveFunc, reject: RejectFunc };\n\n/**\n *  The JsonRpcApiProvider is an abstract class and **MUST** be\n *  sub-classed.\n *\n *  It provides the base for all JSON-RPC-based Provider interaction.\n *\n *  Sub-classing Notes:\n *  - a sub-class MUST override _send\n *  - a sub-class MUST call the `_start()` method once connected\n */\nexport abstract class JsonRpcApiProvider extends AbstractProvider {\n\n    #options: Required<JsonRpcApiProviderOptions>;\n\n    // The next ID to use for the JSON-RPC ID field\n    #nextId: number;\n\n    // Payloads are queued and triggered in batches using the drainTimer\n    #payloads: Array<Payload>;\n    #drainTimer: null | Timer;\n\n    #notReady: null | {\n        promise: Promise<void>,\n        resolve: null | ((v: void) => void)\n    };\n\n    #network: null | Network;\n    #pendingDetectNetwork: null | Promise<Network>;\n\n    #scheduleDrain(): void {\n        if (this.#drainTimer) { return; }\n\n        // If we aren't using batching, no harm in sending it immediately\n        const stallTime = (this._getOption(\"batchMaxCount\") === 1) ? 0: this._getOption(\"batchStallTime\");\n\n        this.#drainTimer = setTimeout(() => {\n            this.#drainTimer = null;\n\n            const payloads = this.#payloads;\n            this.#payloads = [ ];\n\n            while (payloads.length) {\n\n                // Create payload batches that satisfy our batch constraints\n                const batch = [ <Payload>(payloads.shift()) ];\n                while (payloads.length) {\n                    if (batch.length === this.#options.batchMaxCount) { break; }\n                    batch.push(<Payload>(payloads.shift()));\n                    const bytes = JSON.stringify(batch.map((p) => p.payload));\n                    if (bytes.length > this.#options.batchMaxSize) {\n                        payloads.unshift(<Payload>(batch.pop()));\n                        break;\n                    }\n                }\n\n                // Process the result to each payload\n                (async () => {\n                    const payload = ((batch.length === 1) ? batch[0].payload: batch.map((p) => p.payload));\n\n                    this.emit(\"debug\", { action: \"sendRpcPayload\", payload });\n\n                    try {\n                        const result = await this._send(payload);\n                        this.emit(\"debug\", { action: \"receiveRpcResult\", result });\n\n                        // Process results in batch order\n                        for (const { resolve, reject, payload } of batch) {\n\n                            if (this.destroyed) {\n                                reject(makeError(\"provider destroyed; cancelled request\", \"UNSUPPORTED_OPERATION\", { operation: payload.method }));\n                                continue;\n                            }\n\n                            // Find the matching result\n                            const resp = result.filter((r) => (r.id === payload.id))[0];\n\n                            // No result; the node failed us in unexpected ways\n                            if (resp == null) {\n                                const error = makeError(\"missing response for request\", \"BAD_DATA\", {\n                                    value: result, info: { payload }\n                                });\n                                this.emit(\"error\", error);\n                                reject(error);\n                                continue;\n                            }\n\n                            // The response is an error\n                            if (\"error\" in resp) {\n                                reject(this.getRpcError(payload, resp));\n                                continue;\n                            }\n\n                            // All good; send the result\n                            resolve(resp.result);\n                        }\n\n                    } catch (error: any) {\n                        this.emit(\"debug\", { action: \"receiveRpcError\", error });\n\n                        for (const { reject } of batch) {\n                            // @TODO: augment the error with the payload\n                            reject(error);\n                        }\n                    }\n                })();\n            }\n        }, stallTime);\n    }\n\n    constructor(network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n\n        this.#nextId = 1;\n        this.#options = Object.assign({ }, defaultOptions, options || { });\n\n        this.#payloads = [ ];\n        this.#drainTimer = null;\n\n        this.#network = null;\n        this.#pendingDetectNetwork = null;\n\n        {\n            let resolve: null | ((value: void) => void) = null;\n            const promise = new Promise((_resolve: (value: void) => void) => {\n                resolve = _resolve;\n            });\n            this.#notReady = { promise, resolve };\n        }\n\n        const staticNetwork = this._getOption(\"staticNetwork\");\n        if (typeof(staticNetwork) === \"boolean\") {\n            assertArgument(!staticNetwork || network !== \"any\", \"staticNetwork cannot be used on special network 'any'\", \"options\", options);\n            if (staticNetwork && network != null) {\n                this.#network = Network.from(network);\n            }\n\n        } else if (staticNetwork) {\n            // Make sure any static network is compatbile with the provided netwrok\n            assertArgument(network == null || staticNetwork.matches(network),\n                \"staticNetwork MUST match network object\", \"options\", options);\n            this.#network = staticNetwork;\n        }\n    }\n\n    /**\n     *  Returns the value associated with the option %%key%%.\n     *\n     *  Sub-classes can use this to inquire about configuration options.\n     */\n    _getOption<K extends keyof JsonRpcApiProviderOptions>(key: K): JsonRpcApiProviderOptions[K] {\n        return this.#options[key];\n    }\n\n    /**\n     *  Gets the [[Network]] this provider has committed to. On each call, the network\n     *  is detected, and if it has changed, the call will reject.\n     */\n    get _network(): Network {\n        assert (this.#network, \"network is not available yet\", \"NETWORK_ERROR\");\n        return this.#network;\n    }\n\n    /**\n     *  Sends a JSON-RPC %%payload%% (or a batch) to the underlying channel.\n     *\n     *  Sub-classes **MUST** override this.\n     */\n    abstract _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>>;\n\n\n    /**\n     *  Resolves to the non-normalized value by performing %%req%%.\n     *\n     *  Sub-classes may override this to modify behavior of actions,\n     *  and should generally call ``super._perform`` as a fallback.\n     */\n    async _perform(req: PerformActionRequest): Promise<any> {\n\n        // Legacy networks do not like the type field being passed along (which\n        // is fair), so we delete type if it is 0 and a non-EIP-1559 network\n        if (req.method === \"call\" || req.method === \"estimateGas\") {\n            let tx = req.transaction;\n            if (tx && tx.type != null && getBigInt(tx.type)) {\n                // If there are no EIP-1559 or newer properties, it might be pre-EIP-1559\n                if (tx.maxFeePerGas == null && tx.maxPriorityFeePerGas == null) {\n                    const feeData = await this.getFeeData();\n                    if (feeData.maxFeePerGas == null && feeData.maxPriorityFeePerGas == null) {\n                        // Network doesn't know about EIP-1559 (and hence type)\n                        req = Object.assign({ }, req, {\n                            transaction: Object.assign({ }, tx, { type: undefined })\n                        });\n                    }\n                }\n            }\n        }\n\n        const request = this.getRpcRequest(req);\n\n        if (request != null) {\n            return await this.send(request.method, request.args);\n        }\n\n        return super._perform(req);\n    }\n\n    /**\n     *  Sub-classes may override this; it detects the *actual* network that\n     *  we are **currently** connected to.\n     *\n     *  Keep in mind that [[send]] may only be used once [[ready]], otherwise the\n     *  _send primitive must be used instead.\n     */\n    async _detectNetwork(): Promise<Network> {\n        const network = this._getOption(\"staticNetwork\");\n        if (network) {\n            if (network === true) {\n                if (this.#network) { return this.#network; }\n            } else {\n                return network;\n            }\n        }\n\n        if (this.#pendingDetectNetwork) {\n            return await this.#pendingDetectNetwork;\n        }\n\n        // If we are ready, use ``send``, which enabled requests to be batched\n        if (this.ready) {\n            this.#pendingDetectNetwork = (async () => {\n                try {\n                    const result = Network.from(getBigInt(await this.send(\"eth_chainId\", [ ])));\n                    this.#pendingDetectNetwork = null;\n                    return result;\n                } catch (error) {\n                    this.#pendingDetectNetwork = null;\n                    throw error;\n                }\n            })();\n            return await this.#pendingDetectNetwork;\n        }\n\n        // We are not ready yet; use the primitive _send\n        this.#pendingDetectNetwork = (async () => {\n            const payload: JsonRpcPayload = {\n                id: this.#nextId++, method: \"eth_chainId\", params: [ ], jsonrpc: \"2.0\"\n            };\n\n            this.emit(\"debug\", { action: \"sendRpcPayload\", payload });\n\n            let result: JsonRpcResult | JsonRpcError;\n            try {\n                result = (await this._send(payload))[0];\n                this.#pendingDetectNetwork = null;\n            } catch (error) {\n                this.#pendingDetectNetwork = null;\n                this.emit(\"debug\", { action: \"receiveRpcError\", error });\n                throw error;\n            }\n\n            this.emit(\"debug\", { action: \"receiveRpcResult\", result });\n\n            if (\"result\" in result) {\n                return Network.from(getBigInt(result.result));\n            }\n\n            throw this.getRpcError(payload, result);\n        })();\n\n        return await this.#pendingDetectNetwork;\n    }\n\n    /**\n     *  Sub-classes **MUST** call this. Until [[_start]] has been called, no calls\n     *  will be passed to [[_send]] from [[send]]. If it is overridden, then\n     *  ``super._start()`` **MUST** be called.\n     *\n     *  Calling it multiple times is safe and has no effect.\n     */\n    _start(): void {\n        if (this.#notReady == null || this.#notReady.resolve == null) { return; }\n\n        this.#notReady.resolve();\n        this.#notReady = null;\n\n        (async () => {\n\n            // Bootstrap the network\n            while (this.#network == null && !this.destroyed) {\n                try {\n                    this.#network = await this._detectNetwork();\n                } catch (error) {\n                    if (this.destroyed) { break; }\n                    console.log(\"JsonRpcProvider failed to detect network and cannot start up; retry in 1s (perhaps the URL is wrong or the node is not started)\");\n                    this.emit(\"error\", makeError(\"failed to bootstrap network detection\", \"NETWORK_ERROR\", { event: \"initial-network-discovery\", info: { error } }));\n                    await stall(1000);\n                }\n            }\n\n            // Start dispatching requests\n            this.#scheduleDrain();\n        })();\n    }\n\n    /**\n     *  Resolves once the [[_start]] has been called. This can be used in\n     *  sub-classes to defer sending data until the connection has been\n     *  established.\n     */\n    async _waitUntilReady(): Promise<void> {\n        if (this.#notReady == null) { return; }\n        return await this.#notReady.promise;\n    }\n\n\n    /**\n     *  Return a Subscriber that will manage the %%sub%%.\n     *\n     *  Sub-classes may override this to modify the behavior of\n     *  subscription management.\n     */\n    _getSubscriber(sub: Subscription): Subscriber {\n\n        // Pending Filters aren't availble via polling\n        if (sub.type === \"pending\") { return new FilterIdPendingSubscriber(this); }\n\n        if (sub.type === \"event\") {\n            if (this._getOption(\"polling\")) {\n                return new PollingEventSubscriber(this, sub.filter);\n            }\n            return new FilterIdEventSubscriber(this, sub.filter);\n        }\n\n        // Orphaned Logs are handled automatically, by the filter, since\n        // logs with removed are emitted by it\n        if (sub.type === \"orphan\" && sub.filter.orphan === \"drop-log\") {\n            return new UnmanagedSubscriber(\"orphan\");\n        }\n\n        return super._getSubscriber(sub);\n    }\n\n    /**\n     *  Returns true only if the [[_start]] has been called.\n     */\n    get ready(): boolean { return this.#notReady == null; }\n\n    /**\n     *  Returns %%tx%% as a normalized JSON-RPC transaction request,\n     *  which has all values hexlified and any numeric values converted\n     *  to Quantity values.\n     */\n    getRpcTransaction(tx: TransactionRequest): JsonRpcTransactionRequest {\n        const result: JsonRpcTransactionRequest = {};\n\n        // JSON-RPC now requires numeric values to be \"quantity\" values\n        [\"chainId\", \"gasLimit\", \"gasPrice\", \"type\", \"maxFeePerGas\", \"maxPriorityFeePerGas\", \"nonce\", \"value\"].forEach((key) => {\n            if ((<any>tx)[key] == null) { return; }\n            let dstKey = key;\n            if (key === \"gasLimit\") { dstKey = \"gas\"; }\n            (<any>result)[dstKey] = toQuantity(getBigInt((<any>tx)[key], `tx.${ key }`));\n        });\n\n        // Make sure addresses and data are lowercase\n        [\"from\", \"to\", \"data\"].forEach((key) => {\n            if ((<any>tx)[key] == null) { return; }\n            (<any>result)[key] = hexlify((<any>tx)[key]);\n        });\n\n        // Normalize the access list object\n        if (tx.accessList) {\n            result[\"accessList\"] = accessListify(tx.accessList);\n        }\n\n        if (tx.blobVersionedHashes) {\n            // @TODO: Remove this <any> case once EIP-4844 added to prepared tx\n            (<any>result)[\"blobVersionedHashes\"] = tx.blobVersionedHashes.map(h => h.toLowerCase());\n        }\n\n        // @TODO: blobs should probably also be copied over, optionally\n        // accounting for the kzg property to backfill blobVersionedHashes\n        // using the commitment. Or should that be left as an exercise to\n        // the caller?\n\n        return result;\n    }\n\n    /**\n     *  Returns the request method and arguments required to perform\n     *  %%req%%.\n     */\n    getRpcRequest(req: PerformActionRequest): null | { method: string, args: Array<any> } {\n        switch (req.method) {\n            case \"chainId\":\n                return { method: \"eth_chainId\", args: [ ] };\n\n            case \"getBlockNumber\":\n                return { method: \"eth_blockNumber\", args: [ ] };\n\n            case \"getGasPrice\":\n                return { method: \"eth_gasPrice\", args: [] };\n\n            case \"getPriorityFee\":\n                return { method: \"eth_maxPriorityFeePerGas\", args: [ ] };\n\n            case \"getBalance\":\n                return {\n                    method: \"eth_getBalance\",\n                    args: [ getLowerCase(req.address), req.blockTag ]\n                };\n\n            case \"getTransactionCount\":\n                return {\n                    method: \"eth_getTransactionCount\",\n                    args: [ getLowerCase(req.address), req.blockTag ]\n                };\n\n            case \"getCode\":\n                return {\n                    method: \"eth_getCode\",\n                    args: [ getLowerCase(req.address), req.blockTag ]\n                };\n\n            case \"getStorage\":\n                return {\n                    method: \"eth_getStorageAt\",\n                    args: [\n                        getLowerCase(req.address),\n                        (\"0x\" + req.position.toString(16)),\n                        req.blockTag\n                    ]\n                };\n\n            case \"broadcastTransaction\":\n                return {\n                    method: \"eth_sendRawTransaction\",\n                    args: [ req.signedTransaction ]\n                };\n\n            case \"getBlock\":\n                if (\"blockTag\" in req) {\n                    return {\n                        method: \"eth_getBlockByNumber\",\n                        args: [ req.blockTag, !!req.includeTransactions ]\n                    };\n                } else if (\"blockHash\" in req) {\n                    return {\n                        method: \"eth_getBlockByHash\",\n                        args: [ req.blockHash, !!req.includeTransactions ]\n                    };\n                }\n                break;\n\n            case \"getTransaction\":\n                return {\n                    method: \"eth_getTransactionByHash\",\n                    args: [ req.hash ]\n                };\n\n            case \"getTransactionReceipt\":\n                return {\n                    method: \"eth_getTransactionReceipt\",\n                    args: [ req.hash ]\n                };\n\n            case \"call\":\n                return {\n                    method: \"eth_call\",\n                    args: [ this.getRpcTransaction(req.transaction), req.blockTag ]\n                };\n\n            case \"estimateGas\": {\n                return {\n                    method: \"eth_estimateGas\",\n                    args: [ this.getRpcTransaction(req.transaction) ]\n                };\n            }\n\n            case \"getLogs\":\n                if (req.filter && req.filter.address != null) {\n                    if (Array.isArray(req.filter.address)) {\n                        req.filter.address = req.filter.address.map(getLowerCase);\n                    } else {\n                        req.filter.address = getLowerCase(req.filter.address);\n                    }\n                }\n                return { method: \"eth_getLogs\", args: [ req.filter ] };\n        }\n\n        return null;\n    }\n\n    /**\n     *  Returns an ethers-style Error for the given JSON-RPC error\n     *  %%payload%%, coalescing the various strings and error shapes\n     *  that different nodes return, coercing them into a machine-readable\n     *  standardized error.\n     */\n    getRpcError(payload: JsonRpcPayload, _error: JsonRpcError): Error {\n        const { method } = payload;\n        const { error } = _error;\n\n        if (method === \"eth_estimateGas\" && error.message) {\n            const msg = error.message;\n            if (!msg.match(/revert/i) && msg.match(/insufficient funds/i)) {\n                return makeError(\"insufficient funds\", \"INSUFFICIENT_FUNDS\", {\n                    transaction: ((<any>payload).params[0]),\n                    info: { payload, error }\n                });\n            }\n        }\n\n        if (method === \"eth_call\" || method === \"eth_estimateGas\") {\n            const result = spelunkData(error);\n\n            const e = AbiCoder.getBuiltinCallException(\n                (method === \"eth_call\") ? \"call\": \"estimateGas\",\n                ((<any>payload).params[0]),\n                (result ? result.data: null)\n            );\n            e.info = { error, payload };\n            return e;\n        }\n\n        // Only estimateGas and call can return arbitrary contract-defined text, so now we\n        // we can process text safely.\n\n        const message = JSON.stringify(spelunkMessage(error));\n\n        if (typeof(error.message) === \"string\" && error.message.match(/user denied|ethers-user-denied/i)) {\n            const actionMap: Record<string, \"requestAccess\" | \"sendTransaction\" | \"signMessage\" | \"signTransaction\" | \"signTypedData\"> = {\n                eth_sign: \"signMessage\",\n                personal_sign: \"signMessage\",\n                eth_signTypedData_v4: \"signTypedData\",\n                eth_signTransaction: \"signTransaction\",\n                eth_sendTransaction: \"sendTransaction\",\n                eth_requestAccounts: \"requestAccess\",\n                wallet_requestAccounts: \"requestAccess\",\n            };\n\n            return makeError(`user rejected action`, \"ACTION_REJECTED\", {\n                action: (actionMap[method] || \"unknown\") ,\n                reason: \"rejected\",\n                info: { payload, error }\n            });\n        }\n\n        if (method === \"eth_sendRawTransaction\" || method === \"eth_sendTransaction\") {\n            const transaction = <TransactionLike<string>>((<any>payload).params[0]);\n\n            if (message.match(/insufficient funds|base fee exceeds gas limit/i)) {\n                return makeError(\"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n                    transaction, info: { error }\n                });\n            }\n\n            if (message.match(/nonce/i) && message.match(/too low/i)) {\n                return makeError(\"nonce has already been used\", \"NONCE_EXPIRED\", { transaction, info: { error } });\n            }\n\n            // \"replacement transaction underpriced\"\n            if (message.match(/replacement transaction/i) && message.match(/underpriced/i)) {\n                return makeError(\"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", { transaction, info: { error } });\n            }\n\n            if (message.match(/only replay-protected/i)) {\n                return makeError(\"legacy pre-eip-155 transactions not supported\", \"UNSUPPORTED_OPERATION\", {\n                    operation: method, info: { transaction, info: { error } }\n                });\n            }\n        }\n\n        let unsupported = !!message.match(/the method .* does not exist/i);\n        if (!unsupported) {\n            if (error && (<any>error).details && (<any>error).details.startsWith(\"Unauthorized method:\")) {\n                unsupported = true;\n            }\n        }\n\n        if (unsupported) {\n            return makeError(\"unsupported operation\", \"UNSUPPORTED_OPERATION\", {\n                operation: payload.method, info: { error, payload }\n            });\n        }\n\n        return makeError(\"could not coalesce error\", \"UNKNOWN_ERROR\", { error, payload });\n    }\n\n\n    /**\n     *  Requests the %%method%% with %%params%% via the JSON-RPC protocol\n     *  over the underlying channel. This can be used to call methods\n     *  on the backend that do not have a high-level API within the Provider\n     *  API.\n     *\n     *  This method queues requests according to the batch constraints\n     *  in the options, assigns the request a unique ID.\n     *\n     *  **Do NOT override** this method in sub-classes; instead\n     *  override [[_send]] or force the options values in the\n     *  call to the constructor to modify this method's behavior.\n     */\n    send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n        // @TODO: cache chainId?? purge on switch_networks\n\n        // We have been destroyed; no operations are supported anymore\n        if (this.destroyed) {\n            return Promise.reject(makeError(\"provider destroyed; cancelled request\", \"UNSUPPORTED_OPERATION\", { operation: method }));\n        }\n\n        const id = this.#nextId++;\n        const promise = new Promise((resolve, reject) => {\n            this.#payloads.push({\n                resolve, reject,\n                payload: { method, params, id, jsonrpc: \"2.0\" }\n            });\n        });\n\n        // If there is not a pending drainTimer, set one\n        this.#scheduleDrain();\n\n        return <Promise<JsonRpcResult>>promise;\n    }\n\n    /**\n     *  Resolves to the [[Signer]] account for  %%address%% managed by\n     *  the client.\n     *\n     *  If the %%address%% is a number, it is used as an index in the\n     *  the accounts from [[listAccounts]].\n     *\n     *  This can only be used on clients which manage accounts (such as\n     *  Geth with imported account or MetaMask).\n     *\n     *  Throws if the account doesn't exist.\n     */\n    async getSigner(address?: number | string): Promise<JsonRpcSigner> {\n        if (address == null) { address = 0; }\n\n        const accountsPromise = this.send(\"eth_accounts\", [ ]);\n\n        // Account index\n        if (typeof(address) === \"number\") {\n            const accounts = <Array<string>>(await accountsPromise);\n            if (address >= accounts.length) { throw new Error(\"no such account\"); }\n            return new JsonRpcSigner(this, accounts[address]);\n        }\n\n        const { accounts } = await resolveProperties({\n            network: this.getNetwork(),\n            accounts: accountsPromise\n        });\n\n        // Account address\n        address = getAddress(address);\n        for (const account of accounts) {\n            if (getAddress(account) === address) {\n                return new JsonRpcSigner(this, address);\n            }\n        }\n\n        throw new Error(\"invalid account\");\n    }\n\n    async listAccounts(): Promise<Array<JsonRpcSigner>> {\n        const accounts: Array<string> = await this.send(\"eth_accounts\", [ ]);\n        return accounts.map((a) => new JsonRpcSigner(this, a));\n    }\n\n    destroy(): void {\n\n        // Stop processing requests\n        if (this.#drainTimer) {\n            clearTimeout(this.#drainTimer);\n            this.#drainTimer = null;\n        }\n\n        // Cancel all pending requests\n        for (const { payload, reject } of this.#payloads) {\n            reject(makeError(\"provider destroyed; cancelled request\", \"UNSUPPORTED_OPERATION\", { operation: payload.method }));\n        }\n\n        this.#payloads = [ ];\n\n        // Parent clean-up\n        super.destroy();\n\n    }\n}\n\n// @TODO: remove this in v7, it is not exported because this functionality\n// is exposed in the JsonRpcApiProvider by setting polling to true. It should\n// be safe to remove regardless, because it isn't reachable, but just in case.\n/**\n *  @_ignore:\n */\nexport abstract class JsonRpcApiPollingProvider extends JsonRpcApiProvider {\n    #pollingInterval: number;\n    constructor(network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n\n        let pollingInterval = this._getOption(\"pollingInterval\");\n        if (pollingInterval == null) { pollingInterval = defaultOptions.pollingInterval; }\n\n        this.#pollingInterval = pollingInterval;\n    }\n\n    _getSubscriber(sub: Subscription): Subscriber {\n        const subscriber = super._getSubscriber(sub);\n        if (isPollable(subscriber)) {\n            subscriber.pollingInterval = this.#pollingInterval;\n        }\n        return subscriber;\n    }\n\n    /**\n     *  The polling interval (default: 4000 ms)\n     */\n    get pollingInterval(): number { return this.#pollingInterval; }\n    set pollingInterval(value: number) {\n        if (!Number.isInteger(value) || value < 0) { throw new Error(\"invalid interval\"); }\n        this.#pollingInterval = value;\n        this._forEachSubscriber((sub) => {\n            if (isPollable(sub)) {\n                sub.pollingInterval = this.#pollingInterval;\n            }\n        });\n    }\n}\n\n/**\n *  The JsonRpcProvider is one of the most common Providers,\n *  which performs all operations over HTTP (or HTTPS) requests.\n *\n *  Events are processed by polling the backend for the current block\n *  number; when it advances, all block-base events are then checked\n *  for updates.\n */\nexport class JsonRpcProvider extends JsonRpcApiPollingProvider {\n    #connect: FetchRequest;\n\n    constructor(url?: string | FetchRequest, network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        if (url == null) { url = \"http:/\\/localhost:8545\"; }\n        super(network, options);\n\n        if (typeof(url) === \"string\") {\n            this.#connect = new FetchRequest(url);\n        } else {\n            this.#connect = url.clone();\n        }\n    }\n\n    _getConnection(): FetchRequest {\n        return this.#connect.clone();\n    }\n\n    async send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n        // All requests are over HTTP, so we can just start handling requests\n        // We do this here rather than the constructor so that we don't send any\n        // requests to the network (i.e. eth_chainId) until we absolutely have to.\n        await this._start();\n\n        return await super.send(method, params);\n    }\n\n    async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult>> {\n        // Configure a POST connection for the requested method\n        const request = this._getConnection();\n        request.body = JSON.stringify(payload);\n        request.setHeader(\"content-type\", \"application/json\");\n        const response = await request.send();\n        response.assertOk();\n\n        let resp = response.bodyJson;\n        if (!Array.isArray(resp)) { resp = [ resp ]; }\n\n        return resp;\n    }\n}\n\nfunction spelunkData(value: any): null | { message: string, data: string } {\n    if (value == null) { return null; }\n\n    // These *are* the droids we're looking for.\n    if (typeof(value.message) === \"string\" && value.message.match(/revert/i) && isHexString(value.data)) {\n        return { message: value.message, data: value.data };\n    }\n\n    // Spelunk further...\n    if (typeof(value) === \"object\") {\n        for (const key in value) {\n            const result = spelunkData(value[key]);\n            if (result) { return result; }\n        }\n        return null;\n    }\n\n    // Might be a JSON string we can further descend...\n    if (typeof(value) === \"string\") {\n        try {\n            return spelunkData(JSON.parse(value));\n        } catch (error) { }\n    }\n\n    return null;\n}\n\nfunction _spelunkMessage(value: any, result: Array<string>): void {\n    if (value == null) { return; }\n\n    // These *are* the droids we're looking for.\n    if (typeof(value.message) === \"string\") {\n        result.push(value.message);\n    }\n\n    // Spelunk further...\n    if (typeof(value) === \"object\") {\n        for (const key in value) {\n            _spelunkMessage(value[key], result);\n        }\n    }\n\n    // Might be a JSON string we can further descend...\n    if (typeof(value) === \"string\") {\n        try {\n            return _spelunkMessage(JSON.parse(value), result);\n        } catch (error) { }\n    }\n}\n\nfunction spelunkMessage(value: any): Array<string> {\n    const result: Array<string> = [ ];\n    _spelunkMessage(value, result);\n    return result;\n}\n", "/**\n *  [[link-ankr]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Arbitrum (``arbitrum``)\n *  - Base (``base``)\n *  - Base Goerlia Testnet (``base-goerli``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - BNB (``bnb``)\n *  - BNB Testnet (``bnbt``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:Ankr  [providers-ankr]\n */\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\nimport type { JsonRpcError, JsonRpcPayload } from \"./provider-jsonrpc.js\";\n\n\nconst defaultApiKey = \"9f7d929b018cdffb338517efa06f58359e86ff1ffd350bc889738523659e7972\";\n\nfunction getHost(name: string): string {\n    switch (name) {\n        case \"mainnet\":\n            return \"rpc.ankr.com/eth\";\n        case \"goerli\":\n            return \"rpc.ankr.com/eth_goerli\";\n        case \"sepolia\":\n            return \"rpc.ankr.com/eth_sepolia\";\n\n        case \"arbitrum\":\n            return \"rpc.ankr.com/arbitrum\";\n        case \"base\":\n            return \"rpc.ankr.com/base\";\n        case \"base-goerli\":\n            return \"rpc.ankr.com/base_goerli\";\n        case \"base-sepolia\":\n            return \"rpc.ankr.com/base_sepolia\";\n        case \"bnb\":\n            return \"rpc.ankr.com/bsc\";\n        case \"bnbt\":\n            return \"rpc.ankr.com/bsc_testnet_chapel\";\n        case \"matic\":\n            return \"rpc.ankr.com/polygon\";\n        case \"matic-mumbai\":\n            return \"rpc.ankr.com/polygon_mumbai\";\n        case \"optimism\":\n            return \"rpc.ankr.com/optimism\";\n        case \"optimism-goerli\":\n            return \"rpc.ankr.com/optimism_testnet\";\n        case \"optimism-sepolia\":\n            return \"rpc.ankr.com/optimism_sepolia\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n\n/**\n *  The **AnkrProvider** connects to the [[link-ankr]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-ankr-signup).\n */\nexport class AnkrProvider extends JsonRpcProvider implements CommunityResourcable {\n\n    /**\n     *  The API key for the Ankr connection.\n     */\n    readonly apiKey!: string;\n\n    /**\n     *  Create a new **AnkrProvider**.\n     *\n     *  By default connecting to ``mainnet`` with a highly throttled\n     *  API key.\n     */\n    constructor(_network?: Networkish, apiKey?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        // Ankr does not support filterId, so we force polling\n        const options = { polling: true, staticNetwork: network };\n\n        const request = AnkrProvider.getRequest(network, apiKey);\n        super(request, network, options);\n\n        defineProperties<AnkrProvider>(this, { apiKey });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new AnkrProvider(chainId, this.apiKey);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%% with\n     *  %%apiKey%%.\n     */\n    static getRequest(network: Network, apiKey?: null | string): FetchRequest {\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/${ apiKey }`);\n        request.allowGzip = true;\n\n        if (apiKey === defaultApiKey) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"AnkrProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n\n    getRpcError(payload: JsonRpcPayload, error: JsonRpcError): Error {\n        if (payload.method === \"eth_sendRawTransaction\") {\n            if (error && error.error && error.error.message === \"INTERNAL_ERROR: could not replace existing tx\") {\n                error.error.message = \"replacement transaction underpriced\";\n            }\n        }\n\n        return super.getRpcError(payload, error);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey === defaultApiKey);\n    }\n}\n", "/**\n *  [[link-alchemy]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)\n *  - Base (``base``)\n *  - Base Goerlia Testnet (``base-goerli``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Amoy Testnet (``matic-amoy``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:Alchemy  [providers-alchemy]\n */\n\nimport {\n    defineProperties, resolveProperties, assert, assertArgument,\n    FetchRequest\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { AbstractProvider, PerformActionRequest } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nconst defaultApiKey = \"_gg7wSSi0KMBsdKnGVfHDueq6xMB9EkC\"\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"eth-mainnet.alchemyapi.io\";\n        case \"goerli\":\n            return \"eth-goerli.g.alchemy.com\";\n        case \"sepolia\":\n            return \"eth-sepolia.g.alchemy.com\";\n\n        case \"arbitrum\":\n            return \"arb-mainnet.g.alchemy.com\";\n        case \"arbitrum-goerli\":\n            return \"arb-goerli.g.alchemy.com\";\n        case \"arbitrum-sepolia\":\n            return \"arb-sepolia.g.alchemy.com\";\n        case \"base\":\n            return \"base-mainnet.g.alchemy.com\";\n        case \"base-goerli\":\n            return \"base-goerli.g.alchemy.com\";\n        case \"base-sepolia\":\n            return \"base-sepolia.g.alchemy.com\";\n        case \"matic\":\n            return \"polygon-mainnet.g.alchemy.com\";\n        case \"matic-amoy\":\n            return \"polygon-amoy.g.alchemy.com\";\n        case \"matic-mumbai\":\n            return \"polygon-mumbai.g.alchemy.com\";\n        case \"optimism\":\n            return \"opt-mainnet.g.alchemy.com\";\n        case \"optimism-goerli\":\n            return \"opt-goerli.g.alchemy.com\";\n        case \"optimism-sepolia\":\n            return \"opt-sepolia.g.alchemy.com\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/**\n *  The **AlchemyProvider** connects to the [[link-alchemy]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-alchemy-signup).\n *\n *  @_docloc: api/providers/thirdparty\n */\nexport class AlchemyProvider extends JsonRpcProvider implements CommunityResourcable {\n    readonly apiKey!: string;\n\n    constructor(_network?: Networkish, apiKey?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        const request = AlchemyProvider.getRequest(network, apiKey);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<AlchemyProvider>(this, { apiKey });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new AlchemyProvider(chainId, this.apiKey);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    async _perform(req: PerformActionRequest): Promise<any> {\n\n        // https://docs.alchemy.com/reference/trace-transaction\n        if (req.method === \"getTransactionResult\") {\n            const { trace, tx } = await resolveProperties({\n                trace: this.send(\"trace_transaction\", [ req.hash ]),\n                tx: this.getTransaction(req.hash)\n            });\n            if (trace == null || tx == null) { return null; }\n\n            let data: undefined | string;\n            let error = false;\n            try {\n                data = trace[0].result.output;\n                error = (trace[0].error === \"Reverted\");\n            } catch (error) { }\n\n            if (data) {\n                assert(!error, \"an error occurred during transaction executions\", \"CALL_EXCEPTION\", {\n                    action: \"getTransactionResult\",\n                    data,\n                    reason: null,\n                    transaction: tx,\n                    invocation: null,\n                    revert: null // @TODO\n                });\n                return data;\n            }\n\n            assert(false, \"could not parse trace result\", \"BAD_DATA\", { value: trace });\n        }\n\n        return await super._perform(req);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey === defaultApiKey);\n    }\n\n    static getRequest(network: Network, apiKey?: string): FetchRequest {\n        if (apiKey == null) { apiKey = defaultApiKey; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/v2/${ apiKey }`);\n        request.allowGzip = true;\n\n        if (apiKey === defaultApiKey) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"alchemy\");\n                return true;\n            }\n        }\n\n        return request;\n    }\n}\n", "/**\n *  [[link-chainstack]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Arbitrum (``arbitrum``)\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - Polygon (``matic``)\n *\n *  @_subsection: api/providers/thirdparty:Chainstack  [providers-chainstack]\n */\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nfunction getApiKey(name: string): string {\n    switch (name) {\n        case \"mainnet\": return \"39f1d67cedf8b7831010a665328c9197\";\n        case \"arbitrum\": return \"0550c209db33c3abf4cc927e1e18cea1\"\n        case \"bnb\": return \"98b5a77e531614387366f6fc5da097f8\";\n        case \"matic\": return \"cd9d4d70377471aa7c142ec4a4205249\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"ethereum-mainnet.core.chainstack.com\";\n        case \"arbitrum\":\n            return \"arbitrum-mainnet.core.chainstack.com\";\n        case \"bnb\":\n            return \"bsc-mainnet.core.chainstack.com\";\n        case \"matic\":\n            return \"polygon-mainnet.core.chainstack.com\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/**\n *  The **ChainstackProvider** connects to the [[link-chainstack]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-chainstack).\n */\nexport class ChainstackProvider extends JsonRpcProvider implements CommunityResourcable {\n    /**\n     *  The API key for the Chainstack connection.\n     */\n    readonly apiKey!: string;\n\n    /**\n     *  Creates a new **ChainstackProvider**.\n     */\n    constructor(_network?: Networkish, apiKey?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n\n        if (apiKey == null) { apiKey = getApiKey(network.name); }\n\n        const request = ChainstackProvider.getRequest(network, apiKey);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<ChainstackProvider>(this, { apiKey });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new ChainstackProvider(chainId, this.apiKey);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey === getApiKey(this._network.name));\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%%\n     *  with %%apiKey%% and %%projectSecret%%.\n     */\n    static getRequest(network: Network, apiKey?: null | string): FetchRequest {\n        if (apiKey == null) { apiKey = getApiKey(network.name); }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/${ apiKey }`);\n        request.allowGzip = true;\n\n        if (apiKey === getApiKey(network.name)) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"ChainstackProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n}\n", "/**\n *  About Cloudflare\n *\n *  @_subsection: api/providers/thirdparty:Cloudflare  [providers-cloudflare]\n */\n\nimport { assertArgument } from \"../utils/index.js\";\n\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { Networkish } from \"./network.js\";\n\n/**\n *  About Cloudflare...\n */\nexport class CloudflareProvider extends JsonRpcProvider {\n    constructor(_network?: Networkish) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        assertArgument(network.name === \"mainnet\", \"unsupported network\", \"network\", _network);\n        super(\"https:/\\/cloudflare-eth.com/\", network, { staticNetwork: network });\n    }\n}\n", "/**\n *  [[link-etherscan]] provides a third-party service for connecting to\n *  various blockchains over a combination of JSON-RPC and custom API\n *  endpoints.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Holesky Testnet (``holesky``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Base (``base``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - BNB Smart Chain Testnet (``bnbt``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *  - Polygon Amoy Testnet (``matic-amoy``)\n *\n *  @_subsection api/providers/thirdparty:Etherscan  [providers-etherscan]\n */\n\nimport { AbiCoder } from \"../abi/index.js\";\nimport { Contract } from \"../contract/index.js\";\nimport { accessListify, Transaction } from \"../transaction/index.js\";\nimport {\n    defineProperties,\n    hexlify, toQuantity,\n    FetchRequest,\n    assert, assertArgument, isError,\n//    parseUnits,\n    toUtf8String\n } from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\";\nimport { NetworkPlugin } from \"./plugins-network.js\";\nimport { showThrottleMessage } from \"./community.js\";\n\nimport { PerformActionRequest } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\";\n//import type { } from \"./pagination\";\nimport type { TransactionRequest } from \"./provider.js\";\n\nconst THROTTLE = 2000;\n\nfunction isPromise<T = any>(value: any): value is Promise<T> {\n    return (value && typeof(value.then) === \"function\");\n}\n\n\n/**\n *  When subscribing to the ``\"debug\"`` event on an Etherscan-based\n *  provider, the events receive a **DebugEventEtherscanProvider**\n *  payload.\n *\n *  @_docloc: api/providers/thirdparty:Etherscan\n */\nexport type DebugEventEtherscanProvider = {\n    action: \"sendRequest\",\n    id: number,\n    url: string,\n    payload: Record<string, any>\n} | {\n    action: \"receiveRequest\",\n    id: number,\n    result: any\n} | {\n    action: \"receiveError\",\n    id: number,\n    error: any\n};\n\nconst EtherscanPluginId = \"org.ethers.plugins.provider.Etherscan\";\n\n/**\n *  A Network can include an **EtherscanPlugin** to provide\n *  a custom base URL.\n *\n *  @_docloc: api/providers/thirdparty:Etherscan\n */\nexport class EtherscanPlugin extends NetworkPlugin {\n    /**\n     *  The Etherscan API base URL.\n     */\n    readonly baseUrl!: string;\n\n    /**\n     *  Creates a new **EtherscanProvider** which will use\n     *  %%baseUrl%%.\n     */\n    constructor(baseUrl: string) {\n        super(EtherscanPluginId);\n        defineProperties<EtherscanPlugin>(this, { baseUrl });\n    }\n\n    clone(): EtherscanPlugin {\n        return new EtherscanPlugin(this.baseUrl);\n    }\n}\n\nconst skipKeys = [ \"enableCcipRead\" ];\n\nlet nextId = 1;\n\n/**\n *  The **EtherscanBaseProvider** is the super-class of\n *  [[EtherscanProvider]], which should generally be used instead.\n *\n *  Since the **EtherscanProvider** includes additional code for\n *  [[Contract]] access, in //rare cases// that contracts are not\n *  used, this class can reduce code size.\n *\n *  @_docloc: api/providers/thirdparty:Etherscan\n */\nexport class EtherscanProvider extends AbstractProvider {\n\n    /**\n     *  The connected network.\n     */\n    readonly network!: Network;\n\n    /**\n     *  The API key or null if using the community provided bandwidth.\n     */\n    readonly apiKey!: null | string;\n\n    readonly #plugin: null | EtherscanPlugin;\n\n    /**\n     *  Creates a new **EtherscanBaseProvider**.\n     */\n    constructor(_network?: Networkish, _apiKey?: string) {\n        const apiKey = (_apiKey != null) ? _apiKey: null;\n\n        super();\n\n        const network = Network.from(_network);\n\n        this.#plugin = network.getPlugin<EtherscanPlugin>(EtherscanPluginId);\n\n        defineProperties<EtherscanProvider>(this, { apiKey, network });\n\n        // Test that the network is supported by Etherscan\n        this.getBaseUrl();\n    }\n\n    /**\n     *  Returns the base URL.\n     *\n     *  If an [[EtherscanPlugin]] is configured on the\n     *  [[EtherscanBaseProvider_network]], returns the plugin's\n     *  baseUrl.\n     */\n    getBaseUrl(): string {\n        if (this.#plugin) { return this.#plugin.baseUrl; }\n\n        switch(this.network.name) {\n            case \"mainnet\":\n                return \"https:/\\/api.etherscan.io\";\n            case \"goerli\":\n                return \"https:/\\/api-goerli.etherscan.io\";\n            case \"sepolia\":\n                return \"https:/\\/api-sepolia.etherscan.io\";\n            case \"holesky\":\n                return \"https:/\\/api-holesky.etherscan.io\";\n\n            case \"arbitrum\":\n                return \"https:/\\/api.arbiscan.io\";\n            case \"arbitrum-goerli\":\n                return \"https:/\\/api-goerli.arbiscan.io\";\n           case \"base\":\n                return \"https:/\\/api.basescan.org\";\n            case \"base-sepolia\":\n                return \"https:/\\/api-sepolia.basescan.org\";\n            case \"bnb\":\n                return \"https:/\\/api.bscscan.com\";\n            case \"bnbt\":\n                return \"https:/\\/api-testnet.bscscan.com\";\n            case \"matic\":\n                return \"https:/\\/api.polygonscan.com\";\n            case \"matic-amoy\":\n                return \"https:/\\/api-amoy.polygonscan.com\";\n            case \"matic-mumbai\":\n                return \"https:/\\/api-testnet.polygonscan.com\";\n            case \"optimism\":\n                return \"https:/\\/api-optimistic.etherscan.io\";\n            case \"optimism-goerli\":\n                return \"https:/\\/api-goerli-optimistic.etherscan.io\";\n\n            default:\n        }\n\n        assertArgument(false, \"unsupported network\", \"network\", this.network);\n    }\n\n    /**\n     *  Returns the URL for the %%module%% and %%params%%.\n     */\n    getUrl(module: string, params: Record<string, string>): string {\n        const query = Object.keys(params).reduce((accum, key) => {\n            const value = params[key];\n            if (value != null) {\n                accum += `&${ key }=${ value }`\n            }\n            return accum\n        }, \"\");\n        const apiKey = ((this.apiKey) ? `&apikey=${ this.apiKey }`: \"\");\n        return `${ this.getBaseUrl() }/api?module=${ module }${ query }${ apiKey }`;\n    }\n\n    /**\n     *  Returns the URL for using POST requests.\n     */\n    getPostUrl(): string {\n        return `${ this.getBaseUrl() }/api`;\n    }\n\n    /**\n     *  Returns the parameters for using POST requests.\n     */\n    getPostData(module: string, params: Record<string, any>): Record<string, any> {\n        params.module = module;\n        params.apikey = this.apiKey;\n        return params;\n    }\n\n    async detectNetwork(): Promise<Network> {\n        return this.network;\n    }\n\n    /**\n     *  Resolves to the result of calling %%module%% with %%params%%.\n     *\n     *  If %%post%%, the request is made as a POST request.\n     */\n    async fetch(module: string, params: Record<string, any>, post?: boolean): Promise<any> {\n        const id = nextId++;\n\n        const url = (post ? this.getPostUrl(): this.getUrl(module, params));\n        const payload = (post ? this.getPostData(module, params): null);\n\n        this.emit(\"debug\", { action: \"sendRequest\", id, url, payload: payload });\n\n        const request = new FetchRequest(url);\n        request.setThrottleParams({ slotInterval: 1000 });\n        request.retryFunc = (req, resp, attempt: number) => {\n            if (this.isCommunityResource()) {\n                showThrottleMessage(\"Etherscan\");\n            }\n            return Promise.resolve(true);\n        };\n        request.processFunc = async (request, response) => {\n            const result = response.hasBody() ? JSON.parse(toUtf8String(response.body)): { };\n            const throttle = ((typeof(result.result) === \"string\") ? result.result: \"\").toLowerCase().indexOf(\"rate limit\") >= 0;\n            if (module === \"proxy\") {\n                // This JSON response indicates we are being throttled\n                if (result && result.status == 0 && result.message == \"NOTOK\" && throttle) {\n                    this.emit(\"debug\", { action: \"receiveError\", id, reason: \"proxy-NOTOK\", error: result });\n                    response.throwThrottleError(result.result, THROTTLE);\n                }\n            } else {\n                if (throttle) {\n                    this.emit(\"debug\", { action: \"receiveError\", id, reason: \"null result\", error: result.result });\n                    response.throwThrottleError(result.result, THROTTLE);\n                }\n            }\n            return response;\n        };\n\n        if (payload) {\n            request.setHeader(\"content-type\", \"application/x-www-form-urlencoded; charset=UTF-8\");\n            request.body = Object.keys(payload).map((k) => `${ k }=${ payload[k] }`).join(\"&\");\n        }\n\n        const response = await request.send();\n        try {\n            response.assertOk();\n        } catch (error) {\n            this.emit(\"debug\", { action: \"receiveError\", id, error, reason: \"assertOk\" });\n            assert(false, \"response error\", \"SERVER_ERROR\", { request, response });\n        }\n\n        if (!response.hasBody()) {\n            this.emit(\"debug\", { action: \"receiveError\", id, error: \"missing body\", reason: \"null body\" });\n            assert(false, \"missing response\", \"SERVER_ERROR\", { request, response });\n        }\n\n        const result = JSON.parse(toUtf8String(response.body));\n        if (module === \"proxy\") {\n            if (result.jsonrpc != \"2.0\") {\n                this.emit(\"debug\", { action: \"receiveError\", id, result, reason: \"invalid JSON-RPC\" });\n                assert(false, \"invalid JSON-RPC response (missing jsonrpc='2.0')\", \"SERVER_ERROR\", { request, response, info: { result } });\n            }\n\n            if (result.error) {\n                this.emit(\"debug\", { action: \"receiveError\", id, result, reason: \"JSON-RPC error\" });\n                assert(false, \"error response\", \"SERVER_ERROR\", { request, response, info: { result } });\n            }\n\n            this.emit(\"debug\", { action: \"receiveRequest\", id, result });\n\n            return result.result;\n\n        } else {\n            // getLogs, getHistory have weird success responses\n            if (result.status == 0 && (result.message === \"No records found\" || result.message === \"No transactions found\")) {\n                this.emit(\"debug\", { action: \"receiveRequest\", id, result });\n                return result.result;\n            }\n\n            if (result.status != 1 || (typeof(result.message) === \"string\" && !result.message.match(/^OK/))) {\n                this.emit(\"debug\", { action: \"receiveError\", id, result });\n                assert(false, \"error response\", \"SERVER_ERROR\", { request, response, info: { result } });\n            }\n\n            this.emit(\"debug\", { action: \"receiveRequest\", id, result });\n\n            return result.result;\n        }\n    }\n\n    /**\n     *  Returns %%transaction%% normalized for the Etherscan API.\n     */\n    _getTransactionPostData(transaction: TransactionRequest): Record<string, string> {\n        const result: Record<string, string> = { };\n        for (let key in transaction) {\n            if (skipKeys.indexOf(key) >= 0) { continue; }\n\n            if ((<any>transaction)[key] == null) { continue; }\n            let value = (<any>transaction)[key];\n            if (key === \"type\" && value === 0) { continue; }\n            if (key === \"blockTag\" && value === \"latest\") { continue; }\n\n            // Quantity-types require no leading zero, unless 0\n            if ((<any>{ type: true, gasLimit: true, gasPrice: true, maxFeePerGs: true, maxPriorityFeePerGas: true, nonce: true, value: true })[key]) {\n                value = toQuantity(value);\n\n            } else if (key === \"accessList\") {\n                value = \"[\" + accessListify(value).map((set) => {\n                    return `{address:\"${ set.address }\",storageKeys:[\"${ set.storageKeys.join('\",\"') }\"]}`;\n                }).join(\",\") + \"]\";\n\n            } else if (key === \"blobVersionedHashes\") {\n                if (value.length === 0) { continue; }\n\n                // @TODO: update this once the API supports blobs\n                assert(false, \"Etherscan API does not support blobVersionedHashes\", \"UNSUPPORTED_OPERATION\", {\n                    operation: \"_getTransactionPostData\",\n                    info: { transaction }\n                });\n\n            } else {\n                value = hexlify(value);\n            }\n            result[key] = value;\n        }\n        return result;\n    }\n\n    /**\n     *  Throws the normalized Etherscan error.\n     */\n    _checkError(req: PerformActionRequest, error: Error, transaction: any): never {\n\n        // Pull any message out if, possible\n        let message = \"\";\n        if (isError(error, \"SERVER_ERROR\")) {\n            // Check for an error emitted by a proxy call\n            try {\n                message = (<any>error).info.result.error.message;\n            } catch (e) { }\n\n            if (!message) {\n                try {\n                    message = (<any>error).info.message;\n                } catch (e) { }\n            }\n        }\n\n        if (req.method === \"estimateGas\") {\n            if (!message.match(/revert/i) && message.match(/insufficient funds/i)) {\n                assert(false, \"insufficient funds\", \"INSUFFICIENT_FUNDS\", {\n                    transaction: req.transaction\n                });\n            }\n        }\n\n        if (req.method === \"call\" || req.method === \"estimateGas\") {\n            if (message.match(/execution reverted/i)) {\n                let data = \"\";\n                try {\n                    data = (<any>error).info.result.error.data;\n                } catch (error) { }\n\n                const e = AbiCoder.getBuiltinCallException(req.method, <any>req.transaction, data);\n                e.info = { request: req, error }\n                throw e;\n            }\n        }\n\n        if (message) {\n            if (req.method === \"broadcastTransaction\") {\n                const transaction = Transaction.from(req.signedTransaction);\n                if (message.match(/replacement/i) && message.match(/underpriced/i)) {\n                    assert(false, \"replacement fee too low\", \"REPLACEMENT_UNDERPRICED\", {\n                        transaction\n                    });\n                }\n\n                if (message.match(/insufficient funds/)) {\n                    assert(false, \"insufficient funds for intrinsic transaction cost\", \"INSUFFICIENT_FUNDS\", {\n                       transaction\n                    });\n                }\n\n                if (message.match(/same hash was already imported|transaction nonce is too low|nonce too low/)) {\n                    assert(false, \"nonce has already been used\", \"NONCE_EXPIRED\", {\n                       transaction\n                    });\n                }\n            }\n        }\n\n        // Something we could not process\n        throw error;\n    }\n\n    async _detectNetwork(): Promise<Network> {\n        return this.network;\n    }\n\n    async _perform(req: PerformActionRequest): Promise<any> {\n        switch (req.method) {\n            case \"chainId\":\n                return this.network.chainId;\n\n            case \"getBlockNumber\":\n                return this.fetch(\"proxy\", { action: \"eth_blockNumber\" });\n\n            case \"getGasPrice\":\n                return this.fetch(\"proxy\", { action: \"eth_gasPrice\" });\n\n            case \"getPriorityFee\":\n                // This is temporary until Etherscan completes support\n                if (this.network.name === \"mainnet\") {\n                    return \"1000000000\";\n                } else if (this.network.name === \"optimism\") {\n                    return \"1000000\";\n                } else {\n                    throw new Error(\"fallback onto the AbstractProvider default\");\n                }\n                /* Working with Etherscan to get this added:\n                try {\n                    const test = await this.fetch(\"proxy\", {\n                        action: \"eth_maxPriorityFeePerGas\"\n                    });\n                    console.log(test);\n                    return test;\n                } catch (e) {\n                    console.log(\"DEBUG\", e);\n                    throw e;\n                }\n                */\n                /* This might be safe; but due to rounding neither myself\n                   or Etherscan are necessarily comfortable with this. :)\n                try {\n                    const result = await this.fetch(\"gastracker\", { action: \"gasoracle\" });\n                    console.log(result);\n                    const gasPrice = parseUnits(result.SafeGasPrice, \"gwei\");\n                    const baseFee = parseUnits(result.suggestBaseFee, \"gwei\");\n                    const priorityFee = gasPrice - baseFee;\n                    if (priorityFee < 0) { throw new Error(\"negative priority fee; defer to abstract provider default\"); }\n                    return priorityFee;\n                } catch (error) {\n                    console.log(\"DEBUG\", error);\n                    throw error;\n                }\n                */\n\n            case \"getBalance\":\n                // Returns base-10 result\n                return this.fetch(\"account\", {\n                    action: \"balance\",\n                    address: req.address,\n                    tag: req.blockTag\n                });\n\n           case \"getTransactionCount\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getTransactionCount\",\n                    address: req.address,\n                    tag: req.blockTag\n                });\n\n            case \"getCode\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getCode\",\n                    address: req.address,\n                    tag: req.blockTag\n                });\n\n            case \"getStorage\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getStorageAt\",\n                    address: req.address,\n                    position: req.position,\n                    tag: req.blockTag\n                });\n\n            case \"broadcastTransaction\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_sendRawTransaction\",\n                    hex: req.signedTransaction\n                }, true).catch((error) => {\n                    return this._checkError(req, <Error>error, req.signedTransaction);\n                });\n\n            case \"getBlock\":\n                if (\"blockTag\" in req) {\n                    return this.fetch(\"proxy\", {\n                        action: \"eth_getBlockByNumber\",\n                        tag: req.blockTag,\n                        boolean: (req.includeTransactions ? \"true\": \"false\")\n                    });\n                }\n\n                assert(false, \"getBlock by blockHash not supported by Etherscan\", \"UNSUPPORTED_OPERATION\", {\n                    operation: \"getBlock(blockHash)\"\n                });\n\n            case \"getTransaction\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getTransactionByHash\",\n                    txhash: req.hash\n                });\n\n            case \"getTransactionReceipt\":\n                return this.fetch(\"proxy\", {\n                    action: \"eth_getTransactionReceipt\",\n                    txhash: req.hash\n                });\n\n            case \"call\": {\n                if (req.blockTag !== \"latest\") {\n                    throw new Error(\"EtherscanProvider does not support blockTag for call\");\n                }\n\n                const postData = this._getTransactionPostData(req.transaction);\n                postData.module = \"proxy\";\n                postData.action = \"eth_call\";\n\n                try {\n                    return await this.fetch(\"proxy\", postData, true);\n                } catch (error) {\n                    return this._checkError(req, <Error>error, req.transaction);\n                }\n            }\n\n            case \"estimateGas\": {\n                const postData = this._getTransactionPostData(req.transaction);\n                postData.module = \"proxy\";\n                postData.action = \"eth_estimateGas\";\n\n                try {\n                    return await this.fetch(\"proxy\", postData, true);\n                } catch (error) {\n                    return this._checkError(req, <Error>error, req.transaction);\n                }\n            }\n/*\n            case \"getLogs\": {\n                // Needs to complain if more than one address is passed in\n                const args: Record<string, any> = { action: \"getLogs\" }\n\n                if (params.filter.fromBlock) {\n                    args.fromBlock = checkLogTag(params.filter.fromBlock);\n                }\n\n                if (params.filter.toBlock) {\n                    args.toBlock = checkLogTag(params.filter.toBlock);\n                }\n\n                if (params.filter.address) {\n                    args.address = params.filter.address;\n                }\n\n                // @TODO: We can handle slightly more complicated logs using the logs API\n                if (params.filter.topics && params.filter.topics.length > 0) {\n                    if (params.filter.topics.length > 1) {\n                        logger.throwError(\"unsupported topic count\", Logger.Errors.UNSUPPORTED_OPERATION, { topics: params.filter.topics });\n                    }\n                    if (params.filter.topics.length === 1) {\n                        const topic0 = params.filter.topics[0];\n                        if (typeof(topic0) !== \"string\" || topic0.length !== 66) {\n                            logger.throwError(\"unsupported topic format\", Logger.Errors.UNSUPPORTED_OPERATION, { topic0: topic0 });\n                        }\n                        args.topic0 = topic0;\n                    }\n                }\n\n                const logs: Array<any> = await this.fetch(\"logs\", args);\n\n                // Cache txHash => blockHash\n                let blocks: { [tag: string]: string } = {};\n\n                // Add any missing blockHash to the logs\n                for (let i = 0; i < logs.length; i++) {\n                    const log = logs[i];\n                    if (log.blockHash != null) { continue; }\n                    if (blocks[log.blockNumber] == null) {\n                        const block = await this.getBlock(log.blockNumber);\n                        if (block) {\n                            blocks[log.blockNumber] = block.hash;\n                        }\n                    }\n\n                    log.blockHash = blocks[log.blockNumber];\n                }\n\n                return logs;\n            }\n*/\n            default:\n                break;\n        }\n\n        return super._perform(req);\n    }\n\n    async getNetwork(): Promise<Network> {\n        return this.network;\n    }\n\n    /**\n     *  Resolves to the current price of ether.\n     *\n     *  This returns ``0`` on any network other than ``mainnet``.\n     */\n    async getEtherPrice(): Promise<number> {\n        if (this.network.name !== \"mainnet\") { return 0.0; }\n        return parseFloat((await this.fetch(\"stats\", { action: \"ethprice\" })).ethusd);\n    }\n\n    /**\n     *  Resolves to a [Contract]] for %%address%%, using the\n     *  Etherscan API to retreive the Contract ABI.\n     */\n    async getContract(_address: string): Promise<null | Contract> {\n        let address = this._getAddress(_address);\n        if (isPromise(address)) { address = await address; }\n\n        try {\n            const resp = await this.fetch(\"contract\", {\n            action: \"getabi\", address });\n            const abi = JSON.parse(resp);\n            return new Contract(address, abi, this);\n        } catch (error) {\n            return null;\n        }\n    }\n\n    isCommunityResource(): boolean {\n        return (this.apiKey == null);\n    }\n}\n", "import createWebSocketStream from './lib/stream.js';\nimport Receiver from './lib/receiver.js';\nimport Sender from './lib/sender.js';\nimport WebSocket from './lib/websocket.js';\nimport WebSocketServer from './lib/websocket-server.js';\n\nexport { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };\nexport default WebSocket;\n", "/**\n *  Generic long-lived socket provider.\n *\n *  Sub-classing notes\n *  - a sub-class MUST call the `_start()` method once connected\n *  - a sub-class MUST override the `_write(string)` method\n *  - a sub-class MUST call `_processMessage(string)` for each message\n *\n *  @_subsection: api/providers/abstract-provider:Socket Providers  [about-socketProvider]\n */\n\nimport { UnmanagedSubscriber } from \"./abstract-provider.js\";\nimport { assert, assertArgument, makeError } from \"../utils/index.js\";\nimport { JsonRpcApiProvider } from \"./provider-jsonrpc.js\";\n\nimport type { Subscriber, Subscription } from \"./abstract-provider.js\";\nimport type { EventFilter } from \"./provider.js\";\nimport type {\n    JsonRpcApiProviderOptions, JsonRpcError, JsonRpcPayload, JsonRpcResult\n} from \"./provider-jsonrpc.js\";\nimport type { Networkish } from \"./network.js\";\n\n\ntype JsonRpcSubscription = {\n    method: string,\n    params: {\n        result: any,\n        subscription: string\n    }\n};\n\n/**\n *  A **SocketSubscriber** uses a socket transport to handle events and\n *  should use [[_emit]] to manage the events.\n */\nexport class SocketSubscriber implements Subscriber {\n    #provider: SocketProvider;\n\n    #filter: string;\n\n    /**\n     *  The filter.\n     */\n    get filter(): Array<any> { return JSON.parse(this.#filter); }\n\n    #filterId: null | Promise<string |number>;\n    #paused: null | boolean;\n\n    #emitPromise: null | Promise<void>;\n\n    /**\n     *  Creates a new **SocketSubscriber** attached to %%provider%% listening\n     *  to %%filter%%.\n     */\n    constructor(provider: SocketProvider, filter: Array<any>) {\n        this.#provider = provider;\n        this.#filter = JSON.stringify(filter);\n        this.#filterId = null;\n        this.#paused = null;\n        this.#emitPromise = null;\n    }\n\n    start(): void {\n        this.#filterId = this.#provider.send(\"eth_subscribe\", this.filter).then((filterId) => {;\n            this.#provider._register(filterId, this);\n            return filterId;\n        });\n    }\n\n    stop(): void {\n        (<Promise<number>>(this.#filterId)).then((filterId) => {\n            if (this.#provider.destroyed) { return; }\n            this.#provider.send(\"eth_unsubscribe\", [ filterId ]);\n        });\n        this.#filterId = null;\n    }\n\n    // @TODO: pause should trap the current blockNumber, unsub, and on resume use getLogs\n    //        and resume\n    pause(dropWhilePaused?: boolean): void {\n        assert(dropWhilePaused, \"preserve logs while paused not supported by SocketSubscriber yet\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"pause(false)\" });\n        this.#paused = !!dropWhilePaused;\n    }\n\n    resume(): void {\n        this.#paused = null;\n    }\n\n    /**\n     *  @_ignore:\n     */\n    _handleMessage(message: any): void {\n        if (this.#filterId == null) { return; }\n        if (this.#paused === null) {\n            let emitPromise: null | Promise<void> = this.#emitPromise;\n            if (emitPromise == null) {\n                emitPromise = this._emit(this.#provider, message);\n            } else {\n                emitPromise = emitPromise.then(async () => {\n                    await this._emit(this.#provider, message);\n                });\n            }\n            this.#emitPromise = emitPromise.then(() => {\n                if (this.#emitPromise === emitPromise) {\n                    this.#emitPromise = null;\n                }\n            });\n        }\n    }\n\n    /**\n     *  Sub-classes **must** override this to emit the events on the\n     *  provider.\n     */\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        throw new Error(\"sub-classes must implemente this; _emit\");\n    }\n}\n\n/**\n *  A **SocketBlockSubscriber** listens for ``newHeads`` events and emits\n *  ``\"block\"`` events.\n */\nexport class SocketBlockSubscriber extends SocketSubscriber {\n    /**\n     *  @_ignore:\n     */\n    constructor(provider: SocketProvider) {\n        super(provider, [ \"newHeads\" ]);\n    }\n\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        provider.emit(\"block\", parseInt(message.number));\n    }\n}\n\n/**\n *  A **SocketPendingSubscriber** listens for pending transacitons and emits\n *  ``\"pending\"`` events.\n */\nexport class SocketPendingSubscriber extends SocketSubscriber {\n\n    /**\n     *  @_ignore:\n     */\n    constructor(provider: SocketProvider) {\n        super(provider, [ \"newPendingTransactions\" ]);\n    }\n\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        provider.emit(\"pending\", message);\n    }\n}\n\n/**\n *  A **SocketEventSubscriber** listens for event logs.\n */\nexport class SocketEventSubscriber extends SocketSubscriber {\n    #logFilter: string;\n\n    /**\n     *  The filter.\n     */\n    get logFilter(): EventFilter { return JSON.parse(this.#logFilter); }\n\n    /**\n     *  @_ignore:\n     */\n    constructor(provider: SocketProvider, filter: EventFilter) {\n        super(provider, [ \"logs\", filter ]);\n        this.#logFilter = JSON.stringify(filter);\n    }\n\n    async _emit(provider: SocketProvider, message: any): Promise<void> {\n        provider.emit(this.logFilter, provider._wrapLog(message, provider._network));\n    }\n}\n\n/**\n *  A **SocketProvider** is backed by a long-lived connection over a\n *  socket, which can subscribe and receive real-time messages over\n *  its communication channel.\n */\nexport class SocketProvider extends JsonRpcApiProvider {\n    #callbacks: Map<number, { payload: JsonRpcPayload, resolve: (r: any) => void, reject: (e: Error) => void }>;\n\n    // Maps each filterId to its subscriber\n    #subs: Map<number | string, SocketSubscriber>;\n\n    // If any events come in before a subscriber has finished\n    // registering, queue them\n    #pending: Map<number | string, Array<any>>;\n\n    /**\n     *  Creates a new **SocketProvider** connected to %%network%%.\n     *\n     *  If unspecified, the network will be discovered.\n     */\n    constructor(network?: Networkish, _options?: JsonRpcApiProviderOptions) {\n        // Copy the options\n        const options = Object.assign({ }, (_options != null) ? _options: { });\n\n        // Support for batches is generally not supported for\n        // connection-base providers; if this changes in the future\n        // the _send should be updated to reflect this\n        assertArgument(options.batchMaxCount == null || options.batchMaxCount === 1,\n            \"sockets-based providers do not support batches\", \"options.batchMaxCount\", _options);\n        options.batchMaxCount = 1;\n\n        // Socket-based Providers (generally) cannot change their network,\n        // since they have a long-lived connection; but let people override\n        // this if they have just cause.\n        if (options.staticNetwork == null) { options.staticNetwork = true; }\n\n        super(network, options);\n        this.#callbacks = new Map();\n        this.#subs = new Map();\n        this.#pending = new Map();\n    }\n\n    // This value is only valid after _start has been called\n    /*\n    get _network(): Network {\n        if (this.#network == null) {\n            throw new Error(\"this shouldn't happen\");\n        }\n        return this.#network.clone();\n    }\n    */\n\n    _getSubscriber(sub: Subscription): Subscriber {\n        switch (sub.type) {\n            case \"close\":\n                return new UnmanagedSubscriber(\"close\");\n            case \"block\":\n                return new SocketBlockSubscriber(this);\n            case \"pending\":\n                return new SocketPendingSubscriber(this);\n            case \"event\":\n                return new SocketEventSubscriber(this, sub.filter);\n            case \"orphan\":\n                // Handled auto-matically within AbstractProvider\n                // when the log.removed = true\n                if (sub.filter.orphan === \"drop-log\") {\n                    return new UnmanagedSubscriber(\"drop-log\");\n                }\n        }\n        return super._getSubscriber(sub);\n    }\n\n    /**\n     *  Register a new subscriber. This is used internalled by Subscribers\n     *  and generally is unecessary unless extending capabilities.\n     */\n    _register(filterId: number | string, subscriber: SocketSubscriber): void {\n        this.#subs.set(filterId, subscriber);\n        const pending = this.#pending.get(filterId);\n        if (pending) {\n            for (const message of pending) {\n                subscriber._handleMessage(message);\n            }\n            this.#pending.delete(filterId);\n        }\n    }\n\n    async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>> {\n        // WebSocket provider doesn't accept batches\n        assertArgument(!Array.isArray(payload), \"WebSocket does not support batch send\", \"payload\", payload);\n\n        // @TODO: stringify payloads here and store to prevent mutations\n\n        // Prepare a promise to respond to\n        const promise = new Promise((resolve, reject) => {\n            this.#callbacks.set(payload.id, { payload, resolve, reject });\n        });\n\n        // Wait until the socket is connected before writing to it\n        await this._waitUntilReady();\n\n        // Write the request to the socket\n        await this._write(JSON.stringify(payload));\n\n        return <Array<JsonRpcResult | JsonRpcError>>[ await promise ];\n    }\n\n    // Sub-classes must call this once they are connected\n    /*\n    async _start(): Promise<void> {\n        if (this.#ready) { return; }\n\n        for (const { payload } of this.#callbacks.values()) {\n            await this._write(JSON.stringify(payload));\n        }\n\n        this.#ready = (async function() {\n            await super._start();\n        })();\n    }\n    */\n\n    /**\n     *  Sub-classes **must** call this with messages received over their\n     *  transport to be processed and dispatched.\n     */\n    async _processMessage(message: string): Promise<void> {\n        const result = <JsonRpcResult | JsonRpcError | JsonRpcSubscription>(JSON.parse(message));\n\n        if (result && typeof(result) === \"object\" && \"id\" in result) {\n            const callback = this.#callbacks.get(result.id);\n            if (callback == null) {\n                this.emit(\"error\", makeError(\"received result for unknown id\", \"UNKNOWN_ERROR\", {\n                    reasonCode: \"UNKNOWN_ID\",\n                    result\n                }));\n                return;\n            }\n            this.#callbacks.delete(result.id);\n\n            callback.resolve(result);\n\n        } else if (result && result.method === \"eth_subscription\") {\n            const filterId = result.params.subscription;\n            const subscriber = this.#subs.get(filterId);\n            if (subscriber) {\n                subscriber._handleMessage(result.params.result);\n            } else {\n                let pending = this.#pending.get(filterId);\n                if (pending == null) {\n                    pending = [ ];\n                    this.#pending.set(filterId, pending);\n                }\n                pending.push(result.params.result);\n            }\n\n        } else {\n            this.emit(\"error\", makeError(\"received unexpected message\", \"UNKNOWN_ERROR\", {\n                reasonCode: \"UNEXPECTED_MESSAGE\",\n                result\n            }));\n            return;\n        }\n    }\n\n    /**\n     *  Sub-classes **must** override this to send %%message%% over their\n     *  transport.\n     */\n    async _write(message: string): Promise<void> {\n        throw new Error(\"sub-classes must override this\");\n    }\n}\n", "\n\nimport { WebSocket as _WebSocket } from \"./ws.js\"; /*-browser*/\n\nimport { SocketProvider } from \"./provider-socket.js\";\n\nimport type { JsonRpcApiProviderOptions} from \"./provider-jsonrpc.js\";\nimport type { Networkish } from \"./network.js\";\n\n/**\n *  A generic interface to a Websocket-like object.\n */\nexport interface WebSocketLike {\n    onopen: null | ((...args: Array<any>) => any);\n    onmessage: null | ((...args: Array<any>) => any);\n    onerror: null | ((...args: Array<any>) => any);\n\n    readyState: number;\n\n    send(payload: any): void;\n    close(code?: number, reason?: string): void;\n}\n\n/**\n *  A function which can be used to re-create a WebSocket connection\n *  on disconnect.\n */\nexport type WebSocketCreator = () => WebSocketLike;\n\n/**\n *  A JSON-RPC provider which is backed by a WebSocket.\n *\n *  WebSockets are often preferred because they retain a live connection\n *  to a server, which permits more instant access to events.\n *\n *  However, this incurs higher server infrasturture costs, so additional\n *  resources may be required to host your own WebSocket nodes and many\n *  third-party services charge additional fees for WebSocket endpoints.\n */\nexport class WebSocketProvider extends SocketProvider {\n    #connect: null | WebSocketCreator;\n\n    #websocket: null | WebSocketLike;\n    get websocket(): WebSocketLike {\n        if (this.#websocket == null) { throw new Error(\"websocket closed\"); }\n        return this.#websocket;\n    }\n\n    constructor(url: string | WebSocketLike | WebSocketCreator, network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n        if (typeof(url) === \"string\") {\n            this.#connect = () => { return new _WebSocket(url); };\n            this.#websocket = this.#connect();\n        } else if (typeof(url) === \"function\") {\n            this.#connect = url;\n            this.#websocket = url();\n        } else {\n            this.#connect = null;\n            this.#websocket = url;\n        }\n\n        this.websocket.onopen = async () => {\n            try {\n                await this._start()\n                this.resume();\n            } catch (error) {\n                console.log(\"failed to start WebsocketProvider\", error);\n                // @TODO: now what? Attempt reconnect?\n            }\n        };\n\n        this.websocket.onmessage = (message: { data: string }) => {\n            this._processMessage(message.data);\n        };\n/*\n        this.websocket.onclose = (event) => {\n            // @TODO: What event.code should we reconnect on?\n            const reconnect = false;\n            if (reconnect) {\n                this.pause(true);\n                if (this.#connect) {\n                    this.#websocket = this.#connect();\n                    this.#websocket.onopen = ...\n                    // @TODO: this requires the super class to rebroadcast; move it there\n                }\n                this._reconnect();\n            }\n        };\n*/\n    }\n\n    async _write(message: string): Promise<void> {\n        this.websocket.send(message);\n    }\n\n    async destroy(): Promise<void> {\n        if (this.#websocket != null) {\n            this.#websocket.close();\n            this.#websocket = null;\n        }\n        super.destroy();\n    }\n}\n", "/**\n *  [[link-infura]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)\n *  - Base (``base``)\n *  - Base Goerlia Testnet (``base-goerli``)\n *  - Base Sepolia Testnet (``base-sepolia``)\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - BNB Smart Chain Testnet (``bnbt``)\n *  - Linea (``linea``)\n *  - Linea Goerli Testnet (``linea-goerli``)\n *  - Linea Sepolia Testnet (``linea-sepolia``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Amoy Testnet (``matic-amoy``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:INFURA  [providers-infura]\n */\nimport {\n    defineProperties, FetchRequest, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\nimport { WebSocketProvider } from \"./provider-websocket.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nconst defaultProjectId = \"84842078b09946638c03157f83405213\";\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"mainnet.infura.io\";\n        case \"goerli\":\n            return \"goerli.infura.io\";\n        case \"sepolia\":\n            return \"sepolia.infura.io\";\n\n        case \"arbitrum\":\n            return \"arbitrum-mainnet.infura.io\";\n        case \"arbitrum-goerli\":\n            return \"arbitrum-goerli.infura.io\";\n        case \"arbitrum-sepolia\":\n            return \"arbitrum-sepolia.infura.io\";\n        case \"base\":\n            return \"base-mainnet.infura.io\";\n        case \"base-goerlia\":\n            return \"base-goerli.infura.io\";\n        case \"base-sepolia\":\n            return \"base-sepolia.infura.io\";\n        case \"bnb\":\n            return \"bnbsmartchain-mainnet.infura.io\";\n        case \"bnbt\":\n            return \"bnbsmartchain-testnet.infura.io\";\n        case \"linea\":\n            return \"linea-mainnet.infura.io\";\n        case \"linea-goerli\":\n            return \"linea-goerli.infura.io\";\n        case \"linea-sepolia\":\n            return \"linea-sepolia.infura.io\";\n        case \"matic\":\n            return \"polygon-mainnet.infura.io\";\n        case \"matic-amoy\":\n            return \"polygon-amoy.infura.io\";\n        case \"matic-mumbai\":\n            return \"polygon-mumbai.infura.io\";\n        case \"optimism\":\n            return \"optimism-mainnet.infura.io\";\n        case \"optimism-goerli\":\n            return \"optimism-goerli.infura.io\";\n        case \"optimism-sepolia\":\n            return \"optimism-sepolia.infura.io\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/**\n *  The **InfuraWebSocketProvider** connects to the [[link-infura]]\n *  WebSocket end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-infura-signup).\n */\nexport class InfuraWebSocketProvider extends WebSocketProvider implements CommunityResourcable {\n\n    /**\n     *  The Project ID for the INFURA connection.\n     */\n    readonly projectId!: string;\n\n    /**\n     *  The Project Secret.\n     *\n     *  If null, no authenticated requests are made. This should not\n     *  be used outside of private contexts.\n     */\n    readonly projectSecret!: null | string;\n\n    /**\n     *  Creates a new **InfuraWebSocketProvider**.\n     */\n    constructor(network?: Networkish, projectId?: string) {\n        const provider = new InfuraProvider(network, projectId);\n\n        const req = provider._getConnection();\n        assert(!req.credentials, \"INFURA WebSocket project secrets unsupported\",\n            \"UNSUPPORTED_OPERATION\", { operation: \"InfuraProvider.getWebSocketProvider()\" });\n\n        const url = req.url.replace(/^http/i, \"ws\").replace(\"/v3/\", \"/ws/v3/\");\n        super(url, provider._network);\n\n        defineProperties<InfuraWebSocketProvider>(this, {\n            projectId: provider.projectId,\n            projectSecret: provider.projectSecret\n        });\n    }\n\n    isCommunityResource(): boolean {\n        return (this.projectId === defaultProjectId);\n    }\n}\n\n/**\n *  The **InfuraProvider** connects to the [[link-infura]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-infura-signup).\n */\nexport class InfuraProvider extends JsonRpcProvider implements CommunityResourcable {\n    /**\n     *  The Project ID for the INFURA connection.\n     */\n    readonly projectId!: string;\n\n    /**\n     *  The Project Secret.\n     *\n     *  If null, no authenticated requests are made. This should not\n     *  be used outside of private contexts.\n     */\n    readonly projectSecret!: null | string;\n\n    /**\n     *  Creates a new **InfuraProvider**.\n     */\n    constructor(_network?: Networkish, projectId?: null | string, projectSecret?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (projectId == null) { projectId = defaultProjectId; }\n        if (projectSecret == null) { projectSecret = null; }\n\n        const request = InfuraProvider.getRequest(network, projectId, projectSecret);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<InfuraProvider>(this, { projectId, projectSecret });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new InfuraProvider(chainId, this.projectId, this.projectSecret);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.projectId === defaultProjectId);\n    }\n\n    /**\n     *  Creates a new **InfuraWebSocketProvider**.\n     */\n    static getWebSocketProvider(network?: Networkish, projectId?: string): InfuraWebSocketProvider {\n        return new InfuraWebSocketProvider(network, projectId);\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%%\n     *  with %%projectId%% and %%projectSecret%%.\n     */\n    static getRequest(network: Network, projectId?: null | string, projectSecret?: null | string): FetchRequest {\n        if (projectId == null) { projectId = defaultProjectId; }\n        if (projectSecret == null) { projectSecret = null; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/v3/${ projectId }`);\n        request.allowGzip = true;\n        if (projectSecret) { request.setCredentials(\"\", projectSecret); }\n\n        if (projectId === defaultProjectId) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"InfuraProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n}\n", "/**\n *  [[link-quicknode]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Sepolia Testnet (``sepolia``)\n *  - Holesky Testnet (``holesky``)\n *  - Arbitrum (``arbitrum``)\n *  - Arbitrum Goerli Testnet (``arbitrum-goerli``)\n *  - Arbitrum Sepolia Testnet (``arbitrum-sepolia``)\n *  - Base Mainnet (``base``);\n *  - Base Goerli Testnet (``base-goerli``);\n *  - Base Sepolia Testnet (``base-sepolia``);\n *  - BNB Smart Chain Mainnet (``bnb``)\n *  - BNB Smart Chain Testnet (``bnbt``)\n *  - Optimism (``optimism``)\n *  - Optimism Goerli Testnet (``optimism-goerli``)\n *  - Optimism Sepolia Testnet (``optimism-sepolia``)\n *  - Polygon (``matic``)\n *  - Polygon Mumbai Testnet (``matic-mumbai``)\n *\n *  @_subsection: api/providers/thirdparty:QuickNode  [providers-quicknode]\n */\n\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\n\nconst defaultToken = \"919b412a057b5e9c9b6dce193c5a60242d6efadb\";\n\nfunction getHost(name: string): string {\n    switch(name) {\n        case \"mainnet\":\n            return \"ethers.quiknode.pro\";\n        case \"goerli\":\n            return \"ethers.ethereum-goerli.quiknode.pro\";\n        case \"sepolia\":\n            return \"ethers.ethereum-sepolia.quiknode.pro\";\n        case \"holesky\":\n            return \"ethers.ethereum-holesky.quiknode.pro\";\n\n        case \"arbitrum\":\n            return \"ethers.arbitrum-mainnet.quiknode.pro\";\n        case \"arbitrum-goerli\":\n            return \"ethers.arbitrum-goerli.quiknode.pro\";\n        case \"arbitrum-sepolia\":\n            return \"ethers.arbitrum-sepolia.quiknode.pro\";\n        case \"base\":\n            return \"ethers.base-mainnet.quiknode.pro\";\n        case \"base-goerli\":\n            return \"ethers.base-goerli.quiknode.pro\";\n        case \"base-spolia\":\n            return \"ethers.base-sepolia.quiknode.pro\";\n        case \"bnb\":\n            return \"ethers.bsc.quiknode.pro\";\n        case \"bnbt\":\n            return \"ethers.bsc-testnet.quiknode.pro\";\n        case \"matic\":\n            return \"ethers.matic.quiknode.pro\";\n        case \"matic-mumbai\":\n            return \"ethers.matic-testnet.quiknode.pro\";\n        case \"optimism\":\n            return \"ethers.optimism.quiknode.pro\";\n        case \"optimism-goerli\":\n            return \"ethers.optimism-goerli.quiknode.pro\";\n        case \"optimism-sepolia\":\n            return \"ethers.optimism-sepolia.quiknode.pro\";\n        case \"xdai\":\n            return \"ethers.xdai.quiknode.pro\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n/*\n@TODO:\n  These networks are not currently present in the Network\n  default included networks. Research them and ensure they\n  are EVM compatible and work with ethers\n\n  http://ethers.matic-amoy.quiknode.pro\n\n  http://ethers.avalanche-mainnet.quiknode.pro\n  http://ethers.avalanche-testnet.quiknode.pro\n  http://ethers.blast-sepolia.quiknode.pro\n  http://ethers.celo-mainnet.quiknode.pro\n  http://ethers.fantom.quiknode.pro\n  http://ethers.imx-demo.quiknode.pro\n  http://ethers.imx-mainnet.quiknode.pro\n  http://ethers.imx-testnet.quiknode.pro\n  http://ethers.near-mainnet.quiknode.pro\n  http://ethers.near-testnet.quiknode.pro\n  http://ethers.nova-mainnet.quiknode.pro\n  http://ethers.scroll-mainnet.quiknode.pro\n  http://ethers.scroll-testnet.quiknode.pro\n  http://ethers.tron-mainnet.quiknode.pro\n  http://ethers.zkevm-mainnet.quiknode.pro\n  http://ethers.zkevm-testnet.quiknode.pro\n  http://ethers.zksync-mainnet.quiknode.pro\n  http://ethers.zksync-testnet.quiknode.pro\n*/\n\n\n\n/**\n *  The **QuickNodeProvider** connects to the [[link-quicknode]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API token is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-quicknode).\n */\nexport class QuickNodeProvider extends JsonRpcProvider implements CommunityResourcable {\n    /**\n     *  The API token.\n     */\n    readonly token!: string;\n\n    /**\n     *  Creates a new **QuickNodeProvider**.\n     */\n    constructor(_network?: Networkish, token?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (token == null) { token = defaultToken; }\n\n        const request = QuickNodeProvider.getRequest(network, token);\n        super(request, network, { staticNetwork: network });\n\n        defineProperties<QuickNodeProvider>(this, { token });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new QuickNodeProvider(chainId, this.token);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    isCommunityResource(): boolean {\n        return (this.token === defaultToken);\n    }\n\n    /**\n     *  Returns a new request prepared for %%network%% and the\n     *  %%token%%.\n     */\n    static getRequest(network: Network, token?: null | string): FetchRequest {\n        if (token == null) { token = defaultToken; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/${ token }`);\n        request.allowGzip = true;\n        //if (projectSecret) { request.setCredentials(\"\", projectSecret); }\n\n        if (token === defaultToken) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"QuickNodeProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n}\n", "/**\n *  A **FallbackProvider** provides resilience, security and performance\n *  in a way that is customizable and configurable.\n *\n *  @_section: api/providers/fallback-provider:Fallback Provider [about-fallback-provider]\n */\nimport {\n    assert, assertArgument, getBigInt, getNumber, isError\n} from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { Network } from \"./network.js\"\n\nimport type { PerformActionRequest } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\"\n\nconst BN_1 = BigInt(\"1\");\nconst BN_2 = BigInt(\"2\");\n\nfunction shuffle<T = any>(array: Array<T>): void {\n    for (let i = array.length - 1; i > 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        const tmp = array[i];\n        array[i] = array[j];\n        array[j] = tmp;\n    }\n}\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(resolve, duration); });\n}\n\nfunction getTime(): number { return (new Date()).getTime(); }\n\nfunction stringify(value: any): string {\n    return JSON.stringify(value, (key, value) => {\n        if (typeof(value) === \"bigint\") {\n            return { type: \"bigint\", value: value.toString() };\n        }\n        return value;\n    });\n}\n\n/**\n *  A configuration entry for how to use a [[Provider]].\n */\nexport interface FallbackProviderConfig {\n\n    /**\n     *  The provider.\n     */\n    provider: AbstractProvider;\n\n    /**\n     *  The amount of time to wait before kicking off the next provider.\n     *\n     *  Any providers that have not responded can still respond and be\n     *  counted, but this ensures new providers start.\n     */\n    stallTimeout?: number;\n\n    /**\n     *  The priority. Lower priority providers are dispatched first.\n     */\n    priority?: number;\n\n    /**\n     *  The amount of weight a provider is given against the quorum.\n     */\n    weight?: number;\n};\n\nconst defaultConfig = { stallTimeout: 400, priority: 1, weight: 1 };\n\n// We track a bunch of extra stuff that might help debug problems or\n// optimize infrastructure later on.\n/**\n *  The statistics and state maintained for a [[Provider]].\n */\nexport interface FallbackProviderState extends Required<FallbackProviderConfig> {\n\n    /**\n     *  The most recent blockNumber this provider has reported (-2 if none).\n     */\n    blockNumber: number;\n\n    /**\n     *  The number of total requests ever sent to this provider.\n     */\n    requests: number;\n\n    /**\n     *  The number of responses that errored.\n     */\n    errorResponses: number;\n\n    /**\n     *  The number of responses that occured after the result resolved.\n     */\n    lateResponses: number;\n\n    /**\n     *  How many times syncing was required to catch up the expected block.\n     */\n    outOfSync: number;\n\n    /**\n     *  The number of requests which reported unsupported operation.\n     */\n    unsupportedEvents: number;\n\n    /**\n     *  A rolling average (5% current duration) for response time.\n     */\n    rollingDuration: number;\n\n    /**\n     *  The ratio of quorum-agreed results to total.\n     */\n    score: number;\n}\n\ninterface Config extends FallbackProviderState {\n    _updateNumber: null | Promise<any>;\n    _network: null | Network;\n    _totalTime: number;\n    _lastFatalError: null | Error;\n    _lastFatalErrorTimestamp: number;\n}\n\nconst defaultState = {\n    blockNumber: -2, requests: 0, lateResponses: 0, errorResponses: 0,\n    outOfSync: -1, unsupportedEvents: 0, rollingDuration: 0, score: 0,\n    _network: null, _updateNumber: null, _totalTime: 0,\n    _lastFatalError: null, _lastFatalErrorTimestamp: 0\n};\n\n\nasync function waitForSync(config: Config, blockNumber: number): Promise<void> {\n    while (config.blockNumber < 0 || config.blockNumber < blockNumber) {\n        if (!config._updateNumber) {\n            config._updateNumber = (async () => {\n                try {\n                    const blockNumber = await config.provider.getBlockNumber();\n                    if (blockNumber > config.blockNumber) {\n                        config.blockNumber = blockNumber;\n                    }\n                } catch (error: any) {\n                    config.blockNumber = -2;\n                    config._lastFatalError = error;\n                    config._lastFatalErrorTimestamp = getTime();\n                }\n                config._updateNumber = null;\n            })();\n        }\n        await config._updateNumber;\n        config.outOfSync++;\n        if (config._lastFatalError) { break; }\n    }\n}\n\n/**\n *  Additional options to configure a [[FallbackProvider]].\n */\nexport type FallbackProviderOptions = {\n    // How many providers must agree on a value before reporting\n    // back the response\n    quorum?: number;\n\n    // How many providers must have reported the same event\n    // for it to be emitted (currently unimplmented)\n    eventQuorum?: number;\n\n    // How many providers to dispatch each event to simultaneously.\n    // Set this to 0 to use getLog polling, which implies eventQuorum\n    // is equal to quorum. (currently unimplemented)\n    eventWorkers?: number;\n\n    cacheTimeout?: number;\n\n    pollingInterval?: number;\n};\n\ntype RunnerResult = { result: any } | { error: Error };\n\ntype RunnerState = {\n    config: Config;\n    staller: null | Promise<void>;\n    didBump: boolean;\n    perform: null | Promise<any>;\n    result: null | RunnerResult;\n}\n\nfunction _normalize(value: any): string {\n    if (value == null) { return \"null\"; }\n\n    if (Array.isArray(value)) {\n        return \"[\" + (value.map(_normalize)).join(\",\") + \"]\";\n    }\n\n    if (typeof(value) === \"object\" && typeof(value.toJSON) === \"function\") {\n        return _normalize(value.toJSON());\n    }\n\n    switch (typeof(value)) {\n        case \"boolean\": case \"symbol\":\n            return value.toString();\n        case \"bigint\": case \"number\":\n            return BigInt(value).toString();\n        case \"string\":\n            return JSON.stringify(value);\n        case \"object\": {\n            const keys = Object.keys(value);\n            keys.sort();\n            return \"{\" + keys.map((k) => `${ JSON.stringify(k) }:${ _normalize(value[k]) }`).join(\",\") + \"}\";\n        }\n    }\n\n    console.log(\"Could not serialize\", value);\n    throw new Error(\"Hmm...\");\n}\n\nfunction normalizeResult(value: RunnerResult): { tag: string, value: any } {\n\n    if (\"error\" in value) {\n        const error = value.error;\n        return { tag: _normalize(error), value: error };\n    }\n\n    const result = value.result;\n    return { tag: _normalize(result), value: result };\n}\n\ntype TallyResult = {\n    tag: string;\n    value: any;\n    weight: number;\n};\n\n// This strategy picks the highest weight result, as long as the weight is\n// equal to or greater than quorum\nfunction checkQuorum(quorum: number, results: Array<TallyResult>): any | Error {\n    const tally: Map<string, { value: any, weight: number }> = new Map();\n    for (const { value, tag, weight } of results) {\n        const t = tally.get(tag) || { value, weight: 0 };\n        t.weight += weight;\n        tally.set(tag, t);\n    }\n\n    let best: null | { value: any, weight: number } = null;\n\n    for (const r of tally.values()) {\n        if (r.weight >= quorum && (!best || r.weight > best.weight)) {\n            best = r;\n        }\n    }\n\n    if (best) { return best.value; }\n\n    return undefined;\n}\n\nfunction getMedian(quorum: number, results: Array<TallyResult>): undefined | bigint | Error {\n    let resultWeight = 0;\n\n    const errorMap: Map<string, { weight: number, value: Error }> = new Map();\n    let bestError: null | { weight: number, value: Error } = null;\n\n    const values: Array<bigint> = [ ];\n    for (const { value, tag, weight } of results) {\n        if (value instanceof Error) {\n            const e = errorMap.get(tag) || { value, weight: 0 };\n            e.weight += weight;\n            errorMap.set(tag, e);\n\n            if (bestError == null || e.weight > bestError.weight) { bestError = e; }\n        } else {\n            values.push(BigInt(value));\n            resultWeight += weight;\n        }\n    }\n\n    if (resultWeight < quorum) {\n        // We have quorum for an error\n        if (bestError && bestError.weight >= quorum) { return bestError.value; }\n\n        // We do not have quorum for a result\n        return undefined;\n    }\n\n    // Get the sorted values\n    values.sort((a, b) => ((a < b) ? -1: (b > a) ? 1: 0));\n\n    const mid = Math.floor(values.length / 2);\n\n    // Odd-length; take the middle value\n    if (values.length % 2) { return values[mid]; }\n\n    // Even length; take the ceiling of the mean of the center two values\n    return (values[mid - 1] + values[mid] + BN_1) / BN_2;\n}\n\nfunction getAnyResult(quorum: number, results: Array<TallyResult>): undefined | any | Error {\n    // If any value or error meets quorum, that is our preferred result\n    const result = checkQuorum(quorum, results);\n    if (result !== undefined) { return result; }\n\n    // Otherwise, do we have any result?\n    for (const r of results) {\n        if (r.value) { return r.value; }\n    }\n\n    // Nope!\n    return undefined;\n}\n\nfunction getFuzzyMode(quorum: number, results: Array<TallyResult>): undefined | number {\n    if (quorum === 1) { return getNumber(<bigint>getMedian(quorum, results), \"%internal\"); }\n\n    const tally: Map<number, { result: number, weight: number }> = new Map();\n    const add = (result: number, weight: number) => {\n        const t = tally.get(result) || { result, weight: 0 };\n        t.weight += weight;\n        tally.set(result, t);\n    };\n\n    for (const { weight, value } of results) {\n        const r = getNumber(value);\n        add(r - 1, weight);\n        add(r, weight);\n        add(r + 1, weight);\n    }\n\n    let bestWeight = 0;\n    let bestResult: undefined | number = undefined;\n\n    for (const { weight, result } of tally.values()) {\n        // Use this result, if this result meets quorum and has either:\n        // - a better weight\n        // - or equal weight, but the result is larger\n        if (weight >= quorum && (weight > bestWeight || (bestResult != null && weight === bestWeight && result > bestResult))) {\n            bestWeight = weight;\n            bestResult = result;\n        }\n    }\n\n    return bestResult;\n}\n\n/**\n *  A **FallbackProvider** manages several [[Providers]] providing\n *  resilience by switching between slow or misbehaving nodes, security\n *  by requiring multiple backends to aggree and performance by allowing\n *  faster backends to respond earlier.\n *\n */\nexport class FallbackProvider extends AbstractProvider {\n\n    /**\n     *  The number of backends that must agree on a value before it is\n     *  accpeted.\n     */\n    readonly quorum: number;\n\n    /**\n     *  @_ignore:\n     */\n    readonly eventQuorum: number;\n\n    /**\n     *  @_ignore:\n     */\n    readonly eventWorkers: number;\n\n    readonly #configs: Array<Config>;\n\n    #height: number;\n    #initialSyncPromise: null | Promise<void>;\n\n    /**\n     *  Creates a new **FallbackProvider** with %%providers%% connected to\n     *  %%network%%.\n     *\n     *  If a [[Provider]] is included in %%providers%%, defaults are used\n     *  for the configuration.\n     */\n    constructor(providers: Array<AbstractProvider | FallbackProviderConfig>, network?: Networkish, options?: FallbackProviderOptions) {\n        super(network, options);\n\n        this.#configs = providers.map((p) => {\n            if (p instanceof AbstractProvider) {\n                return Object.assign({ provider: p }, defaultConfig, defaultState );\n            } else {\n                return Object.assign({ }, defaultConfig, p, defaultState );\n            }\n        });\n\n        this.#height = -2;\n        this.#initialSyncPromise = null;\n\n        if (options && options.quorum != null) {\n            this.quorum = options.quorum;\n        } else {\n            this.quorum = Math.ceil(this.#configs.reduce((accum, config) => {\n                accum += config.weight;\n                return accum;\n            }, 0) / 2);\n        }\n\n        this.eventQuorum = 1;\n        this.eventWorkers = 1;\n\n        assertArgument(this.quorum <= this.#configs.reduce((a, c) => (a + c.weight), 0),\n            \"quorum exceed provider weight\", \"quorum\", this.quorum);\n    }\n\n    get providerConfigs(): Array<FallbackProviderState> {\n        return this.#configs.map((c) => {\n            const result: any = Object.assign({ }, c);\n            for (const key in result) {\n                if (key[0] === \"_\") { delete result[key]; }\n            }\n            return result;\n        });\n    }\n\n    async _detectNetwork(): Promise<Network> {\n        return Network.from(getBigInt(await this._perform({ method: \"chainId\" })));\n    }\n\n    // @TODO: Add support to select providers to be the event subscriber\n    //_getSubscriber(sub: Subscription): Subscriber {\n    //    throw new Error(\"@TODO\");\n    //}\n\n    /**\n     *  Transforms a %%req%% into the correct method call on %%provider%%.\n     */\n    async _translatePerform(provider: AbstractProvider, req: PerformActionRequest): Promise<any> {\n        switch (req.method) {\n            case \"broadcastTransaction\":\n                return await provider.broadcastTransaction(req.signedTransaction);\n            case \"call\":\n                return await provider.call(Object.assign({ }, req.transaction, { blockTag: req.blockTag }));\n            case \"chainId\":\n                return (await provider.getNetwork()).chainId;\n            case \"estimateGas\":\n                return await provider.estimateGas(req.transaction);\n            case \"getBalance\":\n                return await provider.getBalance(req.address, req.blockTag);\n            case \"getBlock\": {\n                const block = (\"blockHash\" in req) ? req.blockHash: req.blockTag;\n                return await provider.getBlock(block, req.includeTransactions);\n            }\n            case \"getBlockNumber\":\n                return await provider.getBlockNumber();\n            case \"getCode\":\n                return await provider.getCode(req.address, req.blockTag);\n            case \"getGasPrice\":\n                return (await provider.getFeeData()).gasPrice;\n            case \"getPriorityFee\":\n                return (await provider.getFeeData()).maxPriorityFeePerGas;\n            case \"getLogs\":\n                return await provider.getLogs(req.filter);\n            case \"getStorage\":\n                return await provider.getStorage(req.address, req.position, req.blockTag);\n            case \"getTransaction\":\n                return await provider.getTransaction(req.hash);\n            case \"getTransactionCount\":\n                return await provider.getTransactionCount(req.address, req.blockTag);\n            case \"getTransactionReceipt\":\n                return await provider.getTransactionReceipt(req.hash);\n            case \"getTransactionResult\":\n                return await provider.getTransactionResult(req.hash);\n        }\n    }\n\n    // Grab the next (random) config that is not already part of\n    // the running set\n    #getNextConfig(running: Set<RunnerState>): null | Config {\n        // @TODO: Maybe do a check here to favour (heavily) providers that\n        //        do not require waitForSync and disfavour providers that\n        //        seem down-ish or are behaving slowly\n\n        const configs = Array.from(running).map((r) => r.config)\n\n        // Shuffle the states, sorted by priority\n        const allConfigs = this.#configs.slice();\n        shuffle(allConfigs);\n        allConfigs.sort((a, b) => (a.priority - b.priority));\n\n        for (const config of allConfigs) {\n            if (config._lastFatalError) { continue; }\n            if (configs.indexOf(config) === -1) { return config; }\n        }\n\n        return null;\n    }\n\n    // Adds a new runner (if available) to running.\n    #addRunner(running: Set<RunnerState>, req: PerformActionRequest): null | RunnerState {\n        const config = this.#getNextConfig(running);\n\n        // No runners available\n        if (config == null) { return null; }\n\n        // Create a new runner\n        const runner: RunnerState = {\n            config, result: null, didBump: false,\n            perform: null, staller: null\n        };\n\n        const now = getTime();\n\n        // Start performing this operation\n        runner.perform = (async () => {\n            try {\n                config.requests++;\n                const result = await this._translatePerform(config.provider, req);\n                runner.result = { result };\n            } catch (error: any) {\n                config.errorResponses++;\n                runner.result = { error };\n            }\n\n            const dt = (getTime() - now);\n            config._totalTime += dt;\n\n            config.rollingDuration = 0.95 * config.rollingDuration + 0.05 * dt;\n\n            runner.perform = null;\n        })();\n\n        // Start a staller; when this times out, it's time to force\n        // kicking off another runner because we are taking too long\n        runner.staller = (async () => {\n            await stall(config.stallTimeout);\n            runner.staller = null;\n        })();\n\n        running.add(runner);\n        return runner;\n    }\n\n    // Initializes the blockNumber and network for each runner and\n    // blocks until initialized\n    async #initialSync(): Promise<void> {\n        let initialSync = this.#initialSyncPromise;\n        if (!initialSync) {\n            const promises: Array<Promise<any>> = [ ];\n            this.#configs.forEach((config) => {\n                promises.push((async () => {\n                    await waitForSync(config, 0);\n                    if (!config._lastFatalError) {\n                        config._network = await config.provider.getNetwork();\n                    }\n                })());\n            });\n\n            this.#initialSyncPromise = initialSync = (async () => {\n                // Wait for all providers to have a block number and network\n                await Promise.all(promises);\n\n                // Check all the networks match\n                let chainId: null | bigint = null;\n                for (const config of this.#configs) {\n                    if (config._lastFatalError) { continue; }\n                    const network = <Network>(config._network);\n                    if (chainId == null) {\n                        chainId = network.chainId;\n                    } else if (network.chainId !== chainId) {\n                        assert(false, \"cannot mix providers on different networks\", \"UNSUPPORTED_OPERATION\", {\n                            operation: \"new FallbackProvider\"\n                        });\n                    }\n                }\n            })();\n        }\n\n        await initialSync\n    }\n\n\n    async #checkQuorum(running: Set<RunnerState>, req: PerformActionRequest): Promise<any> {\n        // Get all the result objects\n        const results: Array<TallyResult> = [ ];\n        for (const runner of running) {\n            if (runner.result != null) {\n                const { tag, value } = normalizeResult(runner.result);\n                results.push({ tag, value, weight: runner.config.weight });\n            }\n        }\n\n        // Are there enough results to event meet quorum?\n        if (results.reduce((a, r) => (a + r.weight), 0) < this.quorum) {\n            return undefined;\n        }\n\n        switch (req.method) {\n            case \"getBlockNumber\": {\n                // We need to get the bootstrap block height\n                if (this.#height === -2) {\n                    this.#height = Math.ceil(getNumber(<bigint>getMedian(this.quorum, this.#configs.filter((c) => (!c._lastFatalError)).map((c) => ({\n                        value: c.blockNumber,\n                        tag: getNumber(c.blockNumber).toString(),\n                        weight: c.weight\n                    })))));\n                }\n\n                // Find the mode across all the providers, allowing for\n                // a little drift between block heights\n                const mode = getFuzzyMode(this.quorum, results);\n                if (mode === undefined) { return undefined; }\n                if (mode > this.#height) { this.#height = mode; }\n                return this.#height;\n            }\n\n            case \"getGasPrice\":\n            case \"getPriorityFee\":\n            case \"estimateGas\":\n                return getMedian(this.quorum, results);\n\n            case \"getBlock\":\n                // Pending blocks are in the mempool and already\n                // quite untrustworthy; just grab anything\n                if (\"blockTag\" in req && req.blockTag === \"pending\") {\n                    return getAnyResult(this.quorum, results);\n                }\n                return checkQuorum(this.quorum, results);\n\n            case \"call\":\n            case \"chainId\":\n            case \"getBalance\":\n            case \"getTransactionCount\":\n            case \"getCode\":\n            case \"getStorage\":\n            case \"getTransaction\":\n            case \"getTransactionReceipt\":\n            case \"getLogs\":\n                return checkQuorum(this.quorum, results);\n\n            case \"broadcastTransaction\":\n                return getAnyResult(this.quorum, results);\n        }\n\n        assert(false, \"unsupported method\", \"UNSUPPORTED_OPERATION\", {\n            operation: `_perform(${ stringify((<any>req).method) })`\n        });\n    }\n\n    async #waitForQuorum(running: Set<RunnerState>, req: PerformActionRequest): Promise<any> {\n        if (running.size === 0) { throw new Error(\"no runners?!\"); }\n\n        // Any promises that are interesting to watch for; an expired stall\n        // or a successful perform\n        const interesting: Array<Promise<void>> = [ ];\n\n        let newRunners = 0;\n        for (const runner of running) {\n\n            // No responses, yet; keep an eye on it\n            if (runner.perform) {\n                interesting.push(runner.perform);\n            }\n\n            // Still stalling...\n            if (runner.staller) {\n                interesting.push(runner.staller);\n                continue;\n            }\n\n            // This runner has already triggered another runner\n            if (runner.didBump) { continue; }\n\n            // Got a response (result or error) or stalled; kick off another runner\n            runner.didBump = true;\n            newRunners++;\n        }\n\n        // Check if we have reached quorum on a result (or error)\n        const value = await this.#checkQuorum(running, req);\n        if (value !== undefined) {\n            if (value instanceof Error) { throw value; }\n            return value;\n        }\n\n        // Add any new runners, because a staller timed out or a result\n        // or error response came in.\n        for (let i = 0; i < newRunners; i++) {\n            this.#addRunner(running, req);\n        }\n\n        // All providers have returned, and we have no result\n\n        assert(interesting.length > 0, \"quorum not met\", \"SERVER_ERROR\", {\n            request: \"%sub-requests\",\n            info: { request: req, results: Array.from(running).map((r) => stringify(r.result)) }\n        });\n\n        // Wait for someone to either complete its perform or stall out\n        await Promise.race(interesting);\n\n        // This is recursive, but at worst case the depth is 2x the\n        // number of providers (each has a perform and a staller)\n        return await this.#waitForQuorum(running, req);\n    }\n\n    async _perform<T = any>(req: PerformActionRequest): Promise<T> {\n        // Broadcasting a transaction is rare (ish) and already incurs\n        // a cost on the user, so spamming is safe-ish. Just send it to\n        // every backend.\n        if (req.method === \"broadcastTransaction\") {\n            // Once any broadcast provides a positive result, use it. No\n            // need to wait for anyone else\n            const results: Array<null | TallyResult> = this.#configs.map((c) => null);\n            const broadcasts = this.#configs.map(async ({ provider, weight }, index) => {\n                try {\n                    const result = await provider._perform(req);\n                    results[index] = Object.assign(normalizeResult({ result }), { weight });\n                } catch (error: any) {\n                    results[index] = Object.assign(normalizeResult({ error }), { weight });\n                }\n            });\n\n            // As each promise finishes...\n            while (true) {\n                // Check for a valid broadcast result\n                const done = <Array<any>>results.filter((r) => (r != null));\n                for (const { value } of done) {\n                    if (!(value instanceof Error)) { return value; }\n                }\n\n                // Check for a legit broadcast error (one which we cannot\n                // recover from; some nodes may return the following red\n                // herring events:\n                // - alredy seend (UNKNOWN_ERROR)\n                // - NONCE_EXPIRED\n                // - REPLACEMENT_UNDERPRICED\n                const result = checkQuorum(this.quorum, <Array<any>>results.filter((r) => (r != null)));\n                if (isError(result, \"INSUFFICIENT_FUNDS\")) {\n                    throw result;\n                }\n\n                // Kick off the next provider (if any)\n                const waiting = broadcasts.filter((b, i) => (results[i] == null));\n                if (waiting.length === 0) { break; }\n                await Promise.race(waiting);\n            }\n\n            // Use standard quorum results; any result was returned above,\n            // so this will find any error that met quorum if any\n            const result = getAnyResult(this.quorum, <Array<any>>results);\n            assert(result !== undefined, \"problem multi-broadcasting\", \"SERVER_ERROR\", {\n                request: \"%sub-requests\",\n                info: { request: req, results: results.map(stringify) }\n            })\n            if (result instanceof Error) { throw result; }\n            return result;\n        }\n\n        await this.#initialSync();\n\n        // Bootstrap enough runners to meet quorum\n        const running: Set<RunnerState> = new Set();\n        let inflightQuorum = 0;\n        while (true) {\n            const runner = this.#addRunner(running, req);\n            if (runner == null) { break; }\n            inflightQuorum += runner.config.weight;\n            if (inflightQuorum >= this.quorum) { break; }\n        }\n\n        const result = await this.#waitForQuorum(running, req);\n\n        // Track requests sent to a provider that are still\n        // outstanding after quorum has been otherwise found\n        for (const runner of running) {\n            if (runner.perform && runner.result == null) {\n                runner.config.lateResponses++;\n            }\n        }\n\n        return result;\n    }\n\n    async destroy(): Promise<void> {\n        for (const { provider } of this.#configs) {\n            provider.destroy();\n        }\n        super.destroy();\n    }\n}\n", "\nimport { assert } from \"../utils/index.js\";\n\nimport { AnkrProvider } from \"./provider-ankr.js\";\nimport { AlchemyProvider } from \"./provider-alchemy.js\";\nimport { ChainstackProvider } from \"./provider-chainstack.js\";\nimport { CloudflareProvider } from \"./provider-cloudflare.js\";\nimport { EtherscanProvider } from \"./provider-etherscan.js\";\nimport { InfuraProvider } from \"./provider-infura.js\";\n//import { PocketProvider } from \"./provider-pocket.js\";\nimport { QuickNodeProvider } from \"./provider-quicknode.js\";\n\nimport { FallbackProvider } from \"./provider-fallback.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\nimport { Network } from \"./network.js\";\nimport { WebSocketProvider } from \"./provider-websocket.js\";\n\nimport type { AbstractProvider } from \"./abstract-provider.js\";\nimport type { Networkish } from \"./network.js\";\nimport { WebSocketLike } from \"./provider-websocket.js\";\n\nfunction isWebSocketLike(value: any): value is WebSocketLike {\n    return (value && typeof(value.send) === \"function\" &&\n        typeof(value.close) === \"function\");\n}\n\nconst Testnets = \"goerli kovan sepolia classicKotti optimism-goerli arbitrum-goerli matic-mumbai bnbt\".split(\" \");\n\n/**\n *  Returns a default provider for %%network%%.\n *\n *  If %%network%% is a [[WebSocketLike]] or string that begins with\n *  ``\"ws:\"`` or ``\"wss:\"``, a [[WebSocketProvider]] is returned backed\n *  by that WebSocket or URL.\n *\n *  If %%network%% is a string that begins with ``\"HTTP:\"`` or ``\"HTTPS:\"``,\n *  a [[JsonRpcProvider]] is returned connected to that URL.\n *\n *  Otherwise, a default provider is created backed by well-known public\n *  Web3 backends (such as [[link-infura]]) using community-provided API\n *  keys.\n *\n *  The %%options%% allows specifying custom API keys per backend (setting\n *  an API key to ``\"-\"`` will omit that provider) and ``options.exclusive``\n *  can be set to either a backend name or and array of backend names, which\n *  will whitelist **only** those backends.\n *\n *  Current backend strings supported are:\n *  - ``\"alchemy\"``\n *  - ``\"ankr\"``\n *  - ``\"cloudflare\"``\n *  - ``\"chainstack\"``\n *  - ``\"etherscan\"``\n *  - ``\"infura\"``\n *  - ``\"publicPolygon\"``\n *  - ``\"quicknode\"``\n *\n *  @example:\n *    // Connect to a local Geth node\n *    provider = getDefaultProvider(\"http://localhost:8545/\");\n *\n *    // Connect to Ethereum mainnet with any current and future\n *    // third-party services available\n *    provider = getDefaultProvider(\"mainnet\");\n *\n *    // Connect to Polygon, but only allow Etherscan and\n *    // INFURA and use \"MY_API_KEY\" in calls to Etherscan.\n *    provider = getDefaultProvider(\"matic\", {\n *      etherscan: \"MY_API_KEY\",\n *      exclusive: [ \"etherscan\", \"infura\" ]\n *    });\n */\nexport function getDefaultProvider(network?: string | Networkish | WebSocketLike, options?: any): AbstractProvider {\n    if (options == null) { options = { }; }\n\n    const allowService = (name: string) => {\n        if (options[name] === \"-\") { return false; }\n        if (typeof(options.exclusive) === \"string\") {\n            return (name === options.exclusive);\n        }\n        if (Array.isArray(options.exclusive)) {\n            return (options.exclusive.indexOf(name) !== -1);\n        }\n        return true;\n    };\n\n    if (typeof(network) === \"string\" && network.match(/^https?:/)) {\n        return new JsonRpcProvider(network);\n    }\n\n    if (typeof(network) === \"string\" && network.match(/^wss?:/) || isWebSocketLike(network)) {\n        return new WebSocketProvider(network);\n    }\n\n    // Get the network and name, if possible\n    let staticNetwork: null | Network = null;\n    try {\n        staticNetwork = Network.from(network);\n    } catch (error) { }\n\n\n    const providers: Array<AbstractProvider> = [ ];\n\n    if (allowService(\"publicPolygon\") && staticNetwork) {\n        if (staticNetwork.name === \"matic\") {\n            providers.push(new JsonRpcProvider(\"https:/\\/polygon-rpc.com/\", staticNetwork, { staticNetwork }));\n        } else if (staticNetwork.name === \"matic-amoy\") {\n            providers.push(new JsonRpcProvider(\"https:/\\/rpc-amoy.polygon.technology/\", staticNetwork, { staticNetwork }));\n        }\n    }\n\n    if (allowService(\"alchemy\")) {\n        try {\n            providers.push(new AlchemyProvider(network, options.alchemy));\n        } catch (error) { }\n    }\n\n    if (allowService(\"ankr\") && options.ankr != null) {\n        try {\n            providers.push(new AnkrProvider(network, options.ankr));\n        } catch (error) { }\n    }\n\n    if (allowService(\"chainstack\")) {\n        try {\n            providers.push(new ChainstackProvider(network, options.chainstack));\n        } catch (error) { }\n    }\n\n    if (allowService(\"cloudflare\")) {\n        try {\n            providers.push(new CloudflareProvider(network));\n        } catch (error) { }\n    }\n\n    if (allowService(\"etherscan\")) {\n        try {\n            providers.push(new EtherscanProvider(network, options.etherscan));\n        } catch (error) { }\n    }\n\n    if (allowService(\"infura\")) {\n        try {\n            let projectId = options.infura;\n            let projectSecret: undefined | string = undefined;\n            if (typeof(projectId) === \"object\") {\n                projectSecret = projectId.projectSecret;\n                projectId = projectId.projectId;\n            }\n            providers.push(new InfuraProvider(network, projectId, projectSecret));\n        } catch (error) { }\n    }\n/*\n    if (options.pocket !== \"-\") {\n        try {\n            let appId = options.pocket;\n            let secretKey: undefined | string = undefined;\n            let loadBalancer: undefined | boolean = undefined;\n            if (typeof(appId) === \"object\") {\n                loadBalancer = !!appId.loadBalancer;\n                secretKey = appId.secretKey;\n                appId = appId.appId;\n            }\n            providers.push(new PocketProvider(network, appId, secretKey, loadBalancer));\n        } catch (error) { console.log(error); }\n    }\n*/\n    if (allowService(\"quicknode\")) {\n        try {\n            let token = options.quicknode;\n            providers.push(new QuickNodeProvider(network, token));\n        } catch (error) { }\n    }\n\n    assert(providers.length, \"unsupported default network\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"getDefaultProvider\"\n    });\n\n    // No need for a FallbackProvider\n    if (providers.length === 1) { return providers[0]; }\n\n    // We use the floor because public third-party providers can be unreliable,\n    // so a low number of providers with a large quorum will fail too often\n    let quorum = Math.floor(providers.length / 2);\n    if (quorum > 2) { quorum = 2; }\n\n    // Testnets don't need as strong a security gaurantee and speed is\n    // more useful during testing\n    if (staticNetwork && Testnets.indexOf(staticNetwork.name) !== -1) { quorum = 1; }\n\n    // Provided override qorum takes priority\n    if (options && options.quorum) { quorum = options.quorum; }\n\n    return new FallbackProvider(providers, undefined, { quorum });\n}\n", "import { defineProperties } from \"../utils/index.js\";\nimport { AbstractSigner } from \"./abstract-signer.js\";\n\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\n\nimport type {\n    BlockTag, Provider, TransactionRequest, TransactionResponse\n} from \"./provider.js\";\nimport type { Signer } from \"./signer.js\";\n\n\n/**\n *  A **NonceManager** wraps another [[Signer]] and automatically manages\n *  the nonce, ensuring serialized and sequential nonces are used during\n *  transaction.\n */\nexport class NonceManager extends AbstractSigner {\n    /**\n     *  The Signer being managed.\n     */\n    signer!: Signer;\n\n    #noncePromise: null | Promise<number>;\n    #delta: number;\n\n    /**\n     *  Creates a new **NonceManager** to manage %%signer%%.\n     */\n    constructor(signer: Signer) {\n        super(signer.provider);\n        defineProperties<NonceManager>(this, { signer });\n\n        this.#noncePromise = null;\n        this.#delta = 0;\n    }\n\n    async getAddress(): Promise<string> {\n        return this.signer.getAddress();\n    }\n\n    connect(provider: null | Provider): NonceManager {\n        return new NonceManager(this.signer.connect(provider));\n    }\n\n    async getNonce(blockTag?: BlockTag): Promise<number> {\n        if (blockTag === \"pending\") {\n            if (this.#noncePromise == null) {\n                this.#noncePromise = super.getNonce(\"pending\");\n            }\n\n            const delta = this.#delta;\n            return (await this.#noncePromise) + delta;\n        }\n\n        return super.getNonce(blockTag);\n    }\n\n    /**\n     *  Manually increment the nonce. This may be useful when managng\n     *  offline transactions.\n     */\n    increment(): void {\n        this.#delta++;\n    }\n\n    /**\n     *  Resets the nonce, causing the **NonceManager** to reload the current\n     *  nonce from the blockchain on the next transaction.\n     */\n    reset(): void {\n        this.#delta = 0;\n        this.#noncePromise = null;\n    }\n\n    async sendTransaction(tx: TransactionRequest): Promise<TransactionResponse> {\n        const noncePromise = this.getNonce(\"pending\");\n        this.increment();\n\n        tx = await this.signer.populateTransaction(tx);\n        tx.nonce = await noncePromise;\n\n        // @TODO: Maybe handle interesting/recoverable errors?\n        // Like don't increment if the tx was certainly not sent\n        return await this.signer.sendTransaction(tx);\n    }\n\n    signTransaction(tx: TransactionRequest): Promise<string> {\n        return this.signer.signTransaction(tx);\n    }\n\n    signMessage(message: string | Uint8Array): Promise<string> {\n        return this.signer.signMessage(message);\n    }\n\n    signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {\n        return this.signer.signTypedData(domain, types, value);\n    }\n}\n", "import { assertArgument } from \"../utils/index.js\";\n\nimport { JsonRpcApiPollingProvider } from \"./provider-jsonrpc.js\";\n\nimport type {\n    JsonRpcApiProviderOptions,\n    JsonRpcError, JsonRpcPayload, JsonRpcResult,\n    JsonRpcSigner\n} from \"./provider-jsonrpc.js\";\nimport type { Network, Networkish } from \"./network.js\";\n\n/**\n *  The interface to an [[link-eip-1193]] provider, which is a standard\n *  used by most injected providers, which the [[BrowserProvider]] accepts\n *  and exposes the API of.\n */\nexport interface Eip1193Provider {\n    /**\n     *  See [[link-eip-1193]] for details on this method.\n     */\n    request(request: { method: string, params?: Array<any> | Record<string, any> }): Promise<any>;\n};\n\n/**\n *  The possible additional events dispatched when using the ``\"debug\"``\n *  event on a [[BrowserProvider]].\n */\nexport type DebugEventBrowserProvider = {\n    action: \"sendEip1193Payload\",\n    payload: { method: string, params: Array<any> }\n} | {\n    action: \"receiveEip1193Result\",\n    result: any\n} | {\n    action: \"receiveEip1193Error\",\n    error: Error\n};\n\nexport type BrowserProviderOptions = {\n    polling?: boolean;\n    staticNetwork?: null | boolean | Network;\n\n    cacheTimeout?: number;\n    pollingInterval?: number;\n};\n\n/**\n *  A **BrowserProvider** is intended to wrap an injected provider which\n *  adheres to the [[link-eip-1193]] standard, which most (if not all)\n *  currently do.\n */\nexport class BrowserProvider extends JsonRpcApiPollingProvider {\n    #request: (method: string, params: Array<any> | Record<string, any>) => Promise<any>;\n\n    /**\n     *  Connnect to the %%ethereum%% provider, optionally forcing the\n     *  %%network%%.\n     */\n    constructor(ethereum: Eip1193Provider, network?: Networkish, _options?: BrowserProviderOptions) {\n        // Copy the options\n        const options: JsonRpcApiProviderOptions = Object.assign({ },\n          ((_options != null) ? _options: { }),\n          { batchMaxCount: 1 });\n\n        assertArgument(ethereum && ethereum.request, \"invalid EIP-1193 provider\", \"ethereum\", ethereum);\n\n        super(network, options);\n\n        this.#request = async (method: string, params: Array<any> | Record<string, any>) => {\n            const payload = { method, params };\n            this.emit(\"debug\", { action: \"sendEip1193Request\", payload });\n            try {\n                const result = await ethereum.request(payload);\n                this.emit(\"debug\", { action: \"receiveEip1193Result\", result });\n                return result;\n            } catch (e: any) {\n                const error = new Error(e.message);\n                (<any>error).code = e.code;\n                (<any>error).data = e.data;\n                (<any>error).payload = payload;\n                this.emit(\"debug\", { action: \"receiveEip1193Error\", error });\n                throw error;\n            }\n        };\n    }\n\n    async send(method: string, params: Array<any> | Record<string, any>): Promise<any> {\n        await this._start();\n\n        return await super.send(method, params);\n    }\n\n    async _send(payload: JsonRpcPayload | Array<JsonRpcPayload>): Promise<Array<JsonRpcResult | JsonRpcError>> {\n        assertArgument(!Array.isArray(payload), \"EIP-1193 does not support batch request\", \"payload\", payload);\n\n        try {\n            const result = await this.#request(payload.method, payload.params || [ ]);\n            return [ { id: payload.id, result } ];\n        } catch (e: any) {\n            return [ {\n                id: payload.id,\n                error: { code: e.code, data: e.data, message: e.message }\n            } ];\n        }\n    }\n\n    getRpcError(payload: JsonRpcPayload, error: JsonRpcError): Error {\n\n        error = JSON.parse(JSON.stringify(error));\n\n        // EIP-1193 gives us some machine-readable error codes, so rewrite\n        // them into \n        switch (error.error.code || -1) {\n            case 4001:\n                error.error.message = `ethers-user-denied: ${ error.error.message }`;\n                break;\n            case 4200:\n                error.error.message = `ethers-unsupported: ${ error.error.message }`;\n                break;\n        }\n\n        return super.getRpcError(payload, error);\n    }\n\n    /**\n     *  Resolves to ``true`` if the provider manages the %%address%%.\n     */\n    async hasSigner(address: number | string): Promise<boolean> {\n        if (address == null) { address = 0; }\n\n        const accounts = await this.send(\"eth_accounts\", [ ]);\n        if (typeof(address) === \"number\") {\n            return (accounts.length > address);\n        }\n\n        address = address.toLowerCase();\n        return accounts.filter((a: string) => (a.toLowerCase() === address)).length !== 0;\n    }\n\n    async getSigner(address?: number | string): Promise<JsonRpcSigner> {\n        if (address == null) { address = 0; }\n\n        if (!(await this.hasSigner(address))) {\n            try {\n                //const resp = \n                await this.#request(\"eth_requestAccounts\", [ ]);\n                //console.log(\"RESP\", resp);\n\n            } catch (error: any) {\n                const payload = error.payload;\n                throw this.getRpcError(payload, { id: payload.id, error });\n            }\n        }\n\n        return await super.getSigner(address);\n    }\n}\n", "/**\n *  [[link-pocket]] provides a third-party service for connecting to\n *  various blockchains over JSON-RPC.\n *\n *  **Supported Networks**\n *\n *  - Ethereum Mainnet (``mainnet``)\n *  - Goerli Testnet (``goerli``)\n *  - Polygon (``matic``)\n *  - Arbitrum (``arbitrum``)\n *\n *  @_subsection: api/providers/thirdparty:Pocket  [providers-pocket]\n */\nimport {\n    defineProperties, FetchRequest, assertArgument\n} from \"../utils/index.js\";\n\nimport { AbstractProvider } from \"./abstract-provider.js\";\nimport { showThrottleMessage } from \"./community.js\";\nimport { Network } from \"./network.js\";\nimport { JsonRpcProvider } from \"./provider-jsonrpc.js\";\n\nimport type { CommunityResourcable } from \"./community.js\";\nimport type { Networkish } from \"./network.js\";\n\nconst defaultApplicationId = \"62e1ad51b37b8e00394bda3b\";\n\nfunction getHost(name: string): string {\n    switch (name) {\n        case \"mainnet\":\n            return  \"eth-mainnet.gateway.pokt.network\";\n        case \"goerli\":\n            return \"eth-goerli.gateway.pokt.network\";\n\n        case \"matic\":\n            return \"poly-mainnet.gateway.pokt.network\";\n        case \"matic-mumbai\":\n            return \"polygon-mumbai-rpc.gateway.pokt.network\";\n    }\n\n    assertArgument(false, \"unsupported network\", \"network\", name);\n}\n\n\n/**\n *  The **PocketProvider** connects to the [[link-pocket]]\n *  JSON-RPC end-points.\n *\n *  By default, a highly-throttled API key is used, which is\n *  appropriate for quick prototypes and simple scripts. To\n *  gain access to an increased rate-limit, it is highly\n *  recommended to [sign up here](link-pocket-signup).\n */\nexport class PocketProvider extends JsonRpcProvider implements CommunityResourcable {\n\n    /**\n     *  The Application ID for the Pocket connection.\n     */\n    readonly applicationId!: string;\n\n    /**\n     *  The Application Secret for making authenticated requests\n     *  to the Pocket connection.\n     */\n    readonly applicationSecret!: null | string;\n\n    /**\n     *  Create a new **PocketProvider**.\n     *\n     *  By default connecting to ``mainnet`` with a highly throttled\n     *  API key.\n     */\n    constructor(_network?: Networkish, applicationId?: null | string, applicationSecret?: null | string) {\n        if (_network == null) { _network = \"mainnet\"; }\n        const network = Network.from(_network);\n        if (applicationId == null) { applicationId = defaultApplicationId; }\n        if (applicationSecret == null) { applicationSecret = null; }\n\n        const options = { staticNetwork: network };\n\n        const request = PocketProvider.getRequest(network, applicationId, applicationSecret);\n        super(request, network, options);\n\n        defineProperties<PocketProvider>(this, { applicationId, applicationSecret });\n    }\n\n    _getProvider(chainId: number): AbstractProvider {\n        try {\n            return new PocketProvider(chainId, this.applicationId, this.applicationSecret);\n        } catch (error) { }\n        return super._getProvider(chainId);\n    }\n\n    /**\n     *  Returns a prepared request for connecting to %%network%% with\n     *  %%applicationId%%.\n     */\n    static getRequest(network: Network, applicationId?: null | string, applicationSecret?: null | string): FetchRequest {\n        if (applicationId == null) { applicationId = defaultApplicationId; }\n\n        const request = new FetchRequest(`https:/\\/${ getHost(network.name) }/v1/lb/${ applicationId }`);\n        request.allowGzip = true;\n\n        if (applicationSecret) {\n            request.setCredentials(\"\", applicationSecret);\n        }\n\n        if (applicationId === defaultApplicationId) {\n            request.retryFunc = async (request, response, attempt) => {\n                showThrottleMessage(\"PocketProvider\");\n                return true;\n            };\n        }\n\n        return request;\n    }\n\n    isCommunityResource(): boolean {\n        return (this.applicationId === defaultApplicationId);\n    }\n}\n", "\nimport { connect } from \"net\";\nimport { SocketProvider } from \"./provider-socket.js\";\n\nimport type { Socket } from \"net\";\n\nimport type { JsonRpcApiProviderOptions } from \"./provider-jsonrpc.js\";\nimport type { Networkish } from \"./network.js\";\n\n\n// @TODO: Is this sufficient? Is this robust? Will newlines occur between\n// all payloads and only between payloads?\nfunction splitBuffer(data: Buffer): { messages: Array<string>, remaining: Buffer } {\n    const messages: Array<string> = [ ];\n\n    let lastStart = 0;\n    while (true) {\n        const nl = data.indexOf(10, lastStart);\n        if (nl === -1) { break; }\n        messages.push(data.subarray(lastStart, nl).toString().trim());\n        lastStart = nl + 1;\n    }\n\n    return { messages, remaining: data.subarray(lastStart) };\n}\n\n/**\n *  An **IpcSocketProvider** connects over an IPC socket on the host\n *  which provides fast access to the node, but requires the node and\n *  the script run on the same machine.\n */\nexport class IpcSocketProvider extends SocketProvider {\n    #socket: Socket;\n\n    /**\n     *  The connected socket.\n     */\n    get socket(): Socket { return this.#socket; }\n\n    constructor(path: string, network?: Networkish, options?: JsonRpcApiProviderOptions) {\n        super(network, options);\n        this.#socket = connect(path);\n\n        this.socket.on(\"ready\", async () => {\n            try {\n                await this._start();\n            } catch (error) {\n                console.log(\"failed to start IpcSocketProvider\", error);\n                // @TODO: Now what? Restart?\n            }\n        });\n\n        let response = Buffer.alloc(0);\n        this.socket.on(\"data\", (data) => {\n            response = Buffer.concat([ response, data ]);\n            const { messages, remaining } = splitBuffer(response);\n            messages.forEach((message) => {\n                this._processMessage(message);\n            });\n            response = remaining;\n        });\n\n        this.socket.on(\"end\", () => {\n            this.emit(\"close\");\n            this.socket.destroy();\n            this.socket.end();\n        });\n    }\n\n    destroy(): void {\n        this.socket.destroy();\n        this.socket.end();\n\n        super.destroy();\n    }\n\n    async _write(message: string): Promise<void> {\n        this.socket.write(message);\n    }\n}\n", "import { getAddress, resolveAddress } from \"../address/index.js\";\nimport { hashMessage, TypedDataEncoder } from \"../hash/index.js\";\nimport { AbstractSigner, copyRequest } from \"../providers/index.js\";\nimport { computeAddress, Transaction } from \"../transaction/index.js\";\nimport {\n    defineProperties, resolveProperties, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport type { SigningKey } from \"../crypto/index.js\";\nimport type { TypedDataDomain, TypedDataField } from \"../hash/index.js\";\nimport type { Provider, TransactionRequest } from \"../providers/index.js\";\nimport type { TransactionLike } from \"../transaction/index.js\";\n\n\n/**\n *  The **BaseWallet** is a stream-lined implementation of a\n *  [[Signer]] that operates with a private key.\n *\n *  It is preferred to use the [[Wallet]] class, as it offers\n *  additional functionality and simplifies loading a variety\n *  of JSON formats, Mnemonic Phrases, etc.\n *\n *  This class may be of use for those attempting to implement\n *  a minimal Signer.\n */\nexport class BaseWallet extends AbstractSigner {\n    /**\n     *  The wallet address.\n     */\n    readonly address!: string;\n\n    readonly #signingKey: SigningKey;\n\n    /**\n     *  Creates a new BaseWallet for %%privateKey%%, optionally\n     *  connected to %%provider%%.\n     *\n     *  If %%provider%% is not specified, only offline methods can\n     *  be used.\n     */\n    constructor(privateKey: SigningKey, provider?: null | Provider) {\n        super(provider);\n\n        assertArgument(privateKey && typeof(privateKey.sign) === \"function\", \"invalid private key\", \"privateKey\", \"[ REDACTED ]\");\n\n        this.#signingKey = privateKey;\n\n        const address = computeAddress(this.signingKey.publicKey);\n        defineProperties<BaseWallet>(this, { address });\n    }\n\n    // Store private values behind getters to reduce visibility\n    // in console.log\n\n    /**\n     *  The [[SigningKey]] used for signing payloads.\n     */\n    get signingKey(): SigningKey { return this.#signingKey; }\n\n    /**\n     *  The private key for this wallet.\n     */\n    get privateKey(): string { return this.signingKey.privateKey; }\n\n    async getAddress(): Promise<string> { return this.address; }\n\n    connect(provider: null | Provider): BaseWallet {\n        return new BaseWallet(this.#signingKey, provider);\n    }\n\n    async signTransaction(tx: TransactionRequest): Promise<string> {\n        tx = copyRequest(tx);\n\n        // Replace any Addressable or ENS name with an address\n        const { to, from } = await resolveProperties({\n            to: (tx.to ? resolveAddress(tx.to, this.provider): undefined),\n            from: (tx.from ? resolveAddress(tx.from, this.provider): undefined)\n        });\n\n        if (to != null) { tx.to = to; }\n        if (from != null) { tx.from = from; }\n\n        if (tx.from != null) {\n            assertArgument(getAddress(<string>(tx.from)) === this.address,\n                \"transaction from address mismatch\", \"tx.from\", tx.from);\n            delete tx.from;\n        }\n\n        // Build the transaction\n        const btx = Transaction.from(<TransactionLike<string>>tx);\n        btx.signature = this.signingKey.sign(btx.unsignedHash);\n\n        return btx.serialized;\n    }\n\n    async signMessage(message: string | Uint8Array): Promise<string> {\n        return this.signMessageSync(message);\n    }\n\n    // @TODO: Add a secialized signTx and signTyped sync that enforces\n    // all parameters are known?\n    /**\n     *  Returns the signature for %%message%% signed with this wallet.\n     */\n    signMessageSync(message: string | Uint8Array): string {\n        return this.signingKey.sign(hashMessage(message)).serialized;\n    }\n\n    async signTypedData(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): Promise<string> {\n\n        // Populate any ENS names\n        const populated = await TypedDataEncoder.resolveNames(domain, types, value, async (name: string) => {\n            // @TODO: this should use resolveName; addresses don't\n            //        need a provider\n\n            assert(this.provider != null, \"cannot resolve ENS names without a provider\", \"UNSUPPORTED_OPERATION\", {\n                operation: \"resolveName\",\n                info: { name }\n            });\n\n            const address = await this.provider.resolveName(name);\n            assert(address != null, \"unconfigured ENS name\", \"UNCONFIGURED_NAME\", {\n                value: name\n            });\n\n            return address;\n        });\n\n        return this.signingKey.sign(TypedDataEncoder.hash(populated.domain, types, populated.value)).serialized;\n    }\n}\n", "import { assertArgument } from \"../utils/index.js\";\n\n\nconst subsChrs = \" !#$%&'()*+,-./<=>?@[]^_`{|}~\";\nconst Word = /^[a-z]*$/i;\n\nfunction unfold(words: Array<string>, sep: string): Array<string> {\n    let initial = 97;\n    return words.reduce((accum, word) => {\n        if (word === sep) {\n            initial++;\n        } else if (word.match(Word)) {\n            accum.push(String.fromCharCode(initial) + word);\n        } else {\n            initial = 97;\n            accum.push(word);\n        }\n        return accum;\n    }, <Array<string>>[]);\n}\n\n/**\n *  @_ignore\n */\nexport function decode(data: string, subs: string): Array<string> {\n\n    // Replace all the substitutions with their expanded form\n    for (let i = subsChrs.length - 1; i >= 0; i--) {\n        data = data.split(subsChrs[i]).join(subs.substring(2 * i, 2 * i + 2));\n    }\n\n    // Get all tle clumps; each suffix, first-increment and second-increment\n    const clumps: Array<string> = [ ];\n    const leftover = data.replace(/(:|([0-9])|([A-Z][a-z]*))/g, (all, item, semi, word) => {\n        if (semi) {\n            for (let i = parseInt(semi); i >= 0; i--) { clumps.push(\";\"); }\n        } else {\n            clumps.push(item.toLowerCase());\n        }\n        return \"\";\n    });\n    /* c8 ignore start */\n    if (leftover) { throw new Error(`leftovers: ${ JSON.stringify(leftover) }`); }\n    /* c8 ignore stop */\n\n    return unfold(unfold(clumps, \";\"), \":\");\n}\n\n/**\n *  @_ignore\n */\nexport function decodeOwl(data: string): Array<string> {\n    assertArgument(data[0] === \"0\", \"unsupported auwl data\", \"data\", data);\n\n    return decode(\n        data.substring(1 + 2 * subsChrs.length),\n        data.substring(1, 1 + 2 * subsChrs.length));\n}\n", "import { defineProperties } from \"../utils/index.js\";\n\n/**\n *  A Wordlist represents a collection of language-specific\n *  words used to encode and devoce [[link-bip-39]] encoded data\n *  by mapping words to 11-bit values and vice versa.\n */\nexport abstract class Wordlist {\n    locale!: string;\n\n    /**\n     *  Creates a new Wordlist instance.\n     *\n     *  Sub-classes MUST call this if they provide their own constructor,\n     *  passing in the locale string of the language.\n     *\n     *  Generally there is no need to create instances of a Wordlist,\n     *  since each language-specific Wordlist creates an instance and\n     *  there is no state kept internally, so they are safe to share.\n     */\n    constructor(locale: string) {\n        defineProperties<Wordlist>(this, { locale });\n    }\n\n    /**\n     *  Sub-classes may override this to provide a language-specific\n     *  method for spliting %%phrase%% into individual words.\n     *\n     *  By default, %%phrase%% is split using any sequences of\n     *  white-space as defined by regular expressions (i.e. ``/\\s+/``).\n     */\n    split(phrase: string): Array<string> {\n        return phrase.toLowerCase().split(/\\s+/g)\n    }\n\n    /**\n     *  Sub-classes may override this to provider a language-specific\n     *  method for joining %%words%% into a phrase.\n     *\n     *  By default, %%words%% are joined by a single space.\n     */\n    join(words: Array<string>): string {\n        return words.join(\" \");\n    }\n\n    /**\n     *  Maps an 11-bit value into its coresponding word in the list.\n     *\n     *  Sub-classes MUST override this.\n     */\n    abstract getWord(index: number): string;\n\n    /**\n     *  Maps a word to its corresponding 11-bit value.\n     *\n     *  Sub-classes MUST override this.\n     */\n    abstract getWordIndex(word: string): number;\n}\n", "\n// Use the encode-latin.js script to create the necessary\n// data files to be consumed by this class\n\nimport { id } from \"../hash/index.js\";\nimport { assertArgument } from \"../utils/index.js\";\n\nimport { decodeOwl } from \"./decode-owl.js\";\nimport { Wordlist } from \"./wordlist.js\";\n\n/**\n *  An OWL format Wordlist is an encoding method that exploits\n *  the general locality of alphabetically sorted words to\n *  achieve a simple but effective means of compression.\n *\n *  This class is generally not useful to most developers as\n *  it is used mainly internally to keep Wordlists for languages\n *  based on ASCII-7 small.\n *\n *  If necessary, there are tools within the ``generation/`` folder\n *  to create the necessary data.\n */\nexport class WordlistOwl extends Wordlist {\n    #data: string;\n    #checksum: string;\n\n    /**\n     *  Creates a new Wordlist for %%locale%% using the OWL %%data%%\n     *  and validated against the %%checksum%%.\n     */\n    constructor(locale: string, data: string, checksum: string) {\n        super(locale);\n        this.#data = data;\n        this.#checksum = checksum;\n        this.#words = null;\n    }\n\n    /**\n     *  The OWL-encoded data.\n     */\n    get _data(): string { return this.#data; }\n\n    /**\n     *  Decode all the words for the wordlist.\n     */\n    _decodeWords(): Array<string> {\n        return decodeOwl(this.#data);\n    }\n\n    #words: null | Array<string>;\n    #loadWords(): Array<string> {\n        if (this.#words == null) {\n            const words = this._decodeWords();\n\n            // Verify the computed list matches the official list\n            const checksum = id(words.join(\"\\n\") + \"\\n\");\n            /* c8 ignore start */\n            if (checksum !== this.#checksum) {\n                throw new Error(`BIP39 Wordlist for ${ this.locale } FAILED`);\n            }\n            /* c8 ignore stop */\n\n            this.#words = words;\n        }\n        return this.#words;\n    }\n\n    getWord(index: number): string {\n        const words = this.#loadWords();\n        assertArgument(index >= 0 && index < words.length, `invalid word index: ${ index }`, \"index\", index);\n        return words[index];\n    }\n\n    getWordIndex(word: string): number {\n        return this.#loadWords().indexOf(word);\n    }\n}\n", "import { WordlistOwl } from \"./wordlist-owl.js\";\n\nconst words = \"0erleonalorenseinceregesticitStanvetearctssi#ch2Athck&tneLl0And#Il.yLeOutO=S|S%b/ra@SurdU'0Ce[Cid|CountCu'Hie=IdOu,-Qui*Ro[TT]T%T*[Tu$0AptDD-tD*[Ju,M.UltV<)Vi)0Rob-0FairF%dRaid0A(EEntRee0Ead0MRRp%tS!_rmBumCoholErtI&LLeyLowMo,O}PhaReadySoT Ways0A>urAz(gOngOuntU'd0Aly,Ch%Ci|G G!GryIm$K!Noun)Nu$O` Sw T&naTiqueXietyY1ArtOlogyPe?P!Pro=Ril1ChCt-EaEnaGueMMedM%MyOundR<+Re,Ri=RowTTefa@Ti,Tw%k0KPe@SaultSetSi,SumeThma0H!>OmTa{T&dT.udeTra@0Ct]D.Gu,NtTh%ToTumn0Era+OcadoOid0AkeA*AyEsomeFulKw?d0Is:ByChel%C#D+GL<)Lc#y~MbooN<aNn RRelyRga(R*lSeS-SketTt!3A^AnAutyCau'ComeEfF%eG(Ha=H(dLie=LowLtN^Nef./TrayTt Twe&Y#d3Cyc!DKeNdOlogyRdR`Tt _{AdeAmeAnketA,EakE[IndOodO[omOu'UeUrUsh_rdAtDyIlMbNeNusOkO,Rd R(gRrowSsTtomUn)XY_{etA(AndA[A=EadEezeI{Id+IefIghtIngIskOccoliOk&OnzeOomO` OwnUsh2Bb!DdyD+tFf$oIldLbLkL!tNd!Nk Rd&Rg R,SS(e[SyTt Y Zz:Bba+B(B!CtusGeKe~LmM aMpNN$N)lNdyNn#NoeNvasNy#Pab!P.$Pta(RRb#RdRgoRpetRryRtSeShS(o/!Su$TT$ogT^Teg%yTt!UghtU'Ut]Ve3Il(gL yM|NsusNturyRe$Rta(_irAlkAmp]An+AosApt Ar+A'AtEapE{Ee'EfErryE,I{&IefIldIm}yOi)Oo'R#-U{!UnkUrn0G?Nnam#Rc!Tiz&TyVil_imApArifyAwAyE<ErkEv I{I|IffImbIn-IpO{OgO'O`OudOwnUbUmpU, Ut^_^A,C#utDeFfeeIlInL!@L%LumnMb(eMeMf%tM-Mm#Mp<yNc tNdu@NfirmNg*[N}@Nsid NtrolNv()OkOlPp PyR$ReRnR*@/Tt#U^UntryUp!Ur'Us(V Yo>_{Ad!AftAmA}AshAt AwlAzyEamEd.EekEwI{etImeIspIt-OpO[Ou^OwdUci$UelUi'Umb!Un^UshYY,$2BeLtu*PPbo?dRiousRr|Rta(R=Sh]/omTe3C!:DMa+MpN)Ng R(gShUght WnY3AlBa>BrisCadeCemb CideCl(eC%a>C*a'ErF&'F(eFyG*eLayLiv M<dMi'Ni$Nti,NyP?tP&dPos.P`PutyRi=ScribeS tSignSkSpair/royTailTe@VelopVi)Vo>3AgramAlAm#dAryCeE'lEtFf G.$Gn.yLemmaNn NosaurRe@RtSag*eScov Sea'ShSmi[S%d Splay/<)V tVideV%)Zzy5Ct%Cum|G~Lph(Ma(Na>NkeyN%OrSeUb!Ve_ftAg#AmaA,-AwEamE[IftIllInkIpI=OpUmY2CkMbNeR(g/T^Ty1Arf1Nam-:G G!RlyRnR`Sily/Sy1HoOlogyOnomy0GeItUca>1F%t0G1GhtTh 2BowD E@r-Eg<tEm|Eph<tEvat%I>Se0B?kBodyBra)Er+Ot]PloyPow Pty0Ab!A@DD![D%'EmyErgyF%)Ga+G(eH<)JoyLi,OughR-hRollSu*T Ti*TryVelope1Isode0U$Uip0AA'OdeOs]R%Upt0CapeSayS&)Ta>0Ern$H-s1Id&)IlOkeOl=1A@Amp!Ce[Ch<+C.eCludeCu'Ecu>Erci'Hau,Hib.I!I,ItOt-P<dPe@Pi*Pla(Po'P*[T&dTra0EEbrow:Br-CeCultyDeIntI`~L'MeMilyMousNNcyNtasyRmSh]TT$Th TigueUltV%.e3Atu*Bru?yD $EEdElMa!N)/iv$T^V W3B Ct]EldGu*LeLmLt N$NdNeNg NishReRmR,Sc$ShTT}[X_gAmeAshAtAv%EeIghtIpOatO{O%Ow UidUshY_mCusGIlLd~owOdOtR)Re,R+tRkRtu}RumRw?dSsil/ UndX_gi!AmeEqu|EshI&dIn+OgOntO,OwnOz&U.2ElNNnyRna)RyTu*:D+tInLaxy~ yMePRa+Rba+Rd&Rl-Rm|SSpTeTh U+Ze3N $NiusN*Nt!Nu(e/u*2O,0AntFtGg!Ng RaffeRlVe_dAn)A*A[IdeImp'ObeOomOryO=OwUe_tDde[LdOdO'RillaSpelSsipV nWn_bA)A(AntApeA[Av.yEatE&IdIefItOc yOupOwUnt_rdE[IdeIltIt?N3M:B.IrLfMm M, NdPpyRb%RdRshR=,TVeWkZ?d3AdAl`ArtAvyD+hogIght~oLmetLpNRo3Dd&Gh~NtPRe/%y5BbyCkeyLdLeLiday~owMeNeyOdPeRnRr%R'Sp.$/TelUrV 5BGeM<Mb!M%Nd*dNgryNtRd!RryRtSb<d3Brid:1EOn0EaEntifyLe2N%e4LLeg$L}[0A+Ita>M&'Mu}Pa@Po'Pro=Pul'0ChCludeComeC*a'DexD-a>Do%Du,ryF<tFl-tF%mHa!H .Iti$Je@JuryMa>N Noc|PutQuiryS<eSe@SideSpi*/$lTa@T e,ToVe,V.eVol=3On0L<dOla>Sue0Em1Ory:CketGu?RZz3AlousAns~yWel9BInKeUr}yY5D+I)MpNg!Ni%Nk/:Ng?oo3EnEpT^upY3CkDD}yNdNgdomSsTT^&TeTt&Wi4EeIfeO{Ow:BBelB%Dd DyKeMpNgua+PtopR+T T(UghUndryVaWWnWsu.Y Zy3Ad AfArnA=Ctu*FtGG$G&dIsu*M#NdNg`NsOp?dSs#Tt Vel3ArB tyBr?yC&'FeFtGhtKeMbM.NkOnQuid/Tt!VeZ?d5AdAnB, C$CkG-NelyNgOpTt yUdUn+VeY$5CkyGga+Mb N?N^Xury3R-s:Ch(eDG-G}tIdIlInJ%KeMm$NNa+Nda>NgoNs]Nu$P!Rb!R^Rg(R(eRketRria+SkSs/ T^T i$ThTrixTt XimumZe3AdowAnAsu*AtCh<-D$DiaLodyLtMb M%yNt]NuRcyR+R.RryShSsa+T$Thod3Dd!DnightLk~]M-NdNimumN%Nu>Rac!Rr%S ySs/akeXXedXtu*5Bi!DelDifyMM|N.%NkeyN, N`OnR$ReRn(gSqu.oTh T]T%Unta(U'VeVie5ChFf(LeLtiplySc!SeumShroomS-/Tu$3Self/ yTh:I=MePk(Rrow/yT]Tu*3ArCkEdGati=G!@I` PhewR=/TTw%kUtr$V WsXt3CeGht5B!I'M(eeOd!Rm$R`SeTab!TeTh(gTi)VelW5C!?Mb R'T:K0EyJe@Li+Scu*S =Ta(Vious0CurE<Tob 0Or1FF Fi)T&2L1Ay0DI=Ymp-0It0CeEI#L(eLy1EnEraIn]Po'T]1An+B.Ch?dD D(?yG<I|Ig($Ph<0Tr-h0H 0Tdo%T TputTside0AlEnEr0NN 0Yg&0/ 0O}:CtDd!GeIrLa)LmNdaNelN-N` P RadeR|RkRrotRtySsT^ThTi|TrolTt nU'VeYm|3A)AnutArAs<tL-<NN$tyNcilOp!Pp Rfe@Rm.Rs#T2O}OtoRa'Ys-$0AnoCn-Ctu*E)GGe#~LotNkO} Pe/olT^Zza_)A}tA,-A>AyEa'Ed+U{UgUn+2EmEtIntL?LeLi)NdNyOlPul?Rt]S.]Ssib!/TatoTt yV tyWd W _@i)Ai'Ed-tEf Epa*Es|EttyEv|I)IdeIm?yIntI%.yIs#Iva>IzeOb!mO)[Odu)Of.OgramOje@Omo>OofOp tyOsp O>@OudOvide2Bl-Dd(g~LpL'Mpk(N^PilPpyR^a'R.yRpo'R'ShTZz!3Ramid:99Al.yAntumArt E,]I{ItIzO>:Bb.Cco#CeCkD?DioIlInI'~yMpN^NdomN+PidReTeTh V&WZ%3AdyAlAs#BelBuildC$lCei=CipeC%dCyc!Du)F!@F%mFu'G]G*tGul?Je@LaxLea'LiefLyMa(Memb M(dMo=Nd NewNtOp&PairPeatPla)P%tQui*ScueSemb!Si,Sour)Sp#'SultTi*T*atTurnUn]Ve$ViewW?d2Y`m0BBb#CeChDeD+F!GhtGidNgOtPp!SkTu$V$V 5AdA,BotBu,CketM<)OfOkieOmSeTa>UghUndU>Y$5Bb DeGLeNNwayR$:DDd!D}[FeIlLadLm#L#LtLu>MeMp!NdTisfyToshiU)Usa+VeY1A!AnA*Att E}HemeHoolI&)I[%sOrp]OutRapRe&RiptRub1AAr^As#AtC#dC*tCt]Cur.yEdEkGm|Le@~M(?Ni%N'Nt&)RiesRvi)Ss]Tt!TupV&_dowAftAllowA*EdEllEriffIeldIftI}IpIv O{OeOotOpOrtOuld O=RimpRugUff!Y0Bl(gCkDeE+GhtGnL|Lk~yLv Mil?Mp!N)NgR&/ Tua>XZe1A>Et^IIllInIrtUll0AbAmEepEnd I)IdeIghtImOg<OtOwUsh0AllArtI!OkeOo`0A{AkeApIffOw0ApCc Ci$CkDaFtL?Ldi LidLut]L=Me#eNgOnRryRtUlUndUpUr)U`0A)A*Ati$AwnEakEci$EedEllEndH eI)Id IkeInIr.L.OilOns%O#OrtOtRayReadR(gY0Ua*UeezeUir*l_b!AdiumAffA+AirsAmpAndArtA>AyEakEelEmEpE*oI{IllIngO{Oma^O}OolOryO=Ra>gyReetRikeR#gRugg!Ud|UffUmb!Y!0Bje@Bm.BwayC)[ChDd&Ff G?G+,ItMm NNnyN'tP PplyP*meReRfa)R+Rpri'RroundR=ySpe@/a(1AllowAmpApArmE?EetIftImIngIt^Ord1MbolMptomRup/em:B!Ck!GIlL|LkNkPeR+tSk/eTtooXi3A^Am~NN<tNnisNtRm/Xt_nkAtEmeEnE%yE*EyIngIsOughtReeRi=RowUmbUnd 0CketDeG LtMb MeNyPRedSsueT!5A,BaccoDayDdl EGe` I!tK&MatoM%rowNeNgueNightOlO`PP-Pp!R^RnadoRtoi'SsT$Uri,W?dW WnY_{AdeAff-Ag-A(Ansf ApAshA=lAyEatEeEndI$IbeI{Igg ImIpOphyOub!U{UeUlyUmpetU,U`Y2BeIt]Mb!NaN}lRkeyRnRt!1El=EntyI)InI,O1PeP-$:5Ly5B*lla0Ab!Awa*C!Cov D DoFairFoldHappyIf%mIqueItIv 'KnownLo{TilUsu$Veil1Da>GradeHoldOnP Set1B<Ge0A+EEdEfulE![U$0Il.y:C<tCuumGueLidL!yL=NNishP%Rious/Ult3H-!L=tNd%Ntu*NueRbRifyRs]RyS'lT <3Ab!Br<tCiousCt%yDeoEw~a+Nta+Ol(Rtu$RusSaS.Su$T$Vid5C$I)IdLc<oLumeTeYa+:GeG#ItLk~LnutNtRfa*RmRri%ShSp/eT VeY3Al`Ap#ArA'lA` BDd(gEk&dIrdLcome/T_!AtEatEelEnE*IpIsp 0DeD`FeLd~NNdowNeNgNkNn Nt ReSdomSeShT}[5LfM<Nd OdOlRdRkRldRryR`_pE{E,!I,I>Ong::Rd3Ar~ow9UUngU`:3BraRo9NeO\";\nconst checksum = \"0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60\";\n\nlet wordlist: null | LangEn = null;\n\n/**\n *  The [[link-bip39-en]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangEn extends WordlistOwl {\n\n    /**\n     *  Creates a new instance of the English language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langEn]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"en\", words, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangEn``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangEn {\n        if (wordlist == null) { wordlist = new LangEn(); }\n        return wordlist;\n    }\n}\n", "import { pbkdf2, sha256 } from \"../crypto/index.js\";\nimport {\n    defineProperties, getBytes, hexlify, assertNormalize, assertPrivate, assertArgument, toUtf8Bytes\n} from \"../utils/index.js\";\nimport { LangEn } from \"../wordlists/lang-en.js\";\n\nimport type { BytesLike } from \"../utils/index.js\";\nimport type { Wordlist } from \"../wordlists/index.js\";\n\n\n// Returns a byte with the MSB bits set\nfunction getUpperMask(bits: number): number {\n   return ((1 << bits) - 1) << (8 - bits) & 0xff;\n}\n\n// Returns a byte with the LSB bits set\nfunction getLowerMask(bits: number): number {\n   return ((1 << bits) - 1) & 0xff;\n}\n\n\nfunction mnemonicToEntropy(mnemonic: string, wordlist?: null | Wordlist): string {\n    assertNormalize(\"NFKD\");\n\n    if (wordlist == null) { wordlist = LangEn.wordlist(); }\n\n    const words = wordlist.split(mnemonic);\n    assertArgument((words.length % 3) === 0 && words.length >= 12 && words.length <= 24,\n        \"invalid mnemonic length\", \"mnemonic\", \"[ REDACTED ]\");\n\n    const entropy = new Uint8Array(Math.ceil(11 * words.length / 8));\n\n    let offset = 0;\n    for (let i = 0; i < words.length; i++) {\n        let index = wordlist.getWordIndex(words[i].normalize(\"NFKD\"));\n        assertArgument(index >= 0, `invalid mnemonic word at index ${ i }`, \"mnemonic\", \"[ REDACTED ]\");\n\n        for (let bit = 0; bit < 11; bit++) {\n            if (index & (1 << (10 - bit))) {\n                entropy[offset >> 3] |= (1 << (7 - (offset % 8)));\n            }\n            offset++;\n        }\n    }\n\n    const entropyBits = 32 * words.length / 3;\n\n\n    const checksumBits = words.length / 3;\n    const checksumMask = getUpperMask(checksumBits);\n\n    const checksum = getBytes(sha256(entropy.slice(0, entropyBits / 8)))[0] & checksumMask;\n\n    assertArgument(checksum === (entropy[entropy.length - 1] & checksumMask),\n        \"invalid mnemonic checksum\", \"mnemonic\", \"[ REDACTED ]\");\n\n    return hexlify(entropy.slice(0, entropyBits / 8));\n}\n\nfunction entropyToMnemonic(entropy: Uint8Array, wordlist?: null | Wordlist): string {\n\n    assertArgument((entropy.length % 4) === 0 && entropy.length >= 16 && entropy.length <= 32,\n        \"invalid entropy size\", \"entropy\", \"[ REDACTED ]\");\n\n    if (wordlist == null) { wordlist = LangEn.wordlist(); }\n\n    const indices: Array<number> = [ 0 ];\n\n    let remainingBits = 11;\n    for (let i = 0; i < entropy.length; i++) {\n\n        // Consume the whole byte (with still more to go)\n        if (remainingBits > 8) {\n            indices[indices.length - 1] <<= 8;\n            indices[indices.length - 1] |= entropy[i];\n\n            remainingBits -= 8;\n\n        // This byte will complete an 11-bit index\n        } else {\n            indices[indices.length - 1] <<= remainingBits;\n            indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);\n\n            // Start the next word\n            indices.push(entropy[i] & getLowerMask(8 - remainingBits));\n\n            remainingBits += 3;\n        }\n    }\n\n    // Compute the checksum bits\n    const checksumBits = entropy.length / 4;\n    const checksum = parseInt(sha256(entropy).substring(2, 4), 16) & getUpperMask(checksumBits);\n\n    // Shift the checksum into the word indices\n    indices[indices.length - 1] <<= checksumBits;\n    indices[indices.length - 1] |= (checksum >> (8 - checksumBits));\n\n    return wordlist.join(indices.map((index) => (<Wordlist>wordlist).getWord(index)));\n}\n\nconst _guard = { };\n\n/**\n *  A **Mnemonic** wraps all properties required to compute [[link-bip-39]]\n *  seeds and convert between phrases and entropy.\n */\nexport class Mnemonic {\n    /**\n     *  The mnemonic phrase of 12, 15, 18, 21 or 24 words.\n     *\n     *  Use the [[wordlist]] ``split`` method to get the individual words.\n     */\n    readonly phrase!: string;\n\n    /**\n     *  The password used for this mnemonic. If no password is used this\n     *  is the empty string (i.e. ``\"\"``) as per the specification.\n     */\n    readonly password!: string;\n\n    /**\n     *  The wordlist for this mnemonic.\n     */\n    readonly wordlist!: Wordlist;\n\n    /**\n     *  The underlying entropy which the mnemonic encodes.\n     */\n    readonly entropy!: string;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, entropy: string, phrase: string, password?: null | string, wordlist?: null | Wordlist) {\n        if (password == null) { password = \"\"; }\n        if (wordlist == null) { wordlist = LangEn.wordlist(); }\n        assertPrivate(guard, _guard, \"Mnemonic\");\n        defineProperties<Mnemonic>(this, { phrase, password, wordlist, entropy });\n    }\n\n    /**\n     *  Returns the seed for the mnemonic.\n     */\n    computeSeed(): string {\n        const salt = toUtf8Bytes(\"mnemonic\" + this.password, \"NFKD\");\n        return pbkdf2(toUtf8Bytes(this.phrase, \"NFKD\"), salt, 2048, 64, \"sha512\");\n    }\n\n    /**\n     *  Creates a new Mnemonic for the %%phrase%%.\n     *\n     *  The default %%password%% is the empty string and the default\n     *  wordlist is the [English wordlists](LangEn).\n     */\n    static fromPhrase(phrase: string, password?: null | string, wordlist?: null | Wordlist): Mnemonic {\n        // Normalize the case and space; throws if invalid\n        const entropy = mnemonicToEntropy(phrase, wordlist);\n        phrase = entropyToMnemonic(getBytes(entropy), wordlist);\n        return new Mnemonic(_guard, entropy, phrase, password, wordlist);\n    }\n\n    /**\n     *  Create a new **Mnemonic** from the %%entropy%%.\n     *\n     *  The default %%password%% is the empty string and the default\n     *  wordlist is the [English wordlists](LangEn).\n     */\n    static fromEntropy(_entropy: BytesLike, password?: null | string, wordlist?: null | Wordlist): Mnemonic {\n        const entropy = getBytes(_entropy, \"entropy\");\n        const phrase = entropyToMnemonic(entropy, wordlist);\n        return new Mnemonic(_guard, hexlify(entropy), phrase, password, wordlist);\n    }\n\n    /**\n     *  Returns the phrase for %%mnemonic%%.\n     */\n    static entropyToPhrase(_entropy: BytesLike, wordlist?: null | Wordlist): string {\n        const entropy = getBytes(_entropy, \"entropy\");\n        return entropyToMnemonic(entropy, wordlist);\n    }\n\n    /**\n     *  Returns the entropy for %%phrase%%.\n     */\n    static phraseToEntropy(phrase: string, wordlist?: null | Wordlist): string {\n        return mnemonicToEntropy(phrase, wordlist);\n    }\n\n    /**\n     *  Returns true if %%phrase%% is a valid [[link-bip-39]] phrase.\n     *\n     *  This checks all the provided words belong to the %%wordlist%%,\n     *  that the length is valid and the checksum is correct.\n     */\n    static isValidMnemonic(phrase: string, wordlist?: null | Wordlist): boolean {\n        try {\n            mnemonicToEntropy(phrase, wordlist);\n            return true;\n        } catch (error) { }\n        return false;\n    }\n}\n", "/*! MIT License. Copyright 2015-2022 Richard Moore <me@ricmoo.com>. See LICENSE.txt. */\n\n// Number of rounds by keysize\nconst numberOfRounds: Record<number, number> = { 16: 10, 24: 12, 32: 14 };\n\n// Round constant words\nconst rcon = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91];\n\n// S-box and Inverse S-box (S is for Substitution)\nconst S = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];\nconst Si =[0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d];\n\n// Transformations for encryption\nconst T1 = [0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a];\nconst T2 = [0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616];\nconst T3 = [0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16];\nconst T4 = [0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c];\n\n// Transformations for decryption\nconst T5 = [0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742];\nconst T6 = [0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857];\nconst T7 = [0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8];\nconst T8 = [0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0];\n\n// Transformations for decryption key expansion\nconst U1 = [0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3];\nconst U2 = [0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697];\nconst U3 = [0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46];\nconst U4 = [0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d];\n\nfunction convertToInt32(bytes: Uint8Array): Array<number> {\n  const result = [ ];\n  for (let i = 0; i < bytes.length; i += 4) {\n    result.push((bytes[i] << 24) | (bytes[i + 1] << 16) | (bytes[i + 2] <<  8) | bytes[i + 3]);\n  }\n  return result;\n}\n\nexport class AES {\n  readonly #key: Uint8Array;\n  readonly #Kd: Array<Array<number>>;\n  readonly #Ke: Array<Array<number>>;\n\n  get key(): Uint8Array { return this.#key.slice(); }\n\n  constructor(key: Uint8Array) {\n    if (!(this instanceof AES)) {\n      throw Error('AES must be instanitated with `new`');\n    }\n\n    this.#key = new Uint8Array(key);\n\n    const rounds = numberOfRounds[this.key.length];\n    if (rounds == null) {\n      throw new TypeError('invalid key size (must be 16, 24 or 32 bytes)');\n    }\n\n    // encryption round keys\n    this.#Ke = [];\n\n    // decryption round keys\n    this.#Kd = [];\n\n    for (let i = 0; i <= rounds; i++) {\n      this.#Ke.push([0, 0, 0, 0]);\n      this.#Kd.push([0, 0, 0, 0]);\n    }\n\n    const roundKeyCount = (rounds + 1) * 4;\n    const KC = this.key.length / 4;\n\n    // convert the key into ints\n    const tk = convertToInt32(this.key);\n\n    // copy values into round key arrays\n    let index;\n    for (let i = 0; i < KC; i++) {\n      index = i >> 2;\n      this.#Ke[index][i % 4] = tk[i];\n      this.#Kd[rounds - index][i % 4] = tk[i];\n    }\n\n    // key expansion (fips-197 section 5.2)\n    let rconpointer = 0;\n    let t = KC, tt;\n    while (t < roundKeyCount) {\n      tt = tk[KC - 1];\n      tk[0] ^= ((S[(tt >> 16) & 0xFF] << 24) ^\n                (S[(tt >>  8) & 0xFF] << 16) ^\n                (S[ tt        & 0xFF] <<  8) ^\n                 S[(tt >> 24) & 0xFF]        ^\n                (rcon[rconpointer] << 24));\n      rconpointer += 1;\n\n      // key expansion (for non-256 bit)\n      if (KC != 8) {\n        for (let i = 1; i < KC; i++) {\n          tk[i] ^= tk[i - 1];\n        }\n\n      // key expansion for 256-bit keys is \"slightly different\" (fips-197)\n      } else {\n        for (let i = 1; i < (KC / 2); i++) {\n          tk[i] ^= tk[i - 1];\n        }\n        tt = tk[(KC / 2) - 1];\n\n        tk[KC / 2] ^= (S[ tt        & 0xFF]        ^\n                      (S[(tt >>  8) & 0xFF] <<  8) ^\n                      (S[(tt >> 16) & 0xFF] << 16) ^\n                      (S[(tt >> 24) & 0xFF] << 24));\n\n        for (let i = (KC / 2) + 1; i < KC; i++) {\n          tk[i] ^= tk[i - 1];\n        }\n      }\n\n      // copy values into round key arrays\n      let i = 0, r, c;\n      while (i < KC && t < roundKeyCount) {\n        r = t >> 2;\n        c = t % 4;\n        this.#Ke[r][c] = tk[i];\n        this.#Kd[rounds - r][c] = tk[i++];\n        t++;\n      }\n    }\n\n    // inverse-cipher-ify the decryption round key (fips-197 section 5.3)\n    for (let r = 1; r < rounds; r++) {\n      for (let c = 0; c < 4; c++) {\n        tt = this.#Kd[r][c];\n        this.#Kd[r][c] = (U1[(tt >> 24) & 0xFF] ^\n                          U2[(tt >> 16) & 0xFF] ^\n                          U3[(tt >>  8) & 0xFF] ^\n                          U4[ tt        & 0xFF]);\n      }\n    }\n  }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (plaintext.length != 16) {\n      throw new TypeError('invalid plaintext size (must be 16 bytes)');\n    }\n\n    const rounds = this.#Ke.length - 1;\n    const a = [0, 0, 0, 0];\n\n    // convert plaintext to (ints ^ key)\n    let t = convertToInt32(plaintext);\n    for (let i = 0; i < 4; i++) {\n      t[i] ^= this.#Ke[0][i];\n    }\n\n    // apply round transforms\n    for (let r = 1; r < rounds; r++) {\n      for (let i = 0; i < 4; i++) {\n        a[i] = (T1[(t[ i         ] >> 24) & 0xff] ^\n                T2[(t[(i + 1) % 4] >> 16) & 0xff] ^\n                T3[(t[(i + 2) % 4] >>  8) & 0xff] ^\n                T4[ t[(i + 3) % 4]        & 0xff] ^\n                this.#Ke[r][i]);\n      }\n      t = a.slice();\n    }\n\n    // the last round is special\n    const result = new Uint8Array(16);\n    let tt = 0;\n    for (let i = 0; i < 4; i++) {\n      tt = this.#Ke[rounds][i];\n      result[4 * i    ] = (S[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n      result[4 * i + 1] = (S[(t[(i + 1) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n      result[4 * i + 2] = (S[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;\n      result[4 * i + 3] = (S[ t[(i + 3) % 4]        & 0xff] ^  tt       ) & 0xff;\n    }\n\n    return result;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    if (ciphertext.length != 16) {\n      throw new TypeError('invalid ciphertext size (must be 16 bytes)');\n    }\n\n    const rounds = this.#Kd.length - 1;\n    const a = [0, 0, 0, 0];\n\n    // convert plaintext to (ints ^ key)\n    let t = convertToInt32(ciphertext);\n    for (let i = 0; i < 4; i++) {\n      t[i] ^= this.#Kd[0][i];\n    }\n\n    // apply round transforms\n    for (let r = 1; r < rounds; r++) {\n      for (let i = 0; i < 4; i++) {\n        a[i] = (T5[(t[ i         ] >> 24) & 0xff] ^\n                T6[(t[(i + 3) % 4] >> 16) & 0xff] ^\n                T7[(t[(i + 2) % 4] >>  8) & 0xff] ^\n                T8[ t[(i + 1) % 4]        & 0xff] ^\n                this.#Kd[r][i]);\n      }\n      t = a.slice();\n    }\n\n    // the last round is special\n    const result = new Uint8Array(16);\n    let tt = 0;\n    for (let i = 0; i < 4; i++) {\n      tt = this.#Kd[rounds][i];\n      result[4 * i    ] = (Si[(t[ i         ] >> 24) & 0xff] ^ (tt >> 24)) & 0xff;\n      result[4 * i + 1] = (Si[(t[(i + 3) % 4] >> 16) & 0xff] ^ (tt >> 16)) & 0xff;\n      result[4 * i + 2] = (Si[(t[(i + 2) % 4] >>  8) & 0xff] ^ (tt >>  8)) & 0xff;\n      result[4 * i + 3] = (Si[ t[(i + 1) % 4]        & 0xff] ^  tt       ) & 0xff;\n    }\n\n    return result;\n  }\n}\n", "\nimport { AES } from \"./aes.js\";\n\nexport abstract class ModeOfOperation {\n  readonly aes!: AES;\n  readonly name!: string;\n\n  constructor(name: string, key: Uint8Array, cls?: any) {\n    if (cls && !(this instanceof cls)) {\n      throw new Error(`${ name } must be instantiated with \"new\"`);\n    }\n\n    Object.defineProperties(this, {\n      aes: { enumerable: true, value: new AES(key) },\n      name: { enumerable: true, value: name }\n    });\n  }\n\n  abstract encrypt(plaintext: Uint8Array): Uint8Array;\n  abstract decrypt(ciphertext: Uint8Array): Uint8Array;\n}\n", "// Cipher Block Chaining\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class CBC extends ModeOfOperation {\n  #iv: Uint8Array;\n  #lastBlock: Uint8Array;\n\n  constructor(key: Uint8Array, iv?: Uint8Array) {\n    super(\"ECC\", key, CBC);\n\n    if (iv) {\n      if (iv.length % 16) {\n        throw new TypeError(\"invalid iv size (must be 16 bytes)\");\n      }\n      this.#iv = new Uint8Array(iv);\n    } else {\n      this.#iv = new Uint8Array(16);\n    }\n\n    this.#lastBlock = this.iv;\n  }\n\n  get iv(): Uint8Array { return new Uint8Array(this.#iv); }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    if (plaintext.length % 16) {\n      throw new TypeError(\"invalid plaintext size (must be multiple of 16 bytes)\");\n    }\n\n    const ciphertext = new Uint8Array(plaintext.length);\n    for (let i = 0; i < plaintext.length; i += 16) {\n      for (let j = 0; j < 16; j++) {\n        this.#lastBlock[j] ^= plaintext[i + j];\n      }\n\n      this.#lastBlock = this.aes.encrypt(this.#lastBlock);\n      ciphertext.set(this.#lastBlock, i);\n    }\n\n    return ciphertext;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    if (ciphertext.length % 16) {\n        throw new TypeError(\"invalid ciphertext size (must be multiple of 16 bytes)\");\n    }\n\n    const plaintext = new Uint8Array(ciphertext.length);\n    for (let i = 0; i < ciphertext.length; i += 16) {\n        const block = this.aes.decrypt(ciphertext.subarray(i, i + 16));\n\n        for (let j = 0; j < 16; j++) {\n          plaintext[i + j] = block[j] ^ this.#lastBlock[j];\n          this.#lastBlock[j] = ciphertext[i + j];\n        }\n    }\n\n    return plaintext;\n  }\n}\n", "// Counter Mode\n\nimport { ModeOfOperation } from \"./mode.js\";\n\nexport class CTR extends ModeOfOperation {\n\n  // Remaining bytes for the one-time pad\n  #remaining: Uint8Array;\n  #remainingIndex: number;\n\n  // The current counter\n  #counter: Uint8Array;\n\n  constructor(key: Uint8Array, initialValue?: number | Uint8Array) {\n    super(\"CTR\", key, CTR);\n\n    this.#counter = new Uint8Array(16)\n    this.#counter.fill(0);\n\n    this.#remaining = this.#counter;  // This will be discarded immediately\n    this.#remainingIndex = 16;\n\n    if (initialValue == null) { initialValue = 1; }\n\n    if (typeof(initialValue) === \"number\") {\n      this.setCounterValue(initialValue);\n    } else {\n      this.setCounterBytes(initialValue);\n    }\n  }\n\n  get counter(): Uint8Array { return new Uint8Array(this.#counter); }\n\n  setCounterValue(value: number): void {\n    if (!Number.isInteger(value) || value < 0 || value > Number.MAX_SAFE_INTEGER) {\n      throw new TypeError(\"invalid counter initial integer value\");\n    }\n\n    for (let index = 15; index >= 0; --index) {\n      this.#counter[index] = value % 256;\n      value = Math.floor(value / 256);\n    }\n  }\n\n  setCounterBytes(value: Uint8Array): void {\n    if (value.length !== 16) {\n      throw new TypeError(\"invalid counter initial Uint8Array value length\");\n    }\n\n    this.#counter.set(value);\n  }\n\n  increment() {\n    for (let i = 15; i >= 0; i--) {\n      if (this.#counter[i] === 255) {\n        this.#counter[i] = 0;\n      } else {\n        this.#counter[i]++;\n        break;\n      }\n    }\n  }\n\n  encrypt(plaintext: Uint8Array): Uint8Array {\n    const crypttext = new Uint8Array(plaintext);\n\n    for (let i = 0; i < crypttext.length; i++) {\n      if (this.#remainingIndex === 16) {\n        this.#remaining = this.aes.encrypt(this.#counter);\n        this.#remainingIndex = 0;\n        this.increment();\n      }\n      crypttext[i] ^= this.#remaining[this.#remainingIndex++];\n    }\n\n    return crypttext;\n  }\n\n  decrypt(ciphertext: Uint8Array): Uint8Array {\n    return this.encrypt(ciphertext);\n  }\n}\n", "\nexport function pkcs7Pad(data: Uint8Array): Uint8Array {\n    const padder = 16 - (data.length % 16);\n\n    const result = new Uint8Array(data.length + padder);\n    result.set(data);\n\n    for (let i = data.length; i < result.length; i++) {\n        result[i] = padder;\n    }\n\n    return result;\n}\n\nexport function pkcs7Strip(data: Uint8Array): Uint8Array {\n    if (data.length < 16) { throw new TypeError('PKCS#7 invalid length'); }\n\n    const padder = data[data.length - 1];\n    if (padder > 16) { throw new TypeError('PKCS#7 padding byte out of range'); }\n\n    const length = data.length - padder;\n    for (let i = 0; i < padder; i++) {\n        if (data[length + i] !== padder) {\n            throw new TypeError('PKCS#7 invalid padding byte');\n        }\n    }\n\n    return new Uint8Array(data.subarray(0, length));\n}\n", "/**\n *  @_ignore\n */\n\nimport {\n    getBytesCopy, assertArgument, toUtf8Bytes\n} from \"../utils/index.js\";\n\nexport function looseArrayify(hexString: string): Uint8Array {\n    if (typeof(hexString) === \"string\" && !hexString.startsWith(\"0x\")) {\n        hexString = \"0x\" + hexString;\n    }\n    return getBytesCopy(hexString);\n}\n\nexport function zpad(value: String | number, length: number): String {\n    value = String(value);\n    while (value.length < length) { value = '0' + value; }\n    return value;\n}\n\nexport function getPassword(password: string | Uint8Array): Uint8Array {\n    if (typeof(password) === 'string') {\n        return toUtf8Bytes(password, \"NFKC\");\n    }\n    return getBytesCopy(password);\n}\n\nexport function spelunk<T>(object: any, _path: string): T {\n\n    const match = _path.match(/^([a-z0-9$_.-]*)(:([a-z]+))?(!)?$/i);\n    assertArgument(match != null, \"invalid path\", \"path\", _path);\n\n    const path = match[1];\n    const type = match[3];\n    const reqd = (match[4] === \"!\");\n\n    let cur = object;\n    for (const comp of path.toLowerCase().split('.')) {\n\n        // Search for a child object with a case-insensitive matching key\n        if (Array.isArray(cur)) {\n            if (!comp.match(/^[0-9]+$/)) { break; }\n            cur = cur[parseInt(comp)];\n\n        } else if (typeof(cur) === \"object\") {\n            let found: any = null;\n            for (const key in cur) {\n                 if (key.toLowerCase() === comp) {\n                     found = cur[key];\n                     break;\n                 }\n            }\n            cur = found;\n\n        } else {\n            cur = null;\n        }\n\n        if (cur == null) { break; }\n    }\n\n    assertArgument(!reqd || cur != null, \"missing required value\", \"path\", path);\n\n    if (type && cur != null) {\n        if (type === \"int\") {\n            if (typeof(cur) === \"string\" && cur.match(/^-?[0-9]+$/)) {\n                return <T><unknown>parseInt(cur);\n            } else if (Number.isSafeInteger(cur)) {\n                return cur;\n            }\n        }\n\n        if (type === \"number\") {\n            if (typeof(cur) === \"string\" && cur.match(/^-?[0-9.]*$/)) {\n                return <T><unknown>parseFloat(cur);\n            }\n        }\n\n        if (type === \"data\") {\n            if (typeof(cur) === \"string\") { return <T><unknown>looseArrayify(cur); }\n        }\n\n        if (type === \"array\" && Array.isArray(cur)) { return <T><unknown>cur; }\n        if (type === typeof(cur)) { return cur; }\n\n        assertArgument(false, `wrong type found for ${ type } `, \"path\", path);\n    }\n\n    return cur;\n}\n/*\nexport function follow(object: any, path: string): null | string {\n    let currentChild = object;\n\n    for (const comp of path.toLowerCase().split('/')) {\n\n        // Search for a child object with a case-insensitive matching key\n        let matchingChild = null;\n        for (const key in currentChild) {\n             if (key.toLowerCase() === comp) {\n                 matchingChild = currentChild[key];\n                 break;\n             }\n        }\n\n        if (matchingChild === null) { return null; }\n\n        currentChild = matchingChild;\n    }\n\n    return currentChild;\n}\n\n// \"path/to/something:type!\"\nexport function followRequired(data: any, path: string): string {\n    const value = follow(data, path);\n    if (value != null) { return value; }\n    return logger.throwArgumentError(\"invalid value\", `data:${ path }`,\n    JSON.stringify(data));\n}\n*/\n// See: https://www.ietf.org/rfc/rfc4122.txt (Section 4.4)\n/*\nexport function uuidV4(randomBytes: BytesLike): string {\n    const bytes = getBytes(randomBytes, \"randomBytes\");\n\n    // Section: 4.1.3:\n    // - time_hi_and_version[12:16] = 0b0100\n    bytes[6] = (bytes[6] & 0x0f) | 0x40;\n\n    // Section 4.4\n    // - clock_seq_hi_and_reserved[6] = 0b0\n    // - clock_seq_hi_and_reserved[7] = 0b1\n    bytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n    const value = hexlify(bytes);\n\n    return [\n       value.substring(2, 10),\n       value.substring(10, 14),\n       value.substring(14, 18),\n       value.substring(18, 22),\n       value.substring(22, 34),\n    ].join(\"-\");\n}\n*/\n", "/**\n *  The JSON Wallet formats allow a simple way to store the private\n *  keys needed in Ethereum along with related information and allows\n *  for extensible forms of encryption.\n *\n *  These utilities facilitate decrypting and encrypting the most common\n *  JSON Wallet formats.\n *\n *  @_subsection: api/wallet:JSON Wallets  [json-wallets]\n */\n\nimport { CTR } from \"aes-js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { keccak256, pbkdf2, randomBytes, scrypt, scryptSync } from \"../crypto/index.js\";\nimport { computeAddress } from \"../transaction/index.js\";\nimport {\n    concat, getBytes, hexlify, uuidV4, assert, assertArgument\n} from \"../utils/index.js\";\n\nimport { getPassword, spelunk, zpad } from \"./utils.js\";\n\nimport type { ProgressCallback } from \"../crypto/index.js\";\nimport type { BytesLike } from \"../utils/index.js\";\n\nimport { version } from \"../_version.js\";\n\n\nconst defaultPath = \"m/44'/60'/0'/0/0\";\n\n/**\n *  The contents of a JSON Keystore Wallet.\n */\nexport type KeystoreAccount = {\n    address: string;\n    privateKey: string;\n    mnemonic?: {\n        path?: string;\n        locale?: string;\n        entropy: string;\n    }\n};\n\n/**\n *  The parameters to use when encrypting a JSON Keystore Wallet.\n */\nexport type EncryptOptions = {\n   progressCallback?: ProgressCallback;\n   iv?: BytesLike;\n   entropy?: BytesLike;\n   client?: string;\n   salt?: BytesLike;\n   uuid?: string;\n   scrypt?: {\n       N?: number;\n       r?: number;\n       p?: number;\n   }\n}\n\n/**\n *  Returns true if %%json%% is a valid JSON Keystore Wallet.\n */\nexport function isKeystoreJson(json: string): boolean {\n    try {\n        const data = JSON.parse(json);\n        const version = ((data.version != null) ? parseInt(data.version): 0);\n        if (version === 3) { return true; }\n    } catch (error) { }\n    return false;\n}\n\nfunction decrypt(data: any, key: Uint8Array, ciphertext: Uint8Array): string {\n    const cipher = spelunk<string>(data, \"crypto.cipher:string\");\n    if (cipher === \"aes-128-ctr\") {\n        const iv = spelunk<Uint8Array>(data, \"crypto.cipherparams.iv:data!\")\n        const aesCtr = new CTR(key, iv);\n        return hexlify(aesCtr.decrypt(ciphertext));\n    }\n\n    assert(false, \"unsupported cipher\", \"UNSUPPORTED_OPERATION\", {\n        operation: \"decrypt\"\n    });\n}\n\nfunction getAccount(data: any, _key: string): KeystoreAccount {\n    const key = getBytes(_key);\n    const ciphertext = spelunk<Uint8Array>(data, \"crypto.ciphertext:data!\");\n\n    const computedMAC = hexlify(keccak256(concat([ key.slice(16, 32), ciphertext ]))).substring(2);\n    assertArgument(computedMAC === spelunk<string>(data, \"crypto.mac:string!\").toLowerCase(),\n        \"incorrect password\", \"password\", \"[ REDACTED ]\");\n\n    const privateKey = decrypt(data, key.slice(0, 16), ciphertext);\n\n    const address = computeAddress(privateKey);\n    if (data.address) {\n        let check = data.address.toLowerCase();\n        if (!check.startsWith(\"0x\")) { check = \"0x\" + check; }\n\n        assertArgument(getAddress(check) === address, \"keystore address/privateKey mismatch\", \"address\", data.address);\n    }\n\n    const account: KeystoreAccount = { address, privateKey };\n\n    // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase\n    const version = spelunk(data, \"x-ethers.version:string\");\n    if (version === \"0.1\") {\n        const mnemonicKey = key.slice(32, 64);\n\n        const mnemonicCiphertext = spelunk<Uint8Array>(data, \"x-ethers.mnemonicCiphertext:data!\");\n        const mnemonicIv = spelunk<Uint8Array>(data, \"x-ethers.mnemonicCounter:data!\");\n\n        const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n\n        account.mnemonic = {\n            path: (spelunk<null | string>(data, \"x-ethers.path:string\") || defaultPath),\n            locale: (spelunk<null | string>(data, \"x-ethers.locale:string\") || \"en\"),\n            entropy: hexlify(getBytes(mnemonicAesCtr.decrypt(mnemonicCiphertext)))\n        };\n    }\n\n    return account;\n}\n\ntype ScryptParams = {\n    name: \"scrypt\";\n    salt: Uint8Array;\n    N: number;\n    r: number;\n    p: number;\n    dkLen: number;\n};\n\ntype KdfParams = ScryptParams | {\n    name: \"pbkdf2\";\n    salt: Uint8Array;\n    count: number;\n    dkLen: number;\n    algorithm: \"sha256\" | \"sha512\";\n};\n\nfunction getDecryptKdfParams<T>(data: any): KdfParams {\n    const kdf = spelunk(data, \"crypto.kdf:string\");\n    if (kdf && typeof(kdf) === \"string\") {\n        if (kdf.toLowerCase() === \"scrypt\") {\n            const salt = spelunk<Uint8Array>(data, \"crypto.kdfparams.salt:data!\");\n            const N = spelunk<number>(data, \"crypto.kdfparams.n:int!\");\n            const r = spelunk<number>(data, \"crypto.kdfparams.r:int!\");\n            const p = spelunk<number>(data, \"crypto.kdfparams.p:int!\");\n\n            // Make sure N is a power of 2\n            assertArgument(N > 0 && (N & (N - 1)) === 0, \"invalid kdf.N\", \"kdf.N\", N);\n            assertArgument(r > 0 && p > 0, \"invalid kdf\", \"kdf\", kdf);\n\n            const dkLen = spelunk<number>(data, \"crypto.kdfparams.dklen:int!\");\n            assertArgument(dkLen === 32, \"invalid kdf.dklen\", \"kdf.dflen\", dkLen);\n\n            return { name: \"scrypt\", salt, N, r, p, dkLen: 64 };\n\n        } else if (kdf.toLowerCase() === \"pbkdf2\") {\n\n            const salt = spelunk<Uint8Array>(data, \"crypto.kdfparams.salt:data!\");\n\n            const prf = spelunk<string>(data, \"crypto.kdfparams.prf:string!\");\n            const algorithm = prf.split(\"-\").pop();\n            assertArgument(algorithm === \"sha256\" || algorithm === \"sha512\", \"invalid kdf.pdf\", \"kdf.pdf\", prf);\n\n            const count = spelunk<number>(data, \"crypto.kdfparams.c:int!\");\n\n            const dkLen = spelunk<number>(data, \"crypto.kdfparams.dklen:int!\");\n            assertArgument(dkLen === 32, \"invalid kdf.dklen\", \"kdf.dklen\", dkLen);\n\n            return { name: \"pbkdf2\", salt, count, dkLen, algorithm };\n        }\n    }\n\n    assertArgument(false, \"unsupported key-derivation function\", \"kdf\", kdf);\n}\n\n\n/**\n *  Returns the account details for the JSON Keystore Wallet %%json%%\n *  using %%password%%.\n *\n *  It is preferred to use the [async version](decryptKeystoreJson)\n *  instead, which allows a [[ProgressCallback]] to keep the user informed\n *  as to the decryption status.\n *\n *  This method will block the event loop (freezing all UI) until decryption\n *  is complete, which can take quite some time, depending on the wallet\n *  paramters and platform.\n */\nexport function decryptKeystoreJsonSync(json: string, _password: string | Uint8Array): KeystoreAccount {\n    const data = JSON.parse(json);\n\n    const password = getPassword(_password);\n\n    const params = getDecryptKdfParams(data);\n    if (params.name === \"pbkdf2\") {\n        const { salt, count, dkLen, algorithm } = params;\n        const key = pbkdf2(password, salt, count, dkLen, algorithm);\n        return getAccount(data, key);\n    }\n\n    assert(params.name === \"scrypt\", \"cannot be reached\", \"UNKNOWN_ERROR\", { params })\n\n    const { salt, N, r, p, dkLen } = params;\n    const key = scryptSync(password, salt, N, r, p, dkLen);\n    return getAccount(data, key);\n}\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\n\n/**\n *  Resolves to the decrypted JSON Keystore Wallet %%json%% using the\n *  %%password%%.\n *\n *  If provided, %%progress%% will be called periodically during the\n *  decrpytion to provide feedback, and if the function returns\n *  ``false`` will halt decryption.\n *\n *  The %%progressCallback%% will **always** receive ``0`` before\n *  decryption begins and ``1`` when complete.\n */\nexport async function decryptKeystoreJson(json: string, _password: string | Uint8Array, progress?: ProgressCallback): Promise<KeystoreAccount> {\n    const data = JSON.parse(json);\n\n    const password = getPassword(_password);\n\n    const params = getDecryptKdfParams(data);\n    if (params.name === \"pbkdf2\") {\n        if (progress) {\n            progress(0);\n            await stall(0);\n        }\n        const { salt, count, dkLen, algorithm } = params;\n        const key = pbkdf2(password, salt, count, dkLen, algorithm);\n        if (progress) {\n            progress(1);\n            await stall(0);\n        }\n        return getAccount(data, key);\n    }\n\n    assert(params.name === \"scrypt\", \"cannot be reached\", \"UNKNOWN_ERROR\", { params })\n\n    const { salt, N, r, p, dkLen } = params;\n    const key = await scrypt(password, salt, N, r, p, dkLen, progress);\n    return getAccount(data, key);\n}\n\nfunction getEncryptKdfParams(options: EncryptOptions): ScryptParams {\n    // Check/generate the salt\n    const salt = (options.salt != null) ? getBytes(options.salt, \"options.salt\"): randomBytes(32);\n\n    // Override the scrypt password-based key derivation function parameters\n    let N = (1 << 17), r = 8, p = 1;\n    if (options.scrypt) {\n        if (options.scrypt.N) { N = options.scrypt.N; }\n        if (options.scrypt.r) { r = options.scrypt.r; }\n        if (options.scrypt.p) { p = options.scrypt.p; }\n    }\n    assertArgument(typeof(N) === \"number\" && N > 0 && Number.isSafeInteger(N) && (BigInt(N) & BigInt(N - 1)) === BigInt(0), \"invalid scrypt N parameter\", \"options.N\", N);\n    assertArgument(typeof(r) === \"number\" && r > 0 && Number.isSafeInteger(r), \"invalid scrypt r parameter\", \"options.r\", r);\n    assertArgument(typeof(p) === \"number\" && p > 0 && Number.isSafeInteger(p), \"invalid scrypt p parameter\", \"options.p\", p);\n\n    return { name: \"scrypt\", dkLen: 32, salt, N, r, p };\n}\n\nfunction _encryptKeystore(key: Uint8Array, kdf: ScryptParams, account: KeystoreAccount, options: EncryptOptions): any {\n\n    const privateKey = getBytes(account.privateKey, \"privateKey\");\n\n    // Override initialization vector\n    const iv = (options.iv != null) ? getBytes(options.iv, \"options.iv\"): randomBytes(16);\n    assertArgument(iv.length === 16, \"invalid options.iv length\", \"options.iv\", options.iv);\n\n    // Override the uuid\n    const uuidRandom = (options.uuid != null) ? getBytes(options.uuid, \"options.uuid\"): randomBytes(16);\n    assertArgument(uuidRandom.length === 16, \"invalid options.uuid length\", \"options.uuid\", options.iv);\n\n    // This will be used to encrypt the wallet (as per Web3 secret storage)\n    // - 32 bytes   As normal for the Web3 secret storage (derivedKey, macPrefix)\n    // - 32 bytes   AES key to encrypt mnemonic with (required here to be Ethers Wallet)\n    const derivedKey = key.slice(0, 16);\n    const macPrefix = key.slice(16, 32);\n\n    // Encrypt the private key\n    const aesCtr = new CTR(derivedKey, iv);\n    const ciphertext = getBytes(aesCtr.encrypt(privateKey));\n\n    // Compute the message authentication code, used to check the password\n    const mac = keccak256(concat([ macPrefix, ciphertext ]))\n\n    // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition\n    const data: { [key: string]: any } = {\n        address: account.address.substring(2).toLowerCase(),\n        id: uuidV4(uuidRandom),\n        version: 3,\n        Crypto: {\n            cipher: \"aes-128-ctr\",\n            cipherparams: {\n                iv: hexlify(iv).substring(2),\n            },\n            ciphertext: hexlify(ciphertext).substring(2),\n            kdf: \"scrypt\",\n            kdfparams: {\n                salt: hexlify(kdf.salt).substring(2),\n                n: kdf.N,\n                dklen: 32,\n                p: kdf.p,\n                r: kdf.r\n            },\n            mac: mac.substring(2)\n        }\n    };\n\n    // If we have a mnemonic, encrypt it into the JSON wallet\n    if (account.mnemonic) {\n        const client = (options.client != null) ? options.client: `ethers/${ version }`;\n\n        const path = account.mnemonic.path || defaultPath;\n        const locale = account.mnemonic.locale || \"en\";\n\n        const mnemonicKey = key.slice(32, 64);\n\n        const entropy = getBytes(account.mnemonic.entropy, \"account.mnemonic.entropy\");\n        const mnemonicIv = randomBytes(16);\n        const mnemonicAesCtr = new CTR(mnemonicKey, mnemonicIv);\n        const mnemonicCiphertext = getBytes(mnemonicAesCtr.encrypt(entropy));\n\n        const now = new Date();\n        const timestamp = (now.getUTCFullYear() + \"-\" +\n                           zpad(now.getUTCMonth() + 1, 2) + \"-\" +\n                           zpad(now.getUTCDate(), 2) + \"T\" +\n                           zpad(now.getUTCHours(), 2) + \"-\" +\n                           zpad(now.getUTCMinutes(), 2) + \"-\" +\n                           zpad(now.getUTCSeconds(), 2) + \".0Z\");\n        const gethFilename = (\"UTC--\" + timestamp + \"--\" + data.address);\n\n        data[\"x-ethers\"] = {\n            client, gethFilename, path, locale,\n            mnemonicCounter: hexlify(mnemonicIv).substring(2),\n            mnemonicCiphertext: hexlify(mnemonicCiphertext).substring(2),\n            version: \"0.1\"\n        };\n    }\n\n    return JSON.stringify(data);\n}\n\n/**\n *  Return the JSON Keystore Wallet for %%account%% encrypted with\n *  %%password%%.\n *\n *  The %%options%% can be used to tune the password-based key\n *  derivation function parameters, explicitly set the random values\n *  used. Any provided [[ProgressCallback]] is ignord.\n */\nexport function encryptKeystoreJsonSync(account: KeystoreAccount, password: string | Uint8Array, options?: EncryptOptions): string {\n    if (options == null) { options = { }; }\n\n    const passwordBytes = getPassword(password);\n    const kdf = getEncryptKdfParams(options);\n    const key = scryptSync(passwordBytes, kdf.salt, kdf.N, kdf.r, kdf.p, 64);\n    return _encryptKeystore(getBytes(key), kdf, account, options);\n}\n\n/**\n *  Resolved to the JSON Keystore Wallet for %%account%% encrypted\n *  with %%password%%.\n *\n *  The %%options%% can be used to tune the password-based key\n *  derivation function parameters, explicitly set the random values\n *  used and provide a [[ProgressCallback]] to receive periodic updates\n *  on the completion status..\n */\nexport async function encryptKeystoreJson(account: KeystoreAccount, password: string | Uint8Array, options?: EncryptOptions): Promise<string> {\n    if (options == null) { options = { }; }\n\n    const passwordBytes = getPassword(password);\n    const kdf = getEncryptKdfParams(options);\n    const key = await scrypt(passwordBytes, kdf.salt, kdf.N, kdf.r, kdf.p, 64, options.progressCallback);\n    return _encryptKeystore(getBytes(key), kdf, account, options);\n}\n\n", "/**\n *  Explain HD Wallets..\n *\n *  @_subsection: api/wallet:HD Wallets  [hd-wallets]\n */\nimport { computeHmac, randomBytes, ripemd160, SigningKey, sha256 } from \"../crypto/index.js\";\nimport { VoidSigner } from \"../providers/index.js\";\nimport { computeAddress } from \"../transaction/index.js\";\nimport {\n    concat, dataSlice, decodeBase58, defineProperties, encodeBase58,\n    getBytes, hexlify, isBytesLike,\n    getNumber, toBeArray, toBigInt, toBeHex,\n    assertPrivate, assert, assertArgument\n} from \"../utils/index.js\";\nimport { LangEn } from \"../wordlists/lang-en.js\";\n\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\nimport {\n    encryptKeystoreJson, encryptKeystoreJsonSync,\n} from \"./json-keystore.js\";\n\nimport type { ProgressCallback } from \"../crypto/index.js\";\nimport type { Provider } from \"../providers/index.js\";\nimport type { BytesLike, Numeric } from \"../utils/index.js\";\nimport type { Wordlist } from \"../wordlists/index.js\";\n\nimport type { KeystoreAccount } from \"./json-keystore.js\";\n\n/**\n *  The default derivation path for Ethereum HD Nodes. (i.e. ``\"m/44'/60'/0'/0/0\"``)\n */\nexport const defaultPath: string = \"m/44'/60'/0'/0/0\";\n\n\n// \"Bitcoin seed\"\nconst MasterSecret = new Uint8Array([ 66, 105, 116, 99, 111, 105, 110, 32, 115, 101, 101, 100 ]);\n\nconst HardenedBit = 0x80000000;\n\nconst N = BigInt(\"0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141\");\n\nconst Nibbles = \"0123456789abcdef\";\nfunction zpad(value: number, length: number): string {\n    let result = \"\";\n    while (value) {\n        result = Nibbles[value % 16] + result;\n        value = Math.trunc(value / 16);\n    }\n    while (result.length < length * 2) { result = \"0\" + result; }\n    return \"0x\" + result;\n}\n\nfunction encodeBase58Check(_value: BytesLike): string {\n    const value = getBytes(_value);\n    const check = dataSlice(sha256(sha256(value)), 0, 4);\n    const bytes = concat([ value, check ]);\n    return encodeBase58(bytes);\n}\n\nconst _guard = { };\n\nfunction ser_I(index: number, chainCode: string, publicKey: string, privateKey: null | string): { IL: Uint8Array, IR: Uint8Array } {\n    const data = new Uint8Array(37);\n\n    if (index & HardenedBit) {\n        assert(privateKey != null, \"cannot derive child of neutered node\", \"UNSUPPORTED_OPERATION\", {\n            operation: \"deriveChild\"\n        });\n\n        // Data = 0x00 || ser_256(k_par)\n        data.set(getBytes(privateKey), 1);\n\n    } else {\n        // Data = ser_p(point(k_par))\n        data.set(getBytes(publicKey));\n    }\n\n    // Data += ser_32(i)\n    for (let i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); }\n    const I = getBytes(computeHmac(\"sha512\", chainCode, data));\n\n    return { IL: I.slice(0, 32), IR: I.slice(32) };\n}\n\ntype HDNodeLike<T> = { depth: number, deriveChild: (i: number) => T };\nfunction derivePath<T extends HDNodeLike<T>>(node: T, path: string): T {\n    const components = path.split(\"/\");\n\n    assertArgument(components.length > 0, \"invalid path\", \"path\", path);\n\n    if (components[0] === \"m\") {\n        assertArgument(node.depth === 0, `cannot derive root path (i.e. path starting with \"m/\") for a node at non-zero depth ${ node.depth }`, \"path\", path);\n        components.shift();\n    }\n\n    let result: T = node;\n    for (let i = 0; i < components.length; i++) {\n        const component = components[i];\n\n        if (component.match(/^[0-9]+'$/)) {\n            const index = parseInt(component.substring(0, component.length - 1));\n            assertArgument(index < HardenedBit, \"invalid path index\", `path[${ i }]`, component);\n            result = result.deriveChild(HardenedBit + index);\n\n        } else if (component.match(/^[0-9]+$/)) {\n            const index = parseInt(component);\n            assertArgument(index < HardenedBit, \"invalid path index\", `path[${ i }]`, component);\n            result = result.deriveChild(index);\n\n        } else {\n            assertArgument(false, \"invalid path component\", `path[${ i }]`, component);\n        }\n    }\n\n    return result;\n}\n\n/**\n *  An **HDNodeWallet** is a [[Signer]] backed by the private key derived\n *  from an HD Node using the [[link-bip-32]] stantard.\n *\n *  An HD Node forms a hierarchal structure with each HD Node having a\n *  private key and the ability to derive child HD Nodes, defined by\n *  a path indicating the index of each child.\n */\nexport class HDNodeWallet extends BaseWallet {\n    /**\n     *  The compressed public key.\n     */\n    readonly publicKey!: string;\n\n    /**\n     *  The fingerprint.\n     *\n     *  A fingerprint allows quick qay to detect parent and child nodes,\n     *  but developers should be prepared to deal with collisions as it\n     *  is only 4 bytes.\n     */\n    readonly fingerprint!: string;\n\n    /**\n     *  The parent fingerprint.\n     */\n    readonly parentFingerprint!: string;\n\n    /**\n     *  The mnemonic used to create this HD Node, if available.\n     *\n     *  Sources such as extended keys do not encode the mnemonic, in\n     *  which case this will be ``null``.\n     */\n    readonly mnemonic!: null | Mnemonic;\n\n    /**\n     *  The chaincode, which is effectively a public key used\n     *  to derive children.\n     */\n    readonly chainCode!: string;\n\n    /**\n     *  The derivation path of this wallet.\n     *\n     *  Since extended keys do not provide full path details, this\n     *  may be ``null``, if instantiated from a source that does not\n     *  encode it.\n     */\n    readonly path!: null | string;\n\n    /**\n     *  The child index of this wallet. Values over ``2 *\\* 31`` indicate\n     *  the node is hardened.\n     */\n    readonly index!: number;\n\n    /**\n     *  The depth of this wallet, which is the number of components\n     *  in its path.\n     */\n    readonly depth!: number;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, signingKey: SigningKey, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, mnemonic: null | Mnemonic, provider: null | Provider) {\n        super(signingKey, provider);\n        assertPrivate(guard, _guard, \"HDNodeWallet\");\n\n        defineProperties<HDNodeWallet>(this, { publicKey: signingKey.compressedPublicKey });\n\n        const fingerprint = dataSlice(ripemd160(sha256(this.publicKey)), 0, 4);\n        defineProperties<HDNodeWallet>(this, {\n            parentFingerprint, fingerprint,\n            chainCode, path, index, depth\n        });\n\n        defineProperties<HDNodeWallet>(this, { mnemonic });\n    }\n\n    connect(provider: null | Provider): HDNodeWallet {\n        return new HDNodeWallet(_guard, this.signingKey, this.parentFingerprint,\n            this.chainCode, this.path, this.index, this.depth, this.mnemonic, provider);\n    }\n\n    #account(): KeystoreAccount {\n        const account: KeystoreAccount = { address: this.address, privateKey: this.privateKey };\n        const m = this.mnemonic;\n        if (this.path && m && m.wordlist.locale === \"en\" && m.password === \"\") {\n            account.mnemonic = {\n                path: this.path,\n                locale: \"en\",\n                entropy: m.entropy\n            };\n        }\n\n        return account;\n    }\n\n    /**\n     *  Resolves to a [JSON Keystore Wallet](json-wallets) encrypted with\n     *  %%password%%.\n     *\n     *  If %%progressCallback%% is specified, it will receive periodic\n     *  updates as the encryption process progreses.\n     */\n    async encrypt(password: Uint8Array | string, progressCallback?: ProgressCallback): Promise<string> {\n        return await encryptKeystoreJson(this.#account(), password, { progressCallback });\n    }\n\n    /**\n     *  Returns a [JSON Keystore Wallet](json-wallets) encryped with\n     *  %%password%%.\n     *\n     *  It is preferred to use the [async version](encrypt) instead,\n     *  which allows a [[ProgressCallback]] to keep the user informed.\n     *\n     *  This method will block the event loop (freezing all UI) until\n     *  it is complete, which may be a non-trivial duration.\n     */\n    encryptSync(password: Uint8Array | string): string {\n        return encryptKeystoreJsonSync(this.#account(), password);\n    }\n\n    /**\n     *  The extended key.\n     *\n     *  This key will begin with the prefix ``xpriv`` and can be used to\n     *  reconstruct this HD Node to derive its children.\n     */\n    get extendedKey(): string {\n        // We only support the mainnet values for now, but if anyone needs\n        // testnet values, let me know. I believe current sentiment is that\n        // we should always use mainnet, and use BIP-44 to derive the network\n        //   - Mainnet: public=0x0488B21E, private=0x0488ADE4\n        //   - Testnet: public=0x043587CF, private=0x04358394\n\n        assert(this.depth < 256, \"Depth too deep\", \"UNSUPPORTED_OPERATION\", { operation: \"extendedKey\" });\n\n        return encodeBase58Check(concat([\n            \"0x0488ADE4\", zpad(this.depth, 1), this.parentFingerprint,\n            zpad(this.index, 4), this.chainCode,\n            concat([ \"0x00\", this.privateKey ])\n        ]));\n    }\n\n    /**\n     *  Returns true if this wallet has a path, providing a Type Guard\n     *  that the path is non-null.\n     */\n    hasPath(): this is { path: string } { return (this.path != null); }\n\n    /**\n     *  Returns a neutered HD Node, which removes the private details\n     *  of an HD Node.\n     *\n     *  A neutered node has no private key, but can be used to derive\n     *  child addresses and other public data about the HD Node.\n     */\n    neuter(): HDNodeVoidWallet {\n        return new HDNodeVoidWallet(_guard, this.address, this.publicKey,\n            this.parentFingerprint, this.chainCode, this.path, this.index,\n            this.depth, this.provider);\n    }\n\n    /**\n     *  Return the child for %%index%%.\n     */\n    deriveChild(_index: Numeric): HDNodeWallet {\n        const index = getNumber(_index, \"index\");\n        assertArgument(index <= 0xffffffff, \"invalid index\", \"index\", index);\n\n        // Base path\n        let path = this.path;\n        if (path) {\n            path += \"/\" + (index & ~HardenedBit);\n            if (index & HardenedBit) { path += \"'\"; }\n        }\n\n        const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, this.privateKey);\n        const ki = new SigningKey(toBeHex((toBigInt(IL) + BigInt(this.privateKey)) % N, 32));\n\n        return new HDNodeWallet(_guard, ki, this.fingerprint, hexlify(IR),\n            path, index, this.depth + 1, this.mnemonic, this.provider);\n\n    }\n\n    /**\n     *  Return the HDNode for %%path%% from this node.\n     */\n    derivePath(path: string): HDNodeWallet {\n        return derivePath<HDNodeWallet>(this, path);\n    }\n\n    static #fromSeed(_seed: BytesLike, mnemonic: null | Mnemonic): HDNodeWallet {\n        assertArgument(isBytesLike(_seed), \"invalid seed\", \"seed\", \"[REDACTED]\");\n\n        const seed = getBytes(_seed, \"seed\");\n        assertArgument(seed.length >= 16 && seed.length <= 64 , \"invalid seed\", \"seed\", \"[REDACTED]\");\n\n        const I = getBytes(computeHmac(\"sha512\", MasterSecret, seed));\n        const signingKey = new SigningKey(hexlify(I.slice(0, 32)));\n\n        return new HDNodeWallet(_guard, signingKey, \"0x00000000\", hexlify(I.slice(32)),\n            \"m\", 0, 0, mnemonic, null);\n    }\n\n    /**\n     *  Creates a new HD Node from %%extendedKey%%.\n     *\n     *  If the %%extendedKey%% will either have a prefix or ``xpub`` or\n     *  ``xpriv``, returning a neutered HD Node ([[HDNodeVoidWallet]])\n     *  or full HD Node ([[HDNodeWallet) respectively.\n     */\n    static fromExtendedKey(extendedKey: string): HDNodeWallet | HDNodeVoidWallet {\n        const bytes = toBeArray(decodeBase58(extendedKey)); // @TODO: redact\n\n        assertArgument(bytes.length === 82 || encodeBase58Check(bytes.slice(0, 78)) === extendedKey,\n            \"invalid extended key\", \"extendedKey\", \"[ REDACTED ]\");\n\n        const depth = bytes[4];\n        const parentFingerprint = hexlify(bytes.slice(5, 9));\n        const index = parseInt(hexlify(bytes.slice(9, 13)).substring(2), 16);\n        const chainCode = hexlify(bytes.slice(13, 45));\n        const key = bytes.slice(45, 78);\n\n        switch (hexlify(bytes.slice(0, 4))) {\n            // Public Key\n            case \"0x0488b21e\": case \"0x043587cf\": {\n                const publicKey = hexlify(key);\n                return new HDNodeVoidWallet(_guard, computeAddress(publicKey), publicKey,\n                    parentFingerprint, chainCode, null, index, depth, null);\n            }\n\n            // Private Key\n            case \"0x0488ade4\": case \"0x04358394 \":\n                if (key[0] !== 0) { break; }\n                return new HDNodeWallet(_guard, new SigningKey(key.slice(1)),\n                    parentFingerprint, chainCode, null, index, depth, null, null);\n        }\n\n\n        assertArgument(false, \"invalid extended key prefix\", \"extendedKey\", \"[ REDACTED ]\");\n    }\n\n    /**\n     *  Creates a new random HDNode.\n     */\n    static createRandom(password?: string, path?: string, wordlist?: Wordlist): HDNodeWallet {\n        if (password == null) { password = \"\"; }\n        if (path == null) { path = defaultPath; }\n        if (wordlist == null) { wordlist = LangEn.wordlist(); }\n        const mnemonic = Mnemonic.fromEntropy(randomBytes(16), password, wordlist)\n        return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path);\n    }\n\n    /**\n     *  Create an HD Node from %%mnemonic%%.\n     */\n    static fromMnemonic(mnemonic: Mnemonic, path?: string): HDNodeWallet {\n        if (!path) { path = defaultPath; }\n        return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path);\n    }\n\n    /**\n     *  Creates an HD Node from a mnemonic %%phrase%%.\n     */\n    static fromPhrase(phrase: string, password?: string, path?: string, wordlist?: Wordlist): HDNodeWallet {\n        if (password == null) { password = \"\"; }\n        if (path == null) { path = defaultPath; }\n        if (wordlist == null) { wordlist = LangEn.wordlist(); }\n        const mnemonic = Mnemonic.fromPhrase(phrase, password, wordlist)\n        return HDNodeWallet.#fromSeed(mnemonic.computeSeed(), mnemonic).derivePath(path);\n    }\n\n    /**\n     *  Creates an HD Node from a %%seed%%.\n     */\n    static fromSeed(seed: BytesLike): HDNodeWallet {\n        return HDNodeWallet.#fromSeed(seed, null);\n    }\n}\n\n/**\n *  A **HDNodeVoidWallet** cannot sign, but provides access to\n *  the children nodes of a [[link-bip-32]] HD wallet addresses.\n *\n *  The can be created by using an extended ``xpub`` key to\n *  [[HDNodeWallet_fromExtendedKey]] or by \n *  [nuetering](HDNodeWallet-neuter) a [[HDNodeWallet]].\n */\nexport class HDNodeVoidWallet extends VoidSigner {\n    /**\n     *  The compressed public key.\n     */\n    readonly publicKey!: string;\n\n    /**\n     *  The fingerprint.\n     *\n     *  A fingerprint allows quick qay to detect parent and child nodes,\n     *  but developers should be prepared to deal with collisions as it\n     *  is only 4 bytes.\n     */\n    readonly fingerprint!: string;\n\n    /**\n     *  The parent node fingerprint.\n     */\n    readonly parentFingerprint!: string;\n\n    /**\n     *  The chaincode, which is effectively a public key used\n     *  to derive children.\n     */\n    readonly chainCode!: string;\n\n    /**\n     *  The derivation path of this wallet.\n     *\n     *  Since extended keys do not provider full path details, this\n     *  may be ``null``, if instantiated from a source that does not\n     *  enocde it.\n     */\n    readonly path!: null | string;\n\n    /**\n     *  The child index of this wallet. Values over ``2 *\\* 31`` indicate\n     *  the node is hardened.\n     */\n    readonly index!: number;\n\n    /**\n     *  The depth of this wallet, which is the number of components\n     *  in its path.\n     */\n    readonly depth!: number;\n\n    /**\n     *  @private\n     */\n    constructor(guard: any, address: string, publicKey: string, parentFingerprint: string, chainCode: string, path: null | string, index: number, depth: number, provider: null | Provider) {\n        super(address, provider);\n        assertPrivate(guard, _guard, \"HDNodeVoidWallet\");\n\n        defineProperties<HDNodeVoidWallet>(this, { publicKey });\n\n        const fingerprint = dataSlice(ripemd160(sha256(publicKey)), 0, 4);\n        defineProperties<HDNodeVoidWallet>(this, {\n            publicKey, fingerprint, parentFingerprint, chainCode, path, index, depth\n        });\n    }\n\n    connect(provider: null | Provider): HDNodeVoidWallet {\n        return new HDNodeVoidWallet(_guard, this.address, this.publicKey,\n            this.parentFingerprint, this.chainCode, this.path, this.index, this.depth, provider);\n    }\n\n    /**\n     *  The extended key.\n     *\n     *  This key will begin with the prefix ``xpub`` and can be used to\n     *  reconstruct this neutered key to derive its children addresses.\n     */\n    get extendedKey(): string {\n        // We only support the mainnet values for now, but if anyone needs\n        // testnet values, let me know. I believe current sentiment is that\n        // we should always use mainnet, and use BIP-44 to derive the network\n        //   - Mainnet: public=0x0488B21E, private=0x0488ADE4\n        //   - Testnet: public=0x043587CF, private=0x04358394\n\n        assert(this.depth < 256, \"Depth too deep\", \"UNSUPPORTED_OPERATION\", { operation: \"extendedKey\" });\n\n        return encodeBase58Check(concat([\n            \"0x0488B21E\",\n            zpad(this.depth, 1),\n            this.parentFingerprint,\n            zpad(this.index, 4),\n            this.chainCode,\n            this.publicKey,\n        ]));\n    }\n\n    /**\n     *  Returns true if this wallet has a path, providing a Type Guard\n     *  that the path is non-null.\n     */\n    hasPath(): this is { path: string } { return (this.path != null); }\n\n    /**\n     *  Return the child for %%index%%.\n     */\n    deriveChild(_index: Numeric): HDNodeVoidWallet {\n        const index = getNumber(_index, \"index\");\n        assertArgument(index <= 0xffffffff, \"invalid index\", \"index\", index);\n\n        // Base path\n        let path = this.path;\n        if (path) {\n            path += \"/\" + (index & ~HardenedBit);\n            if (index & HardenedBit) { path += \"'\"; }\n        }\n\n        const { IR, IL } = ser_I(index, this.chainCode, this.publicKey, null);\n        const Ki = SigningKey.addPoints(IL, this.publicKey, true);\n\n        const address = computeAddress(Ki);\n\n        return new HDNodeVoidWallet(_guard, address, Ki, this.fingerprint, hexlify(IR),\n            path, index, this.depth + 1, this.provider);\n\n    }\n\n    /**\n     *  Return the signer for %%path%% from this node.\n     */\n    derivePath(path: string): HDNodeVoidWallet {\n        return derivePath<HDNodeVoidWallet>(this, path);\n    }\n}\n\n/*\nexport class HDNodeWalletManager {\n    #root: HDNodeWallet;\n\n    constructor(phrase: string, password?: null | string, path?: null | string, locale?: null | Wordlist) {\n        if (password == null) { password = \"\"; }\n        if (path == null) { path = \"m/44'/60'/0'/0\"; }\n        if (locale == null) { locale = LangEn.wordlist(); }\n        this.#root = HDNodeWallet.fromPhrase(phrase, password, path, locale);\n    }\n\n    getSigner(index?: number): HDNodeWallet {\n        return this.#root.deriveChild((index == null) ? 0: index);\n    }\n}\n*/\n\n/**\n *  Returns the [[link-bip-32]] path for the account at %%index%%.\n *\n *  This is the pattern used by wallets like Ledger.\n *\n *  There is also an [alternate pattern](getIndexedAccountPath) used by\n *  some software.\n */\nexport function getAccountPath(_index: Numeric): string {\n    const index = getNumber(_index, \"index\");\n    assertArgument(index >= 0 && index < HardenedBit, \"invalid account index\", \"index\", index);\n    return `m/44'/60'/${ index }'/0/0`;\n}\n\n/**\n *  Returns the path using an alternative pattern for deriving accounts,\n *  at %%index%%.\n *\n *  This derivation path uses the //index// component rather than the\n *  //account// component to derive sequential accounts.\n *\n *  This is the pattern used by wallets like MetaMask.\n */\nexport function getIndexedAccountPath(_index: Numeric): string {\n    const index = getNumber(_index, \"index\");\n    assertArgument(index >= 0 && index < HardenedBit, \"invalid account index\", \"index\", index);\n    return `m/44'/60'/0'/0/${ index}`;\n}\n\n", "/**\n *  @_subsection: api/wallet:JSON Wallets  [json-wallets]\n */\n\nimport { CBC, pkcs7Strip } from \"aes-js\";\n\nimport { getAddress } from \"../address/index.js\";\nimport { pbkdf2 } from \"../crypto/index.js\";\nimport { id } from \"../hash/index.js\";\nimport { getBytes, assertArgument } from \"../utils/index.js\";\n\nimport { getPassword, looseArrayify, spelunk } from \"./utils.js\";\n\n\n/**\n *  The data stored within a JSON Crowdsale wallet is fairly\n *  minimal.\n */\nexport type CrowdsaleAccount = {\n    privateKey: string;\n    address: string;\n}\n\n/**\n *  Returns true if %%json%% is a valid JSON Crowdsale wallet.\n */\nexport function isCrowdsaleJson(json: string): boolean {\n    try {\n        const data = JSON.parse(json);\n        if (data.encseed) { return true; }\n    } catch (error) { }\n    return false;\n}\n\n// See: https://github.com/ethereum/pyethsaletool\n\n/**\n *  Before Ethereum launched, it was necessary to create a wallet\n *  format for backers to use, which would be used to receive ether\n *  as a reward for contributing to the project.\n *\n *  The [[link-crowdsale]] format is now obsolete, but it is still\n *  useful to support and the additional code is fairly trivial as\n *  all the primitives required are used through core portions of\n *  the library.\n */\nexport function decryptCrowdsaleJson(json: string, _password: string | Uint8Array): CrowdsaleAccount {\n    const data = JSON.parse(json);\n    const password = getPassword(_password);\n\n    // Ethereum Address\n    const address = getAddress(spelunk(data, \"ethaddr:string!\"));\n\n    // Encrypted Seed\n    const encseed = looseArrayify(spelunk(data, \"encseed:string!\"));\n    assertArgument(encseed && (encseed.length % 16) === 0, \"invalid encseed\", \"json\", json);\n\n    const key = getBytes(pbkdf2(password, password, 2000, 32, \"sha256\")).slice(0, 16);\n\n    const iv = encseed.slice(0, 16);\n    const encryptedSeed = encseed.slice(16);\n\n    // Decrypt the seed\n    const aesCbc = new CBC(key, iv);\n    const seed = pkcs7Strip(getBytes(aesCbc.decrypt(encryptedSeed)));\n\n    // This wallet format is weird... Convert the binary encoded hex to a string.\n    let seedHex = \"\";\n    for (let i = 0; i < seed.length; i++) {\n        seedHex += String.fromCharCode(seed[i]);\n    }\n\n    return { address, privateKey: id(seedHex) };\n}\n", "import { SigningKey } from \"../crypto/index.js\";\nimport { assertArgument } from \"../utils/index.js\";\n\nimport { BaseWallet } from \"./base-wallet.js\";\nimport { HDNodeWallet } from \"./hdwallet.js\";\nimport { decryptCrowdsaleJson, isCrowdsaleJson  } from \"./json-crowdsale.js\";\nimport {\n    decryptKeystoreJson, decryptKeystoreJsonSync,\n    encryptKeystoreJson, encryptKeystoreJsonSync,\n    isKeystoreJson\n} from \"./json-keystore.js\";\nimport { Mnemonic } from \"./mnemonic.js\";\n\nimport type { ProgressCallback } from \"../crypto/index.js\";\nimport type { Provider } from \"../providers/index.js\";\n\nimport type { CrowdsaleAccount } from \"./json-crowdsale.js\";\nimport type { KeystoreAccount } from \"./json-keystore.js\";\n\n\nfunction stall(duration: number): Promise<void> {\n    return new Promise((resolve) => { setTimeout(() => { resolve(); }, duration); });\n}\n\n/**\n *  A **Wallet** manages a single private key which is used to sign\n *  transactions, messages and other common payloads.\n *\n *  This class is generally the main entry point for developers\n *  that wish to use a private key directly, as it can create\n *  instances from a large variety of common sources, including\n *  raw private key, [[link-bip-39]] mnemonics and encrypte JSON\n *  wallets.\n */\nexport class Wallet extends BaseWallet {\n\n    /**\n     *  Create a new wallet for the private %%key%%, optionally connected\n     *  to %%provider%%.\n     */\n    constructor(key: string | SigningKey, provider?: null | Provider) {\n        if (typeof(key) === \"string\" && !key.startsWith(\"0x\")) {\n            key = \"0x\" + key;\n        }\n\n        let signingKey = (typeof(key) === \"string\") ? new SigningKey(key): key;\n        super(signingKey, provider);\n    }\n\n    connect(provider: null | Provider): Wallet {\n        return new Wallet(this.signingKey, provider);\n    }\n\n    /**\n     *  Resolves to a [JSON Keystore Wallet](json-wallets) encrypted with\n     *  %%password%%.\n     *\n     *  If %%progressCallback%% is specified, it will receive periodic\n     *  updates as the encryption process progreses.\n     */\n    async encrypt(password: Uint8Array | string, progressCallback?: ProgressCallback): Promise<string> {\n        const account = { address: this.address, privateKey: this.privateKey };\n        return await encryptKeystoreJson(account, password, { progressCallback });\n    }\n\n    /**\n     *  Returns a [JSON Keystore Wallet](json-wallets) encryped with\n     *  %%password%%.\n     *\n     *  It is preferred to use the [async version](encrypt) instead,\n     *  which allows a [[ProgressCallback]] to keep the user informed.\n     *\n     *  This method will block the event loop (freezing all UI) until\n     *  it is complete, which may be a non-trivial duration.\n     */\n    encryptSync(password: Uint8Array | string): string {\n        const account = { address: this.address, privateKey: this.privateKey };\n        return encryptKeystoreJsonSync(account, password);\n    }\n\n    static #fromAccount(account: null | CrowdsaleAccount | KeystoreAccount): HDNodeWallet | Wallet {\n        assertArgument(account, \"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n\n        if (\"mnemonic\" in account && account.mnemonic && account.mnemonic.locale === \"en\") {\n            const mnemonic = Mnemonic.fromEntropy(account.mnemonic.entropy);\n            const wallet = HDNodeWallet.fromMnemonic(mnemonic, account.mnemonic.path);\n            if (wallet.address === account.address && wallet.privateKey === account.privateKey) {\n                return wallet;\n            }\n            console.log(\"WARNING: JSON mismatch address/privateKey != mnemonic; fallback onto private key\");\n        }\n\n        const wallet = new Wallet(account.privateKey);\n\n        assertArgument(wallet.address === account.address,\n            \"address/privateKey mismatch\", \"json\", \"[ REDACTED ]\");\n\n        return wallet;\n    }\n\n    /**\n     *  Creates (asynchronously) a **Wallet** by decrypting the %%json%%\n     *  with %%password%%.\n     *\n     *  If %%progress%% is provided, it is called periodically during\n     *  decryption so that any UI can be updated.\n     */\n    static async fromEncryptedJson(json: string, password: Uint8Array | string, progress?: ProgressCallback): Promise<HDNodeWallet | Wallet> {\n        let account: null | CrowdsaleAccount | KeystoreAccount = null;\n        if (isKeystoreJson(json)) {\n            account = await decryptKeystoreJson(json, password, progress);\n\n        } else if (isCrowdsaleJson(json)) {\n            if (progress) { progress(0); await stall(0); }\n            account = decryptCrowdsaleJson(json, password);\n            if (progress) { progress(1); await stall(0); }\n\n        }\n\n        return Wallet.#fromAccount(account);\n    }\n\n    /**\n     *  Creates a **Wallet** by decrypting the %%json%% with %%password%%.\n     *\n     *  The [[fromEncryptedJson]] method is preferred, as this method\n     *  will lock up and freeze the UI during decryption, which may take\n     *  some time.\n     */\n    static fromEncryptedJsonSync(json: string, password: Uint8Array | string): HDNodeWallet | Wallet {\n        let account: null | CrowdsaleAccount | KeystoreAccount = null;\n        if (isKeystoreJson(json)) {\n            account = decryptKeystoreJsonSync(json, password);\n        } else if (isCrowdsaleJson(json)) {\n            account = decryptCrowdsaleJson(json, password);\n        } else {\n            assertArgument(false, \"invalid JSON wallet\", \"json\", \"[ REDACTED ]\");\n        }\n\n        return Wallet.#fromAccount(account);\n    }\n\n    /**\n     *  Creates a new random [[HDNodeWallet]] using the available\n     *  [cryptographic random source](randomBytes).\n     *\n     *  If there is no crytographic random source, this will throw.\n     */\n    static createRandom(provider?: null | Provider): HDNodeWallet {\n        const wallet = HDNodeWallet.createRandom();\n        if (provider) { return wallet.connect(provider); }\n        return wallet;\n    }\n\n    /**\n     *  Creates a [[HDNodeWallet]] for %%phrase%%.\n     */\n    static fromPhrase(phrase: string, provider?: Provider): HDNodeWallet {\n        const wallet = HDNodeWallet.fromPhrase(phrase);\n        if (provider) { return wallet.connect(provider); }\n        return wallet;\n    }\n}\n", "const Base64 = \")!@#$%^&*(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_\";\n\n/**\n *  @_ignore\n */\nexport function decodeBits(width: number, data: string): Array<number> {\n    const maxValue = (1 << width) - 1;\n    const result: Array<number> = [ ];\n    let accum = 0, bits = 0, flood = 0;\n    for (let i = 0; i < data.length; i++) {\n\n        // Accumulate 6 bits of data\n        accum = ((accum << 6) | Base64.indexOf(data[i]));\n        bits += 6;\n\n        // While we have enough for a word...\n        while (bits >= width) {\n            // ...read the word\n            const value = (accum >> (bits - width));\n            accum &= (1 << (bits - width)) - 1;\n            bits -= width;\n\n            // A value of 0 indicates we exceeded maxValue, it\n            // floods over into the next value\n            if (value === 0) {\n                flood += maxValue;\n            } else {\n                result.push(value + flood);\n                flood = 0;\n            }\n        }\n    }\n\n    return result;\n}\n", "import { assertArgument } from \"../utils/index.js\";\n\nimport { decodeBits } from \"./bit-reader.js\";\nimport { decodeOwl } from \"./decode-owl.js\";\n\n/**\n *  @_ignore\n */\nexport function decodeOwlA(data: string, accents: string): Array<string> {\n    let words = decodeOwl(data).join(\",\");\n\n    // Inject the accents\n    accents.split(/,/g).forEach((accent) => {\n\n        const match = accent.match(/^([a-z]*)([0-9]+)([0-9])(.*)$/);\n        assertArgument(match !== null, \"internal error parsing accents\", \"accents\", accents);\n\n        let posOffset = 0;\n        const positions = decodeBits(parseInt(match[3]), match[4]);\n        const charCode = parseInt(match[2]);\n        const regex = new RegExp(`([${ match[1] }])`, \"g\");\n        words = words.replace(regex, (all, letter) => {\n            const rem = --positions[posOffset];\n            if (rem === 0) {\n                letter = String.fromCharCode(letter.charCodeAt(0), charCode);\n                posOffset++;\n            }\n            return letter;\n        });\n    });\n\n    return words.split(\",\");\n}\n", "\nimport { WordlistOwl } from \"./wordlist-owl.js\";\nimport { decodeOwlA } from \"./decode-owla.js\";\n\n/**\n *  An OWL-A format Wordlist extends the OWL format to add an\n *  overlay onto an OWL format Wordlist to support diacritic\n *  marks.\n *\n *  This class is generally not useful to most developers as\n *  it is used mainly internally to keep Wordlists for languages\n *  based on latin-1 small.\n *\n *  If necessary, there are tools within the ``generation/`` folder\n *  to create the necessary data.\n */\nexport class WordlistOwlA extends WordlistOwl {\n    #accent: string;\n\n\n    /**\n     *  Creates a new Wordlist for %%locale%% using the OWLA %%data%%\n     *  and %%accent%% data and validated against the %%checksum%%.\n     */\n    constructor(locale: string, data: string, accent: string, checksum: string) {\n        super(locale, data, checksum);\n        this.#accent = accent;\n    }\n\n    /**\n     *  The OWLA-encoded accent data.\n     */\n    get _accent(): string { return this.#accent; }\n\n    /**\n     *  Decode all the words for the wordlist.\n     */\n    _decodeWords(): Array<string> {\n        return decodeOwlA(this._data, this._accent);\n    }\n}\n", "import { WordlistOwl } from \"./wordlist-owl.js\";\n\nconst words = \"0itatkastcenaovo$taouleraeki&chor*teci%enbalodaeladet'!Chn=0Di#%E%^1Resa2Rese3CeT'#0EjKohol0Pu)%0A&sDul#Ekdo)Ke)Ti#Ul|3}aOgan%0FaltI$@tPi,%TmaTronom0LasL{i#Ol0Tobus4Yl:B#}<CilCul#D!_Ge)GrHnoKterieLa^L{#LkonLon-LvanLzaMbusNkom!R[rR{RmanRokoRvaTer#TohVl&Zal#Zili#Zu#3D&RanSe^StieTonZin#ZmocZ)k3CyklD]Ft-KinyLan%Og,fO]gTvaZon2AhobytAt*/E/aEdu+EskIk!Iz&Ok|Oud Ud2B-BrDl.D~H!(JkotJ|K<ysLe$R>R'?TaUb_U/!U^U+Ur!Xer2A^v#Ambo,An#AtrEp)Ike)KoLohOnzOskevUn{#Usin#Z^Zy2Bl.Bn|})D _D#D'aF{Jar(Kv?LdokLvaN^NkrRzaTikVolZola3D+tL.T'#0Ukot:PartRev&3DrDu+J/JnLaLerLkemLn?N.Nn(N'#NtrumNz<StopisT#2AlupaAp`]Ar aA)E/t!EmieI/otIrurgL`Le[Lub M_Mu,ObotO/olOd[O+,Om=Op Oro[OvRapotRl RtRupTiv(Ud.Utn!V!Vil#V(Y[Y$!Yt 0Bu+Gare)H_&HlaNkotRkusSter&Ta%TrusZin>Z(2O&2KolivUv!4It_N(0Dn(Ke)KrPot0Ak~AlIkRkot2Kli$a:L-oRe[T_Tum1E,1B!a}'#Cib_Fic Fla%KlKr{Mokr!PreseRbyS#T-tiv3Kob,zKt|O^P]mSkSp+jV`]Vo/2AhaOuhoUhopis1Es0BroByt-C@t}ut DnesH+dHo^H,JemJn?Kl`KolaKt<Kum@tLarLevaL.MaM.ntMluv M'Nut P`PisPln PosudPr'odPu$ Raz R(RtSahSl'St!-SudSy)TazT-Tk~Uf!Utn!Voz%Z`uZn!Z<%2Aho)AkAm!ikAv>AzeDolObn(OgerieOzdSn(T Z(2B@}'noD-HaH'#S SnoT(0Oj?Or>2Nam :9O]gOnomie0EktronIpsa0AilIseO%P!ie2Izo^O/aOpejOs2EjEn%K<)Kymo0Ike)0F<ie0Olu%1Eku%KurzePed?P]zeP<tT,kt:C#Jf#Kul)N!ikN)zieRmacieV< Zo+3De,%J{onN#3Al#Gu,ntLozofLtrNan%N)Xa%0Ord1An_IrtOtila2NdSf<T[lT#Ton2Ak%Es#On)2KarNk%3Zi#:LejeRant3N{i#O]g3Lot.2Azu,Ejt2LemLfi$aTi#2AfAmofonAnu+EpIlOgOtes#2Ma:D?DrLaL@#N[NopisRfaRpu&V,n3Bk(J#lJnoJtmanK)rLmaM!omR>R&S]Zky3St<ik2Ad'#AsivkyAvaEd!EnO^v>OhOup(T!Ub.U/o)0AtO)Yz0IsOjivoOut0Bl.Boj}DinyDl!Dno)D|Jn(KejLin#L#LubMo+N [No,%RalR^RizontRkoRliv>RmonRn.RoskopR$voSpo^St.T'(U[UfUp!Us#V<2Ad[An?Av(Az^Bo+kD.D]D(N-Ob#Oma^OtOu^Oz@St#Ub(Yz!2B@(B~D[KotMrS aSto)0Ozd2Bn(D,ntGie&M&Sterik:2Yl#3Ned2O&0Uze0Un a0F-%Fla%KasoOva%Sp-%Tern{Vali^Ve$<Zer%3Onie:Blko})Ho^Kmi+K(L'>N)rRmarkRoSanSnoT#V<Zyk3Din>D+Dn!_HlanKotL@L oMn(NomP?S{erV Zd>Zero3NakNdyNo/Sk,Sto)Trn?Zva3En|1Gurt5R):Bar{B_Bin{}&D{Did]HanJakJu)KaoKtusLam aLhotyLibrLn(Me,MkolivM&Ni[lNoeNt<Pal.P_aP olaP#P+Po)PrPu$aPy[,Ram_Rot#RtonSaTa]gTed,U%UzaVa+cZaj#Ze)Ziv(2EkolivEsi0Dlub@MpRami#3No2A%kAdivoAmApotAsi#AunEcEn[Ep!Es~IdImaIs&Ob*kO#nOpaOubUb'&Us!Uzk(0EnIt!Otr0IhaOt0Al?Ber>B#BlihaBylaC*rH=J@>KosKtejlLapsLe^LizeLoMandoMe)MikMn!aMo,MpasMun aN!N%ptNd?N>NfeseNgresN.NkursN)ktNzervaPan>PieP~Pr'#Rb_R-t<Rmid]RoptevRpusRu&RytoRz{S!>St#T_T+)T*lUk!Up_&Us-Uz]VbojZaZ<oh2Ab?A/Aj.Al|AsopisAv!aEd EjcarEs[Eve)Ik{ItikIzeKav>Me+cMivoOcanOkOni#Op OupaOv#T-Uh`]Up?Ut(Vin#Y/+Yp)Y$alYt2Dlan#FrJn(KlaLaj^Li/L#Lom{Ltu,NaPodivuRtRz<Til0Al aAsin#E$<2No]gS_.Ta,T?T#T'>V`]:B,d<})nDn(IkKom>M_aMpaN'#S?SoStu,Tin#V.3B#CkdyD@Dn?D'#Dv.G@^GieG,%H%Hk(H~KtvarNo/odNtil#P@#Pid]T`]T>TmoTokruhVhartV a%Vobok3B,}ot#DojedDsk(H'.Jav>L-M{#NieN#No+umStop`T.T|5Bi$aDivodGi#GopedKal aK{Mc|P!aPu/RdSosTrU^lUhU#Usk!V>3Tiv(1Cer&CiferMpSkSt,%0I%2RaRi#S.:DamD]Gi$rHagonJ{-J _J< aKakK'?Kr_aL[L.L|Lv?Min#Nd+NkoRn(SakrSkotSopu$T?Tri#Tur aZan>ZivoZl Zur#2Lo[0}anikD a%D'.LasaL*nNtol#TlaTo^TrZe,3G,%H~Hu+K.KrofonL@>Lim{rL(Mi#Nc'&Ni[rNom{Nul(S#StrX|2Ad(HaH'.OkS!Uv 1I/Ohem0BilCn(D_#Dl [HylaKroL-ulaM@t#Nar/aNoklN$rumNt|NzunSazSkytStTiva%T<#Ty#U/aUdr(Zai#Z-Zol2Am<Av@>KevTvolaZ{Zut(0T _1DrcF]nL!MieN?S{Ta%ZeumZi#nt3Sliv>0Da:B*r!}yt!Da%Dbyt-DhozDobroDpisHlasHn!Hodi+H,d Iv aJedn*Ji$oJm=K]n Kon>Krm LevoMaz!Mluv Nom{rOkoOpakO$roP`!PevnoPln P~Pos+dPr(oRod RubyRy/]S` S-!S+poSt!TolikV@-Vr/Vzd<yZv!3Be}!CkyDa+koDb!DuhGa%H{Ho^J@JprveKlidLib(Mil(MocO/o)On#PokojR(RvSmyslS*l`Tv<UronV.Zvyk+3Co)JakKamKdyKlKte,kTro5C+hHav?M.%RaR-S _Sn(UzeVinyVo)Zd,5DaD+G{T Tn(Trie3Mfa:0AlArv AvaDivEcEhn!Ejm=Ez aHajo[Iln?Jasn J-tK]p La$L-Li[LohaLu^NosOh! Oj-OutRaz>R&Ru[RysSahSluhaS)r!UvVazVin VodVyk+Yv!_Z<0AsElEn Hl` Ho)H,&It~0BojByt}odCiz Ebr!Esl!Evzd!EzvaH`%Hod J{JinudKazK*p LivLu#Ml#Oln(P`PisPl=P<Pu$ Pyk!Raz#S*d StupSunTokTudVahaVe)Vol!V,%tZ&k1I&Sajd1LasNiskoRa^Roz Ryz-2ApEn?Li#NoOuzl OvyRasaResRs-RuhUpantUr#Us 0Ejn.Iz|0AkE+)Ez L`.L*v!LuvaYl0Ehdy1Ak|As-E,%I%Il(Is|O,Oz?RavduRoti1B al}e$rGieL?LojT_0A^}~I#IvoLavaLep Ln L' N'aO[Ol Pa+cT@T,haTu^Ty/Voj 0Epl IskOpRh!Rl(RokRubyV<1A~ArEsLivn O%1Id1Do[:}!_Ci@tD*/H<-KtLan^L>LivoLu[Mf+tMls-N@#Ni#N&N|N$voNtof+Pri#Rke)RodieR)Ru#Ry[Se#Siv aSt_#T@tTro&V*kZnehtZ*r-3C#DagogJs-K]LotonNal)Ndr-NzeRiskopRoStr(Tar^T?Tro+jVn.Xeso3Ani$aHaJav?K+KnikL.Ln(Lul#Nze)Pe)S!_Sto+Tev&Vn?V'ar2A%n)Ak!Am@Ane)A$i#At Avid]AzE/Em@oEn)EsEtivoEv_Iv!N NoO/aOd.Om[OutUkYn2Bav Byt}odC Ctiv>D!D%n Deps!Dh+dDiv Dkl`Dman DnikDo[Dpo,D,zD$!aDvodDzimEzieHan#Hnut#H'<HromaHybIn)Ji$#Jm=Kaz K+sKojKrokKu)KynLedneLib-Lk~LohaLynomMaluMi~Ml#MocM$aMys+tNe/!N<#Nur(P`!P_Pis-Pla/Pros Ps!PudR`%R%RodRu/aRyvS` SedSilaSkokSlan>S*d SpoluS)vaSud-SypTahT#nT+skTom-T,vaTupaTvo,U#zUtoUzdroVahaVidlaVlakVozVr/V$!VykVzde/Zd,vZem-Zn!-Z<Zv!2Ac|Ah<yAkti#A+sAot>Ap<-AseAv^IncipKnoObud O%ntoOdejOfeseOh,Oj-tO]m Omi+Onik!Op`OrokOs[OtonOut-OvazS#v#St@Udk(UtV-Voh<y0An>OvodTruh0Actvo0Ber)}DlKav>Kl.Kr+LtMpaNcP@SaSin#St.T|Ty#3Rami^SkT_::C-}otDia%Dn?DonFtGbyKe)K'.M@oMp*/NdeRa/R aS'&StrTo+$Zan%Zid]3Ag|Ak%CeptDakt<Fer@tF+xJnokKlamaK<dKrutKt<Pu)%VizeVmaVolverZerva3Sk|Ziko5Boti#Dokm@H'#K+KokoMan{oP'odPu/aRejsSolStl.Tmi$rTopedTun^Ub@#U/oUpU,V.Vn?Zb<Z/odZd!Zezn!Zhod%Zin#ZjezdZ#zZ]haZmarZp`Zru/ZsahZtokZumZvod5Bri#}`]Kav?Kopis3BaBol'}l(D]P`]T.Z(:Di$aH!KoM>Mizd!Mo)N #Rdin#San#T_ Z[Z@?0Or0H|1B,n#CeseD`]Dim@tD]Hn!Jm=Ke,K)Kun^KvojeM@oNoRvisS` Sho,SkokSl!St,SuvSyp!T[T.Tk!T~Trv!VerZ&m2O^R~0FonLn?R#Rot-RupTua%1AfandrAliskoAnz@AutEptikIcaL`[L@?LoLuzO[O#nOroRip)RzUp.V(Vr&0Abi#Adid]An.A$Avn(Ed|Ep>EvaEz.IbI&Izn?OnOup-OvoU/UhaUn%Up#Za0A,gdE)&Il$voL*vaOgR`RkRt#Ut-Ysl0AdAhaOb0Bo)}aD'#KolP#TvaUbojUc Ud%UhlasUl`Um,kUp,vaUsedUtokUvis{0Al'&As _IsLavOd-Oj@>OluOnz<Orn(Ou$aR/aU$ 1An^AzD%NaN>Ovn!P@StUb1An?Ar(aAti#Av[EhnoEz#OdolaO+kOpaOrnoOup!Ra/ResRh~RomRu&Ud&Upn?VolYk0Bj-tBtropy}arD(KnoNd!N=Rik!aR'.0AhAl$voEtrAt[Az-Is+It-Obo^Odid]Or#Rab2Kav#KotN-N'>P!Pk(R'(S_T(:B+t#Bu+H*nJemnoJfunJgaJ Jn(Kti#Mh+MponNc|N>NkerPe)V@.Z!_3}ni#HdyKut.LefonMno)Nd@%Ni$aN<P])P&PrveRapieRmos#Xtil3}oSkopisTu+k1Ad+cAn.0Ap#Esk!UkotUpa0El1A+)Pin#PolRzoUhaU+c2Ad?Akt<AmpAsaAverzaEf E$Ez<Hav.Hl.O/uOj?Os#Ou[P%P _Pk(Ub>U/l Uhl?UsV!2DyH~H(Nd,Ri$aR&jZemsko0ArohOr[Rd(Rz2GrKev:0Oh(OzeR!R*s-RusYt'&0HoTiv(0Iv 3R` 1Edn!I$ M=0Az!_Lidn Lon Otv Roj 0I%I)Ov 0Yv`]0Av If<maIk~1Ad~L!n Ly~Out!Rav 1AnAz 0Ed~Il|Mrt N`n N=Oud Tl!Tr~0Ah|K!Lum O~Op@>R*s 1Al Oln Oz'#3D,v ElEn.L.N!:GonL/aL*nNaN^lNil#RanRhanyR|1ElkuHod0Ova0DroGe)%J%Lbl*dL{rhL _LmocLry[Nk'Ran^RzeS_#SkrzeSn?SpoduS)Ter.Ver#3B,%}rDeoh,D.D+LaN?S{Tal aZeZ #0Ezd0L`Us0Aj#AkAs>EvoHk(IvN'#Oup!1Uc|Uk0DaDiv(Doz&kD$voJ@skyJ&JskoLantL[L LnoSk'#Zid]Z'&0Ravo1Ab>A%tAhA)Ba}o+kH!StvaTu+0Ad T*p Tup0Ip4Bav Br!}|D!D,Fot H+d!H~Hod H,d Hub Jasn J{Jm=K]p Kon!L-!Maz!Mez Miz{Mys+tNe/!Nik!Nut P`!Pl! P,v Pu$ Raz R'n!Rv!Sl' SokoS)v Su~Syp!Tas Tes!Tr! Vi~Vol!Vrh_Zdob Zn!0AduBud }op D<Du/Dy/!E$upH+demKazLyk!NikOr-P*,TahT-::993Lofon::Br!Byd+t}|DarmoDus F*k!Hlt Hod H,^Hy~J!>J{Ji$ K+p!K*p Lep Mez Mot!Mys+tNe/!Nik!Pl! Poj Ps!Raz S)v Su~Taj Temn Tk~Ujm=Val Ve+tVin Vol!Vrt!Zvon 0Av RusuUd|Yt-1A+#ArmaAtn(IvoOb RojVihYm`]0L@.ManM.Pt!Z`uZdola2At Lt~Lubo#Ot' Ru[0MaMn?0Emn 0Lam!Oum!R!#Umav#0AtoEh#O[OmO$Ozvyk0Ap|ArAt-IjeIz{Ocn Odr!Rzl.Ut|0AkAl(Am@!Ovu0B,z Tav Ub-Ufa+0Lod Omal RavaR( Rud#Rvu1A^An C`]N (NoOv&Y/l Zav(1I/aR! 0B'.Br0Ed~EnkuEs_aOnR!Uk'odYk\";\nconst checksum = \"0x25f44555f4af25b51a711136e1c7d6e50ce9f8917d39d6b1f076b2bb4d2fac1a\";\n\nlet wordlist: null | LangCz = null;\n\n/**\n *  The [[link-bip39-cz]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangCz extends WordlistOwl {\n\n    /**\n     *  Creates a new instance of the Czech language Wordlist.\n     *\n     *  Using the constructor should be unnecessary, instead use the\n     *  [[wordlist]] singleton method.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"cz\", words, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangCz``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangCz {\n        if (wordlist == null) { wordlist = new LangCz(); }\n        return wordlist;\n    }\n}\n", "import { WordlistOwlA } from \"./wordlist-owla.js\";\n\nconst words = \"0arertoiotadonoaRteirroenaNonaLsolocoiliaralaorrenadaChoN$n0A>Dom,EjaI!#Oga&O'Or#RazoR*Ue=U<0Ab Adem@Ce<C~Ei)ElgaEn#Ept I&L  NeOg!O<TivoToTrizTu Ud*U!&Us 0Ic#Mit*Opt Or'Ua`Ul#0Reo0Ect Ic~In Irm 0IlIt On@Os#Ot Reg R$UaU&U?aUja0OgoOr+0ReSl 0Ed_zE'Us)1Ac[nAmb_ArmaBaBumCaldeDeaEg_Ej Er%E%F?!GaGo&nIa&I,#Iv$MaMejaMib T TezaTivoToTu[Um'Z 0AbleAn)Apo]ArgoAs B Bi#E'IgoIs%dOrP oPl$0|oC@'C]D D,Em@Gu=Il=ImoIsOt T,aTiguoTojoUalUl Unc$Ad*EjoO1Ag A[#Eti#IoLic O&Or)OyoR,d!Rob Ues%U+1A&A`ArBit+BolBus#|ivoCoD!D?]DuoEaI&IesM.i-esOmaPaP.Reg=RozRugaTeTis%0AA&Al#C,<Egur EoE<rI,#I=Ist*NoOmb+P!oT?]T+Tu#Um*Un#0AjoAqueArEn#EoI>Le%OmoRa!RozUn0DazD$GeLaM,#S,)T^0AlAnceA+EEl]`E`EstruzI.I<2ErU{U'0Af[nArO)Uc Uf_Ul:BaB^|eH@IleJ Lanz/c.LdeMbuN>Nd-oRb(>RnizR+Scu]S#nSu[Tal]T!@T*Tu%UlZ 3BeBid/=S SoSt@3|oEnNgo2An>OqueUsa2ABi`BoCaCi`DaDegaIn//!oLsaMb-{dNi#N}saiRdeRr SqueTeTinVe{Zal2AvoAzoEchaEveIl=In>IsaOcaOmaOnceO)UjaUs>U#2CeoCleE'EyFan{F.HoIt_L#Rbuj(l(+Sc TacaZ.:Bal=BezaBi`B[CaoDav!D,aErFeI{ImanJaJ.LLam Lc$L&Li{dLleLm/^LvoMaMb$Mel=Mi'Mp}c!Nd?Nel-gu+Nic-#N-.ObaOsPazPi%nPo)Pt Puch((b.RcelRe%Rg(i'RneRpe%R+R%SaS>S!oSpaS#rT^ceT_U{lUsaZo3Bol]D!D+Ld/eb_Lo<Lu]M,#Niz-t+Rc(&Rez(oRr R)zaSpedT+2AcalAle>AmpuAnc]ApaAr]I>Is)IvoOqueOzaUle%Up 0Cl.EgoE=EnEr#F[G +M->NeN%P_sR>Rue]SneTaU{d2Am^AnA+AseAveI,)ImaInica2B_Cc~|i'Ci`CoDigoDoF_G!He)JinJoL/ch/eg$Lg Lin/l LmoLum`Mba)M!Mi{Mo&Mpr-deNej}g-oc!Nsej}t PaPi(az.Rba%RchoR&nR.(r!S!SmosS%2AneoAt!E Ec!Ei&EmaIaIm,Ip%IsisOmoOnicaOque%U&Uz2Ad+Ar#At+BoBr*| aEl=En#Er{Es%EvaId Lebr/p/#Mb_Mpl*N-e%O%P.Pul( R$<R<RvaTis:M-z(R&T?3B!B?Ca{C*DoF,saFin*J LfinLga&Li#M^-<N%lP^)RechoR+%Sayu'SeoSf?eSnu&Sti'Sv$TalleT,!U{3AAb=AdemaAman)A`Ar$BujoCt En)E%EzFic?G'Lem/u*N!oRec#Rig*S>Se'Sf[zVaVi'5BleCeL^Ming}N Ra&Rm*R<SSis2Ag.Oga2|aDaE=E'LceOQueR Rez(o:0A'R$0H OUa&r0AdIc~Ific$I#rUc 1Ec#Icaz3EEmp=1Efan)Eg*Em,#Ev IpseI)Ix*Og$Ud*0Bu&It*Oc~Pa)Pe'PleoP_sa0A'C go|ufeC@EmigoE+Fa&F!moGa'Igm/aceOrmeRe&SayoS, T!oTr VaseV$1Oca0Uipo0Izo0Ca]C,aCol Crib*Cu&Enc@F!aFu!zoPa{PejoP@PosaPumaQuiT TeTi=Tufa0ApaEr'Ic-@1Ad*Alu En#It 1Ac#Am,Ce<CusaEn#Ig*Il$Ist*I#P!#Plic P.!T_mo:BricaBu]|a{C?C#rE`J/d/=L<Lt MaM?@Mo<Ra.Rmaci(olRsaSeTigaU`V^X3Br!o|/izORi(ozRt?Rv^Stin3AbleAnzaArB[Cc~|aDeoEb_ElE[Es%Gu[J JoL/e)L@lLt+NNc-g*Ni#Rma2A>Au%EchaOrO%U*UjoU^2B@CaGa%G.L$Lle#N&Rm(+Rtun(z SaTo2Aca<Ag?AnjaAseAudeE*E'EsaIoI#U%2EgoEn)ErzaGaM Nc~Nd(g.R@S?TbolTu+:Ce]FasI%JoL/!i/=Mb- Nch}g-<RajeRzaSoli`St ToV?an3Me=M*NN!}$N)Ran$R,)Rm,S#3Gan)M`s$R Ro2Aci OboOr@2LLfoLo<LpeM(&R?([TaTeoZ 2A{Afi>A'AsaAtisAveIe%Il=IpeIsI#O<rUaUe<UmoUpo2An)ApoArd@Er[IaI'I.I<It [Sa'St :B!B?Bl C!|aD/l Mac(i`ZZa`3B?]B[|oLa&L$Mbr(*Rma'RoeRv*3E=Er+Ga&Gi,eJoM'S#r@5Ci>G Gu!aJaMb_Ng}^Nr((mig('St?Yo5E>ElgaEr%E<EvoI{IrMa'Me&M?deM}d*RacanR#:1O'0EalIomaO=2Lesi/uUal4EgalUs~0Ag,AnIt P P!$P.!Pul<0CapazDiceEr)FielF^meG,$Ic$M,<MuneNa#Sec#S%n)T!esTimoTu*Ut?Vi!'3AIsOn@0L/o):BaliB.M.RabeRdinR[U]Zmin3FeRinga3Ne)5R`d(obaV,Ya5ErgaEvesEzGa&rGoGue)Ic$N>Ngl-$Nt Pit!R S#V,?Zg :7Lo5A]:B$C$C[DoD+nG #GrimaGu`I>M!Mi`Mp --ch-gos%NzaPizRgoRvaStimaTaTexT*U_lV Zo3AlCc~|eC#rErG~Gumb_Ja'Ngu-#NaOnOp &S~TalT[VeY,{3B!%dB+C^D!Di EnzoGaG!oMaMi)M.Mp$NceN&Ne-go)N}t!`Qui&SoS%T!aT$T+2AgaAmaAn#AveEg En Ev Or Ov!Uv@2BoC~CoCu[GicaG+MbrizM}jaTe5|aC*G J}-esPaSt+ToZ:Ce%|oD!aD_Du+Est+F@G@GoIzL{dLe%Ll/oMaMboMutN>N&Nej Ng-iquiNj N}<N%Na`PaQuin(R>Re(f?Rg,Ri&RmolR+nR)sRzoSaSc aSivoT T!@TizTrizXimoY^Z^ca3|aDal]D$Du]J?]J^L,/.M^i-^NsajeN)NuRca&R,gueRi#SS.TaT!To&T+Zc]3E&ElEmb+G/Lag+Lit Ll.M}-!}im}u#OpeR SaS!@S?SmoTadTo5|?aC~DaDe=HoJ LdeL!Li'M,#Mi- c-ed-j-#NoRad(d!Re'R*R+Rs(%lScaStr TivoV!V?Zo5|oD EbleE]Er)Est[G_J!L/e%L%N&Nec(alRoScu=SeoSgoSicaS=:C C~D IpeRanj(izRr SalTalTivoTu[lUseaValVeVi{d3C$Ct G Goc$G+OnRv$ToUt+V V!a3|oDoEb]E#NezNoTi&Vel5Bleza|eMin(i(m()TaTic@Va#Ve]V$5BeCaCleoD?=DoE[EveEzLoM!oTr@:Sis0E<IspoJe#R(!oS!v T,!V$0AA<Ea'H,%HoIoReTavoTub_Ul#Up Urr*0I IoIsea0S)0EnsaEr%Ic$Rec!0Ro1DoR0O1AEa{Fa#IvoLaMoOrVi&0Bligo0DaZa1A>C~E[In On!T TicaUes#1Ac~A&rAlBi%CaD,EjaGa'G@Gul=I,)Ig,Il]OQues%Uga0Ad@Cu+Ez'OT[0O'Ro1EjaU=1I&Ige'0En)0O':C#D_El]Gi`GoIsJ oLabr/>Le%Li&Lm/om/p NNalNi>Nt!-ue=PaPelP?]Que)R Rcel(edR*RoRpa&RqueR[foR)S SeoS~SoS%TaT$Tr@UsaU%VoYa<3A#nCa&C!a|oDalD*G IneL L{'Le/ig+LlejoLoLuc--s N.OnOrPi'Que'R(ch(d!Rez(f?Ri>Rl(mi<R+Rs.aSaScaSimoS%`Ta=T+leoZZu`3C |.EEd[Er`EzaJam/ Lo#Mi,%N}#rNz-aOjoP(a%S Sci`SoS%T.Zca2AcaAnA%AyaAzaEi#E'OmoUmaU[l2B_CoD!D$EmaEs@E%L,Lici/=LvoMa{Me=MoMp-!Rc~R%lSa{Se!SibleS)T,c@T+Zo2A&E>zEgun%Em$EnsaE<Ev$ImoIncipeIs~Iv OaOb Oce<Oduc#OezaOfe<rOg[maOleOmesaOn#Op$OximoUeba2Bli>|!oD^Eb=Er%Es#Lg/*Lm.LpoL<M-#NalNoPaP?(e:99Ed EjaEm Er!E<Ie#ImicaInceIt :Ba'B@BoC~DicalIzMaMp-ch}goPazPi&P#SgoSpaToYoZaZ.3Acc~Ali{dBa'Bo)Ca!Ce%|azoCog!C_oC#Cur<DD.&Duc*FlejoF^maF[nFug$Ga=G*G]G_<H,I'IrJ/a#LevoLieveLle'LojM Med$M}>rNd*N%P #Pet*Po<Pt?SSca)Si`Spe#S#Sum,T*oT^'T[#Un*VesVis%YZ 3CoEgoEn{EsgoFaGi&G^Nc.N.OQuezaSaTmoToZo5BleCeCi D DeoD?]ErJizoJoM!oMp!NN>N{PaP!oSaScaSt+T 5BiB^DoE{G*I&In/e%LoMboM^Ptu[TaTi`:Ba&B!B$BleC GazG[&L/&L!oL*Lm.L.Ls/#LudLv Mb-c~Ndi-e Ng_Ni{dN}#PoQueRdin()nSt_TanU`Xof.3Cc~CoC_#C%DGu*IsL=LvaMa`M?l-d-<rNalN^P  P@Qui(RieRm.Rv*S,%S~TaT,%V!oXoX#3D[Es%E)G=G'Lab/b L,c$L]Mbo=M$R,aS)maT$Tu 5B_C$D$LLap/{&Le{dLi&Lt Luc~Mbr-de}i&No+NrisaPaPl P^)R&Rp_s()oS)nTa'5AveB*Ce<D^Eg[E=E'Er)Fr*Je#L%nM P! Pl*P.!P_moRR>Re'Rg*S#T?:Ba>BiqueB]BuCoC#JoL L>L,#Ll/.Ma'Mb^Ng}quePaPe)P@P.Qu?l(deRe(if(je%RotR+R%TuajeU+ZaZ.3At+|oC]CnicaJa&J!Ji&L/efo'MaM^Mp=NazNd!N!NisN<Ori(api(>Rmi'Rnur(+rSisSo+StigoT!aX#Z3B$Bu+nEmpoEn{Er[E<G_J!/deMb_Mi&M}%OPi>PoR(.TanT!eTu=Za5Al]B?=C Ci'DoG/&M N}#P PeQueRaxR!oRm,%RneoRoRpe&R_R<RtugaSS>S!Xi>2AbajoAc#rA!Afi>AgoAjeAmoAnceA#AumaAz EbolEguaEin%EnEp EsIbuIgoIpaIs)IunfoOfeoOmpaOn>OpaO)OzoU>Ue'Ufa2B!@BoEr#MbaM^NelNic(bin(ismoR'T^:0Ic 9C!a0B[l0I{dIrIv!<OT A3Ba'BeG,)Na0ArU $0IlOp@1A:CaC$Cu`G GoI`J?l/eLi&LleL^Lvu]Mp*oR(i R.So3Ci'C#rHicu=In)JezL/!oLozN-c!Nd-e'Ng N*N%NusRRa'RboRdeRed(j(<Rt!3AAjeBr C$CtimaDaDeoDr$EjoErnesG^LLl-ag_N}e&OlinRalRgoRtudS^Sp!aS%Tami`U&VazV!oV*Vo5LcanLum,Lv!RazT ToZ5E=Lg :::C!Te3GuaM('So9DoGaGur:F*}jaPa#Rza93N(+5MoR&\";\nconst accents = \"aeiou7695@@BZWWavwUJkO@Y-Kn))YEGq#E@O)cI@#ZkMHv$e*))M!!)D**$GW!oKm*Acoh^k&It-pi^SYW)$^n!G)bO!Wkzam(jS#X)Og*^l^RW!bQ#QygBKXfzE))hti!Qm)Cng%%c)mJiI*HJWbmYniCLwNdYyY%WKO^bnT$PuGOr!IvHu&G(GKbtBuhiW&!eO@XMeoYQeCa#!MrTJCq!OW&CHG(WCcW%%)$rfrIegu$)w!G)JGmWWw)MnD%SXXWIT^LWAZuVWB^W)eTL^x&$WGHW(nKWEMA)#$F$x$Waekqs,n7715)W*HM-$WAcCiu(a))VCZ)GG%(*CWWdW%$D!UCO$M\";\nconst checksum = \"0xf74fb7092aeacdfbf8959557de22098da512207fb9f109cb526994938cf40300\";\n\nlet wordlist: null | LangEs = null;\n\n/**\n *  The [[link-bip39-es]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangEs extends WordlistOwlA {\n\n    /**\n     *  Creates a new instance of the Spanish language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langEs]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"es\", words, accents, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangEs``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangEs {\n        if (wordlist == null) { wordlist = new LangEs(); }\n        return wordlist;\n    }\n}\n\n", "import { WordlistOwlA } from \"./wordlist-owla.js\";\n\nconst words = \"0erreleontiteurinueiriet cegeanseali medenel q)eniluxaus ch0Ais}And$Diqu E`#Ol*Ord Ou%rOy RasifReuv Ri,Rog RuptS_-SoluS'@UsifYss=0A@m+AjouAr+nCab]Cep,Clam Cola@Cro~eCu}ErbeHatHe,Idu]I Omp&Qu *R$y?Te'TifT)l0Ep&EquatHesifJec%fJug Mett!M* Op,Or Ouc*Res<RoitUl&V be0R R$ef0Fai!Fec,Fi~eF!{Fub]0Ac Enc I#I,Raf Reab#Ru?1D Gu`#L>Mab#S/-0Ou,Us,1Arm Chim+Er&Geb!G)I_ I?ntLeg Lia.Lou Lum O'd*PagaTes<Veo#0A&'BiguB!Enag Ertu?Id$Ir=Orc O'Ovib#Phib+P#'Us/t0Aly<Apho!Ar~+Atom+C+nE/%rG#Gois<Gu#{Im=Nex N$-N)lOd(Om=+Ony?Orm=T_[Tido&X+{1Ai}Eri%fL/*Olog+Pa!`Pe]Por,Puy 0UariumUeduc0Bit!Bus&De'Doi<G_tLequ(Matu!Me?ntMoi!Mu!P_,Ra~ Riv Ro}S_icT +lTic#0PectPh=&P* S|tS v*S+t&Soc>S' TicotT!Tu-0El>O?RiumRo-Ta^T_%fT* Trap 0Ba(eB .Da-Dib#G' Ro!Tom[Tru~e0A]Anc Ari-En*Er<Eug#Ia&'I@I$I}O(eOu R`1I=Io?:D.Fou Ga.G)t&Igna@L/c Lc$Le(eLisa.Mb(Ncai!Nda.Nl+)Nn>eNqu>Rb>R`R$R^Rra.Ss(S%$Ta`#Te|T,+Udr>Vard 3Let&L>Lo&Nefi-R-|Rg Rl(eRmudaSa-Sog[Ta`Ur!3B $Cyc#Du#JouL/L(g)LlardNai!Olog+Ops+OtypeScuitS$Sto'iTu?Zar!2AfardAg)An~*Ess/tInd OndOqu Ous$2BardB(eI!I}Li@Nb$Nd*Nhe'Nif>NusRdu!R[T&Uc#Ue{Ug+Ul$Uqu(Ur<Usso#U%^Xe'2An~eAs>AveEbisE~eEuva.Ico]Iga@Ill/tIo~eI^O~u!Od Onz Ous<Oye'U?Us^Ut=Uy/t2Ff#Iss$L#%nRe|R(S% T( To*Vab#Vet&:B/$B(eChet&De|D!Fe(eIllouIss$Lcu]Lep(Lib!Lm Lomn+Lvai!Mara@M aMi$Mpag[N=Net$N$N%[NularPab#Por=Pri-Psu#P,Pu~eRab(eRb$eRes}RibouRna.Rot&R!|Rt$Sca@S>S^Ssu!U}U%$V=>V [Viar3D`#Intu!Les&Llu#Ndr>Ns' Ntr=Rc#Rebr=Ri<Rn Rve|S}2Agr(Ai<A#'Amb!An-Apit!Arb$As<'At$Auss$Av* Emi<En`#Equ>Er~ Ev=I_Iff!Ign$Im eIotLoru!OcolatOis*O<O)t&Ro?U&0Ga!Gog[M_,NemaNtr Rcu]R R^T [Toy_Tr$V`2A*$A?'Aqu As<Av>I_tIgn ImatIva.O~eOna.Opor&2B=tBraCas<Co% D Dif>Ff!Gn Hesi$Iff Inc L eLibriLl(eLma,L$elMbatMed+Mm/@MpactNc tNdui!Nf>N.]Nno,Ns$[NtactNvexePa(P+Ra`Rbe|Rda.Rni~eRpusR!ctR&.Smi^Stu?T$U@Upu!Ura.U&|Uvr*Yo&2AbeA(&Ava&Ay$Eatu!Edi,E?{Eu}Evet&Ib]I Ist=I,eOi!Oqu Ota#Uci=UelYp,2Bi^E`l*Il]eIs(eIv!Lm( L%v Mu]Pi@Ra%fR<'3Anu!C#L(d!Ni^:Ign M>Ng N<'Uph(3Batt!Bi,Bord Brid But/tC= Cemb!Ch* Cid Clar Cor Cri!Cup]Da#Duc%fEs<F_sifFi]Fray Gag Givr Glu%rGraf Jeun Li-Log M/d Me' Mol*Ni~ Nou N&l#Nud PartP_}Pha}Plac Po}R/g Rob Sast!S-n&S tSign Sobe*Ss( Str>Ta~ Tes,To' T!s<V/c V_*V( Vo*3Ab#Alog)Am/tC,Ff  G  Git=G[Lu M/~eM(u Oxy@Rec%fRig Scu,Spo}Ssip St/-V %rVi}5Ci#C&'G?IgtMa(eMici#Mp,Na&'Nj$Nn Pam(eRto*Ru!Sa.Se'Ss>Ta%$U/>Ub#U-'U,Y_2Ag$Ap Es}Ibb]Oitu!2P +P#xeRab#Rc*3Nas%e:0Lou*0Ar,HarpeHel#La* Lip<Lo!Lu<O#Onom+Or-Ou,Ra}Rem Riva(RouU?U!u`0If>Uqu 1Fac Fec%fFig+FortFray Fusi$0Ali}Ar 2Ec,1Abor Arg*Ectr$Eg/tEph/tEveIgib#I%s?O.Ucid Ud 0B=]Bell*Bry$Er|@Issi$M_ O%$Ouvo*P e'Ploy Por,Pri<Ulsi$0Cadr Ch eClaveCo~eDigu Dos}DroitDui!Erg+F/-F m Fou*Gag G(Glob Ig?Jamb JeuLev NemiNuye{Ri~*Roba.Seig[Tas}T_d!T>To' Trav Um  Vah*Viab#Voy Zy?0L+n0Aiss*Arg[At/tAu#Ic +I@m+I Ilog)I[Iso@ItapheO^ReuveRouv Uis/t0U !Uipe0Ig Osi$Re'Up%$0C=>Pad$Pe-P+g#Po*PritQuiv Say S_-S+uSor Ti?TomacTra@0Ag eA]An~eA%^E(d!Endo*Er[lH/olHi^Hn+Ir Off Oi#Onn/tO'd*R/.RoitU@0Phor+0Alu Asi$Enta`I@n-I,Olu%fOqu 1ActAg  Auc Cel]Cit/tClusifCu<Ecu,Emp#Erc H= Hor,I.n-I]Is,O%^Ped>Plor Po}Prim QuisT_sifTrai!Ul,:B#Bu#{Cet&Ci#Ctu!Ibl*Lai<Me{M`#R-'RfeluR(eRou~eSc( T=Tig)Uc$U%fVe'Vori3Bri#C$d D  L(M?M'Ndo*Od=Rm Ro-Rve'S%v=U`#Ut!Vr>3AscoCe]C%fDe#Gu!Latu!Leta.L>eL#ulLm LouLtr N/c N*O#R?Ssu!X 2A* Am?As^At&'E|E~eE'Exi$Oc$O!Uctu Ui@Uvi=2L+Nd +Ngib#Nta(eRc Rg $Rmu]Rtu[Ssi#Ud!Ug eU`]Ulu!Urmi2Agi#Ai<An~*App Aye'Ega&E( El$Em*E[s+E!Iab#Ic%$Iss$Ivo#OidOma.Ont=Ot,Uit2Gi%fI&Re'R+{R%fSi$T':Gn Lax+L +Mbad R/%rRd+nRn*Rrig)Zel#Z$3AntLa%[Lu#Ndar?N =N+NouN%lOlog+O?t!R/iumR?St)lY}3B>C]RafeV!2A-AiveIs}ObeOi!Or+{2Lfe'M?Nf]R.R`#Udr$Uff!UlotUp`#Urm/dUt&2Ad)lAffi%A(eAndApp(AtuitAv*EnatIffu!Il]Imp Ogn Ond Ot&OupeUg U% Uy e2EpardErr>I@Im|veIta!Sta%f3Mnas&Rostat:Bitu@Cho*L&Me|NgarN[t$RicotRm$+Rp$Sard3LiumMato?RbeRiss$Rm(eR$Si,U!{3B n BouLar/tStoi!V 5MardMma.Mo.[N['Nor N&{R@Riz$Rlo.Rm$eRrib#U#{Us<5BlotI#{Ma(Mb#Mi@Mo'R]3Dro?lG+[M[Pno<:2Yl#2Nor U/e4Lici&Lusi$0A.Bib I,M_<Mobi#Muab#PactP i=Plor Po}Prim Pu,0Carn C_d+Ci@ntCl( Colo!Dex Di-Duc%fEditEp%eExactF(iFlig Form Fusi$G  H= Hib Jec,Ju!No-ntOcu]Ond Scri!Sec&Sig[Soli&Sp* S%nctSul,TactT_<Ti?Trig)Tui%fU%#Vasi$V_,Vi,Voqu 3Oni^Rad>ReelRi,0O]2Oi!Res<:GuarIll*MbeNv>Rd(Ug U[Velot3Tab#T$UdiU[s<9Ind!N~ Ng]Ue'UissifUrn=Vi=Y|Ye{5Bi]Ge?ntNiorP$Ris&S%-Te{V_i#:Yak7M$oOs^:BelBi=Bo' C  Cto<Gu[I[Is}I% Mbe|Mel#MpeN-'Nga.N,[P(R.'R?Ur>VaboVo*3Ctu!G=G Gu?SsiveTt!V>Xi^Zard3As<B  B!C_-Cor[E.Ev!Gatu!Go,G)M Mi&M$a@Mpi@Neai!NgotOn-|Qui@S>eS,ThiumTi.Ttor=V!'5Gi^Inta(Is*MbricT +U UrdUt!UveY=5B+Ci@Cra%fE'Gub!Is/tM>eNai!NdiR$T,X){:Ch(eGas(G_taGi^Ig!Ill$In%_Ir+Is$Jor Lax Lefi-Lhe'Li-L#t&MmouthNda,Niab#Nqu/tN&|N)lRath$Rb!R~/dRdiRi%?R^'Rr$R&]Scot&SsifT +lT>eTra^Udi!Ussa@UveXim=3Ch/tC$nuDa`#Dec(Di,Du<Il#'L/.Lod+Mb!Moi!Nac N Nh*Ns$.NtorRc!diRi&R#Ssag Su!T=Teo!Tho@T>Ub#3Au]CrobeEt&Gn$Gr L+uLli$Mi^N-N =Nim=Nor Nu&Rac#Roi,Ssi#X&5Bi#D [El#{Ndi=Ni&'Nna+Not$eNst!Ntag[Nu?ntQ)'R-|Rsu!R% Te'TifU~eUf#Ul(Uss$Ut$Uv/t5L%p#Ni%$Ra`#Re[Rmu!Sc#SeumSic+nTa%$T T)l3Ria@R%l#S,eThi^:Ge'PpeRquoisRr Ta%$Ti$Tu!Ufra.U%^Vi!3Bu#{CtarFas&Ga%$Glig Goc>I.Rve{Ttoy Ur$eUtr$Veu3CheCkelTra&Ve|5B#CifCt'[Ir-'I<t&Ma@Mb!{Mm Rma%fTab#Tif>Toi!Urr*Uve|Va&'Vemb!Vi-5A.Anc I!Isib#M oP%=Q)Tri%f:0E*Jec%fLig Sc'S v Stac#T_*T' 0Casi$Cup E/Tob!Troy Tup]Ulai!0E'Or/t1F_}Fic>Fr*0Ive1Se|S`l$2Fac%fIv>0Bra.Ett!0Ct){Du]E!{Iri^1A#A^Er Ini$PortunPrim T Ti^1A.{An.Bi&D$n E`#G/eG)`Ifi-Ne?ntQ)T+0C`]Mo<Satu!0Ar+0Rag/Rs$T`Trag Vra.0A%$1Y@Y.[1O[:Isib#La-Lma!sLo'@Lp Na~eNdaNgol(Niqu N[|NoramaNt=$PayeP>Po,PyrusRadoxeR-l#Res<Rfum R]Ro#Rra(R<m Rtag Ru!Rv_*Ssi$S&^T [lT+n-Tr$V`l$Voi}Y Ysa.3Ig[Int!La.Lic/L#Lou<Lu~eNdu#Netr Nib#NsifN'+Pi&PlumRdrixRfor Rio@Rmu,Rp#xeRs`R&S Ta#TitTr*Up#2Ara$Ob+O^Ot$Ra<Ysi^0AnoCt'=E-Er!Euv!Lo&N-|Pet&Qu Rog)Sc(eSt$Vo,XelZza2AcardAf$dAis*An A^Astr$A&|E' ExusIa.OmbOng U+Uma.2Chet&Es+E&In&Ir>Iss$Iv!Lai!Lic>L#nLyg$eMma@Mp>Nct)lNd  NeyR%^Si%$S<d Stu!Tag Te|Ti$U-Ula(Um$Urp!Uss(Uvo*2A*+A%^Ec+{Edi!EfixeElu@EnomE<n-E&x&Evo*Imi%fIn-Is$Iv Ob#?O-d Odi.Of$dOg!sO+Oje,Olog)O?n Op!Osp eO&g O)s<Ov beU@n-U[|0Y~o<1BlicC $I}LpeLsarNai<Ni%fPit!Rif>Zz#3Rami@:99AsarE!l#Es%$Ietu@It,O%_t:C(eC$,D+{G$d(I@'Is(L_%rLl$.Mas}Pi@Sa.Tis}Vag V(Y$n 3Ac%fAg*Ali}Anim Cevo*Ci,Clam Col,Cru,Cu]Cyc]Dig Dou,Fai!F#xeForm Fra(Fu.G=+nGi$Gla.Gul>I, Je,Jou La%fLev L+fMar^Me@Mi<M$,Mpl*Mu NardNfortNif]N$c Ntr NvoiPl>Por,Pri<P%#Qu(S veS(e{Soud!SpectS,SultatTabl*T_*Ticu#Tomb Trac Uni$Uss*V/~eViv!Vol&Vulsif3Ches<De|E'Gi@Go]Nc Pos,Sib#S^T)lV=V>e5Che{M/-Mp!N-Nd(Se|S>Ta%fTorTu#U.U`#U#|U%[Y|?5B/BisCheEl#G){In Is<|S S%^3Th?:B]Bo,B!Co~eFariGes<Is*La@LiveL$Lu MediNc%$Ngl>Rcas?Rd(eT' Ug!nuUm$U,Uva.V/tV$n 1AlpelAnda#E]atEnarioEpt!HemaI_-Ind O!Ru%nUlp,1An-Cab#Ch Cou C!,Da%fDui!Ig['Jo'Lec%fMa(eMb]M_-M(=Na&'Nsib#N&n-Par Q)n-Re(R.ntR+{Rru!RumRvi-Sa?V*Vra.Xtup#3D =Ec#Eg Ff]G#Gn=L_-LiciumMp#Nc eNist!Ph$RopSmi^Tu 1I 3Ci=C#DiumIg[{LdatLe`Litu@Lub#Mb!M?`Mno]N@N.'N[t&No!Rc>R%rS+T%<Uc+{Udu!Uff#U#v UpapeUr-U%r Uv_*0Ac+{A%=Eci=H eIr=3Ab#A%$ErnumImulusIpu]RictUd+{Upe'Ylis&0Bli?BstratB%lBv_*C-sC!FfixeGg  Ive'Lfa&P bePpl>Rfa-Rica&R?n Rpri<Rs|tRv+Spect3LlabeMbo#Metr+Nap<NtaxeS&?:BacBl>C%#Il]L_tLism/L$n Mbo'Mi}Ngib#PisQu( Rd RifR%[S<TamiToua.UpeU!|X 3Mo(Mpo!lNa`#Nd!Ne'N*Nsi$Rm( R[Rrib#T(eX&2E?Eor+Erap+Orax0BiaE@Mi@Reli!Ro*SsuT/eT!Tub 5Bogg/L /tMa&Ni^N[|P$y?R~eRd!Rna@Rp`#R!ntR<Rt)TemU~ Urna.Us}X(e2Ac%$AficAgi^Ah*A(An~ Ava`Ef#Emp EsorEu`Ia.Ibun=Ico,Ilog+IompheIp]It' Ivi=Omb$eOncOpic=Oupe|2I#LipeMul&N[lRb(eTe'Toy Y|3Mp/Ph$Pi^R/:0Ues^9Ti?Tras$1Ani?If>I$I^Itai!Iv s3AniumBa(Tic/t0A.I[UelU!0I#Op+:Car?Cc(Gab$dG)Ill/tInc!Is<|Lab#Li<Ll$LveMpi!N`#Pe'R>Se{Ss=S&3C&'Det&Get=Hicu#InardLo-Nd!diN  Ng Ni?{Ntou<Rdu!R(Rn*RrouR}RtuSt$T /Tus&X/tX 3AducAn@Ctoi!D/.DeoG[t&G)'La(Lla.Naig!Ol$P eRe?ntRtuo<RusSa.Se'Si$S^{S)lT=Tes<Tico#Tr(eVa-Vipa!5Ca%$Gu I#Is(Itu!La`#Lc/L%g Lu?Ra-R&xT Ulo*Ya.Yel#:G$:3N$:Cht:3B!NithS&9Olog+\";\nconst accents = \"e7693&)U*o&)Ry^)*)W))))#X^))))@@)#Wf)m%)#!))AG)&IIAQIIIBIIHJNAgBIILIDJGo)))HIQIIIIA(IGgJHH(BIIxX#)Ou)@*IAAPIIIJHQJ)&QIQPYI(HYAQC%)!))QHJJ@)#)^f*^AXCJ))$%CP))%&m)u)@e^A#G#))W@!(IKK%!(I%))O@QA))@GG#e))))WHJIWh))my@IIBT^)!)HAYGETHI*))!QnUDG)))nBoKAC*HwyQh))$&)G&)UGO)G)))(BX#v**)%O,e7686)I))@)&)gdMP()))ud)p#L))I^FIHYdWG))D@DFV)QA)o%MyTh%*)Z)%)n(XANc^R)YS\";\nconst checksum = \"0x51deb7ae009149dc61a6bd18a918eb7ac78d2775726c68e598b92d002519b045\";\n\nlet wordlist: null | LangFr = null;\n\n/**\n *  The [[link-bip39-fr]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangFr extends WordlistOwlA {\n\n    /**\n     *  Creates a new instance of the French language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langFr]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"fr\", words, accents, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangFr``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangFr {\n        if (wordlist == null) { wordlist = new LangFr(); }\n        return wordlist;\n    }\n}\n", "import { id } from \"../hash/index.js\";\nimport {\n    hexlify, assertArgument, toUtf8Bytes, toUtf8String\n} from \"../utils/index.js\";\n\nimport { Wordlist } from \"./wordlist.js\";\n\n\nconst data = [\n\n    // 4-kana words\n    \"AQRASRAGBAGUAIRAHBAghAURAdBAdcAnoAMEAFBAFCBKFBQRBSFBCXBCDBCHBGFBEQBpBBpQBIkBHNBeOBgFBVCBhBBhNBmOBmRBiHBiFBUFBZDBvFBsXBkFBlcBjYBwDBMBBTBBTRBWBBWXXaQXaRXQWXSRXCFXYBXpHXOQXHRXhRXuRXmXXbRXlXXwDXTRXrCXWQXWGaBWaKcaYgasFadQalmaMBacAKaRKKBKKXKKjKQRKDRKCYKCRKIDKeVKHcKlXKjHKrYNAHNBWNaRNKcNIBNIONmXNsXNdXNnBNMBNRBNrXNWDNWMNFOQABQAHQBrQXBQXFQaRQKXQKDQKOQKFQNBQNDQQgQCXQCDQGBQGDQGdQYXQpBQpQQpHQLXQHuQgBQhBQhCQuFQmXQiDQUFQZDQsFQdRQkHQbRQlOQlmQPDQjDQwXQMBQMDQcFQTBQTHQrDDXQDNFDGBDGQDGRDpFDhFDmXDZXDbRDMYDRdDTRDrXSAhSBCSBrSGQSEQSHBSVRShYShkSyQSuFSiBSdcSoESocSlmSMBSFBSFKSFNSFdSFcCByCaRCKcCSBCSRCCrCGbCEHCYXCpBCpQCIBCIHCeNCgBCgFCVECVcCmkCmwCZXCZFCdRClOClmClFCjDCjdCnXCwBCwXCcRCFQCFjGXhGNhGDEGDMGCDGCHGIFGgBGVXGVEGVRGmXGsXGdYGoSGbRGnXGwXGwDGWRGFNGFLGFOGFdGFkEABEBDEBFEXOEaBEKSENBENDEYXEIgEIkEgBEgQEgHEhFEudEuFEiBEiHEiFEZDEvBEsXEsFEdXEdREkFEbBEbRElFEPCEfkEFNYAEYAhYBNYQdYDXYSRYCEYYoYgQYgRYuRYmCYZTYdBYbEYlXYjQYRbYWRpKXpQopQnpSFpCXpIBpISphNpdBpdRpbRpcZpFBpFNpFDpFopFrLADLBuLXQLXcLaFLCXLEhLpBLpFLHXLeVLhILdHLdRLoDLbRLrXIABIBQIBCIBsIBoIBMIBRIXaIaRIKYIKRINBINuICDIGBIIDIIkIgRIxFIyQIiHIdRIbYIbRIlHIwRIMYIcRIRVITRIFBIFNIFQOABOAFOBQOaFONBONMOQFOSFOCDOGBOEQOpBOLXOIBOIFOgQOgFOyQOycOmXOsXOdIOkHOMEOMkOWWHBNHXNHXWHNXHDuHDRHSuHSRHHoHhkHmRHdRHkQHlcHlRHwBHWcgAEgAggAkgBNgBQgBEgXOgYcgLXgHjgyQgiBgsFgdagMYgWSgFQgFEVBTVXEVKBVKNVKDVKYVKRVNBVNYVDBVDxVSBVSRVCjVGNVLXVIFVhBVhcVsXVdRVbRVlRhBYhKYhDYhGShxWhmNhdahdkhbRhjohMXhTRxAXxXSxKBxNBxEQxeNxeQxhXxsFxdbxlHxjcxFBxFNxFQxFOxFoyNYyYoybcyMYuBQuBRuBruDMuCouHBudQukkuoBulVuMXuFEmCYmCRmpRmeDmiMmjdmTFmFQiADiBOiaRiKRiNBiNRiSFiGkiGFiERipRiLFiIFihYibHijBijEiMXiWBiFBiFCUBQUXFUaRUNDUNcUNRUNFUDBUSHUCDUGBUGFUEqULNULoUIRUeEUeYUgBUhFUuRUiFUsXUdFUkHUbBUjSUjYUwXUMDUcHURdUTBUrBUrXUrQZAFZXZZaRZKFZNBZQFZCXZGBZYdZpBZLDZIFZHXZHNZeQZVRZVFZmXZiBZvFZdFZkFZbHZbFZwXZcCZcRZRBvBQvBGvBLvBWvCovMYsAFsBDsaRsKFsNFsDrsSHsSFsCXsCRsEBsEHsEfspBsLBsLDsIgsIRseGsbRsFBsFQsFSdNBdSRdCVdGHdYDdHcdVbdySduDdsXdlRdwXdWYdWcdWRkBMkXOkaRkNIkNFkSFkCFkYBkpRkeNkgBkhVkmXksFklVkMBkWDkFNoBNoaQoaFoNBoNXoNaoNEoSRoEroYXoYCoYbopRopFomXojkowXorFbBEbEIbdBbjYlaRlDElMXlFDjKjjSRjGBjYBjYkjpRjLXjIBjOFjeVjbRjwBnXQnSHnpFnLXnINnMBnTRwXBwXNwXYwNFwQFwSBwGFwLXwLDweNwgBwuHwjDwnXMBXMpFMIBMeNMTHcaQcNBcDHcSFcCXcpBcLXcLDcgFcuFcnXcwXccDcTQcrFTQErXNrCHrpFrgFrbFrTHrFcWNYWNbWEHWMXWTR\",\n\n    // 5-kana words\n    \"ABGHABIJAEAVAYJQALZJAIaRAHNXAHdcAHbRAZJMAZJRAZTRAdVJAklmAbcNAjdRAMnRAMWYAWpRAWgRAFgBAFhBAFdcBNJBBNJDBQKBBQhcBQlmBDEJBYJkBYJTBpNBBpJFBIJBBIJDBIcABOKXBOEJBOVJBOiJBOZJBepBBeLXBeIFBegBBgGJBVJXBuocBiJRBUJQBlXVBlITBwNFBMYVBcqXBTlmBWNFBWiJBWnRBFGHBFwXXKGJXNJBXNZJXDTTXSHSXSVRXSlHXCJDXGQJXEhXXYQJXYbRXOfXXeNcXVJFXhQJXhEJXdTRXjdXXMhBXcQTXRGBXTEBXTnQXFCXXFOFXFgFaBaFaBNJaBCJaBpBaBwXaNJKaNJDaQIBaDpRaEPDaHMFamDJalEJaMZJaFaFaFNBaFQJaFLDaFVHKBCYKBEBKBHDKXaFKXGdKXEJKXpHKXIBKXZDKXwXKKwLKNacKNYJKNJoKNWcKDGdKDTRKChXKGaRKGhBKGbRKEBTKEaRKEPTKLMDKLWRKOHDKVJcKdBcKlIBKlOPKFSBKFEPKFpFNBNJNJBQNBGHNBEPNBHXNBgFNBVXNBZDNBsXNBwXNNaRNNJDNNJENNJkNDCJNDVDNGJRNJiDNZJNNsCJNJFNNFSBNFCXNFEPNFLXNFIFQJBFQCaRQJEQQLJDQLJFQIaRQOqXQHaFQHHQQVJXQVJDQhNJQmEIQZJFQsJXQJrFQWbRDJABDBYJDXNFDXCXDXLXDXZDDXsJDQqXDSJFDJCXDEPkDEqXDYmQDpSJDOCkDOGQDHEIDVJDDuDuDWEBDJFgSBNDSBSFSBGHSBIBSBTQSKVYSJQNSJQiSJCXSEqXSJYVSIiJSOMYSHAHSHaQSeCFSepQSegBSHdHSHrFShSJSJuHSJUFSkNRSrSrSWEBSFaHSJFQSFCXSFGDSFYXSFODSFgBSFVXSFhBSFxFSFkFSFbBSFMFCADdCJXBCXaFCXKFCXNFCXCXCXGBCXEJCXYBCXLDCXIBCXOPCXHXCXgBCXhBCXiBCXlDCXcHCJNBCJNFCDCJCDGBCDVXCDhBCDiDCDJdCCmNCpJFCIaRCOqXCHCHCHZJCViJCuCuCmddCJiFCdNBCdHhClEJCnUJCreSCWlgCWTRCFBFCFNBCFYBCFVFCFhFCFdSCFTBCFWDGBNBGBQFGJBCGBEqGBpBGBgQGNBEGNJYGNkOGNJRGDUFGJpQGHaBGJeNGJeEGVBlGVKjGiJDGvJHGsVJGkEBGMIJGWjNGFBFGFCXGFGBGFYXGFpBGFMFEASJEAWpEJNFECJVEIXSEIQJEOqXEOcFEeNcEHEJEHlFEJgFEhlmEmDJEmZJEiMBEUqXEoSREPBFEPXFEPKFEPSFEPEFEPpFEPLXEPIBEJPdEPcFEPTBEJnXEqlHEMpREFCXEFODEFcFYASJYJAFYBaBYBVXYXpFYDhBYCJBYJGFYYbRYeNcYJeVYiIJYZJcYvJgYvJRYJsXYsJFYMYMYreVpBNHpBEJpBwXpQxFpYEJpeNDpJeDpeSFpeCHpHUJpHbBpHcHpmUJpiiJpUJrpsJuplITpFaBpFQqpFGBpFEfpFYBpFpBpFLJpFIDpFgBpFVXpFyQpFuFpFlFpFjDpFnXpFwXpJFMpFTBLXCJLXEFLXhFLXUJLXbFLalmLNJBLSJQLCLCLGJBLLDJLHaFLeNFLeSHLeCXLepFLhaRLZsJLsJDLsJrLocaLlLlLMdbLFNBLFSBLFEHLFkFIBBFIBXFIBaQIBKXIBSFIBpHIBLXIBgBIBhBIBuHIBmXIBiFIBZXIBvFIBbFIBjQIBwXIBWFIKTRIQUJIDGFICjQIYSRIINXIJeCIVaRImEkIZJFIvJRIsJXIdCJIJoRIbBQIjYBIcqXITFVIreVIFKFIFSFIFCJIFGFIFLDIFIBIJFOIFgBIFVXIJFhIFxFIFmXIFdHIFbBIJFrIJFWOBGBOQfXOOKjOUqXOfXBOqXEOcqXORVJOFIBOFlDHBIOHXiFHNTRHCJXHIaRHHJDHHEJHVbRHZJYHbIBHRsJHRkDHWlmgBKFgBSBgBCDgBGHgBpBgBIBgBVJgBuBgBvFgKDTgQVXgDUJgGSJgOqXgmUMgZIJgTUJgWIEgFBFgFNBgFDJgFSFgFGBgFYXgJFOgFgQgFVXgFhBgFbHgJFWVJABVQKcVDgFVOfXVeDFVhaRVmGdViJYVMaRVFNHhBNDhBCXhBEqhBpFhBLXhNJBhSJRheVXhhKEhxlmhZIJhdBQhkIJhbMNhMUJhMZJxNJgxQUJxDEkxDdFxSJRxplmxeSBxeCXxeGFxeYXxepQxegBxWVcxFEQxFLXxFIBxFgBxFxDxFZtxFdcxFbBxFwXyDJXyDlcuASJuDJpuDIBuCpJuGSJuIJFueEFuZIJusJXudWEuoIBuWGJuFBcuFKEuFNFuFQFuFDJuFGJuFVJuFUtuFdHuFTBmBYJmNJYmQhkmLJDmLJomIdXmiJYmvJRmsJRmklmmMBymMuCmclmmcnQiJABiJBNiJBDiBSFiBCJiBEFiBYBiBpFiBLXiBTHiJNciDEfiCZJiECJiJEqiOkHiHKFieNDiHJQieQcieDHieSFieCXieGFieEFieIHiegFihUJixNoioNXiFaBiFKFiFNDiFEPiFYXitFOitFHiFgBiFVEiFmXiFitiFbBiFMFiFrFUCXQUIoQUIJcUHQJUeCEUHwXUUJDUUqXUdWcUcqXUrnQUFNDUFSHUFCFUFEfUFLXUtFOZBXOZXSBZXpFZXVXZEQJZEJkZpDJZOqXZeNHZeCDZUqXZFBQZFEHZFLXvBAFvBKFvBCXvBEPvBpHvBIDvBgFvBuHvQNJvFNFvFGBvFIBvJFcsXCDsXLXsXsXsXlFsXcHsQqXsJQFsEqXseIFsFEHsFjDdBxOdNpRdNJRdEJbdpJRdhZJdnSJdrjNdFNJdFQHdFhNkNJDkYaRkHNRkHSRkVbRkuMRkjSJkcqDoSJFoEiJoYZJoOfXohEBoMGQocqXbBAFbBXFbBaFbBNDbBGBbBLXbBTBbBWDbGJYbIJHbFQqbFpQlDgQlOrFlVJRjGEBjZJRnXvJnXbBnEfHnOPDngJRnxfXnUJWwXEJwNpJwDpBwEfXwrEBMDCJMDGHMDIJMLJDcQGDcQpHcqXccqNFcqCXcFCJRBSBRBGBRBEJRBpQTBNFTBQJTBpBTBVXTFABTFSBTFCFTFGBTFMDrXCJrXLDrDNJrEfHrFQJrFitWNjdWNTR\",\n\n    // 6-kana words\n    \"AKLJMANOPFASNJIAEJWXAYJNRAIIbRAIcdaAeEfDAgidRAdjNYAMYEJAMIbRAFNJBAFpJFBBIJYBDZJFBSiJhBGdEBBEJfXBEJqXBEJWRBpaUJBLXrXBIYJMBOcfXBeEfFBestXBjNJRBcDJOBFEqXXNvJRXDMBhXCJNYXOAWpXONJWXHDEBXeIaRXhYJDXZJSJXMDJOXcASJXFVJXaBQqXaBZJFasXdQaFSJQaFEfXaFpJHaFOqXKBNSRKXvJBKQJhXKEJQJKEJGFKINJBKIJjNKgJNSKVElmKVhEBKiJGFKlBgJKjnUJKwsJYKMFIJKFNJDKFIJFKFOfXNJBSFNJBCXNBpJFNJBvQNJBMBNJLJXNJOqXNJeCXNJeGFNdsJCNbTKFNwXUJQNFEPQDiJcQDMSJQSFpBQGMQJQJeOcQyCJEQUJEBQJFBrQFEJqDXDJFDJXpBDJXIMDGiJhDIJGRDJeYcDHrDJDVXgFDkAWpDkIgRDjDEqDMvJRDJFNFDJFIBSKclmSJQOFSJQVHSJQjDSJGJBSJGJFSECJoSHEJqSJHTBSJVJDSViJYSZJNBSJsJDSFSJFSFEfXSJFLXCBUJVCJXSBCJXpBCXVJXCJXsXCJXdFCJNJHCLIJgCHiJFCVNJMChCJhCUHEJCsJTRCJdYcCoQJCCFEfXCFIJgCFUJxCFstFGJBaQGJBIDGQJqXGYJNRGJHKFGeQqDGHEJFGJeLXGHIiJGHdBlGUJEBGkIJTGFQPDGJFEqEAGegEJIJBEJVJXEhQJTEiJNcEJZJFEJoEqEjDEqEPDsXEPGJBEPOqXEPeQFEfDiDEJfEFEfepQEfMiJEqXNBEqDIDEqeSFEqVJXEMvJRYXNJDYXEJHYKVJcYYJEBYJeEcYJUqXYFpJFYFstXpAZJMpBSJFpNBNFpeQPDpHLJDpHIJFpHgJFpeitFpHZJFpJFADpFSJFpJFCJpFOqXpFitBpJFZJLXIJFLIJgRLVNJWLVHJMLwNpJLFGJBLFLJDLFOqXLJFUJIBDJXIBGJBIJBYQIJBIBIBOqXIBcqDIEGJFILNJTIIJEBIOiJhIJeNBIJeIBIhiJIIWoTRIJFAHIJFpBIJFuHIFUtFIJFTHOSBYJOEcqXOHEJqOvBpFOkVJrObBVJOncqDOcNJkHhNJRHuHJuHdMhBgBUqXgBsJXgONJBgHNJDgHHJQgJeitgHsJXgJyNagyDJBgZJDrgsVJQgkEJNgkjSJgJFAHgFCJDgFZtMVJXNFVXQfXVJXDJVXoQJVQVJQVDEfXVDvJHVEqNFVeQfXVHpJFVHxfXVVJSRVVmaRVlIJOhCXVJhHjYkhxCJVhWVUJhWiJcxBNJIxeEqDxfXBFxcFEPxFSJFxFYJXyBDQJydaUJyFOPDuYCJYuLvJRuHLJXuZJLDuFOPDuFZJHuFcqXmKHJdmCQJcmOsVJiJAGFitLCFieOfXiestXiZJMEikNJQirXzFiFQqXiFIJFiFZJFiFvtFUHpJFUteIcUteOcUVCJkUhdHcUbEJEUJqXQUMNJhURjYkUFitFZDGJHZJIxDZJVJXZJFDJZJFpQvBNJBvBSJFvJxBrseQqDsVFVJdFLJDkEJNBkmNJYkFLJDoQJOPoGsJRoEAHBoEJfFbBQqDbBZJHbFVJXlFIJBjYIrXjeitcjjCEBjWMNBwXQfXwXOaFwDsJXwCJTRwrCZJMDNJQcDDJFcqDOPRYiJFTBsJXTQIJBTFEfXTFLJDrXEJFrEJXMrFZJFWEJdEWYTlm\",\n\n    // 7-kana words\n    \"ABCDEFACNJTRAMBDJdAcNJVXBLNJEBXSIdWRXErNJkXYDJMBXZJCJaXMNJaYKKVJKcKDEJqXKDcNJhKVJrNYKbgJVXKFVJSBNBYBwDNJeQfXNJeEqXNhGJWENJFiJRQlIJbEQJfXxDQqXcfXQFNDEJQFwXUJDYcnUJDJIBgQDIUJTRDJFEqDSJQSJFSJQIJFSOPeZtSJFZJHCJXQfXCTDEqFGJBSJFGJBOfXGJBcqXGJHNJDGJRLiJEJfXEqEJFEJPEFpBEJYJBZJFYBwXUJYiJMEBYJZJyTYTONJXpQMFXFpeGIDdpJFstXpJFcPDLBVSJRLHQJqXLJFZJFIJBNJDIJBUqXIBkFDJIJEJPTIYJGWRIJeQPDIJeEfHIJFsJXOqGDSFHXEJqXgJCsJCgGQJqXgdQYJEgFMFNBgJFcqDVJwXUJVJFZJchIgJCCxOEJqXxOwXUJyDJBVRuscisciJBiJBieUtqXiJFDJkiFsJXQUGEZJcUJFsJXZtXIrXZDZJDrZJFNJDZJFstXvJFQqXvJFCJEsJXQJqkhkNGBbDJdTRbYJMEBlDwXUJMEFiJFcfXNJDRcNJWMTBLJXC\",\n\n    // 8-kana words\n    \"BraFUtHBFSJFdbNBLJXVJQoYJNEBSJBEJfHSJHwXUJCJdAZJMGjaFVJXEJPNJBlEJfFiJFpFbFEJqIJBVJCrIBdHiJhOPFChvJVJZJNJWxGFNIFLueIBQJqUHEJfUFstOZJDrlXEASJRlXVJXSFwVJNJWD\",\n\n    // 9-kana words\n    \"QJEJNNJDQJEJIBSFQJEJxegBQJEJfHEPSJBmXEJFSJCDEJqXLXNJFQqXIcQsFNJFIFEJqXUJgFsJXIJBUJEJfHNFvJxEqXNJnXUJFQqD\",\n\n    // 10-kana words\n    \"IJBEJqXZJ\"\n];\n\n// Maps each character into its kana value (the index)\nconst mapping = \"~~AzB~X~a~KN~Q~D~S~C~G~E~Y~p~L~I~O~eH~g~V~hxyumi~~U~~Z~~v~~s~~dkoblPjfnqwMcRTr~W~~~F~~~~~Jt\"\n\nlet _wordlist: null | Array<string> = null;\n\nfunction hex(word: string): string {\n    return hexlify(toUtf8Bytes(word));\n}\n\nconst KiYoKu = \"0xe3818de38284e3818f\";\nconst KyoKu = \"0xe3818de38283e3818f\"\n\nfunction toString(data: Array<number>): string {\n    return toUtf8String(new Uint8Array(data));\n}\n\nfunction loadWords(): Array<string> {\n    if (_wordlist !== null) { return _wordlist; }\n\n    const wordlist: Array<string> = [];\n\n    // Transforms for normalizing (sort is a not quite UTF-8)\n    const transform: { [key: string]: string | boolean } = {};\n\n    // Delete the diacritic marks\n    transform[toString([227, 130, 154])] = false;\n    transform[toString([227, 130, 153])] = false;\n\n    // Some simple transforms that sort out most of the order\n    transform[toString([227, 130, 133])] = toString([227, 130, 134]);\n    transform[toString([227, 129, 163])] = toString([227, 129, 164]);\n    transform[toString([227, 130, 131])] = toString([227, 130, 132]);\n    transform[toString([227, 130, 135])] = toString([227, 130, 136]);\n\n\n    // Normalize words using the transform\n    function normalize(word: string) {\n        let result = \"\";\n        for (let i = 0; i < word.length; i++) {\n            let kana = word[i];\n            const target = transform[kana];\n            if (target === false) { continue; }\n            if (target) { kana = <string>target; }\n            result += kana;\n        }\n        return result;\n    }\n\n    // Sort how the Japanese list is sorted\n    function sortJapanese(a: string, b: string) {\n        a = normalize(a);\n        b = normalize(b);\n        if (a < b) { return -1; }\n        if (a > b) { return 1; }\n        return 0;\n    }\n\n    // Load all the words\n    for (let length = 3; length <= 9; length++) {\n        const d = data[length - 3];\n        for (let offset = 0; offset < d.length; offset += length) {\n            const word: Array<number> = [];\n            for (let i = 0; i < length; i++) {\n                 const k = mapping.indexOf(d[offset + i]);\n                 word.push(227);\n                 word.push((k & 0x40) ? 130: 129);\n                 word.push((k & 0x3f) + 128);\n            }\n            wordlist.push(toString(word));\n        }\n    }\n    wordlist.sort(sortJapanese);\n\n    // For some reason kyoku and kiyoku are flipped in node (!!).\n    // The order SHOULD be:\n    //   - kyoku\n    //   - kiyoku\n\n    // This should ignore \"if\", but that doesn't work here??\n    /* c8 ignore start */\n    if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) {\n        const tmp = wordlist[442];\n        wordlist[442] = wordlist[443];\n        wordlist[443] = tmp;\n    }\n    /* c8 ignore stop */\n\n    // Verify the computed list matches the official list\n    /* istanbul ignore if */\n    const checksum = id(wordlist.join(\"\\n\") + \"\\n\");\n    /* c8 ignore start */\n    if (checksum !== \"0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600\") {\n        throw new Error(\"BIP39 Wordlist for ja (Japanese) FAILED\");\n    }\n    /* c8 ignore stop */\n\n    _wordlist = wordlist;\n\n    return wordlist;\n}\n\nlet wordlist: null | LangJa = null;\n\n/**\n *  The [[link-bip39-ja]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangJa extends Wordlist {\n\n    /**\n     *  Creates a new instance of the Japanese language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langJa]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"ja\"); }\n\n    getWord(index: number): string {\n        const words = loadWords();\n        assertArgument(index >= 0 && index < words.length,\n            `invalid word index: ${ index }`, \"index\", index);\n        return words[index];\n    }\n\n    getWordIndex(word: string): number {\n        return loadWords().indexOf(word);\n    }\n\n    split(phrase: string): Array<string> {\n        //logger.assertNormalize();\n        return phrase.split(/(?:\\u3000| )+/g);\n    }\n\n    join(words: Array<string>): string {\n        return words.join(\"\\u3000\");\n    }\n\n    /**\n     *  Returns a singleton instance of a ``LangJa``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangJa {\n        if (wordlist == null) { wordlist = new LangJa(); }\n        return wordlist;\n    }\n}\n", "import { id } from \"../hash/index.js\";\nimport { assertArgument, toUtf8String } from \"../utils/index.js\";\n\nimport { Wordlist } from \"./wordlist.js\";\n\n\nconst data = [\n    \"OYAa\",\n    \"ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@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!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6\",\n    \"ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv\",\n    \"AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo\",\n    \"AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg\",\n    \"HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb\",\n    \"AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl\"\n]\n\nconst codes = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*\"\n\nfunction getHangul(code: number): string {\n    if (code >= 40) {\n        code = code + 168 - 40;\n    } else if (code >= 19) {\n        code = code + 97 - 19;\n    }\n\n    return toUtf8String(new Uint8Array([ 225, (code >> 6) + 132, (code & 0x3f) + 128]));\n}\n\nlet _wordlist: null | Array<string> = null;\n\nfunction loadWords(): Array<string> {\n    if (_wordlist != null) { return _wordlist; }\n\n    const wordlist: Array<string> = [ ];\n\n    data.forEach((data, length) => {\n        length += 4;\n        for (let i = 0; i < data.length; i += length) {\n            let word = \"\";\n            for (let j = 0; j < length; j++) {\n                word += getHangul(codes.indexOf(data[i + j]));\n            }\n            wordlist.push(word)\n        }\n    });\n\n    wordlist.sort();\n\n    // Verify the computed list matches the official list\n    /* istanbul ignore if */\n    const checksum = id(wordlist.join(\"\\n\") + \"\\n\");\n    /* c8 ignore start */\n    if (checksum !== \"0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a\") {\n        throw new Error(\"BIP39 Wordlist for ko (Korean) FAILED\");\n    }\n    /* c8 ignore stop */\n\n    _wordlist = wordlist;\n\n    return wordlist;\n}\n\nlet wordlist: null | LangKo = null;\n\n/**\n *  The [[link-bip39-ko]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangKo extends Wordlist {\n\n    /**\n     *  Creates a new instance of the Korean language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langKo]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() {\n        super(\"ko\");\n    }\n\n    getWord(index: number): string {\n        const words = loadWords();\n        assertArgument(index >= 0 && index < words.length,\n            `invalid word index: ${ index }`, \"index\", index);\n        return words[index];\n    }\n\n    getWordIndex(word: string): number {\n        return loadWords().indexOf(word);\n    }\n\n    /**\n     *  Returns a singleton instance of a ``LangKo``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangKo {\n        if (wordlist == null) { wordlist = new LangKo(); }\n        return wordlist;\n    }\n}\n", "import { WordlistOwl } from \"./wordlist-owl.js\";\n\nconst words = \"0torea noica!iosorolotaleratelanena%oiadoencotivomai t ca%a0A]Bagl'Bin#E.Is(Oli!Rasi_Rog#0Cade!C[$Cus#E <Hil,I@QuaReRil>Roba+U 0Ag'Deb{DomeEgu#Eri!IpeOtt&Ul&1Fabi,Fe|Fis(F-n Oris`O(R~$0AveEn.E_,Ganc'I!It&OnismoR>*Rume Uzzo4AbardaA Bat)Ber#BoBumeCeCol>E|<FaGeb-Ian.IbiIm[ Lag#Leg)Lie_Lo@/Lusi_Me$Oge$Pa}Pest!Ta,=Ter$T%c'T)veUn$Veo*Z&0Alga`Ani+A!=B{Br#EbaEr~E^s+I]Mas(M[daMir&Mon{O!P'Pli&U, 0A}r@Ag-feAlis+Arch?At-CaCel/Co-D&D!aEl*Ge*Gol&Gus I`Neg&Nid#NoNunc'OnimoT%ipoZi1At>Ertu-OdePari!Pe^ Pogg'P)@Pun Ri,1Ab~AchideAgos+Ald~Anc'Atu-AzzoBit)Chiv'D{Eni,G[ Gi<Gu IaMon?NeseRed#RingaRos S[>SoTef%eZil*0Ciu|Col EpsiEtt>Fal I$O/Pir#P)Sagg'SeSolu Sur@TaT[u T%eT-|0Av>EismoOm>O$TesaTiv&Tor$Tr{Tua,0Sil'Str?Tis+To$moTun$0Anz#E!V[i!Vi(Volge!3Io<O ZimoZur):Be,C}$Ci$CoDessaDi/+Gn#I+L]<L@Le=L/+Lza$Mbi$Ndi!RaondaRba)R}R{$RlumeRoc]Sil>S(Tos+Ttu U,VaVosa3C]FfaLg'LvaNdaNe_,Nig$Nzi=ReRli=Ta3Bi+CiDo<Fi@GaLanc?MboNo]*O*goPedePol&Rban.R-S]|Ses S$n$Son.SturiZzar)2An@At+2Ll{Nif>R@S]Tan>T^$Zzo*2Acc'AdipoA`An}Avu-E.l/Eve|EzzaIgl?Il/n.Ind&Oc]*O@Onzi=Ul*U$2Bbo<CaDi$Ffo<IoLboO$R*<R-s}S(/S+:De|Du]La`)L]*LesseLib)LmoLor?MbusaMe-+M%?Mmi$Mo/Mpa,NapaNde/NeNi$No|N^=PacePel*P{*Pogi)Ppe)P-Psu/RapaceR}ssaR@Ris`Rova=R!|R li=Sacc'S}+Ser`SoS(<S.l*Sua,Tas+Te=T-meU Vil*3Dibi,D-+Fa*Leb!Llul&NaNo<N.simoRam~Rc&R RumeRvel*So?SpoTo2E/Ia)Ic}Iede!Ime-I=IrurgoI+r-0AoClismoFr&G$Lind)O|*R}R)siTr>T+di$UffoVet+Vi,2Ass>In~O)2C]Dar@D%eE!n.G$meLl&Lm#Lo!Lpo(L^v#LzaMaMe+M`n@Mo@Mpu.rMu<Nci(Ndur!Nfer`Ngel&NiugeN<s(Nosce!NsumoN^nuoNveg$Per P'<Pp?Pr~poRazzaRda+R%#Rn%eRol/RpoR!@Rs?R.seSm>S+n.Ttu-V#2A.!Avat+E#Ede!Emo(Esci+E+Ice I=,IsiIt>OceO=}Os++Uc?,Us}2Ci!Cu*Gi$Ll#Po/R#!R(!R_Sci$S de:DoI$L`+Meri$Nie/N$(Nz&T#Van^Vve)3Bu|C[n'Ci(Cli$Col*C! D%#Fin{FormeG$Leg&Lfi$Lir'L+M[zaNot#Nt)Pos{Rapa+Riv&RogaScri|Ser Sider'Sume!Tersi_Vo 3Amet)Cemb!Ed)Fe(Ffu(Geri!Gi+,Luv'Nam>N=nziPin P*`Po*Rad&ReRo|RupoSag'Sc! Sf&Sge*Spos S+nzaSu`$ToVa$Vel Vide!Vor#5B*<C[.Ga=,G`LceM#M[~Min&N@*NoRmi!TeT !Vu Zzi=2AgoUi@2Bb'Bit&Ca,NaOmoPl%eRatu):0A$0Ces(CoLissiO$m?0E-I]/I,I r?Uc&2Emon?LiOismoReg'4Abor#Argi!Egan.Enc#E|Ev&F>I}MoSaU(0An#B,`Es(I)O^_Oz'<Pir>U*0Dem>Du)Erg?FasiO.}Tr&Zi`1A^.I*goI(d'O},Pu!0U#!0Ar'BaBo(EdeEmi+Ige!Met>OeOsi_Ran.0Ago$AmeAnimeAudi!CaEmp'Erc{Ib{Ig[.Is.!I OfagoOrt#O(Pan(P!s(S[zaSoTe(Tim&Ton?T)(Ult&0Il>N>Rus]To0ClideoRopa0A(Id[zaIt#Olu Viva:Bbr~Cc[daChi)L]Migl?Na,Nfa-NgoN+s`ReRfal/Ri$(R`]Sc?S (Sul*T%&ToVo*(3Bb!Co/DeG#LpaLt)Mmi=Nde!Nome$Rm[ R)R^,Ssu-S^_T+U@3AbaDuc?FaGur#LoNanzaNest-Ni!O!S},S>Ume2A]<Am[]EboEm`Ori@U[.Uo)2B>Cacc?Co(Der#Gl'La+Lc*!Lgo!Nd[.Net>N?N+=Rb{Rchet+Res+Rm~R='RoR.zzaRz&Sf#S(2A}s(A=Assi$A.l*Eccet+E=+Es]IgoOlli$OndeUga,Ut+2Ci/+Cs?Gg[.Lmi<L_Man.Me|Mo(NeNz'<O]RboRgo<Ro!SoTi,:Bb?$FfeLa.oLli=LoppoMbe)M`Ranz?RboRofa$Rzo<S@|Sol'Str>T Ud'ZeboZzel/3CoLa^=L(Mel*Mm#NeN{!N='No^poRgo2Epar@Iacc'Isa0Al*LdaNep)Oc&Oiel*Or$OveR#Ro<T++Udiz'Ur#Us 2Obu*U^<1Omo0BbaLfM{Mmo<Nf'N=Ver$2Aci,A@Af>AmmoAndeAtt&A_(Az?E}EggeIfo<Ig'InzaOt+Uppo2Adag$A'An Ard&FoId&::0Ern#0O=0Ent>Ill'O*RaR>Roge$2Ie<Na)Nor#4A!Le(Log>Lude!0Bal*Bevu Boc]Bu Ma<Mer(Mol#Pac]Pe PiegoPor P)n+0Al&Arc&At^_Can C[d'Chi$Cisi_Clu(Cont)C)c'CuboDagi<D?Do,Ed{Fat^Fil&Fli|Gagg'Geg$G,seGor@G)s(Nes]O@!Oltr&Ond#Sa$Se|SiemeSonn?Suli=Tas#Te)To=]Tu{Umidi!Vali@VeceV{1Erbo,Not>O.siP~1IdeLandaOn>Rig#Ror&0Ol#O poTer>Titu Tr%e0Al?Er&:::Bb)Birin C}Cer#Cri`Cu=D@veGoMpoNcet+N.r=R@(RgaRingeSt-T[zaTi$TtugaVag=Vo)3Ga,Gge)MboN.zzaNzaO<P!Si_Ss#S T.-,VaVig#3Be)DoEv{L/Matu-Mit&Mpi@Ne&NguaQui@RaR~S}TeTig'V!a5CandaDeG~Mb&Nd-Nge_QuaceR[zoToT.r?5CeCid#Ma}Mi$(NgoPoPpo*SingaS(T :Cab)Cchi=Ce)Cin#Da`G>Gl?G<.G)Iol~LafedeLg-@Lin.(Lsa$L Lumo!NaNc?N@r/Ngi&Nifes N=)Nov-NsardaN^deNubr'PpaR#=Rci!Ret+RmoRsup'Sche-Ssa?S^$Te-s(Tr>/T <Tu)Zur}3And)C}n>Ce=.DesimoDit&GaLassaLisLod?NingeNoN(/Rcur'R[daR*Schi$SeSse!S *Tal*To@T.!3Agol&CaCel'Che,C)boDol*E,Gl'!La$Li.MosaNe-,NiNo!Ri$R^l*Sce/SsivaS Sur&TezzaTig&T-T.n.4Emon>0Del*Dif~Du*Ga$G'LeLos(Nas.)N]Ndi=Ne+r'Ni,No $N(<Nt#Nvi(RaRde!Rs%#St)Tiv#TosegaT V[zaVim[ Zzo5C}CosaFfaGhe|G='La|Li<l*L^p*Mm?N Ove!Ra,SaS]*S~Te_,To:BabboF+Nomet)Rci(R%eRr#Sce!Str&Tu-,Ut~Vigl'3Bu*saC)siGa^_Goz'Mme$Ofi+Re|R_Ssu$Ttu$Ut-,VeV)t>3Cch?NfaTi@5Bi,Ci_DoMeMi=Rd>R`,RvegeseSt-$T&Tiz?Ttur$Vel/5C,oL/Me)O_Tri!Vo/Z?,:Si0Bedi!BligoElis]L'O*So, 0Cas'<Ch'Cid[.Cor!!Cult&RaUl#0Ier$Or&1Fer+Fri!Fusc#0Ge|GiNu$4AndeseFa|I#IvaOg-m`T!0Agg'Bel>B-EgaIss'<0Do(E!IceNi_)O!_,Ta1Er#In'<Pos 1A]*AfoDi<Ecchi$Ef%eFa$Gan>Igi<Izzon.MaMegg'Na^_O*g'R[@Ribi,T[s?T~Za+Zo0A!Cur&MosiPeda,Pi.SaSid&Ta]*Te0I.ReTago$TimoTob!1A,EstI$Ipa)Oc{UnqueVi&3Io:Cche|CeCif>Del/D)<EseGaGi=Lazzi=Les&Lli@LoLudeN@)N<l*O*O=zzoPr~Rabo/Rcel/Re!Rgo*RiRl#Ro/R^!Rv[zaRz?,Ssi_St%}Tac}To*g?TtumeVo<3Cc#Dal&Do=,Gg'Lo(N&Nd%eNi(/Nnu Nomb-Ns&N /PePi+Rbe<R]r(R@n#Rfor&Rgame=R'@Rmes(R$Rp,s(Rsua(Rtug'Rva(S#!Sis+SoS^fe)Ta*T^<Tu/n.Zzo3Ace!An+At^$Cci$CozzaEgaEt-Ffe)G?`Gol'G)LaLife)L*/Lo+Mpan.Ne+N=No*Ogg?OmboRamideRet>Ri.RolisiTo<Zz>2AceboAn&As`A+$E=r'2ChezzaDe)(DismoEs?Ggi&L[+Ligo$Ll%eLmoni.Lpet+L(Lt)=Lve!M%eMo@)N.Po*(Rfi@Ro(Rpo-R!R++SaSi^_Sses(Stul#Tass'Te!2AnzoAssiAt~Eclu(Ed~Efis(Egi#Elie_Eme!E$t&Epar#Es[zaE.s Eval(I`IncipeIv#Ob,`Ocu-Odur!OfumoOge|OlungaOmessaO$meOpos+O)gaO.(OvaUd[.Ug=Ur{0Iche1Bbl>D~Gil#G$LceL{Lsan.Nt&PazzoPil/Ro:99Ad)Al]saAsiE!/O+:C]l D@pp'D~,Dun#Ff~GazzoG'<G$Mar)MingoMoNdag'N l&P#Pi=Pp!(Satu-Schi#S[.Sseg=St!l*TaVvedu 3A,Cepi!Cin Clu+Cond{Cupe)Dd{Dime!Gal#Gist)Go/G!s(Laz'<M&Mo N=Pl~Prime!Put&SaSid[.Spon(S+u)TeTi=Tor~T^f~Voc#3Assun Badi!Bel,B!zzoCar~C]Ceve!C%l#Cor@C!du D>*Dur!Fas&F,s(For`Fug'G&Gett#Ghel*Lass#Lev#Ma<!MbalzoMed'Morch'Nasci+N})NforzoN$_Nom#Nsav{N c]Nunc?Nv[i!Par#Petu Pie$Port&P!saPuli!Sa+Sch'ServaSibi,SoSpe|S )Sult#S_l Tar@Teg$Tm>T)_Un'<VaVer(Vinci+Vol Zo`5BaBot>Bus Cc?CoDagg'De!D{!G{Ll'Mant>Mpe!Nz'Sol&SpoTan.Ton@Tu/Vesc'5BizzoBr~GaLli$Mi<Mo)(O*PeSs&St>:B#Bbi&Bot#Go`Las(Ldatu-Lgem`Liv&Lmo<Lo<Lt&Lu L_Pe!Pi@Por{Race$R}smoR S((Telli.Ti-Tol*Tur$Va=V'Zi#0Adigl'AlzoAnc#Ar-At.!Av&End&Irci&Locc#Occi#Rin&Ruffo<Uff&0Ab)(Ad[zaA/Ambi&Anda*Apo/Ar(A.n&Av#El En>Ett)HedaHie=IarpaI[zaInde!IppoI)ppoI_*Ler&Odel/Olp{Ompar Onfor Opri!Or+Os(<OzzeseRibaRoll&Ru^n'Uder?Ul !Uo/U)Us&0Ebit&Ogan&0C}tu-Con@Da$Gg'/G=l#G!g#Gu{Lci#Let^_L/Lvagg'Mafo)Mbr&MeMin#Mp!N(N^!Pol Qu[zaRa+Rb#Re$R'Rp[.R-gl'Rvi!S^=To/T^`=0Ace*Ald&Am#Arzo(At%#E-IdaIl#IngeOc#Oder&OgoOl^!Orz#Ra|Rutt#Ugg{Um&U(0Abel*Arb#Onfi&Orb'Rass#Uar@1Bi*C]meEr-G/G$!L[z'L/baMbo*Mpat>Mul#Nfon?Ngo*Nist)NoN.siNu(idePar'S`S ,Tu#2It+Ogatu-Ove$0Arr{Emor#En^ E-l@IlzoOnt&Ott#Uss#0Elli!Erv#O@0BbalzoBr'C]r(C?,Da,Ffi|G$Ld#L[<Li@L/zzoLoLubi,Lv[.Mat>M`NdaNe|Nnife)Pi!Ppe(P-Rge!Rpas(Rri(R(R.gg'R_l#Spi)S+T^,0AdaAl/Arge!A /Av[ Azzo/EcieEdi!Eg<!E/tu-E-nzaEs(!Ett-,Ezz#IaIgo*(Ill#I$(I-,L[di@Or^_O(RangaRec&Ron#RuzzoUn^$0Uil*0Ad%&O l#1Abi,Ac]AffaAgn&Amp#Ant'Arnu Ase-Atu E*EppaErzoI,|I`IrpeIva,Izzo(On#Or>RappoReg#Ridu*Rozz&Ru|Ucc&UfoUp[@0B[t)C](Do!Gger{GoL+$On&PerboPpor Rgel#R)g#Ssur)Tu-0Ag&EdeseEgl'El&Enu Ez?IluppoIs+Izze-Ol+Uot&:Bac]Bul#Cci&Citur$LeLis`$Mpo<Nni$RaRdi_Rg#RiffaRp&R+rugaS Tt>Ver=Vo/+Zza3CaCn>Lefo$Me-r'MpoMu N@<Ne)Ns'<N+]*O!`RmeR-zzoRze|SiSser#St#T)T ?3F&Gel/Mb)N P>Pog-foRagg'RoTan'To*Tuban.Z'Zzo<5Cc&L,r&L Mbo/MoNfoNsil/Paz'Po*g?PpaRbaRn&R)<R -S}$Ssi!S+tu-Ta$2Aboc]AcheaAfi/Aged?Alc'Amon Ans{Apa$Ar!As*]Att#AveEcc?Emol'Espo*Ibu Iche]Ifogl'Il*InceaIoIs.zzaItur#Ivel/OmbaO$OppoO|/Ov&Ucc#2Batu-Ff#Lipa$Mul Nis?Rb&Rchi$TaTe/:0Ic#0Cel*Ci(!0I!I^_1FaF%'0Ua,4IsseTim#0A$I,Orismo0Ci<|Ge!Ghe!seI]r$If%#I($I+r'Te0Vo0Upa1Aga$G[zaLo0AnzaA C{Ig$*U-'0Ensi,IlizzoOp?:Can.Ccin#Gabon@Gli#LangaLgoL>L,t+Lo)(Lut&L_/Mpa+Ng&N{(NoN+gg'Nve-Po!Ra$Rc#R?n.S}3Det+DovaDu Ge+,I]*Lc)Li=Llu LoceN#Ndemm?N RaceRba,Rgog=Rif~RoRru}Rt~,Sc~Ssil*S+,Te-$Tri=Tus 3Andan.B-n.C[daChingoCi=nzaDim&Gil?G< Go!LeL/$MiniNc{!O/Pe-Rgo/Ro*goRu,n S](S'<SpoSsu Su-TaTel*T^`VandaVi@Zi&5CeGaLa^,Le!LpeRagi<5L}$::::Mpog=N=Pp#T.-Vor-3Fi)Lan.LoNze)Rbi$3Be|N]R]<T 5L/T>5Cche)Fo*LuPpa\";\nconst checksum = \"0x5c1362d88fd4cf614a96f3234941d29f7d37c08c5292fde03bf62c2db6ff7620\";\n\nlet wordlist: null | LangIt = null;\n\n/**\n *  The [[link-bip39-it]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangIt extends WordlistOwl {\n\n    /**\n     *  Creates a new instance of the Italian language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langIt]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"it\", words, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangIt``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangIt {\n        if (wordlist == null) { wordlist = new LangIt(); }\n        return wordlist;\n    }\n}\n", "import { WordlistOwl } from \"./wordlist-owl.js\";\n\nconst words = \"0arad!ototealirertainrasoent hoandoaR#riareha!aroele'oronul0Aca%AixoAl A%rDuz'El]Er$IsmoO$ R<g(Revi Rig Rup$S*$Solu$Sur=Ut[0Ab#Alm Amp Anh A,Ei.El( En ErvoEss E$naHa.IdezImaI}#Irr Lam LiveOlhidaOmod Opl Ord Um~ Us?0Ap.EgaEnt_Ep$Equ Er-%EsivoEusI<%ItivoJetivoJun$M' Or Qu''UboV(,Vog#0R}ave0As.Er'EtivoIn?Iv` Li$Lu-%R}.0Ach Arr As&/Enci Iliz Io)It#O+R! Res%Rup U d Ul]2O`h Ud Us.1AmedaArmeAstr Av<caB(gueB*oCat+De@EcrimEgr@Er.FaceF*e%GumHeioI Ica%I- Inh Ivi Mof^Oc Pis%T( TitudeUc* Ug UnoUsivoVo0Aci A=rA[loAss BasBi-%EixaEniz I=Is$,Iz!eOl?On$ O_,Ost+P  Pli Pola0Ag+maAlis Arqu@A$m@DaimeElExoG~ Im JoOm&@Ot#Sio,T(i|Uid!eUnci Zol1Ag?Alp Anh#EgoEli=Ert^Es Eti%I$Lau,Lic^OioOn.Os)R-dizRov 0Uec(0AmeAn]A+C^D-%E@Ej Eni$Es)Gilo,GolaMaQuivoRai&Reba%Risc Rob>um S-&T(i&TigoVo[=0F&.Il#P' S?S* So&/Sun$Tr&0Ac#Adu+Al/A[f E End(Er_EuIng'Ir?IvoOl{oRac Revi=RizU&Um0Di$rM-.R>o+TismoT|@Tu 0Ali An%Ar@Ent&Es,I?Is Ul,1Ila1Ar E=Ei%Ulejo:B BosaC&]uCh `C@GagemI<oIl I}e)Ir_Ixis)J~ Le@LizaLsaN&Nd{aN/N'Nque%Ra$Rb#R}es>+c>~/Se#S)n%Ta)Te=rTidaTomTuc Unil]3B(IjoIr^IsebolLd!eLezaLgaLisc Ndi$Ng&aNz(RimbauRl*d>_Sou_XigaZ(_3CoCu=En&Foc&Furc G|naLhe%Mest[Mo$rOlog@OmboOsf(aPol Rr-$Scoi$Sne$SpoSsex$TolaZ _2Ind#OcoOque 2A$BagemC#CejoChec]Ico.L^LetimL]LoMb{oNdeNecoNi)Rb~h>d>e&R+c]V*oXe?2AncoAsaAvezaEuIgaIl/Inc OaOchu+Onze O$Uxo2C]DismoF LeRacoScaS$Z*a:B<aB`oBideBoBri$CauCet^C/r_CiqueDast_De#Fez&IaqueIp'aIxo%J#JuLafrioLc~ Ld{aLibr Lm<%Lo)M^Mbis)MisaMomilaMp<]Mufl Navi&Nc` Ne)NguruN/$Nive%NoaNs#N.Nu=Pac/P`aP* Po.Pric/Pt?PuzRacolRb}oRde&Rec>imb Rn{oRpe%R['>)zRv&/SacoScaSeb[S%loS~oT a)Tiv UleUs?U%l V&oV(na3BolaDil]G}]Lebr L~ Nou+N,N%ioRc Rr#R%'oRvejaTimV^2Aco)Al{aAm#Ap^ArmeAticeAveEfeEg^E'oEqueIco%If[In`oOc&/Ov(UmboU.Uva0CatrizCl}eD!eD['aEn%G<aM-$N$Nz><d>cui$Rurg@T 2A[zaE_Ic OneUbe2A=Ag'Ba@B($rBr C^El/Ent_E,Gum`oIb'IfaIo%L L{aLh(Lid'Lme@L}oLunaM<=Mb* M-.MitivaMov(MplexoMumNc]N=rNec.Nfu,Ng` Nhec(Njug Nsum'Nt+$Nvi%Op( P{oPi?PoQue%lRagemRdi&Rne)R}h>p|&R[ioR%joRuj>voSs-oS%laT}e%U_UveVilZ*]2A%+AvoEcheE=rEmeErEspoI^Im*&Io~oIseItic Os)UaUz{o2B<oEcaId#JoLat+Lm* Lp Ltu+Mpr'Nh#Pi=RativoRr&Rs R$Sp'S% T`o:MascoT 3Ba%rBi.BocheB~h C&queCim&CliveCo%C[.D&Dic#Duz'FesaFum G`oG+uGus.It#Ix La$rLeg#L*e L}gaM<daMit'Moli=Ntis)P-#Pil PoisP[ssaPur Riv>+m SafioSbo.Sc<,S-/Sfi#Sgas%Sigu&SlizeSmam SovaSpesaS)queSvi T&h T-$rT} Tri$UsaV(Vi=Vot#Z-a3Ag+maAle$Da)Fu,Gi.Lat#Lu-%M*u'Nast@Nh{oOceseRe$Sc[)Sf ceSp oSque%Ssip S)n%T?UrnoV(,Vi,rV~g Z(5Br?L|i=M?M*#NativoNz`>m-%Rs&SagemUr#U$r2EnagemIbleOg @2El EndeE$PloQues><%Vi=,:1Lod'O Olog@0Ific It&Uc#1Ei$Etiv 3E.1Ab| Eg(Ei$rEncoEv?Im* Ogi 0B goBol#Br~/Buti=EndaErg'Is,rPat@P-/P*#Polg P[goPurr Ul?0CaixeC-#Ch-%C}t_Deus Doss Faix Fei%FimGaj#G-/Glob Gom#G+x Gu@Jo La.Qu<$Raiz Rol#Rug SaioSe^S*oSop#T<$Te#Tid!eT|.Tr^T~/V(g Vi#Volv(XameX($Xof[Xu$1Id(me0Uip 0E$Gui=Ra)VaVil]0B<j B`$CamaColaCri)Cu)F*geFol F[g Fum#GrimaM&%P<$P`/PigaP}jaP[i)Pum Qu(daTacaT{aTic Tof#T[laTu=Vazi 0AnolIque)0F|i>opeu0Acu Ap| AsivoEntu&Id-%Olu'1Ag(oAl Am* A$Aus$Ces,Ci.Clam Ecu.EmploIb'Ig-%On( P<d'P`'P' Pl< Pos$P[s,P~s T(noT*$T+$:Bric B~o,Ce)Ci&DaDigaIxaL L)Mili Nd<goNf +N$cheRd#R`oR*h>of>p>tu+T@T|V|i)X*aZ-da3Ch#Ijo^I+n%L*oM**oNdaNoR>i#RrugemRv(S%j T&Ud&3ApoB_seC Ch{oGur#L{aL/LmeLtr RmezaSg^Ssu+TaV`aX?Xo2AcidezAm*goAn`aEch^O+Utu Uxo2C&C*/Foc GoGue%IceLg#Lhe$Rj Rmig>noR%ScoSsa2Aga)AldaAngoAscoA%rnoE'aEn%E.IezaI,Itu+On]Ustr U%'a2G'L<oLigemNd NgoNilR?Rio,Tebol:B i$B*e%DoIa$IolaIvo)LegaL/L*]Loc]Nh RagemRfoRg&oRimpoRoup>+faSodu$S$TaTil/Ve)Z`a3L#Le@LoM^M(Mi=N(o,NgivaNi&NomaN_Ologi>?Rm* S,S$r3Nas)Nc<aNg#Raf>*o2Aci&IcoseOb&Orio,2ElaIabaLfeLpe Rdu+Rje)R_S$,T{aV(n 2AcejoAdu&Afi%Al]AmpoAn^Atui$Ave$AxaEgoElh EveIloIs&/I.@Os,O%scoUd#Unhi=U)2AcheA+niAx*imEr[ I Inc/Is#LaLo,Ru:Bi.Rm}@S%V(3C.eRd Res@Si.3A$B(n D+.EnaNoPismoPnosePo%ca5JeLofo%MemNes$Nr#Rm}&Sped 5M|#:Te2E@O,2N|#RejaU<a4E,HaUdi=Um* Ustr 0AgemEd@$En,ErsivoIn-%It?Ort&Pac$Ped'Pl<%P|Pr-saPuneUniz 0Al?Ap$AtivoC-,Ch Cid'Clu'Col|Deci,D'e$Du$rEficazEr-%F<tilFes.F*i$Flam F|m&F+$rG('Ibi=Ici&ImigoJe.Oc-%O=_Ov?OxQuie$Scri$Se$Sist'Spe$rSt& S~$Tac$Tegr&Tim Toc#TrigaVa,rV(noVic$Voc 0Gur%2Ani<oOniz Re&Rit#0CaEn$Ol#Qu{o0Ali<o:N{oNg^N)R ac>dimR_SmimToV&iZida3Jum9An*]Elh^G?I>n&Rr Vem5BaDeuDocaIzLg?L/R#Ris)RoS)::B edaB|&C[C)n%Dril/G )GoaJeMb(M-.M* MpejoNchePid P,R<j>{>gu+S<]St_T(&Ti=V<daVou+Vr?X<%Z(3Ald!eB[G#G-d Gis)IgoIlo Itu+Mb[%MeNh?Ntil]OaSmaS%TivoT['oV VezaVi.3B(&Bi=D( G G{oMi.Mo{oMp?NdaNe N]gemQuidezS)gemSu+T|&V_XaX{a5C?Cu$rJis)MboNaNgeNt+RdeT#T(@Ucu+UsaUv 5ArCidezC_Ne)St[T?Va:CacoCe%Ch#CioD{aDr*]Gna)G[zaI|IsL<d_L]Lo%LucoMiloMo{oMu%N^Nc]Nda$NequimN/,Niv`aNobr NsaN%rNuse Pe#Qu* Rc?Resi>fimRgemR*/Rmi)Ro$RquiseR[coR%loRujoSco%Sm|+SsagemStig Tag&T(noT*&Tu.Xil 3D&]DidaDusaGaf}eIgaL<c@L/rMb_M|i&N*oNosNsagemNt&Rec(Rg~/S^Scl SmoSqui)St[T!eTeo_T+gemX(Xic<o3C_G&]Gr Lag[L- Lh M#N( N/caNist_N|@OloR<%RtiloStur 5Cid!eD(noD~ EdaErIn/I)Ldu+LezaL/L*e%LuscoN)n]Quec><goRcegoR=moR-aSaicoSque%S.daT`TimToTriz5DaI$La)Lh(L.Ndi&Ni=R&h>c/Sc~ SeuSic&:Ci}&D?JaMo_R*>r#Sc(TivaTu[zaV&]Veg Vio3Bl*aB~o,GativaGoci Gri$Rvo,TaUr&VascaVo{o3N N/TidezV` 5B[zaI%IvaMe M*&Rdes%R% T Tici TurnoV`oVil/Vo5Bl#DezM(&Pci&Tr'Vem:0Cec#Edec(JetivoRig#Scu_S%t+T(Tur 0Id-%Io,Orr(Ulis)Up#2Eg<%EnsivaEr-daIc*aUsc#0Iva4Ar@Eo,H Iv{a0B_Ele%Is,It'0D~#E_,Tem1Ci}&Er?On-%OrtunoOs$1ArBi.DemD*&F<a$GasmoG~/I-t&IgemIun=LaTo=xoV&/0Cil S^SoT-.0Imismo0S!@T}oTub_Vi=0El]Ul 1Id Ig- :Ca$Ci-%Co%Ctu D @Dr*/G GodeIn`Ir IsagemLav+Lest+Lhe)Li$Lm^Lpi.Nc^N`aNfle$NquecaN)n&PagaioP`^P'oRaf*>ci&Rd&RedeRtidaSmoSs#S%lTam T-%T* T_noUl^Us 3C~i D& Dest[D@t+D+G^I$r&IxeLeLic<oNcaNdur N{aN]scoNs?N%Rceb(Rfei$Rgun)Ri$Rmit'Rn>plexoRsi<>%nceRucaSc#SquisaS,aTisc 3AdaC#Ed!eGm-$Last+Lh#Lo.M-)Nc`NguimN]No%N.On{oPocaQue%R<h>esRue)Sc S$laT<gaVe%2An)Aque)At*aEbeuUmagemUvi&1Eu0DaE'aEtisaLeg^Lici Lu-%Lvil/M MbaNd( N.@P~o,R)Ssu'St&TeUp U,Vo 2A@Anc]A$AxeEceEd?Efei$Emi Ens Ep  Esil]E%x$Ev-'Ez Ima)IncesaIsmaIv#Oces,Odu$Ofe)Oibi=Oje$Ome%rOpag OsaO%$rOv?2Blic DimL Lm} Ls{aNh&N'PiloRezaX?:99Ad+Ant@Ar$AseEbr EdaEijoEn%Eri=Im}oInaIosque:B<^BiscoCh Ci} Di&I In]IoIvaJ^L#M&Ng(Nhu+P!u+P`PidezPosaQue%Rid!eS<%Scun/Sg Sp?S%'aSur Taz<aTo{a3AlezaAnim Av(Baix B`deBol C#C-%CheioCiboC|d Cru.Cu DeDim'D}daDuzidaEnvioF* Flet'Fog F[scoFugi G&@GimeG+In#I$rJei.LativoM?M-=M|,Nov#P oP`'Ple$Pol/P[saPudi Qu((S-]Sfri Sga.Sid'Solv(Spei$SsacaS)n%Sum'T&/T(T' Tom^T+.V` Vi,rVol)3Ac/CaGidezGo_,M NgueS^ScoS}/5B&oChe=D^DeioDov@E=rLe)M<oNc S#S{aS$TaT{oT*aT~ UcoUpaXo5B_Gi=Go,IvoMoPest[S,:B|Ci ColaCud'DioF'aGaGr^Ib_L^L{oLg#LivaLpic Lsic]L.Lv?Mb Mu+iN Nf}aNgueNid!ePa$Rd>g-$Rje)Tur Ud!eXof}eZ}&3C C~ DaD-$Di#Do,Du$rGm-$G[=Gun=IvaLe$LvagemM<&M-%N?N/rNsu&Nt#P #Rei>*g>+RvoTemb_T|3GiloLhue)Lic}eMetr@Mpat@M~ N&Nc(oNg~ NopseN$ni>-eRiTu#5B(<oB+C|_G_JaLdaLetr L%'oMbrioNa)Nd Neg Nh?NoP+noQue%Rr'R%ioSsegoTaqueT(r V#Z*/5Aviz BidaBm(,B,loBt+'Ca)Ces,CoDes%FixoG?G('Jei$Lfa$M'OrP(i|Plic Pos$Prim'Rd*>fis)Rp[s>[&Rt'Sp'oS%n$:B`aBle%Bu^C/G `aLh(LoLvezM</Mb|imMpaNg-%N$P Pioc>dioRef>j>+xaTuagemUr*oXativoXis)3Atr&C(Ci=Cl#Dio,IaIm Lef}eLh#Mp(oN-%N,rN.Rm&RnoRr-oSeSou+St#ToXtu+Xugo3A+G`aJoloMbr MidezNgi=N%'oRagemT~ 5Al]C]L( LiceM^Mil/N`Ntu+Pe%R>ci=RneioRqueRr!>$S.UcaUp{aX*a2Ab&/Acej Adu$rAfeg Aje$AmaAnc ApoAs{oAt?Av E*oEm(Epid EvoIagemIboIcicloId-%Ilog@Ind!eIploItur Iunf&Oc Ombe)OvaUnfoUque2B~ C<oDoLipaPiRboRm>quesaT` T|i&:7V 3Bigo0HaId!eIf|me3Olog@SoTigaUbu0A=InaUfru':C*aDi G o,I=,LaL-%Lid!eLo[sN)gemQu{oR<d>e)Rr(Sc~ Sil]S,u+Z Zio3A=D Ge.Ic~ L{oLhiceLu=Nce=rNdav&N( Nt[Rb&Rd!eRe?Rg}h>m`/RnizRs R%n%SpaSti=T|i&3Adu$AgemAj Atu+Br?D{aDr @ElaGaG-%Gi G| L ejoNcoNhe)NilOle)R!>tudeSi.S$Tr&V{oZ*/5A=rArG&L<%LeibolL)gemLumo,Nt!e5L$Vuz`a::D[zRope3QueRe.Rife3Ng ::Ng#Rp 3BuL?9Mb Olog@5Mbi=\";\nconst checksum = \"0x2219000926df7b50d8aa0a3d495826b988287df4657fbd100e6fe596c8f737ac\";\n\nlet wordlist: null | LangPt = null;\n\n/**\n *  The [[link-bip39-pt]] for [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangPt extends WordlistOwl {\n\n    /**\n     *  Creates a new instance of the Portuguese language Wordlist.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langPt]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor() { super(\"pt\", words, checksum); }\n\n    /**\n     *  Returns a singleton instance of a ``LangPt``, creating it\n     *  if this is the first time being called.\n     */\n    static wordlist(): LangPt {\n        if (wordlist == null) { wordlist = new LangPt(); }\n        return wordlist;\n    }\n}\n\n", "import { id } from \"../hash/index.js\";\nimport { assertArgument, toUtf8String } from \"../utils/index.js\";\n\nimport { Wordlist } from \"./wordlist.js\";\n\n\nconst data = \"}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN<di,AM=W5%QO&ka&ua,hM^tm=zV=JA=wR&+X]7P&NB#4J#5L|/b[dA}tJ<Do&6m&u2[U1&Kb.HM&mC=w0&MW<rY,Hq#6M}QG,13&wP}Jp]Ow%ue&Kg<HP<D9~4k~9T&I2_c6$9T#9/[C5~7O~4a=cs&O7=KK=An&l9$6U$8A&uD&QI|/Y&bg}Ux&F2#6b}E2&JN&kW&kp=U/&bb=Xl<Cj}k+~5J#6L&5z&9i}b4&Fo,ho(X0_g3~4O$Fz&QE<HN=Ww]6/%GF-Vw=tj&/D&PN#9g=YO}cL&Of&PI~5I&Ip=vU=IW#9G;0o-wU}ss&QR<BT&R9=tk$PY_dh&Pq-yh]7T,nj.Xu=EP&76=cI&Fs*Xg}z7$Gb&+I=DF,AF=cA}rL#7j=Dz&3y<Aa$52=PQ}b0(iY$Fa}oL&xV#6U=ec=WZ,xh%RY<dp#9N&Fl&44=WH*A7=sh&TB&8P=07;u+&PK}uh}J5#72)V/=xC,AB$k0&f6;1E|+5=1B,3v]6n&wR%b+&xx]7f=Ol}fl;+D^wG]7E;nB;uh^Ir&l5=JL,nS=cf=g5;u6|/Q$Gc=MH%Hg#5d%M6^86=U+$Gz,l/,ir^5y&Ba&/F-IY&FI&be%IZ#77&PW_Nu$kE(Yf&NX]7Z,Jy&FJ(Xo&Nz#/d=y7&MX<Ag}Z+;nE]Dt(iG#4D=13&Pj~4c%v8&Zo%OL&/X#4W<HR&ie~6J_1O(Y2=y5=Ad*cv_eB#6k&PX:BU#7A;uk&Ft&Fx_dD=U2;vB=U5=4F}+O&GN.HH:9s=b0%NV(jO&IH=JT}Z9=VZ<Af,Kx^4m&uJ%c6,6r;9m#+L}cf%Kh&F3~4H=vP}bu,Hz|++,1w]nv}k6;uu$jw*Kl*WX&uM[x7&Fr[m7$NO&QN]hu=JN}nR^8g#/h(ps|KC;vd}xz=V0}p6&FD$G1#7K<bG_4p~8g&cf;u4=tl}+k%5/}fz;uw<cA=u1}gU}VM=LJ=eX&+L&Pr#4U}p2:nC,2K]7H:jF&9x}uX#9O=MB<fz~8X~5m&4D&kN&u5%E/(h7(ZF&VG<de(qM|/e-Wt=3x(a+,/R]f/&ND$Ro&nU}0g=KA%kH&NK$Ke<dS}cB&IX~5g$TN]6m=Uv,Is&Py=Ef%Kz#+/%bi&+A<F4$OG&4C&FL#9V<Zk=2I_eE&6c]nw&kq$HG}y+&A8$P3}OH=XP]70%IS(AJ_gH%GZ&tY&AZ=vb~6y&/r=VI=Wv<Zi=fl=xf&eL}c8}OL=MJ=g8$F7=YT}9u=0+^xC}JH&nL^N0~4T]K2,Cy%OC#6s;vG(AC^xe^cG&MF}Br#9P;wD-7h$O/&xA}Fn^PC]6i]7G&8V$Qs;vl(TB~73~4l<mW&6V=2y&uY&+3)aP}XF;LP&kx$wU=t7;uy<FN&lz)7E=Oo*Y+;wI}9q}le;J6&Ri&4t&Qr#8B=cb&vG=J5|Ql(h5<Yy~4+}QD,Lx=wn%K/&RK=dO&Pw,Q9=co%4u;9u}g0@6a^4I%b0=zo|/c&tX=dQ=OS#+b=yz_AB&wB&Pm=W9$HP_gR=62=AO=ti=hI,oA&jr&dH=tm&b6$P2(x8=zi;nG~7F;05]0n[Ix&3m}rg=Xp=cd&uz]7t;97=cN;vV<jf&FF&F1=6Q&Ik*Kk&P4,2z=fQ]7D&3u,H0=d/}Uw<ZN<7R}Kv;0f$H7,MD]7n$F0#88~9Z%da=by;+T#/u=VF&fO&kr^kf<AB]sU,I5$Ng&Pz;0i&QD&vM=Yl:BM;nJ_xJ]U7&Kf&30,3f|Z9*dC)je_jA&Q4&Kp$NH(Yz#6S&Id%Ib=KX,AD=KV%dP}tW&Pk^+E_Ni=cq,3R}VZ(Si=b+}rv;0j}rZ]uA,/w(Sx&Jv$w9&4d&wE,NJ$Gy=J/]Ls#7k<ZQ<Y/&uj]Ov$PM;v3,2F&+u:up=On&3e,Jv;90=J+&Qm]6q}bK#+d~8Y(h2]hA;99&AS=I/}qB&dQ}yJ-VM}Vl&ui,iB&G3|Dc]7d=eQ%dX%JC_1L~4d^NP;vJ&/1)ZI#7N]9X[bQ&PL=0L(UZ,Lm&kc&IR}n7(iR<AQ<dg=33=vN}ft}au]7I,Ba=x9=dR~6R&Tq=Xi,3d$Nr&Bc}DI&ku&vf]Dn,/F&iD,Ll&Nw=0y&I7=Ls=/A&tU=Qe}Ua&uk&+F=g4=gh=Vj#+1&Qn}Uy*44#5F,Pc&Rz*Xn=oh=5W;0n_Nf(iE<Y7=vr=Zu]oz#5Z%mI=kN=Bv_Jp(T2;vt_Ml<FS&uI=L/&6P]64$M7}86<bo%QX(SI%IY&VK=Al&Ux;vv;ut*E/%uh<ZE|O3,M2(yc]yu=Wk&tp:Ex}hr,Cl&WE)+Z=8U}I2_4Q,hA_si=iw=OM=tM=yZ%Ia=U7;wT}b+;uo=Za}yS!5x}HD}fb#5O_dA;Nv%uB(yB;01(Sf}Fk;v7}Pt#8v<mZ#7L,/r&Pl~4w&f5=Ph$Fw_LF&8m,bL=yJ&BH}p/*Jn}tU~5Q;wB(h6]Df]8p^+B;E4&Wc=d+;Ea&bw$8C&FN,DM=Yf}mP~5w=fT#6V=mC=Fi=AV}jB&AN}lW}aH#/D)dZ;hl;vE}/7,CJ;31&w8,hj%u9_Js=jJ&4M~8k=TN&eC}nL&uc-wi&lX}dj=Mv=e2#6u=cr$uq$6G]8W}Jb:nm=Yg<b3(UA;vX&6n&xF=KT,jC,De&R8&oY=Zv&oB]7/=Z2&Oa}bf,hh(4h^tZ&72&Nx;D2&xL~5h~40)ZG)h+=OJ&RA]Bv$yB=Oq=df,AQ%Jn}OJ;11,3z&Tl&tj;v+^Hv,Dh(id=s+]7N&N3)9Q~8f,S4=uW=w4&uX,LX&3d]CJ&yp&8x<b2_do&lP=y/<cy_dG=Oi=7R(VH(lt_1T,Iq_AA;12^6T%k6#8K[B1{oO<AU[Bt;1b$9S&Ps<8T=St{bY,jB(Zp&63&Uv$9V,PM]6v&Af}zW[bW_oq}sm}nB&Kq&gC&ff_eq_2m&5F&TI}rf}Gf;Zr_z9;ER&jk}iz_sn<BN~+n&vo=Vi%97|ZR=Wc,WE&6t]6z%85(ly#84=KY)6m_5/=aX,N3}Tm&he&6K]tR_B2-I3;u/&hU&lH<AP=iB&IA=XL;/5&Nh=wv<BH#79=vS=zl<AA=0X_RG}Bw&9p$NW,AX&kP_Lp&/Z(Tc]Mu}hs#6I}5B&cI<bq&H9#6m=K9}vH(Y1(Y0#4B&w6,/9&gG<bE,/O=zb}I4_l8<B/;wL%Qo<HO[Mq=XX}0v&BP&F4(mG}0i}nm,EC=9u{I3,xG&/9=JY*DK&hR)BX=EI=cx=b/{6k}yX%A+&wa}Xb=la;wi^lL;0t}jo&Qb=xg=XB}iO<qo{bR=NV&8f=a0&Jy;0v=uK)HK;vN#6h&jB(h/%ud&NI%wY.X7=Pt}Cu-uL&Gs_hl%mH,tm]78=Lb^Q0#7Y=1u<Bt&+Q=Co_RH,w3;1e}ux<aU;ui}U3&Q5%bt]63&UQ|0l&uL}O7&3o,AV&dm|Nj(Xt*5+(Uu&Hh(p7(UF=VR=Bp^Jl&Hd[ix)9/=Iq]C8<67]66}mB%6f}bb}JI]8T$HA}db=YM&pa=2J}tS&Y0=PS&y4=cX$6E,hX,XP&nR;04,FQ&l0&Vm_Dv#5Y~8Z=Bi%MA]6x=JO:+p,Az&9q,Hj~6/}SD=K1:EJ}nA;Qo#/E]9R,Ie&6X%W3]61&v4=xX_MC=0q;06(Xq=fs}IG}Dv=0l}o7$iZ;9v&LH&DP-7a&OY,SZ,Kz,Cv&dh=fx|Nh,F/~7q=XF&w+;9n&Gw;0h}Z7<7O&JK(S7&LS<AD<ac=wo<Dt&zw%4B=4v#8P;9o~6p*vV=Tm,Or&I6=1q}nY=P0=gq&Bl&Uu,Ch%yb}UY=zh}dh}rl(T4_xk(YA#8R*xH,IN}Jn]7V}C4&Ty}j3]7p=cL=3h&wW%Qv<Z3=f0&RI&+S(ic_zq}oN&/Y=z1;Td=LW=0e=OI(Vc,+b^ju(UL;0r:Za%8v=Rp=zw&58&73&wK}qX]6y&8E)a2}WR=wP^ur&nQ<cH}Re=Aq&wk}Q0&+q=PP,Gc|/d^k5,Fw]8Y}Pg]p3=ju=ed}r5_yf&Cs]7z$/G<Cm&Jp&54_1G_gP_Ll}JZ;0u]k8_7k(Sg]65{9i=LN&Sx&WK,iW&fD&Lk{9a}Em-9c#8N&io=sy]8d&nT&IK(lx#7/$lW(Td<s8~49,3o<7Y=MW(T+_Jr&Wd,iL}Ct=xh&5V;v4&8n%Kx=iF&l2_0B{B+,If(J0,Lv;u8=Kx-vB=HC&vS=Z6&fU&vE^xK;3D=4h=MR#45:Jw;0d}iw=LU}I5=I0]gB*im,K9}GU,1k_4U&Tt=Vs(iX&lU(TF#7y,ZO}oA&m5#5P}PN}Uz=hM<B1&FB<aG,e6~7T<tP(UQ_ZT=wu&F8)aQ]iN,1r_Lo&/g:CD}84{J1_Ki&Na&3n$jz&FE=dc;uv;va}in}ll=fv(h1&3h}fp=Cy}BM(+E~8m}lo%v7=hC(T6$cj=BQ=Bw(DR,2j=Ks,NS|F+;00=fU=70}Mb(YU;+G&m7&hr=Sk%Co]t+(X5_Jw}0r}gC(AS-IP&QK<Z2#8Q$WC]WX}T2&pG_Ka,HC=R4&/N;Z+;ch(C7,D4$3p_Mk&B2$8D=n9%Ky#5z(CT&QJ#7B]DC]gW}nf~5M;Iw#80}Tc_1F#4Z-aC}Hl=ph=fz,/3=aW}JM}nn;DG;vm}wn,4P}T3;wx&RG$u+}zK=0b;+J_Ek{re<aZ=AS}yY#5D]7q,Cp}xN=VP*2C}GZ}aG~+m_Cs=OY#6r]6g<GS}LC(UB=3A=Bo}Jy<c4}Is;1P<AG}Op<Z1}ld}nS=1Z,yM&95&98=CJ(4t:2L$Hk=Zo}Vc;+I}np&N1}9y=iv}CO*7p=jL)px]tb^zh&GS&Vl%v/;vR=14=zJ&49|/f]hF}WG;03=8P}o/&Gg&rp;DB,Kv}Ji&Pb;aA^ll(4j%yt}+K$Ht#4y&hY]7Y<F1,eN}bG(Uh%6Z]t5%G7;+F_RE;it}tL=LS&Da=Xx(S+(4f=8G=yI}cJ}WP=37=jS}pX}hd)fp<A8=Jt~+o$HJ=M6}iX=g9}CS=dv=Cj(mP%Kd,xq|+9&LD(4/=Xm&QP=Lc}LX&fL;+K=Op(lu=Qs.qC:+e&L+=Jj#8w;SL]7S(b+#4I=c1&nG_Lf&uH;+R)ZV<bV%B/,TE&0H&Jq&Ah%OF&Ss(p2,Wv&I3=Wl}Vq;1L&lJ#9b_1H=8r=b8=JH(SZ=hD=J2#7U,/U#/X~6P,FU<eL=jx,mG=hG=CE&PU=Se(qX&LY=X6=y4&tk&QQ&tf=4g&xI}W+&mZ=Dc#7w}Lg;DA;wQ_Kb(cJ=hR%yX&Yb,hw{bX_4X;EP;1W_2M}Uc=b5(YF,CM&Tp^OJ{DD]6s=vF=Yo~8q}XH}Fu%P5(SJ=Qt;MO]s8<F3&B3&8T(Ul-BS*dw&dR<87}/8]62$PZ]Lx<Au}9Q]7c=ja=KR,Go,Us&v6(qk}pG&G2=ev^GM%w4&H4]7F&dv]J6}Ew:9w=sj-ZL}Ym$+h(Ut(Um~4n=Xs(U7%eE=Qc_JR<CA#6t<Fv|/I,IS,EG<F2(Xy$/n<Fa(h9}+9_2o&N4#7X<Zq|+f_Dp=dt&na,Ca=NJ)jY=8C=YG=s6&Q+<DO}D3=xB&R1(lw;Qn<bF(Cu|/B}HV=SS&n7,10&u0]Dm%A6^4Q=WR(TD=Xo<GH,Rj(l8)bP&n/=LM&CF,F5&ml=PJ;0k=LG=tq,Rh,D6@4i=1p&+9=YC%er_Mh;nI;0q=Fw]80=xq=FM$Gv;v6&nc;wK%H2&Kj;vs,AA=YP,66}bI(qR~5U=6q~4b$Ni=K5.X3$So&Iu(p+]8G=Cf=RY(TS_O3(iH&57=fE=Dg_Do#9z#7H;FK{qd_2k%JR}en&gh_z8;Rx}9p<cN_Ne,DO;LN_7o~/p=NF=5Y}gN<ce<C1,QE]Wv=3u<BC}GK]yq}DY&u/_hj=II(pz&rC,jV&+Z}ut=NQ;Cg-SR_ZS,+o=u/;Oy_RK_QF(Fx&xP}Wr&TA,Uh&g1=yr{ax[VF$Pg(YB;Ox=Vy;+W(Sp}XV%dd&33(l/]l4#4Y}OE=6c=bw(A7&9t%wd&N/&mo,JH&Qe)fm=Ao}fu=tH\";\nconst deltaData = \"FAZDC6BALcLZCA+GBARCW8wNCcDDZ8LVFBOqqDUiou+M42TFAyERXFb7EjhP+vmBFpFrUpfDV2F7eB+eCltCHJFWLFCED+pWTojEIHFXc3aFn4F68zqjEuKidS1QBVPDEhE7NA4mhMF7oThD49ot3FgtzHFCK0acW1x8DH1EmLoIlrWFBLE+y5+NA3Cx65wJHTaEZVaK1mWAmPGxgYCdxwOjTDIt/faOEhTl1vqNsKtJCOhJWuio2g07KLZEQsFBUpNtwEByBgxFslFheFbiEPvi61msDvApxCzB6rBCzox7joYA5UdDc+Cb4FSgIabpXFAj3bjkmFAxCZE+mD/SFf/0ELecYCt3nLoxC6WEZf2tKDB4oZvrEmqFkKk7BwILA7gtYBpsTq//D4jD0F0wEB9pyQ1BD5Ba0oYHDI+sbDFhvrHXdDHfgFEIJLi5r8qercNFBgFLC4bo5ERJtamWBDFy73KCEb6M8VpmEt330ygCTK58EIIFkYgF84gtGA9Uyh3m68iVrFbWFbcbqiCYHZ9J1jeRPbL8yswhMiDbhEhdNoSwFbZrLT740ABEqgCkO8J1BLd1VhKKR4sD1yUo0z+FF59Mvg71CFbyEhbHSFBKEIKyoQNgQppq9T0KAqePu0ZFGrXOHdKJqkoTFhYvpDNyuuznrN84thJbsCoO6Cu6Xlvntvy0QYuAExQEYtTUBf3CoCqwgGFZ4u1HJFzDVwEy3cjcpV4QvsPaBC3rCGyCF23o4K3pp2gberGgFEJEHo4nHICtyKH2ZqyxhN05KBBJIQlKh/Oujv/DH32VrlqFdIFC7Fz9Ct4kaqFME0UETLprnN9kfy+kFmtQBB0+5CFu0N9Ij8l/VvJDh2oq3hT6EzjTHKFN7ZjZwoTsAZ4Exsko6Fpa6WC+sduz8jyrLpegTv2h1EBeYpLpm2czQW0KoCcS0bCVXCmuWJDBjN1nQNLdF58SFJ0h7i3pC3oEOKy/FjBklL70XvBEEIWp2yZ04xObzAWDDJG7f+DbqBEA7LyiR95j7MDVdDViz2RE5vWlBMv5e4+VfhP3aXNPhvLSynb9O2x4uFBV+3jqu6d5pCG28/sETByvmu/+IJ0L3wb4rj9DNOLBF6XPIODr4L19U9RRofAG6Nxydi8Bki8BhGJbBAJKzbJxkZSlF9Q2Cu8oKqggB9hBArwLLqEBWEtFowy8XK8bEyw9snT+BeyFk1ZCSrdmgfEwFePTgCjELBEnIbjaDDPJm36rG9pztcEzT8dGk23SBhXBB1H4z+OWze0ooFzz8pDBYFvp9j9tvFByf9y4EFdVnz026CGR5qMr7fxMHN8UUdlyJAzlTBDRC28k+L4FB8078ljyD91tUj1ocnTs8vdEf7znbzm+GIjEZnoZE5rnLL700Xc7yHfz05nWxy03vBB9YGHYOWxgMQGBCR24CVYNE1hpfKxN0zKnfJDmmMgMmBWqNbjfSyFCBWSCGCgR8yFXiHyEj+VtD1FB3FpC1zI0kFbzifiKTLm9yq5zFmur+q8FHqjoOBWsBPiDbnCC2ErunV6cJ6TygXFYHYp7MKN9RUlSIS8/xBAGYLzeqUnBF4QbsTuUkUqGs6CaiDWKWjQK9EJkjpkTmNCPYXL\";\n\n\nconst _wordlist: Record<string, null | Array<string>> = {\n    zh_cn: null,\n    zh_tw: null\n}\n\nconst Checks: Record<string, string> = {\n    zh_cn: \"0x17bcc4d8547e5a7135e365d1ab443aaae95e76d8230c2782c67305d4f21497a1\",\n    zh_tw: \"0x51e720e90c7b87bec1d70eb6e74a21a449bd3ec9c020b01d3a40ed991b60ce5d\"\n}\n\nconst codes = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst style = \"~!@#$%^&*_-=[]{}|;:,.()<>?\"\n\nfunction loadWords(locale: string): Array<string> {\n    if (_wordlist[locale] != null) { return _wordlist[locale] as Array<string>; }\n\n    const wordlist: Array<string> = [];\n\n    let deltaOffset = 0;\n    for (let i = 0; i < 2048; i++) {\n        const s = style.indexOf(data[i * 3]);\n        const bytes = [\n            228 + (s >> 2),\n            128 + codes.indexOf(data[i * 3 + 1]),\n            128 + codes.indexOf(data[i * 3 + 2]),\n        ];\n\n        if (locale === \"zh_tw\") {\n            const common = s % 4;\n            for (let i = common; i < 3; i++) {\n                bytes[i] = codes.indexOf(deltaData[deltaOffset++]) + ((i == 0) ? 228: 128);\n            }\n        }\n\n        wordlist.push(toUtf8String(new Uint8Array(bytes)));\n    }\n\n    // Verify the computed list matches the official list\n    const checksum = id(wordlist.join(\"\\n\") + \"\\n\");\n    /* c8 ignore start */\n    if (checksum !== Checks[locale]) {\n        throw new Error(`BIP39 Wordlist for ${ locale } (Chinese) FAILED`);\n    }\n    /* c8 ignore stop */\n\n    _wordlist[locale] = wordlist;\n\n    return wordlist;\n}\n\nconst wordlists: Record<string, LangZh> = { };\n\n/**\n *  The [[link-bip39-zh_cn]] and [[link-bip39-zh_tw]] for\n *  [mnemonic phrases](link-bip-39).\n *\n *  @_docloc: api/wordlists\n */\nexport class LangZh extends Wordlist {\n\n    /**\n     *  Creates a new instance of the Chinese language Wordlist for\n     *  the %%dialect%%, either ``\"cn\"`` or ``\"tw\"`` for simplified\n     *  or traditional, respectively.\n     *\n     *  This should be unnecessary most of the time as the exported\n     *  [[langZhCn]] and [[langZhTw]] should suffice.\n     *\n     *  @_ignore:\n     */\n    constructor(dialect: string) { super(\"zh_\" + dialect); }\n\n    getWord(index: number): string {\n        const words = loadWords(this.locale);\n        assertArgument(index >= 0 && index < words.length,\n            `invalid word index: ${ index }`, \"index\", index);\n        return words[index];\n    }\n\n    getWordIndex(word: string): number {\n        return loadWords(this.locale).indexOf(word);\n    }\n\n    split(phrase: string): Array<string> {\n        phrase = phrase.replace(/(?:\\u3000| )+/g, \"\");\n        return phrase.split(\"\");\n    }\n\n    /**\n     *  Returns a singleton instance of a ``LangZh`` for %%dialect%%,\n     *  creating it if this is the first time being called.\n     *\n     *  Use the %%dialect%% ``\"cn\"`` or ``\"tw\"`` for simplified or\n     *  traditional, respectively.\n     */\n    static wordlist(dialect: string): LangZh {\n        if (wordlists[dialect] == null) {\n            wordlists[dialect] = new LangZh(dialect);\n        }\n        return wordlists[dialect];\n    }\n}\n", "\nimport { LangCz } from \"./lang-cz.js\";\nimport { LangEn } from \"./lang-en.js\";\nimport { LangEs } from \"./lang-es.js\";\nimport { LangFr } from \"./lang-fr.js\";\nimport { LangJa } from \"./lang-ja.js\";\nimport { LangKo } from \"./lang-ko.js\";\nimport { LangIt } from \"./lang-it.js\";\nimport { LangPt } from \"./lang-pt.js\";\nimport { LangZh } from \"./lang-zh.js\";\n\nimport type { Wordlist } from \"./wordlist.js\";\n\n/**\n *  The available Wordlists by their\n *  [ISO 639-1 Language Code](link-wiki-iso639).\n *\n *  (**i.e.** [cz](LangCz), [en](LangEn), [es](LangEs), [fr](LangFr),\n *  [ja](LangJa), [ko](LangKo), [it](LangIt), [pt](LangPt),\n *  [zh_cn](LangZh), [zh_tw](LangZh))\n *\n *  The dist files (in the ``/dist`` folder) have had all languages\n *  except English stripped out, which reduces the library size by\n *  about 80kb. If required, they are available by importing the\n *  included ``wordlists-extra.min.js`` file.\n */\nexport const wordlists: Record<string, Wordlist> = {\n  cz: LangCz.wordlist(),\n  en: LangEn.wordlist(),\n  es: LangEs.wordlist(),\n  fr: LangFr.wordlist(),\n  it: LangIt.wordlist(),\n  pt: LangPt.wordlist(),\n  ja: LangJa.wordlist(),\n  ko: LangKo.wordlist(),\n  zh_cn: LangZh.wordlist(\"cn\"),\n  zh_tw: LangZh.wordlist(\"tw\"),\n};\n", "function number(n: number) {\n  if (!Number.isSafeInteger(n) || n < 0) throw new Error(`positive integer expected, not ${n}`);\n}\n\nfunction bool(b: boolean) {\n  if (typeof b !== 'boolean') throw new Error(`boolean expected, not ${b}`);\n}\n\n// copied from utils\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nfunction bytes(b: Uint8Array | undefined, ...lengths: number[]) {\n  if (!isBytes(b)) throw new Error('Uint8Array expected');\n  if (lengths.length > 0 && !lengths.includes(b.length))\n    throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);\n}\n\ntype Hash = {\n  (data: Uint8Array): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create: any;\n};\nfunction hash(h: Hash) {\n  if (typeof h !== 'function' || typeof h.create !== 'function')\n    throw new Error('Hash should be wrapped by utils.wrapConstructor');\n  number(h.outputLen);\n  number(h.blockLen);\n}\n\nfunction exists(instance: any, checkFinished = true) {\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}\nfunction output(out: any, instance: any) {\n  bytes(out);\n  const min = instance.outputLen;\n  if (out.length < min) {\n    throw new Error(`digestInto() expects output buffer of length at least ${min}`);\n  }\n}\n\nexport { number, bool, bytes, hash, exists, output };\n\nconst assert = { number, bool, bytes, hash, exists, output };\nexport default assert;\n", "const U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\n\n// We are not using BigUint64Array, because they are extremely slow as per 2022\nfunction fromBig(n: bigint, le = false) {\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) {\n  let Ah = new Uint32Array(lst.length);\n  let Al = new Uint32Array(lst.length);\n  for (let i = 0; i < lst.length; 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(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h: number, _l: number, s: number) => h >>> s;\nconst shrSL = (h: number, l: number, s: number) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h: number, l: number, s: number) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h: number, l: number, s: 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) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h: number, l: number, s: number) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h: number, l: number) => l;\nconst rotr32L = (h: number, _l: number) => h;\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h: number, l: number, s: number) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h: number, l: number, s: 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) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h: number, l: number, s: 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(Ah: number, Al: number, Bh: number, Bl: number) {\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) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low: number, Ah: number, Bh: number, Ch: number) =>\n  (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al: number, Bl: number, Cl: number, Dl: number) =>\n  (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low: number, Ah: number, Bh: number, Ch: number, Dh: number) =>\n  (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al: number, Bl: number, Cl: number, Dl: number, El: 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) =>\n  (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n\n// prettier-ignore\nexport {\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};\n// prettier-ignore\nconst u64 = {\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", "// We prefer WebCrypto aka globalThis.crypto, which exists in node.js 16+.\n// Falls back to Node.js built-in crypto for Node.js <=v14\n// See utils.ts for details.\n// @ts-ignore\nimport * as nc from 'node:crypto';\nexport const crypto =\n  nc && typeof nc === 'object' && 'webcrypto' in nc\n    ? (nc.webcrypto as any)\n    : nc && typeof nc === 'object' && 'randomBytes' in nc\n      ? nc\n      : undefined;\n", "/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\nimport { crypto } from '@noble/hashes/crypto';\nimport { bytes as abytes } from './_assert.js';\n// export { isBytes } from './_assert.js';\n// We can't reuse isBytes from _assert, because somehow this causes huge perf issues\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\n// prettier-ignore\nexport type TypedArray = Int8Array | Uint8ClampedArray | Uint8Array |\n  Uint16Array | Int16Array | Uint32Array | Int32Array;\n\n// Cast array to different type\nexport const u8 = (arr: TypedArray) => new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\nexport const u32 = (arr: TypedArray) =>\n  new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n\n// Cast array to view\nexport const createView = (arr: TypedArray) =>\n  new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n\n// The rotate right (circular right shift) operation for uint32\nexport const rotr = (word: number, shift: number) => (word << (32 - shift)) | (word >>> shift);\n// The rotate left (circular left shift) operation for uint32\nexport const rotl = (word: number, shift: number) =>\n  (word << shift) | ((word >>> (32 - shift)) >>> 0);\n\nexport const isLE = new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;\n// The byte swap operation for uint32\nexport const byteSwap = (word: number) =>\n  ((word << 24) & 0xff000000) |\n  ((word << 8) & 0xff0000) |\n  ((word >>> 8) & 0xff00) |\n  ((word >>> 24) & 0xff);\n// Conditionally byte swap if on a big-endian platform\nexport const byteSwapIfBE = isLE ? (n: number) => n : (n: number) => byteSwap(n);\n\n// In place byte swap for Uint32Array\nexport function byteSwap32(arr: Uint32Array) {\n  for (let i = 0; i < arr.length; i++) {\n    arr[i] = byteSwap(arr[i]);\n  }\n}\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 * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\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(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\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  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded 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;\n  }\n  return array;\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.\nexport const nextTick = async () => {};\n\n// Returns control to thread each 'tick' ms to avoid blocking\nexport async function asyncLoop(iters: number, tick: number, cb: (i: number) => 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 in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport type Input = Uint8Array | string;\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nexport function toBytes(data: Input): Uint8Array {\n  if (typeof data === 'string') data = utf8ToBytes(data);\n  abytes(data);\n  return data;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\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\n// For runtime check if class implements interface\nexport abstract class Hash<T extends Hash<T>> {\n  abstract blockLen: number; // Bytes per block\n  abstract outputLen: number; // Bytes in output\n  abstract update(buf: Input): this;\n  // Writes digest into buf\n  abstract digestInto(buf: Uint8Array): void;\n  abstract digest(): Uint8Array;\n  /**\n   * Resets internal state. Makes Hash instance unusable.\n   * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n   * by user, they will need to manually call `destroy()` when zeroing is necessary.\n   */\n  abstract destroy(): void;\n  /**\n   * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n   * when no options are passed.\n   * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n   * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n   * There are no guarantees for clean-up because it's impossible in JS.\n   */\n  abstract _cloneInto(to?: T): T;\n  // Safe version that clones internal state\n  clone(): T {\n    return this._cloneInto();\n  }\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\nconst toStr = {}.toString;\ntype EmptyObj = {};\nexport function checkOpts<T1 extends EmptyObj, T2 extends EmptyObj>(\n  defaults: T1,\n  opts?: T2\n): T1 & T2 {\n  if (opts !== undefined && toStr.call(opts) !== '[object Object]')\n    throw new Error('Options should be object or undefined');\n  const merged = Object.assign(defaults, opts);\n  return merged as T1 & T2;\n}\n\nexport type CHash = ReturnType<typeof wrapConstructor>;\n\nexport function wrapConstructor<T extends Hash<T>>(hashCons: () => Hash<T>) {\n  const hashC = (msg: Input): Uint8Array => hashCons().update(toBytes(msg)).digest();\n  const tmp = hashCons();\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = () => hashCons();\n  return hashC;\n}\n\nexport function wrapConstructorWithOpts<H extends Hash<H>, T extends Object>(\n  hashCons: (opts?: T) => Hash<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\nexport function wrapXOFConstructorWithOpts<H extends HashXOF<H>, T extends Object>(\n  hashCons: (opts?: T) => HashXOF<H>\n) {\n  const hashC = (msg: Input, opts?: T): Uint8Array => hashCons(opts).update(toBytes(msg)).digest();\n  const tmp = hashCons({} as T);\n  hashC.outputLen = tmp.outputLen;\n  hashC.blockLen = tmp.blockLen;\n  hashC.create = (opts: T) => hashCons(opts);\n  return hashC;\n}\n\n/**\n * Secure PRNG. Uses `crypto.getRandomValues`, which defers to OS.\n */\nexport function randomBytes(bytesLength = 32): Uint8Array {\n  if (crypto && typeof crypto.getRandomValues === 'function') {\n    return crypto.getRandomValues(new Uint8Array(bytesLength));\n  }\n  // Legacy Node.js compatibility\n  if (crypto && typeof crypto.randomBytes === 'function') {\n    return crypto.randomBytes(bytesLength);\n  }\n  throw new Error('crypto.getRandomValues must be defined');\n}\n", "import { bytes, exists, number, output } from './_assert.js';\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from './_u64.js';\nimport {\n  Hash,\n  u32,\n  Input,\n  toBytes,\n  wrapConstructor,\n  wrapXOFConstructorWithOpts,\n  HashXOF,\n  isLE,\n  byteSwap32,\n} from './utils.js';\n\n// SHA3 (keccak) is based on a new design: basically, the internal state is bigger than output size.\n// It's called a sponge function.\n\n// Various per round constants calculations\nconst SHA3_PI: number[] = [];\nconst SHA3_ROTL: number[] = [];\nconst _SHA3_IOTA: bigint[] = [];\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n  // Pi\n  [x, y] = [y, (2 * x + 3 * y) % 5];\n  SHA3_PI.push(2 * (5 * y + x));\n  // Rotational\n  SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n  // Iota\n  let t = _0n;\n  for (let j = 0; j < 7; j++) {\n    R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n    if (R & _2n) t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n  }\n  _SHA3_IOTA.push(t);\n}\nconst [SHA3_IOTA_H, SHA3_IOTA_L] = /* @__PURE__ */ split(_SHA3_IOTA, true);\n\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h: number, l: number, s: number) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h: number, l: number, s: number) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n\n// Same as keccakf1600, but allows to skip some rounds\nexport function keccakP(s: Uint32Array, rounds: number = 24) {\n  const B = new Uint32Array(5 * 2);\n  // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n  for (let round = 24 - rounds; round < 24; round++) {\n    // Theta \u03B8\n    for (let x = 0; x < 10; x++) B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n    for (let x = 0; x < 10; x += 2) {\n      const idx1 = (x + 8) % 10;\n      const idx0 = (x + 2) % 10;\n      const B0 = B[idx0];\n      const B1 = B[idx0 + 1];\n      const Th = rotlH(B0, B1, 1) ^ B[idx1];\n      const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n      for (let y = 0; y < 50; y += 10) {\n        s[x + y] ^= Th;\n        s[x + y + 1] ^= Tl;\n      }\n    }\n    // Rho (\u03C1) and Pi (\u03C0)\n    let curH = s[2];\n    let curL = s[3];\n    for (let t = 0; t < 24; t++) {\n      const shift = SHA3_ROTL[t];\n      const Th = rotlH(curH, curL, shift);\n      const Tl = rotlL(curH, curL, shift);\n      const PI = SHA3_PI[t];\n      curH = s[PI];\n      curL = s[PI + 1];\n      s[PI] = Th;\n      s[PI + 1] = Tl;\n    }\n    // Chi (\u03C7)\n    for (let y = 0; y < 50; y += 10) {\n      for (let x = 0; x < 10; x++) B[x] = s[y + x];\n      for (let x = 0; x < 10; x++) s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n    }\n    // Iota (\u03B9)\n    s[0] ^= SHA3_IOTA_H[round];\n    s[1] ^= SHA3_IOTA_L[round];\n  }\n  B.fill(0);\n}\n\nexport class Keccak extends Hash<Keccak> implements HashXOF<Keccak> {\n  protected state: Uint8Array;\n  protected pos = 0;\n  protected posOut = 0;\n  protected finished = false;\n  protected state32: Uint32Array;\n  protected destroyed = false;\n  // NOTE: we accept arguments in bytes instead of bits here.\n  constructor(\n    public blockLen: number,\n    public suffix: number,\n    public outputLen: number,\n    protected enableXOF = false,\n    protected rounds: number = 24\n  ) {\n    super();\n    // Can be passed from user as dkLen\n    number(outputLen);\n    // 1600 = 5x5 matrix of 64bit.  1600 bits === 200 bytes\n    if (0 >= this.blockLen || this.blockLen >= 200)\n      throw new Error('Sha3 supports only keccak-f1600 function');\n    this.state = new Uint8Array(200);\n    this.state32 = u32(this.state);\n  }\n  protected keccak() {\n    if (!isLE) byteSwap32(this.state32);\n    keccakP(this.state32, this.rounds);\n    if (!isLE) byteSwap32(this.state32);\n    this.posOut = 0;\n    this.pos = 0;\n  }\n  update(data: Input) {\n    exists(this);\n    const { blockLen, state } = this;\n    data = toBytes(data);\n    const len = data.length;\n    for (let pos = 0; pos < len; ) {\n      const take = Math.min(blockLen - this.pos, len - pos);\n      for (let i = 0; i < take; i++) state[this.pos++] ^= data[pos++];\n      if (this.pos === blockLen) this.keccak();\n    }\n    return this;\n  }\n  protected finish() {\n    if (this.finished) return;\n    this.finished = true;\n    const { state, suffix, pos, blockLen } = this;\n    // Do the padding\n    state[pos] ^= suffix;\n    if ((suffix & 0x80) !== 0 && pos === blockLen - 1) this.keccak();\n    state[blockLen - 1] ^= 0x80;\n    this.keccak();\n  }\n  protected writeInto(out: Uint8Array): Uint8Array {\n    exists(this, false);\n    bytes(out);\n    this.finish();\n    const bufferOut = this.state;\n    const { blockLen } = this;\n    for (let pos = 0, len = out.length; pos < len; ) {\n      if (this.posOut >= blockLen) this.keccak();\n      const take = Math.min(blockLen - this.posOut, len - pos);\n      out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n      this.posOut += take;\n      pos += take;\n    }\n    return out;\n  }\n  xofInto(out: Uint8Array): Uint8Array {\n    // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n    if (!this.enableXOF) throw new Error('XOF is not possible for this instance');\n    return this.writeInto(out);\n  }\n  xof(bytes: number): Uint8Array {\n    number(bytes);\n    return this.xofInto(new Uint8Array(bytes));\n  }\n  digestInto(out: Uint8Array) {\n    output(out, this);\n    if (this.finished) throw new Error('digest() was already called');\n    this.writeInto(out);\n    this.destroy();\n    return out;\n  }\n  digest() {\n    return this.digestInto(new Uint8Array(this.outputLen));\n  }\n  destroy() {\n    this.destroyed = true;\n    this.state.fill(0);\n  }\n  _cloneInto(to?: Keccak): Keccak {\n    const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n    to ||= new Keccak(blockLen, suffix, outputLen, enableXOF, rounds);\n    to.state32.set(this.state32);\n    to.pos = this.pos;\n    to.posOut = this.posOut;\n    to.finished = this.finished;\n    to.rounds = rounds;\n    // Suffix can change in cSHAKE\n    to.suffix = suffix;\n    to.outputLen = outputLen;\n    to.enableXOF = enableXOF;\n    to.destroyed = this.destroyed;\n    return to;\n  }\n}\n\nconst gen = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapConstructor(() => new Keccak(blockLen, suffix, outputLen));\n\nexport const sha3_224 = /* @__PURE__ */ gen(0x06, 144, 224 / 8);\n/**\n * SHA3-256 hash function\n * @param message - that would be hashed\n */\nexport const sha3_256 = /* @__PURE__ */ gen(0x06, 136, 256 / 8);\nexport const sha3_384 = /* @__PURE__ */ gen(0x06, 104, 384 / 8);\nexport const sha3_512 = /* @__PURE__ */ gen(0x06, 72, 512 / 8);\nexport const keccak_224 = /* @__PURE__ */ gen(0x01, 144, 224 / 8);\n/**\n * keccak-256 hash function. Different from SHA3-256.\n * @param message - that would be hashed\n */\nexport const keccak_256 = /* @__PURE__ */ gen(0x01, 136, 256 / 8);\nexport const keccak_384 = /* @__PURE__ */ gen(0x01, 104, 384 / 8);\nexport const keccak_512 = /* @__PURE__ */ gen(0x01, 72, 512 / 8);\n\nexport type ShakeOpts = { dkLen?: number };\n\nconst genShake = (suffix: number, blockLen: number, outputLen: number) =>\n  wrapXOFConstructorWithOpts<HashXOF<Keccak>, ShakeOpts>(\n    (opts: ShakeOpts = {}) =>\n      new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true)\n  );\n\nexport const shake128 = /* @__PURE__ */ genShake(0x1f, 168, 128 / 8);\nexport const shake256 = /* @__PURE__ */ genShake(0x1f, 136, 256 / 8);\n", "// extracts an event log of a given type from a transaction receipt that matches the address provided\nimport {\n    AbiCoder,\n    BytesLike,\n    EthersError,\n    EventFragment,\n    getBytes,\n    Interface,\n    ParamType,\n    Result,\n    TransactionReceipt\n} from \"ethers\"\nimport {Ciphertext} from \"./crypto/ibe-bn254\"\nimport {TypesLib} from \"./generated/BlocklockSender\"\n\nexport function extractLogs<T extends Interface, E extends EventFragment>(iface: T, receipt: TransactionReceipt, contractAddress: string, event: E): Array<Result> {\n    return receipt.logs\n        .filter(log => log.address.toLowerCase() === contractAddress.toLowerCase())\n        .map(log => iface.decodeEventLog(event, log.data, log.topics))\n}\n\n// returns the first instance of an event log from a transaction receipt that matches the address provided\nexport function extractSingleLog<T extends Interface, E extends EventFragment>(iface: T, receipt: TransactionReceipt, contractAddress: string, event: E): Result {\n    const events = extractLogs(iface, receipt, contractAddress, event)\n    if (events.length === 0) {\n        throw Error(`contract at ${contractAddress} didn't emit the ${event.name} event`)\n    }\n    return events[0]\n}\n\n// returns a useful error message from common errors that come out of ethers\nexport function extractErrorMessage(err: EthersError, iface: Interface): string {\n    switch (err.code) {\n        case \"CALL_EXCEPTION\": {\n            const e = err as any\n            if (e.data) {\n                const parsedError = iface.parseError(e.data)\n                if (!parsedError) {\n                    return `unknown error: ${e.message}`\n                } else {\n                    return parsedError.args[0]\n                }\n            }\n            return `unknown call exception: ${err.message}`\n        }\n        case \"INSUFFICIENT_FUNDS\":\n            return \"insufficient funds\"\n        case \"NONCE_EXPIRED\":\n            return \"your nonce expired - did you resend the tx?\"\n        default:\n            return `unknown error: ${err.message}`\n    }\n}\n\nexport function isEthersError(error: unknown): error is EthersError {\n    return (error as EthersError)?.code !== undefined;\n}\n\n// any because that's how naughty ethers wants it\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const encodeParams = (dataTypes: readonly ParamType[] | readonly string[], data: readonly any[]): string => {\n    const abiCoder = AbiCoder.defaultAbiCoder()\n    return abiCoder.encode(dataTypes, data)\n}\n\nexport const decodeParams= (dataTypes: readonly ParamType[] | readonly string[], data: BytesLike): Result => {\n    const abiCoder = AbiCoder.defaultAbiCoder()\n    return abiCoder.decode(dataTypes, data)\n}\n\nexport function parseSolidityCiphertextString(ciphertext: string): Ciphertext {\n    const ctBytes = getBytes(ciphertext);\n    const ct: TypesLib.CiphertextStructOutput = decodeParams(\n        [\"tuple(tuple(uint256[2] x, uint256[2] y) u, bytes v, bytes w)\"],\n        ctBytes,\n    )[0];\n\n    const uX0 = ct.u.x[0];\n    const uX1 = ct.u.x[1];\n    const uY0 = ct.u.y[0];\n    const uY1 = ct.u.y[1];\n    return {\n        U: {x: {c0: uX0, c1: uX1}, y: {c0: uY0, c1: uY1}},\n        V: getBytes(ct.v),\n        W: getBytes(ct.w),\n    };\n}\n\n\nexport function parseSolidityCiphertext(ciphertext: TypesLib.CiphertextStructOutput): Ciphertext {\n    const uX0 = ciphertext.u.x[0]\n    const uX1 = ciphertext.u.x[1]\n    const uY0 = ciphertext.u.y[0]\n    const uY1 = ciphertext.u.y[1]\n    return {\n        U: {x: {c0: uX0, c1: uX1}, y: {c0: uY0, c1: uY1}},\n        V: getBytes(ciphertext.v),\n        W: getBytes(ciphertext.w),\n    }\n}\n\n\nexport function encodeCiphertextToSolidity(ciphertext: Ciphertext): TypesLib.CiphertextStruct {\n    const u: { x: [bigint, bigint], y: [bigint, bigint] } = {\n        x: [ciphertext.U.x.c0, ciphertext.U.x.c1],\n        y: [ciphertext.U.y.c0, ciphertext.U.y.c1]\n    }\n\n    return {\n        u,\n        v: ciphertext.V,\n        w: ciphertext.W,\n    }\n}\n", "import { Buffer as BufferPolyfill } from 'buffer'\ndeclare let Buffer: typeof BufferPolyfill\nglobalThis.Buffer = BufferPolyfill\n\nimport * as asn1js from \"asn1js\"\nimport { bn254, htfDefaultsG1, mapToG1 } from './bn254'\nimport { xor } from './utils'\nimport { Fp, Fp12, Fp2 } from '@noble/curves/abstract/tower'\nimport { AffinePoint } from '@noble/curves/abstract/weierstrass'\nimport { createHasher, expand_message_xmd, expand_message_xof, hash_to_field } from \"@noble/curves/abstract/hash-to-curve\"\nimport { CHash } from \"@noble/curves/abstract/utils\"\nimport { keccak_256 } from \"@noble/hashes/sha3\"\n\nexport type G1 = AffinePoint<Fp>\nexport type G2 = AffinePoint<Fp2>\nexport type GT = Fp12\n\nexport interface Ciphertext {\n    U: G2,\n    V: Uint8Array\n    W: Uint8Array\n}\n\n// Various options used to customize the IBE scheme\nexport type IbeOpts = {\n    hash: CHash,                // hash function\n    k: number,                  // k-bit collision resistance of hash\n    expand_fn: 'xmd' | 'xof',   // \"xmd\": expand_message_xmd, \"xof\": expand_message_xof, see RFC9380, Section 5.3.\n    dsts: DstOpts,\n}\n\n// Various DSTs used throughout the IBE scheme\nexport type DstOpts = {\n    H1_G1: Uint8Array,\n    H2: Uint8Array,\n    H3: Uint8Array,\n    H4: Uint8Array,\n}\n\n// Default IBE options.\nexport const DEFAULT_OPTS: IbeOpts = {\n    hash: keccak_256,\n    k: 128,\n    expand_fn: 'xmd',\n    dsts: {\n        H1_G1: Buffer.from('IBE_BN254G1_XMD:KECCAK-256_SVDW_RO_H1_'),\n        H2: Buffer.from('IBE_BN254_XMD:KECCAK-256_H2_'),\n        H3: Buffer.from('IBE_BN254_XMD:KECCAK-256_H3_'),\n        H4: Buffer.from('IBE_BN254_XMD:KECCAK-256_H4_'),\n    }\n}\n\n// Our H4 hash function can output at most 2**16 - 1 = 65535 pseudorandom bytes.\nconst H4_MAX_OUTPUT_LEN: number = 65535\n\n/*\n * Convert the identity into a point on the curve.\n */\nexport function get_identity_g1(identity: Uint8Array, opts: IbeOpts = DEFAULT_OPTS): G1 {\n    return hash_identity_to_point_g1(identity, opts)\n}\n\n/*\n * Encryption function for IBE based on https://www.iacr.org/archive/crypto2001/21390212.pdf Section 6 / https://eprint.iacr.org/2023/189.pdf, Algorithm 1\n * with the identity on G1, and the master public key on G2.\n */\nexport function encrypt_towards_identity_g1(m: Uint8Array, identity: Uint8Array, pk_g2: G2, opts: IbeOpts = DEFAULT_OPTS): Ciphertext {\n    // We can encrypt at most 2**16 - 1 = 65535 bytes with our H4 hash function.\n    const n_bytes = m.length\n    if (n_bytes > H4_MAX_OUTPUT_LEN) {\n        throw new Error(`cannot encrypt messages larger than our hash output: ${H4_MAX_OUTPUT_LEN} bytes.`)\n    }\n\n    // Compute the identity's public key on G1\n    // 3: PK_\\rho \\gets e(H_1(\\rho), P)\n    const identity_g1 = hash_identity_to_point_g1(identity, opts)\n    const identity_g1p = bn254.G1.ProjectivePoint.fromAffine(identity_g1)\n    const pk_g2p = bn254.G2.ProjectivePoint.fromAffine(pk_g2)\n    const pk_rho = bn254.pairing(identity_g1p, pk_g2p)\n\n    // Sample a one-time key\n    // 4: \\sigma \\getsr \\{0,1\\}^\\ell\n    const sigma = new Uint8Array(32);\n    crypto.getRandomValues(sigma)\n\n    // Derive an ephemeral keypair\n    // 5: r \\gets H_3(\\sigma, M)\n    const r = hash_sigma_m_to_field(sigma, m, opts)\n    // 6: U \\gets [r]G_2\n    const u_g2 = bn254.G2.ProjectivePoint.BASE.multiply(r).toAffine()\n\n    // Hide the one-time key\n    // 7: V \\gets \\sigma \\xor H_2((PK_\\rho)^r)\n    const shared_key = bn254.fields.Fp12.pow(pk_rho, r)\n    const v = xor(sigma, hash_shared_key_to_bytes(shared_key, sigma.length, opts))\n\n    // Encrypt message m using a hash-based stream cipher with key \\sigma\n    // 8: W \\gets M \\xor H_4(\\sigma)\n    const w = xor(m, hash_sigma_to_bytes(sigma, n_bytes, opts))\n\n    // 9: return ciphertext\n    return {\n        U: u_g2,\n        V: v,\n        W: w\n    }\n}\n\n/*\n * Decryption function for IBE based on https://www.iacr.org/archive/crypto2001/21390212.pdf Section 6 / https://eprint.iacr.org/2023/189.pdf, Algorithm 1\n * with the identity on G1, and the master public key on G2.\n */\nexport function decrypt_g1(ciphertext: Ciphertext, decryption_key_g1: G1, opts: IbeOpts = DEFAULT_OPTS): Uint8Array {\n    // Get the one-time decryption key\n    const key = preprocess_decryption_key_g1(ciphertext, decryption_key_g1, opts)\n    return decrypt_g1_with_preprocess(ciphertext, key, opts)\n}\n\n/**\n * Decryption function for IBE based on https://www.iacr.org/archive/crypto2001/21390212.pdf Section 6 / https://eprint.iacr.org/2023/189.pdf, Algorithm 1\n * with the identity on G1, and the master public key on G2.\n */\nexport function decrypt_g1_with_preprocess(ciphertext: Ciphertext, preprocessed_decryption_key: Uint8Array, opts: IbeOpts = DEFAULT_OPTS): Uint8Array {\n    // Check well-formedness of the ciphertext\n    if (ciphertext.W.length > H4_MAX_OUTPUT_LEN) {\n        throw new Error(`cannot decrypt messages larger than our hash output: ${H4_MAX_OUTPUT_LEN} bytes.`)\n    }\n    if (ciphertext.V.length !== opts.hash.outputLen) {\n        throw new Error(`cannot decrypt encryption key of invalid length != ${opts.hash.outputLen} bytes.`)\n    }\n    if (ciphertext.V.length !== preprocessed_decryption_key.length) {\n        throw new Error(`preprocessed decryption key of invalid length`)\n    }\n\n    // \\ell = min(len(w), opts.hash.outputLen)\n    const ell_bytes = ciphertext.W.length\n\n    // Get the one-time decryption key\n    // 3: \\sigma' \\gets V \\xor H_2(e(\\pi_\\rho, U))\n    const sigma2 = xor(ciphertext.V, preprocessed_decryption_key)\n\n    // Decrypt the message\n    // 4: M' \\gets W \\xor H_4(\\sigma')\n    const m2 = xor(ciphertext.W, hash_sigma_to_bytes(sigma2, ell_bytes, opts))\n\n    // Derive the ephemeral keypair with the candidate \\sigma'\n    // 5: r \\gets H_3(\\sigma, M)\n    const r = hash_sigma_m_to_field(sigma2, m2, opts)\n\n    // Verify that \\sigma' is consistent with the message and ephemeral public key\n    // 6: if U = [r]G_2 then return M' else return \\bot\n    const u_g2 = bn254.G2.ProjectivePoint.BASE.multiply(r)\n    if (bn254.G2.ProjectivePoint.fromAffine(ciphertext.U).equals(u_g2)) {\n        return m2\n    } else {\n        throw new Error(\"invalid proof: rP check failed\")\n    }\n}\n\n/**\n * Preprocess a signature by computing the hash of the pairing, i.e.,\n * H_2(e(\\pi_\\rho, U)).\n * @param ciphertext ciphertext to preprocess the decryption key for\n * @param decryption_key_g1 decryption key on g1 for the ciphertext\n * @param opts IBE scheme options\n * @returns preprocessed decryption key\n */\nexport function preprocess_decryption_key_g1(ciphertext: Ciphertext, decryption_key_g1: G1, opts: IbeOpts = DEFAULT_OPTS): Uint8Array {\n    const u_g2p = bn254.G2.ProjectivePoint.fromAffine(ciphertext.U)\n    u_g2p.assertValidity() // throws an error if point is invalid\n\n    // Derive the shared key using the decryption key and the ciphertext's ephemeral public key\n    const decryption_key_g1p = bn254.G1.ProjectivePoint.fromAffine(decryption_key_g1)\n    const shared_key = bn254.pairing(decryption_key_g1p, u_g2p)\n\n    // Return the mask H_2(e(\\pi_\\rho, U))\n    return hash_shared_key_to_bytes(shared_key, ciphertext.V.length, opts)\n}\n\n/**\n * Serialize Ciphertext to ASN.1 structure\n * Ciphertext ::= SEQUENCE {\n *    u SEQUENCE {\n *        x SEQUENCE {\n *            c0 INTEGER,\n *            c1 INTEGER\n *        },\n *        y SEQUENCE {\n *            c0 INTEGER,\n *            c1 INTEGER\n *        }\n *    },\n *    v OCTET STRING,\n *    w OCTET STRING\n * }\n */\nexport function serializeCiphertext(ct: Ciphertext): Uint8Array {\n    const sequence = new asn1js.Sequence({\n        value: [\n            new asn1js.Sequence({\n                value: [\n                    new asn1js.Sequence({\n                        value: [\n                            asn1js.Integer.fromBigInt(ct.U.x.c0),\n                            asn1js.Integer.fromBigInt(ct.U.x.c1),\n                        ]\n                    }),\n                    new asn1js.Sequence({\n                        value: [\n                            asn1js.Integer.fromBigInt(ct.U.y.c0),\n                            asn1js.Integer.fromBigInt(ct.U.y.c1),\n                        ]\n                    }),\n                ]\n            }),\n            new asn1js.OctetString({ valueHex: ct.V }),\n            new asn1js.OctetString({ valueHex: ct.W }),\n        ],\n    });\n\n    return new Uint8Array(sequence.toBER())\n}\n\nexport function deserializeCiphertext(ct: Uint8Array): Ciphertext {\n    const schema = new asn1js.Sequence({\n        name: \"ciphertext\",\n        value: [\n            new asn1js.Sequence({\n                name: \"U\",\n                value: [\n                    new asn1js.Sequence({\n                        name: \"x\",\n                        value: [\n                            new asn1js.Integer(),\n                            new asn1js.Integer(),\n                        ]\n                    }),\n                    new asn1js.Sequence({\n                        name: \"y\",\n                        value: [\n                            new asn1js.Integer(),\n                            new asn1js.Integer(),\n                        ]\n                    }),\n                ]\n            }),\n            new asn1js.OctetString({ name: \"V\" }),\n            new asn1js.OctetString({ name: \"W\" }),\n        ],\n    });\n\n    // Verify the validity of the schema\n    const res = asn1js.verifySchema(ct, schema)\n    if (!res.verified) {\n        throw new Error(\"invalid ciphertext\")\n    }\n\n    const V = new Uint8Array(res.result['V'].valueBlock.valueHex)\n    const W = new Uint8Array(res.result['W'].valueBlock.valueHex)\n\n    function bytesToBigInt(bytes: ArrayBuffer) {\n        const byteArray = Array.from(new Uint8Array(bytes))\n        const hex: string = byteArray.map(e => e.toString(16).padStart(2, '0')).join('')\n        return BigInt('0x' + hex)\n    }\n    const x = bn254.fields.Fp2.create({\n        c0: bytesToBigInt(res.result['x'].valueBlock.value[0].valueBlock.valueHex),\n        c1: bytesToBigInt(res.result['x'].valueBlock.value[1].valueBlock.valueHex),\n    })\n    const y = bn254.fields.Fp2.create({\n        c0: bytesToBigInt(res.result['y'].valueBlock.value[0].valueBlock.valueHex),\n        c1: bytesToBigInt(res.result['y'].valueBlock.value[1].valueBlock.valueHex),\n    })\n    const U = { x, y }\n\n    return {\n        U,\n        V,\n        W,\n    }\n}\n\n// Concrete instantiation of H_1 that outputs a point on G1\n// H_1: \\{0, 1\\}^\\ast \\rightarrow G_1\nfunction hash_identity_to_point_g1(identity: Uint8Array, opts: IbeOpts): G1 {\n    const hasher = createHasher(bn254.G1.ProjectivePoint, mapToG1, {\n        p: htfDefaultsG1.p,\n        m: htfDefaultsG1.m,\n        hash: opts.hash,\n        k: opts.k,\n        DST: opts.dsts.H1_G1,\n        expand: opts.expand_fn,\n    })\n    return hasher.hashToCurve(identity).toAffine()\n}\n\n// Concrete instantiation of H_2 that outputs a uniformly random byte string of length n\n// H_2: G_T \\rightarrow \\{0, 1\\}^\\ell\nfunction hash_shared_key_to_bytes(shared_key: GT, n: number, opts: IbeOpts): Uint8Array {\n    // encode shared_key as BE(shared_key.c0.c0.c0) || BE(shared_key.c0.c0.c1) || BE(shared_key.c0.c1.c0) || ...\n    if (opts.expand_fn == \"xmd\") {\n        return expand_message_xmd(bn254.fields.Fp12.toBytes(shared_key), opts.dsts.H2, n, opts.hash)\n    } else {\n        return expand_message_xof(bn254.fields.Fp12.toBytes(shared_key), opts.dsts.H2, n, opts.k, opts.hash)\n    }\n}\n\n// Concrete instantiation of H_3 that outputs a point in Fp\n// H_3: \\{0, 1\\}^\\ell \\times \\{0, 1\\}^\\ell \\rightarrow Fp\nfunction hash_sigma_m_to_field(sigma: Uint8Array, m: Uint8Array, opts: IbeOpts): bigint {\n    // input = \\sigma || m\n    const input = new Uint8Array(sigma.length + m.length)\n    input.set(sigma)\n    input.set(m, sigma.length)\n\n    // hash_to_field(\\sigma || m)\n    return hash_to_field(input, 1, {\n        p: htfDefaultsG1.p,\n        m: htfDefaultsG1.m,\n        hash: opts.hash,\n        k: opts.k,\n        DST: opts.dsts.H3,\n        expand: opts.expand_fn,\n    })[0][0];\n}\n\n// Concrete instantiation of H_4 that outputs a uniformly random byte string of length n\n// H_4: \\{0, 1\\}^\\ell \\rightarrow \\{0, 1\\}^\\ell\nfunction hash_sigma_to_bytes(sigma: Uint8Array, n: number, opts: IbeOpts): Uint8Array {\n    if (opts.expand_fn == \"xmd\") {\n        return expand_message_xmd(sigma, opts.dsts.H4, n, opts.hash)\n    } else {\n        return expand_message_xof(sigma, opts.dsts.H4, n, opts.k, opts.hash)\n    }\n}\n", "import { exists, output } from './_assert.js';\nimport { Hash, createView, Input, toBytes } from './utils.js';\n\n/**\n * Polyfill for Safari 14\n */\nfunction setBigUint64(view: DataView, byteOffset: number, value: bigint, isLE: boolean): void {\n  if (typeof view.setBigUint64 === 'function') return view.setBigUint64(byteOffset, value, isLE);\n  const _32n = BigInt(32);\n  const _u32_max = BigInt(0xffffffff);\n  const wh = Number((value >> _32n) & _u32_max);\n  const wl = Number(value & _u32_max);\n  const h = isLE ? 4 : 0;\n  const l = isLE ? 0 : 4;\n  view.setUint32(byteOffset + h, wh, isLE);\n  view.setUint32(byteOffset + l, wl, isLE);\n}\n\n/**\n * Choice: a ? b : c\n */\nexport const Chi = (a: number, b: number, c: number) => (a & b) ^ (~a & c);\n\n/**\n * Majority function, true if any two inputs is true\n */\nexport const Maj = (a: number, b: number, c: number) => (a & b) ^ (a & c) ^ (b & c);\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>> extends 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  // 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(\n    readonly blockLen: number,\n    public outputLen: number,\n    readonly padOffset: number,\n    readonly isLE: boolean\n  ) {\n    super();\n    this.buffer = new Uint8Array(blockLen);\n    this.view = createView(this.buffer);\n  }\n  update(data: Input): this {\n    exists(this);\n    const { view, buffer, blockLen } = this;\n    data = toBytes(data);\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) {\n    exists(this);\n    output(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    this.buffer.subarray(pos).fill(0);\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    setBigUint64(view, 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 should be fused in single op with modulo by JIT\n    if (len % 4) throw new Error('_sha2: outputLen should 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() {\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.length = length;\n    to.pos = pos;\n    to.finished = finished;\n    to.destroyed = destroyed;\n    if (length % blockLen) to.buffer.set(buffer);\n    return to;\n  }\n}\n", "import { HashMD, Chi, Maj } from './_md.js';\nimport { rotr, wrapConstructor } from './utils.js';\n\n// SHA2-256 need to try 2^128 hashes to execute birthday attack.\n// BTC network is doing 2^67 hashes/sec as per early 2023.\n\n// Round constants:\n// first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ new Uint32Array([\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// Initial state:\n// first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19\n// prettier-ignore\nconst SHA256_IV = /* @__PURE__ */ new Uint32Array([\n  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19\n]);\n\n// Temporary buffer, not used to store anything between runs\n// Named this way because it matches specification.\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD<SHA256> {\n  // We cannot use array here since array allows indexing by variable\n  // which means optimizer/compiler cannot use registers.\n  A = SHA256_IV[0] | 0;\n  B = SHA256_IV[1] | 0;\n  C = SHA256_IV[2] | 0;\n  D = SHA256_IV[3] | 0;\n  E = SHA256_IV[4] | 0;\n  F = SHA256_IV[5] | 0;\n  G = SHA256_IV[6] | 0;\n  H = SHA256_IV[7] | 0;\n\n  constructor() {\n    super(64, 32, 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  ) {\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() {\n    SHA256_W.fill(0);\n  }\n  destroy() {\n    this.set(0, 0, 0, 0, 0, 0, 0, 0);\n    this.buffer.fill(0);\n  }\n}\n// Constants from https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf\nclass SHA224 extends SHA256 {\n  A = 0xc1059ed8 | 0;\n  B = 0x367cd507 | 0;\n  C = 0x3070dd17 | 0;\n  D = 0xf70e5939 | 0;\n  E = 0xffc00b31 | 0;\n  F = 0x68581511 | 0;\n  G = 0x64f98fa7 | 0;\n  H = 0xbefa4fa4 | 0;\n  constructor() {\n    super();\n    this.outputLen = 28;\n  }\n}\n\n/**\n * SHA2-256 hash function\n * @param message - data that would be hashed\n */\nexport const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());\n/**\n * SHA2-224 hash function\n */\nexport const sha224 = /* @__PURE__ */ wrapConstructor(() => new SHA224());\n", "import { hash as assertHash, bytes as assertBytes, exists as assertExists } from './_assert.js';\nimport { Hash, CHash, Input, toBytes } from './utils.js';\n// HMAC (RFC 2104)\nexport class HMAC<T extends Hash<T>> extends 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: Input) {\n    super();\n    assertHash(hash);\n    const key = toBytes(_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    pad.fill(0);\n  }\n  update(buf: Input) {\n    assertExists(this);\n    this.iHash.update(buf);\n    return this;\n  }\n  digestInto(out: Uint8Array) {\n    assertExists(this);\n    assertBytes(out, this.outputLen);\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() {\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  destroy() {\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 = (hash: CHash, key: Input, message: Input): Uint8Array =>\n  new HMAC<any>(hash, key).update(message).digest();\nhmac.create = (hash: CHash, key: Input) => new HMAC<any>(hash, key);\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// 100 lines of code in the file are duplicated from noble-hashes (utils).\n// This is OK: `abstract` directory does not use noble-hashes.\n// User may opt-in into using different hashing library. This way, noble-hashes\n// won't be included into their bundle.\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nexport type Hex = Uint8Array | string; // hex strings are accepted for simplicity\nexport type PrivKey = Hex | bigint; // bigints are accepted to ease learning curve\nexport type CHash = {\n  (message: Uint8Array | string): Uint8Array;\n  blockLen: number;\n  outputLen: number;\n  create(opts?: { dkLen?: number }): any; // For shake\n};\nexport type FHash = (message: Uint8Array | string) => Uint8Array;\n\nexport function isBytes(a: unknown): a is Uint8Array {\n  return (\n    a instanceof Uint8Array ||\n    (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array')\n  );\n}\n\nexport function abytes(item: unknown): void {\n  if (!isBytes(item)) throw new Error('Uint8Array expected');\n}\n\nexport function abool(title: string, value: boolean): void {\n  if (typeof value !== 'boolean')\n    throw new Error(`${title} must be valid boolean, got \"${value}\".`);\n}\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 * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes: Uint8Array): string {\n  abytes(bytes);\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\nexport function numberToHexUnpadded(num: number | bigint): string {\n  const hex = num.toString(16);\n  return hex.length & 1 ? `0${hex}` : hex;\n}\n\nexport function hexToNumber(hex: string): bigint {\n  if (typeof hex !== 'string') throw new Error('hex string expected, got ' + typeof hex);\n  // Big Endian\n  return BigInt(hex === '' ? '0' : `0x${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(char: number): number | undefined {\n  if (char >= asciis._0 && char <= asciis._9) return char - asciis._0;\n  if (char >= asciis._A && char <= asciis._F) return char - (asciis._A - 10);\n  if (char >= asciis._a && char <= asciis._f) return char - (asciis._a - 10);\n  return;\n}\n\n/**\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  const hl = hex.length;\n  const al = hl / 2;\n  if (hl % 2) throw new Error('padded 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;\n  }\n  return array;\n}\n\n// BE: Big Endian, LE: Little Endian\nexport function bytesToNumberBE(bytes: Uint8Array): bigint {\n  return hexToNumber(bytesToHex(bytes));\n}\nexport function bytesToNumberLE(bytes: Uint8Array): bigint {\n  abytes(bytes);\n  return hexToNumber(bytesToHex(Uint8Array.from(bytes).reverse()));\n}\n\nexport function numberToBytesBE(n: number | bigint, len: number): Uint8Array {\n  return hexToBytes(n.toString(16).padStart(len * 2, '0'));\n}\nexport function numberToBytesLE(n: number | bigint, len: number): Uint8Array {\n  return numberToBytesBE(n, len).reverse();\n}\n// Unpadded, rarely used\nexport function numberToVarBytesBE(n: number | bigint): Uint8Array {\n  return hexToBytes(numberToHexUnpadded(n));\n}\n\n/**\n * Takes hex string or Uint8Array, converts to Uint8Array.\n * Validates output length.\n * Will throw error for other types.\n * @param title descriptive title for an error e.g. 'private key'\n * @param hex hex string or Uint8Array\n * @param expectedLength optional, will compare to result array's length\n * @returns\n */\nexport function ensureBytes(title: string, hex: Hex, expectedLength?: number): Uint8Array {\n  let res: Uint8Array;\n  if (typeof hex === 'string') {\n    try {\n      res = hexToBytes(hex);\n    } catch (e) {\n      throw new Error(`${title} must be valid hex string, got \"${hex}\". Cause: ${e}`);\n    }\n  } else if (isBytes(hex)) {\n    // Uint8Array.from() instead of hash.slice() because node.js Buffer\n    // is instance of Uint8Array, and its slice() creates **mutable** copy\n    res = Uint8Array.from(hex);\n  } else {\n    throw new Error(`${title} must be hex string or Uint8Array`);\n  }\n  const len = res.length;\n  if (typeof expectedLength === 'number' && len !== expectedLength)\n    throw new Error(`${title} expected ${expectedLength} bytes, got ${len}`);\n  return res;\n}\n\n/**\n * Copies several Uint8Arrays into one.\n */\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\n// Compares 2 u8a-s in kinda constant time\nexport function equalBytes(a: Uint8Array, b: Uint8Array) {\n  if (a.length !== b.length) return false;\n  let diff = 0;\n  for (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i];\n  return diff === 0;\n}\n\n// Global symbols in both browsers and Node.js since v11\n// See https://github.com/microsoft/TypeScript/issues/31535\ndeclare const TextEncoder: any;\n\n/**\n * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])\n */\nexport function utf8ToBytes(str: string): Uint8Array {\n  if (typeof str !== 'string') throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\n// Is positive bigint\nconst isPosBig = (n: bigint) => typeof n === 'bigint' && _0n <= n;\n\nexport function inRange(n: bigint, min: bigint, max: bigint) {\n  return isPosBig(n) && isPosBig(min) && isPosBig(max) && min <= n && n < max;\n}\n\n/**\n * Asserts min <= n < max. NOTE: It's < max and not <= max.\n * @example\n * aInRange('x', x, 1n, 256n); // would assume x is in (1n..255n)\n */\nexport function aInRange(title: string, n: bigint, min: bigint, max: bigint) {\n  // Why min <= n < max and not a (min < n < max) OR b (min <= n <= max)?\n  // consider P=256n, min=0n, max=P\n  // - a for min=0 would require -1:          `inRange('x', x, -1n, P)`\n  // - b would commonly require subtraction:  `inRange('x', x, 0n, P - 1n)`\n  // - our way is the cleanest:               `inRange('x', x, 0n, P)\n  if (!inRange(n, min, max))\n    throw new Error(`expected valid ${title}: ${min} <= n < ${max}, got ${typeof n} ${n}`);\n}\n\n// Bit operations\n\n/**\n * Calculates amount of bits in a bigint.\n * Same as `n.toString(2).length`\n */\nexport function bitLen(n: bigint) {\n  let len;\n  for (len = 0; n > _0n; n >>= _1n, len += 1);\n  return len;\n}\n\n/**\n * Gets single bit at position.\n * NOTE: first bit position is 0 (same as arrays)\n * Same as `!!+Array.from(n.toString(2)).reverse()[pos]`\n */\nexport function bitGet(n: bigint, pos: number) {\n  return (n >> BigInt(pos)) & _1n;\n}\n\n/**\n * Sets single bit at position.\n */\nexport function bitSet(n: bigint, pos: number, value: boolean) {\n  return n | ((value ? _1n : _0n) << BigInt(pos));\n}\n\n/**\n * Calculate mask for N bits. Not using ** operator with bigints because of old engines.\n * Same as BigInt(`0b${Array(i).fill('1').join('')}`)\n */\nexport const bitMask = (n: number) => (_2n << BigInt(n - 1)) - _1n;\n\n// DRBG\n\nconst u8n = (data?: any) => new Uint8Array(data); // creates Uint8Array\nconst u8fr = (arr: any) => Uint8Array.from(arr); // another shortcut\ntype Pred<T> = (v: Uint8Array) => T | undefined;\n/**\n * Minimal HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n * @returns function that will call DRBG until 2nd arg returns something meaningful\n * @example\n *   const drbg = createHmacDRBG<Key>(32, 32, hmac);\n *   drbg(seed, bytesToKey); // bytesToKey must return Key or undefined\n */\nexport function createHmacDrbg<T>(\n  hashLen: number,\n  qByteLen: number,\n  hmacFn: (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array\n): (seed: Uint8Array, predicate: Pred<T>) => T {\n  if (typeof hashLen !== 'number' || hashLen < 2) throw new Error('hashLen must be a number');\n  if (typeof qByteLen !== 'number' || qByteLen < 2) throw new Error('qByteLen must be a number');\n  if (typeof hmacFn !== 'function') throw new Error('hmacFn must be a function');\n  // Step B, Step C: set hashLen to 8*ceil(hlen/8)\n  let v = u8n(hashLen); // Minimal non-full-spec HMAC-DRBG from NIST 800-90 for RFC6979 sigs.\n  let k = u8n(hashLen); // Steps B and C of RFC6979 3.2: set hashLen, in our case always same\n  let i = 0; // Iterations counter, will throw when over 1000\n  const reset = () => {\n    v.fill(1);\n    k.fill(0);\n    i = 0;\n  };\n  const h = (...b: Uint8Array[]) => hmacFn(k, v, ...b); // hmac(k)(v, ...values)\n  const reseed = (seed = u8n()) => {\n    // HMAC-DRBG reseed() function. Steps D-G\n    k = h(u8fr([0x00]), seed); // k = hmac(k || v || 0x00 || seed)\n    v = h(); // v = hmac(k || v)\n    if (seed.length === 0) return;\n    k = h(u8fr([0x01]), seed); // k = hmac(k || v || 0x01 || seed)\n    v = h(); // v = hmac(k || v)\n  };\n  const gen = () => {\n    // HMAC-DRBG generate() function\n    if (i++ >= 1000) throw new Error('drbg: tried 1000 values');\n    let len = 0;\n    const out: Uint8Array[] = [];\n    while (len < qByteLen) {\n      v = h();\n      const sl = v.slice();\n      out.push(sl);\n      len += v.length;\n    }\n    return concatBytes(...out);\n  };\n  const genUntil = (seed: Uint8Array, pred: Pred<T>): T => {\n    reset();\n    reseed(seed); // Steps D-G\n    let res: T | undefined = undefined; // Step H: grind until k is in [1..n-1]\n    while (!(res = pred(gen()))) reseed();\n    reset();\n    return res;\n  };\n  return genUntil;\n}\n\n// Validating curves and fields\n\nconst validatorFns = {\n  bigint: (val: any) => typeof val === 'bigint',\n  function: (val: any) => typeof val === 'function',\n  boolean: (val: any) => typeof val === 'boolean',\n  string: (val: any) => typeof val === 'string',\n  stringOrUint8Array: (val: any) => typeof val === 'string' || isBytes(val),\n  isSafeInteger: (val: any) => Number.isSafeInteger(val),\n  array: (val: any) => Array.isArray(val),\n  field: (val: any, object: any) => (object as any).Fp.isValid(val),\n  hash: (val: any) => typeof val === 'function' && Number.isSafeInteger(val.outputLen),\n} as const;\ntype Validator = keyof typeof validatorFns;\ntype ValMap<T extends Record<string, any>> = { [K in keyof T]?: Validator };\n// type Record<K extends string | number | symbol, T> = { [P in K]: T; }\n\nexport function validateObject<T extends Record<string, any>>(\n  object: T,\n  validators: ValMap<T>,\n  optValidators: ValMap<T> = {}\n) {\n  const checkField = (fieldName: keyof T, type: Validator, isOptional: boolean) => {\n    const checkVal = validatorFns[type];\n    if (typeof checkVal !== 'function')\n      throw new Error(`Invalid validator \"${type}\", expected function`);\n\n    const val = object[fieldName as keyof typeof object];\n    if (isOptional && val === undefined) return;\n    if (!checkVal(val, object)) {\n      throw new Error(\n        `Invalid param ${String(fieldName)}=${val} (${typeof val}), expected ${type}`\n      );\n    }\n  };\n  for (const [fieldName, type] of Object.entries(validators)) checkField(fieldName, type!, false);\n  for (const [fieldName, type] of Object.entries(optValidators)) checkField(fieldName, type!, true);\n  return object;\n}\n// validate type tests\n// const o: { a: number; b: number; c: number } = { a: 1, b: 5, c: 6 };\n// const z0 = validateObject(o, { a: 'isSafeInteger' }, { c: 'bigint' }); // Ok!\n// // Should fail type-check\n// const z1 = validateObject(o, { a: 'tmp' }, { c: 'zz' });\n// const z2 = validateObject(o, { a: 'isSafeInteger' }, { c: 'zz' });\n// const z3 = validateObject(o, { test: 'boolean', z: 'bug' });\n// const z4 = validateObject(o, { a: 'boolean', z: 'bug' });\n\n/**\n * throws not implemented error\n */\nexport const notImplemented = () => {\n  throw new Error('not implemented');\n};\n\n/**\n * Memoizes (caches) computation result.\n * Uses WeakMap: the value is going auto-cleaned by GC after last reference is removed.\n */\nexport function memoized<T extends object, R, O extends any[]>(fn: (arg: T, ...args: O) => R) {\n  const map = new WeakMap<T, R>();\n  return (arg: T, ...args: O): R => {\n    const val = map.get(arg);\n    if (val !== undefined) return val;\n    const computed = fn(arg, ...args);\n    map.set(arg, computed);\n    return computed;\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Utilities for modular arithmetics and finite fields\nimport {\n  bitMask,\n  bytesToNumberBE,\n  bytesToNumberLE,\n  ensureBytes,\n  numberToBytesBE,\n  numberToBytesLE,\n  validateObject,\n} from './utils.js';\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _4n = BigInt(4), _5n = BigInt(5), _8n = BigInt(8);\n// prettier-ignore\nconst _9n = BigInt(9), _16n = BigInt(16);\n\n// Calculates a modulo b\nexport function mod(a: bigint, b: bigint): bigint {\n  const result = a % b;\n  return result >= _0n ? result : b + result;\n}\n/**\n * Efficiently raise num to power and do modular division.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n * @example\n * pow(2n, 6n, 11n) // 64n % 11n == 9n\n */\n// TODO: use field version && remove\nexport function pow(num: bigint, power: bigint, modulo: bigint): bigint {\n  if (modulo <= _0n || power < _0n) throw new Error('Expected power/modulo > 0');\n  if (modulo === _1n) return _0n;\n  let res = _1n;\n  while (power > _0n) {\n    if (power & _1n) res = (res * num) % modulo;\n    num = (num * num) % modulo;\n    power >>= _1n;\n  }\n  return res;\n}\n\n// Does x ^ (2 ^ power) mod p. pow2(30, 4) == 30 ^ (2 ^ 4)\nexport function pow2(x: bigint, power: bigint, modulo: bigint): bigint {\n  let res = x;\n  while (power-- > _0n) {\n    res *= res;\n    res %= modulo;\n  }\n  return res;\n}\n\n// Inverses number over modulo\nexport function invert(number: bigint, modulo: bigint): bigint {\n  if (number === _0n || modulo <= _0n) {\n    throw new Error(`invert: expected positive integers, got n=${number} mod=${modulo}`);\n  }\n  // Euclidean GCD https://brilliant.org/wiki/extended-euclidean-algorithm/\n  // Fermat's little theorem \"CT-like\" version inv(n) = n^(m-2) mod m is 30x slower.\n  let a = mod(number, modulo);\n  let b = modulo;\n  // prettier-ignore\n  let x = _0n, y = _1n, u = _1n, v = _0n;\n  while (a !== _0n) {\n    // JIT applies optimization if those two lines follow each other\n    const q = b / a;\n    const r = b % a;\n    const m = x - u * q;\n    const n = y - v * q;\n    // prettier-ignore\n    b = a, a = r, x = u, y = v, u = m, v = n;\n  }\n  const gcd = b;\n  if (gcd !== _1n) throw new Error('invert: does not exist');\n  return mod(x, modulo);\n}\n\n/**\n * Tonelli-Shanks square root search algorithm.\n * 1. https://eprint.iacr.org/2012/685.pdf (page 12)\n * 2. Square Roots from 1; 24, 51, 10 to Dan Shanks\n * Will start an infinite loop if field order P is not prime.\n * @param P field order\n * @returns function that takes field Fp (created from P) and number n\n */\nexport function tonelliShanks(P: bigint) {\n  // Legendre constant: used to calculate Legendre symbol (a | p),\n  // which denotes the value of a^((p-1)/2) (mod p).\n  // (a | p) \u2261 1    if a is a square (mod p)\n  // (a | p) \u2261 -1   if a is not a square (mod p)\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreC = (P - _1n) / _2n;\n\n  let Q: bigint, S: number, Z: bigint;\n  // Step 1: By factoring out powers of 2 from p - 1,\n  // find q and s such that p - 1 = q*(2^s) with q odd\n  for (Q = P - _1n, S = 0; Q % _2n === _0n; Q /= _2n, S++);\n\n  // Step 2: Select a non-square z such that (z | p) \u2261 -1 and set c \u2261 zq\n  for (Z = _2n; Z < P && pow(Z, legendreC, P) !== P - _1n; Z++);\n\n  // Fast-path\n  if (S === 1) {\n    const p1div4 = (P + _1n) / _4n;\n    return function tonelliFast<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Slow-path\n  const Q1div2 = (Q + _1n) / _2n;\n  return function tonelliSlow<T>(Fp: IField<T>, n: T): T {\n    // Step 0: Check that n is indeed a square: (n | p) should not be \u2261 -1\n    if (Fp.pow(n, legendreC) === Fp.neg(Fp.ONE)) throw new Error('Cannot find square root');\n    let r = S;\n    // TODO: will fail at Fp2/etc\n    let g = Fp.pow(Fp.mul(Fp.ONE, Z), Q); // will update both x and b\n    let x = Fp.pow(n, Q1div2); // first guess at the square root\n    let b = Fp.pow(n, Q); // first guess at the fudge factor\n\n    while (!Fp.eql(b, Fp.ONE)) {\n      if (Fp.eql(b, Fp.ZERO)) return Fp.ZERO; // https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm (4. If t = 0, return r = 0)\n      // Find m such b^(2^m)==1\n      let m = 1;\n      for (let t2 = Fp.sqr(b); m < r; m++) {\n        if (Fp.eql(t2, Fp.ONE)) break;\n        t2 = Fp.sqr(t2); // t2 *= t2\n      }\n      // NOTE: r-m-1 can be bigger than 32, need to convert to bigint before shift, otherwise there will be overflow\n      const ge = Fp.pow(g, _1n << BigInt(r - m - 1)); // ge = 2^(r-m-1)\n      g = Fp.sqr(ge); // g = ge * ge\n      x = Fp.mul(x, ge); // x *= ge\n      b = Fp.mul(b, g); // b *= g\n      r = m;\n    }\n    return x;\n  };\n}\n\nexport function FpSqrt(P: bigint) {\n  // NOTE: different algorithms can give different roots, it is up to user to decide which one they want.\n  // For example there is FpSqrtOdd/FpSqrtEven to choice root based on oddness (used for hash-to-curve).\n\n  // P \u2261 3 (mod 4)\n  // \u221An = n^((P+1)/4)\n  if (P % _4n === _3n) {\n    // Not all roots possible!\n    // const ORDER =\n    //   0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaabn;\n    // const NUM = 72057594037927816n;\n    const p1div4 = (P + _1n) / _4n;\n    return function sqrt3mod4<T>(Fp: IField<T>, n: T) {\n      const root = Fp.pow(n, p1div4);\n      // Throw if root**2 != n\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // Atkin algorithm for q \u2261 5 (mod 8), https://eprint.iacr.org/2012/685.pdf (page 10)\n  if (P % _8n === _5n) {\n    const c1 = (P - _5n) / _8n;\n    return function sqrt5mod8<T>(Fp: IField<T>, n: T) {\n      const n2 = Fp.mul(n, _2n);\n      const v = Fp.pow(n2, c1);\n      const nv = Fp.mul(n, v);\n      const i = Fp.mul(Fp.mul(nv, _2n), v);\n      const root = Fp.mul(nv, Fp.sub(i, Fp.ONE));\n      if (!Fp.eql(Fp.sqr(root), n)) throw new Error('Cannot find square root');\n      return root;\n    };\n  }\n\n  // P \u2261 9 (mod 16)\n  if (P % _16n === _9n) {\n    // NOTE: tonelli is too slow for bls-Fp2 calculations even on start\n    // Means we cannot use sqrt for constants at all!\n    //\n    // const c1 = Fp.sqrt(Fp.negate(Fp.ONE)); //  1. c1 = sqrt(-1) in F, i.e., (c1^2) == -1 in F\n    // const c2 = Fp.sqrt(c1);                //  2. c2 = sqrt(c1) in F, i.e., (c2^2) == c1 in F\n    // const c3 = Fp.sqrt(Fp.negate(c1));     //  3. c3 = sqrt(-c1) in F, i.e., (c3^2) == -c1 in F\n    // const c4 = (P + _7n) / _16n;           //  4. c4 = (q + 7) / 16        # Integer arithmetic\n    // sqrt = (x) => {\n    //   let tv1 = Fp.pow(x, c4);             //  1. tv1 = x^c4\n    //   let tv2 = Fp.mul(c1, tv1);           //  2. tv2 = c1 * tv1\n    //   const tv3 = Fp.mul(c2, tv1);         //  3. tv3 = c2 * tv1\n    //   let tv4 = Fp.mul(c3, tv1);           //  4. tv4 = c3 * tv1\n    //   const e1 = Fp.equals(Fp.square(tv2), x); //  5.  e1 = (tv2^2) == x\n    //   const e2 = Fp.equals(Fp.square(tv3), x); //  6.  e2 = (tv3^2) == x\n    //   tv1 = Fp.cmov(tv1, tv2, e1); //  7. tv1 = CMOV(tv1, tv2, e1)  # Select tv2 if (tv2^2) == x\n    //   tv2 = Fp.cmov(tv4, tv3, e2); //  8. tv2 = CMOV(tv4, tv3, e2)  # Select tv3 if (tv3^2) == x\n    //   const e3 = Fp.equals(Fp.square(tv2), x); //  9.  e3 = (tv2^2) == x\n    //   return Fp.cmov(tv1, tv2, e3); //  10.  z = CMOV(tv1, tv2, e3)  # Select the sqrt from tv1 and tv2\n    // }\n  }\n  // Other cases: Tonelli-Shanks algorithm\n  return tonelliShanks(P);\n}\n\n// Little-endian check for first LE bit (last BE bit);\nexport const isNegativeLE = (num: bigint, modulo: bigint) => (mod(num, modulo) & _1n) === _1n;\n\n// Field is not always over prime: for example, Fp2 has ORDER(q)=p^m\nexport interface IField<T> {\n  ORDER: bigint;\n  BYTES: number;\n  BITS: number;\n  MASK: bigint;\n  ZERO: T;\n  ONE: T;\n  // 1-arg\n  create: (num: T) => T;\n  isValid: (num: T) => boolean;\n  is0: (num: T) => boolean;\n  neg(num: T): T;\n  inv(num: T): T;\n  sqrt(num: T): T;\n  sqr(num: T): T;\n  // 2-args\n  eql(lhs: T, rhs: T): boolean;\n  add(lhs: T, rhs: T): T;\n  sub(lhs: T, rhs: T): T;\n  mul(lhs: T, rhs: T | bigint): T;\n  pow(lhs: T, power: bigint): T;\n  div(lhs: T, rhs: T | bigint): T;\n  // N for NonNormalized (for now)\n  addN(lhs: T, rhs: T): T;\n  subN(lhs: T, rhs: T): T;\n  mulN(lhs: T, rhs: T | bigint): T;\n  sqrN(num: T): T;\n\n  // Optional\n  // Should be same as sgn0 function in\n  // [RFC9380](https://www.rfc-editor.org/rfc/rfc9380#section-4.1).\n  // NOTE: sgn0 is 'negative in LE', which is same as odd. And negative in LE is kinda strange definition anyway.\n  isOdd?(num: T): boolean; // Odd instead of even since we have it for Fp2\n  // legendre?(num: T): T;\n  pow(lhs: T, power: bigint): T;\n  invertBatch: (lst: T[]) => T[];\n  toBytes(num: T): Uint8Array;\n  fromBytes(bytes: Uint8Array): T;\n  // If c is False, CMOV returns a, otherwise it returns b.\n  cmov(a: T, b: T, c: boolean): T;\n}\n// prettier-ignore\nconst FIELD_FIELDS = [\n  'create', 'isValid', 'is0', 'neg', 'inv', 'sqrt', 'sqr',\n  'eql', 'add', 'sub', 'mul', 'pow', 'div',\n  'addN', 'subN', 'mulN', 'sqrN'\n] as const;\nexport function validateField<T>(field: IField<T>) {\n  const initial = {\n    ORDER: 'bigint',\n    MASK: 'bigint',\n    BYTES: 'isSafeInteger',\n    BITS: 'isSafeInteger',\n  } as Record<string, string>;\n  const opts = FIELD_FIELDS.reduce((map, val: string) => {\n    map[val] = 'function';\n    return map;\n  }, initial);\n  return validateObject(field, opts);\n}\n\n// Generic field functions\n\n/**\n * Same as `pow` but for Fp: non-constant-time.\n * Unsafe in some contexts: uses ladder, so can expose bigint bits.\n */\nexport function FpPow<T>(f: IField<T>, num: T, power: bigint): T {\n  // Should have same speed as pow for bigints\n  // TODO: benchmark!\n  if (power < _0n) throw new Error('Expected power > 0');\n  if (power === _0n) return f.ONE;\n  if (power === _1n) return num;\n  let p = f.ONE;\n  let d = num;\n  while (power > _0n) {\n    if (power & _1n) p = f.mul(p, d);\n    d = f.sqr(d);\n    power >>= _1n;\n  }\n  return p;\n}\n\n/**\n * Efficiently invert an array of Field elements.\n * `inv(0)` will return `undefined` here: make sure to throw an error.\n */\nexport function FpInvertBatch<T>(f: IField<T>, nums: T[]): T[] {\n  const tmp = new Array(nums.length);\n  // Walk from first to last, multiply them by each other MOD p\n  const lastMultiplied = nums.reduce((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = acc;\n    return f.mul(acc, num);\n  }, f.ONE);\n  // Invert last element\n  const inverted = f.inv(lastMultiplied);\n  // Walk from last to first, multiply them by inverted each other MOD p\n  nums.reduceRight((acc, num, i) => {\n    if (f.is0(num)) return acc;\n    tmp[i] = f.mul(acc, tmp[i]);\n    return f.mul(acc, num);\n  }, inverted);\n  return tmp;\n}\n\nexport function FpDiv<T>(f: IField<T>, lhs: T, rhs: T | bigint): T {\n  return f.mul(lhs, typeof rhs === 'bigint' ? invert(rhs, f.ORDER) : f.inv(rhs));\n}\n\nexport function FpLegendre(order: bigint) {\n  // (a | p) \u2261 1    if a is a square (mod p), quadratic residue\n  // (a | p) \u2261 -1   if a is not a square (mod p), quadratic non residue\n  // (a | p) \u2261 0    if a \u2261 0 (mod p)\n  const legendreConst = (order - _1n) / _2n; // Integer arithmetic\n  return <T>(f: IField<T>, x: T): T => f.pow(x, legendreConst);\n}\n\n// This function returns True whenever the value x is a square in the field F.\nexport function FpIsSquare<T>(f: IField<T>) {\n  const legendre = FpLegendre(f.ORDER);\n  return (x: T): boolean => {\n    const p = legendre(f, x);\n    return f.eql(p, f.ZERO) || f.eql(p, f.ONE);\n  };\n}\n\n// CURVE.n lengths\nexport function nLength(n: bigint, nBitLength?: number) {\n  // Bit size, byte size of CURVE.n\n  const _nBitLength = nBitLength !== undefined ? nBitLength : n.toString(2).length;\n  const nByteLength = Math.ceil(_nBitLength / 8);\n  return { nBitLength: _nBitLength, nByteLength };\n}\n\ntype FpField = IField<bigint> & Required<Pick<IField<bigint>, 'isOdd'>>;\n/**\n * Initializes a finite field over prime. **Non-primes are not supported.**\n * Do not init in loop: slow. Very fragile: always run a benchmark on a change.\n * Major performance optimizations:\n * * a) denormalized operations like mulN instead of mul\n * * b) same object shape: never add or remove keys\n * * c) Object.freeze\n * NOTE: operations don't check 'isValid' for all elements for performance reasons,\n * it is caller responsibility to check this.\n * This is low-level code, please make sure you know what you doing.\n * @param ORDER prime positive bigint\n * @param bitLen how many bits the field consumes\n * @param isLE (def: false) if encoding / decoding should be in little-endian\n * @param redef optional faster redefinitions of sqrt and other methods\n */\nexport function Field(\n  ORDER: bigint,\n  bitLen?: number,\n  isLE = false,\n  redef: Partial<IField<bigint>> = {}\n): Readonly<FpField> {\n  if (ORDER <= _0n) throw new Error(`Expected Field ORDER > 0, got ${ORDER}`);\n  const { nBitLength: BITS, nByteLength: BYTES } = nLength(ORDER, bitLen);\n  if (BYTES > 2048) throw new Error('Field lengths over 2048 bytes are not supported');\n  const sqrtP = FpSqrt(ORDER);\n  const f: Readonly<FpField> = Object.freeze({\n    ORDER,\n    BITS,\n    BYTES,\n    MASK: bitMask(BITS),\n    ZERO: _0n,\n    ONE: _1n,\n    create: (num) => mod(num, ORDER),\n    isValid: (num) => {\n      if (typeof num !== 'bigint')\n        throw new Error(`Invalid field element: expected bigint, got ${typeof num}`);\n      return _0n <= num && num < ORDER; // 0 is valid element, but it's not invertible\n    },\n    is0: (num) => num === _0n,\n    isOdd: (num) => (num & _1n) === _1n,\n    neg: (num) => mod(-num, ORDER),\n    eql: (lhs, rhs) => lhs === rhs,\n\n    sqr: (num) => mod(num * num, ORDER),\n    add: (lhs, rhs) => mod(lhs + rhs, ORDER),\n    sub: (lhs, rhs) => mod(lhs - rhs, ORDER),\n    mul: (lhs, rhs) => mod(lhs * rhs, ORDER),\n    pow: (num, power) => FpPow(f, num, power),\n    div: (lhs, rhs) => mod(lhs * invert(rhs, ORDER), ORDER),\n\n    // Same as above, but doesn't normalize\n    sqrN: (num) => num * num,\n    addN: (lhs, rhs) => lhs + rhs,\n    subN: (lhs, rhs) => lhs - rhs,\n    mulN: (lhs, rhs) => lhs * rhs,\n\n    inv: (num) => invert(num, ORDER),\n    sqrt: redef.sqrt || ((n) => sqrtP(f, n)),\n    invertBatch: (lst) => FpInvertBatch(f, lst),\n    // TODO: do we really need constant cmov?\n    // We don't have const-time bigints anyway, so probably will be not very useful\n    cmov: (a, b, c) => (c ? b : a),\n    toBytes: (num) => (isLE ? numberToBytesLE(num, BYTES) : numberToBytesBE(num, BYTES)),\n    fromBytes: (bytes) => {\n      if (bytes.length !== BYTES)\n        throw new Error(`Fp.fromBytes: expected ${BYTES}, got ${bytes.length}`);\n      return isLE ? bytesToNumberLE(bytes) : bytesToNumberBE(bytes);\n    },\n  } as FpField);\n  return Object.freeze(f);\n}\n\nexport function FpSqrtOdd<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? root : Fp.neg(root);\n}\n\nexport function FpSqrtEven<T>(Fp: IField<T>, elm: T) {\n  if (!Fp.isOdd) throw new Error(`Field doesn't have isOdd`);\n  const root = Fp.sqrt(elm);\n  return Fp.isOdd(root) ? Fp.neg(root) : root;\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Same as mapKeyToField, but accepts less bytes (40 instead of 48 for 32-byte field).\n * Which makes it slightly more biased, less secure.\n * @deprecated use mapKeyToField instead\n */\nexport function hashToPrivateScalar(\n  hash: string | Uint8Array,\n  groupOrder: bigint,\n  isLE = false\n): bigint {\n  hash = ensureBytes('privateHash', hash);\n  const hashLen = hash.length;\n  const minLen = nLength(groupOrder).nByteLength + 8;\n  if (minLen < 24 || hashLen < minLen || hashLen > 1024)\n    throw new Error(`hashToPrivateScalar: expected ${minLen}-1024 bytes of input, got ${hashLen}`);\n  const num = isLE ? bytesToNumberLE(hash) : bytesToNumberBE(hash);\n  return mod(num, groupOrder - _1n) + _1n;\n}\n\n/**\n * Returns total number of bytes consumed by the field element.\n * For example, 32 bytes for usual 256-bit weierstrass curve.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of field\n */\nexport function getFieldBytesLength(fieldOrder: bigint): number {\n  if (typeof fieldOrder !== 'bigint') throw new Error('field order must be bigint');\n  const bitLength = fieldOrder.toString(2).length;\n  return Math.ceil(bitLength / 8);\n}\n\n/**\n * Returns minimal amount of bytes that can be safely reduced\n * by field order.\n * Should be 2^-128 for 128-bit curve such as P256.\n * @param fieldOrder number of field elements, usually CURVE.n\n * @returns byte length of target hash\n */\nexport function getMinHashLength(fieldOrder: bigint): number {\n  const length = getFieldBytesLength(fieldOrder);\n  return length + Math.ceil(length / 2);\n}\n\n/**\n * \"Constant-time\" private key generation utility.\n * Can take (n + n/2) or more bytes of uniform input e.g. from CSPRNG or KDF\n * and convert them into private scalar, with the modulo bias being negligible.\n * Needs at least 48 bytes of input for 32-byte private key.\n * https://research.kudelskisecurity.com/2020/07/28/the-definitive-guide-to-modulo-bias-and-how-to-avoid-it/\n * FIPS 186-5, A.2 https://csrc.nist.gov/publications/detail/fips/186/5/final\n * RFC 9380, https://www.rfc-editor.org/rfc/rfc9380#section-5\n * @param hash hash output from SHA3 or a similar function\n * @param groupOrder size of subgroup - (e.g. secp256k1.CURVE.n)\n * @param isLE interpret hash bytes as LE num\n * @returns valid private scalar\n */\nexport function mapHashToField(key: Uint8Array, fieldOrder: bigint, isLE = false): Uint8Array {\n  const len = key.length;\n  const fieldLen = getFieldBytesLength(fieldOrder);\n  const minLen = getMinHashLength(fieldOrder);\n  // No small numbers: need to understand bias story. No huge numbers: easier to detect JS timings.\n  if (len < 16 || len < minLen || len > 1024)\n    throw new Error(`expected ${minLen}-1024 bytes of input, got ${len}`);\n  const num = isLE ? bytesToNumberBE(key) : bytesToNumberLE(key);\n  // `mod(x, 11)` can sometimes produce 0. `mod(x, 10) + 1` is the same, but no 0\n  const reduced = mod(num, fieldOrder - _1n) + _1n;\n  return isLE ? numberToBytesLE(reduced, fieldLen) : numberToBytesBE(reduced, fieldLen);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Abelian group utilities\nimport { IField, validateField, nLength } from './modular.js';\nimport { validateObject, bitLen } from './utils.js';\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\n\nexport type AffinePoint<T> = {\n  x: T;\n  y: T;\n} & { z?: never; t?: never };\n\nexport interface Group<T extends Group<T>> {\n  double(): T;\n  negate(): T;\n  add(other: T): T;\n  subtract(other: T): T;\n  equals(other: T): boolean;\n  multiply(scalar: bigint): T;\n}\n\nexport type GroupConstructor<T> = {\n  BASE: T;\n  ZERO: T;\n};\nexport type Mapper<T> = (i: T[]) => T[];\n\n// Since points in different groups cannot be equal (different object constructor),\n// we can have single place to store precomputes\nconst pointPrecomputes = new WeakMap<any, any[]>();\nconst pointWindowSizes = new WeakMap<any, number>(); // This allows use make points immutable (nothing changes inside)\n\n// Elliptic curve multiplication of Point by scalar. Fragile.\n// Scalars should always be less than curve order: this should be checked inside of a curve itself.\n// Creates precomputation tables for fast multiplication:\n// - private scalar is split by fixed size windows of W bits\n// - every window point is collected from window's table & added to accumulator\n// - since windows are different, same point inside tables won't be accessed more than once per calc\n// - each multiplication is 'Math.ceil(CURVE_ORDER / \uD835\uDC4A) + 1' point additions (fixed for any scalar)\n// - +1 window is neccessary for wNAF\n// - wNAF reduces table size: 2x less memory + 2x faster generation, but 10% slower multiplication\n// TODO: Research returning 2d JS array of windows, instead of a single window. This would allow\n// windows to be in different memory locations\nexport function wNAF<T extends Group<T>>(c: GroupConstructor<T>, bits: number) {\n  const constTimeNegate = (condition: boolean, item: T): T => {\n    const neg = item.negate();\n    return condition ? neg : item;\n  };\n  const validateW = (W: number) => {\n    if (!Number.isSafeInteger(W) || W <= 0 || W > bits)\n      throw new Error(`Wrong window size=${W}, should be [1..${bits}]`);\n  };\n  const opts = (W: number) => {\n    validateW(W);\n    const windows = Math.ceil(bits / W) + 1; // +1, because\n    const windowSize = 2 ** (W - 1); // -1 because we skip zero\n    return { windows, windowSize };\n  };\n  return {\n    constTimeNegate,\n    // non-const time multiplication ladder\n    unsafeLadder(elm: T, n: bigint) {\n      let p = c.ZERO;\n      let d: T = elm;\n      while (n > _0n) {\n        if (n & _1n) p = p.add(d);\n        d = d.double();\n        n >>= _1n;\n      }\n      return p;\n    },\n\n    /**\n     * Creates a wNAF precomputation window. Used for caching.\n     * Default window size is set by `utils.precompute()` and is equal to 8.\n     * Number of precomputed points depends on the curve size:\n     * 2^(\uD835\uDC4A\u22121) * (Math.ceil(\uD835\uDC5B / \uD835\uDC4A) + 1), where:\n     * - \uD835\uDC4A is the window size\n     * - \uD835\uDC5B is the bitlength of the curve order.\n     * For a 256-bit curve and window size 8, the number of precomputed points is 128 * 33 = 4224.\n     * @returns precomputed point tables flattened to a single array\n     */\n    precomputeWindow(elm: T, W: number): Group<T>[] {\n      const { windows, windowSize } = opts(W);\n      const points: T[] = [];\n      let p: T = elm;\n      let base = p;\n      for (let window = 0; window < windows; window++) {\n        base = p;\n        points.push(base);\n        // =1, because we skip zero\n        for (let i = 1; i < windowSize; i++) {\n          base = base.add(p);\n          points.push(base);\n        }\n        p = base.double();\n      }\n      return points;\n    },\n\n    /**\n     * Implements ec multiplication using precomputed tables and w-ary non-adjacent form.\n     * @param W window size\n     * @param precomputes precomputed tables\n     * @param n scalar (we don't check here, but should be less than curve order)\n     * @returns real and fake (for const-time) points\n     */\n    wNAF(W: number, precomputes: T[], n: bigint): { p: T; f: T } {\n      // TODO: maybe check that scalar is less than group order? wNAF behavious is undefined otherwise\n      // But need to carefully remove other checks before wNAF. ORDER == bits here\n      const { windows, windowSize } = opts(W);\n\n      let p = c.ZERO;\n      let f = c.BASE;\n\n      const mask = BigInt(2 ** W - 1); // Create mask with W ones: 0b1111 for W=4 etc.\n      const maxNumber = 2 ** W;\n      const shiftBy = BigInt(W);\n\n      for (let window = 0; window < windows; window++) {\n        const offset = window * windowSize;\n        // Extract W bits.\n        let wbits = Number(n & mask);\n\n        // Shift number by W bits.\n        n >>= shiftBy;\n\n        // If the bits are bigger than max size, we'll split those.\n        // +224 => 256 - 32\n        if (wbits > windowSize) {\n          wbits -= maxNumber;\n          n += _1n;\n        }\n\n        // This code was first written with assumption that 'f' and 'p' will never be infinity point:\n        // since each addition is multiplied by 2 ** W, it cannot cancel each other. However,\n        // there is negate now: it is possible that negated element from low value\n        // would be the same as high element, which will create carry into next window.\n        // It's not obvious how this can fail, but still worth investigating later.\n\n        // Check if we're onto Zero point.\n        // Add random point inside current window to f.\n        const offset1 = offset;\n        const offset2 = offset + Math.abs(wbits) - 1; // -1 because we skip zero\n        const cond1 = window % 2 !== 0;\n        const cond2 = wbits < 0;\n        if (wbits === 0) {\n          // The most important part for const-time getPublicKey\n          f = f.add(constTimeNegate(cond1, precomputes[offset1]));\n        } else {\n          p = p.add(constTimeNegate(cond2, precomputes[offset2]));\n        }\n      }\n      // JIT-compiler should not eliminate f here, since it will later be used in normalizeZ()\n      // Even if the variable is still unused, there are some checks which will\n      // throw an exception, so compiler needs to prove they won't happen, which is hard.\n      // At this point there is a way to F be infinity-point even if p is not,\n      // which makes it less const-time: around 1 bigint multiply.\n      return { p, f };\n    },\n\n    wNAFCached(P: T, n: bigint, transform: Mapper<T>): { p: T; f: T } {\n      const W: number = pointWindowSizes.get(P) || 1;\n      // Calculate precomputes on a first run, reuse them after\n      let comp = pointPrecomputes.get(P);\n      if (!comp) {\n        comp = this.precomputeWindow(P, W) as T[];\n        if (W !== 1) pointPrecomputes.set(P, transform(comp));\n      }\n      return this.wNAF(W, comp, n);\n    },\n    // We calculate precomputes for elliptic curve point multiplication\n    // using windowed method. This specifies window size and\n    // stores precomputed values. Usually only base point would be precomputed.\n\n    setWindowSize(P: T, W: number) {\n      validateW(W);\n      pointWindowSizes.set(P, W);\n      pointPrecomputes.delete(P);\n    },\n  };\n}\n\n/**\n * Pippenger algorithm for multi-scalar multiplication (MSM).\n * MSM is basically (Pa + Qb + Rc + ...).\n * 30x faster vs naive addition on L=4096, 10x faster with precomputes.\n * For N=254bit, L=1, it does: 1024 ADD + 254 DBL. For L=5: 1536 ADD + 254 DBL.\n * Algorithmically constant-time (for same L), even when 1 point + scalar, or when scalar = 0.\n * @param c Curve Point constructor\n * @param field field over CURVE.N - important that it's not over CURVE.P\n * @param points array of L curve points\n * @param scalars array of L scalars (aka private keys / bigints)\n */\nexport function pippenger<T extends Group<T>>(\n  c: GroupConstructor<T>,\n  field: IField<bigint>,\n  points: T[],\n  scalars: bigint[]\n): T {\n  // If we split scalars by some window (let's say 8 bits), every chunk will only\n  // take 256 buckets even if there are 4096 scalars, also re-uses double.\n  // TODO:\n  // - https://eprint.iacr.org/2024/750.pdf\n  // - https://tches.iacr.org/index.php/TCHES/article/view/10287\n  // 0 is accepted in scalars\n  if (!Array.isArray(points) || !Array.isArray(scalars) || scalars.length !== points.length)\n    throw new Error('arrays of points and scalars must have equal length');\n  scalars.forEach((s, i) => {\n    if (!field.isValid(s)) throw new Error(`wrong scalar at index ${i}`);\n  });\n  points.forEach((p, i) => {\n    if (!(p instanceof (c as any))) throw new Error(`wrong point at index ${i}`);\n  });\n  const wbits = bitLen(BigInt(points.length));\n  const windowSize = wbits > 12 ? wbits - 3 : wbits > 4 ? wbits - 2 : wbits ? 2 : 1; // in bits\n  const MASK = (1 << windowSize) - 1;\n  const buckets = new Array(MASK + 1).fill(c.ZERO); // +1 for zero array\n  const lastBits = Math.floor((field.BITS - 1) / windowSize) * windowSize;\n  let sum = c.ZERO;\n  for (let i = lastBits; i >= 0; i -= windowSize) {\n    buckets.fill(c.ZERO);\n    for (let j = 0; j < scalars.length; j++) {\n      const scalar = scalars[j];\n      const wbits = Number((scalar >> BigInt(i)) & BigInt(MASK));\n      buckets[wbits] = buckets[wbits].add(points[j]);\n    }\n    let resI = c.ZERO; // not using this will do small speed-up, but will lose ct\n    // Skip first bucket, because it is zero\n    for (let j = buckets.length - 1, sumI = c.ZERO; j > 0; j--) {\n      sumI = sumI.add(buckets[j]);\n      resI = resI.add(sumI);\n    }\n    sum = sum.add(resI);\n    if (i !== 0) for (let j = 0; j < windowSize; j++) sum = sum.double();\n  }\n  return sum as T;\n}\n\n// Generic BasicCurve interface: works even for polynomial fields (BLS): P, n, h would be ok.\n// Though generator can be different (Fp2 / Fp6 for BLS).\nexport type BasicCurve<T> = {\n  Fp: IField<T>; // Field over which we'll do calculations (Fp)\n  n: bigint; // Curve order, total count of valid points in the field\n  nBitLength?: number; // bit length of curve order\n  nByteLength?: number; // byte length of curve order\n  h: bigint; // cofactor. we can assign default=1, but users will just ignore it w/o validation\n  hEff?: bigint; // Number to multiply to clear cofactor\n  Gx: T; // base point X coordinate\n  Gy: T; // base point Y coordinate\n  allowInfinityPoint?: boolean; // bls12-381 requires it. ZERO point is valid, but invalid pubkey\n};\n\nexport function validateBasic<FP, T>(curve: BasicCurve<FP> & T) {\n  validateField(curve.Fp);\n  validateObject(\n    curve,\n    {\n      n: 'bigint',\n      h: 'bigint',\n      Gx: 'field',\n      Gy: 'field',\n    },\n    {\n      nBitLength: 'isSafeInteger',\n      nByteLength: 'isSafeInteger',\n    }\n  );\n  // Set defaults\n  return Object.freeze({\n    ...nLength(curve.n, curve.nBitLength),\n    ...curve,\n    ...{ p: curve.Fp.ORDER },\n  } as const);\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// Short Weierstrass curve. The formula is: y\u00B2 = x\u00B3 + ax + b\nimport {\n  AffinePoint,\n  BasicCurve,\n  Group,\n  GroupConstructor,\n  validateBasic,\n  wNAF,\n  pippenger,\n} from './curve.js';\nimport * as mod from './modular.js';\nimport * as ut from './utils.js';\nimport { CHash, Hex, PrivKey, ensureBytes, memoized, abool } from './utils.js';\n\nexport type { AffinePoint };\ntype HmacFnSync = (key: Uint8Array, ...messages: Uint8Array[]) => Uint8Array;\ntype EndomorphismOpts = {\n  beta: bigint;\n  splitScalar: (k: bigint) => { k1neg: boolean; k1: bigint; k2neg: boolean; k2: bigint };\n};\nexport type BasicWCurve<T> = BasicCurve<T> & {\n  // Params: a, b\n  a: T;\n  b: T;\n\n  // Optional params\n  allowedPrivateKeyLengths?: readonly number[]; // for P521\n  wrapPrivateKey?: boolean; // bls12-381 requires mod(n) instead of rejecting keys >= n\n  endo?: EndomorphismOpts; // Endomorphism options for Koblitz curves\n  // When a cofactor != 1, there can be an effective methods to:\n  // 1. Determine whether a point is torsion-free\n  isTorsionFree?: (c: ProjConstructor<T>, point: ProjPointType<T>) => boolean;\n  // 2. Clear torsion component\n  clearCofactor?: (c: ProjConstructor<T>, point: ProjPointType<T>) => ProjPointType<T>;\n};\n\ntype Entropy = Hex | boolean;\nexport type SignOpts = { lowS?: boolean; extraEntropy?: Entropy; prehash?: boolean };\nexport type VerOpts = { lowS?: boolean; prehash?: boolean };\n\nfunction validateSigVerOpts(opts: SignOpts | VerOpts) {\n  if (opts.lowS !== undefined) abool('lowS', opts.lowS);\n  if (opts.prehash !== undefined) abool('prehash', opts.prehash);\n}\n\n/**\n * ### Design rationale for types\n *\n * * Interaction between classes from different curves should fail:\n *   `k256.Point.BASE.add(p256.Point.BASE)`\n * * For this purpose we want to use `instanceof` operator, which is fast and works during runtime\n * * Different calls of `curve()` would return different classes -\n *   `curve(params) !== curve(params)`: if somebody decided to monkey-patch their curve,\n *   it won't affect others\n *\n * TypeScript can't infer types for classes created inside a function. Classes is one instance of nominative types in TypeScript and interfaces only check for shape, so it's hard to create unique type for every function call.\n *\n * We can use generic types via some param, like curve opts, but that would:\n *     1. Enable interaction between `curve(params)` and `curve(params)` (curves of same params)\n *     which is hard to debug.\n *     2. Params can be generic and we can't enforce them to be constant value:\n *     if somebody creates curve from non-constant params,\n *     it would be allowed to interact with other curves with non-constant params\n *\n * TODO: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-7.html#unique-symbol\n */\n\n// Instance for 3d XYZ points\nexport interface ProjPointType<T> extends Group<ProjPointType<T>> {\n  readonly px: T;\n  readonly py: T;\n  readonly pz: T;\n  get x(): T;\n  get y(): T;\n  multiply(scalar: bigint): ProjPointType<T>;\n  toAffine(iz?: T): AffinePoint<T>;\n  isTorsionFree(): boolean;\n  clearCofactor(): ProjPointType<T>;\n  assertValidity(): void;\n  hasEvenY(): boolean;\n  toRawBytes(isCompressed?: boolean): Uint8Array;\n  toHex(isCompressed?: boolean): string;\n\n  multiplyUnsafe(scalar: bigint): ProjPointType<T>;\n  multiplyAndAddUnsafe(Q: ProjPointType<T>, a: bigint, b: bigint): ProjPointType<T> | undefined;\n  _setWindowSize(windowSize: number): void;\n}\n// Static methods for 3d XYZ points\nexport interface ProjConstructor<T> extends GroupConstructor<ProjPointType<T>> {\n  new (x: T, y: T, z: T): ProjPointType<T>;\n  fromAffine(p: AffinePoint<T>): ProjPointType<T>;\n  fromHex(hex: Hex): ProjPointType<T>;\n  fromPrivateKey(privateKey: PrivKey): ProjPointType<T>;\n  normalizeZ(points: ProjPointType<T>[]): ProjPointType<T>[];\n  msm(points: ProjPointType<T>[], scalars: bigint[]): ProjPointType<T>;\n}\n\nexport type CurvePointsType<T> = BasicWCurve<T> & {\n  // Bytes\n  fromBytes?: (bytes: Uint8Array) => AffinePoint<T>;\n  toBytes?: (c: ProjConstructor<T>, point: ProjPointType<T>, isCompressed: boolean) => Uint8Array;\n};\n\nfunction validatePointOpts<T>(curve: CurvePointsType<T>) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      a: 'field',\n      b: 'field',\n    },\n    {\n      allowedPrivateKeyLengths: 'array',\n      wrapPrivateKey: 'boolean',\n      isTorsionFree: 'function',\n      clearCofactor: 'function',\n      allowInfinityPoint: 'boolean',\n      fromBytes: 'function',\n      toBytes: 'function',\n    }\n  );\n  const { endo, Fp, a } = opts;\n  if (endo) {\n    if (!Fp.eql(a, Fp.ZERO)) {\n      throw new Error('Endomorphism can only be defined for Koblitz curves that have a=0');\n    }\n    if (\n      typeof endo !== 'object' ||\n      typeof endo.beta !== 'bigint' ||\n      typeof endo.splitScalar !== 'function'\n    ) {\n      throw new Error('Expected endomorphism with beta: bigint and splitScalar: function');\n    }\n  }\n  return Object.freeze({ ...opts } as const);\n}\n\nexport type CurvePointsRes<T> = {\n  CURVE: ReturnType<typeof validatePointOpts<T>>;\n  ProjectivePoint: ProjConstructor<T>;\n  normPrivateKeyToScalar: (key: PrivKey) => bigint;\n  weierstrassEquation: (x: T) => T;\n  isWithinCurveOrder: (num: bigint) => boolean;\n};\n\nconst { bytesToNumberBE: b2n, hexToBytes: h2b } = ut;\n\n/**\n * ASN.1 DER encoding utilities. ASN is very complex & fragile. Format:\n *\n *     [0x30 (SEQUENCE), bytelength, 0x02 (INTEGER), intLength, R, 0x02 (INTEGER), intLength, S]\n *\n * Docs: https://letsencrypt.org/docs/a-warm-welcome-to-asn1-and-der/, https://luca.ntop.org/Teaching/Appunti/asn1.html\n */\nexport const DER = {\n  // asn.1 DER encoding utils\n  Err: class DERErr extends Error {\n    constructor(m = '') {\n      super(m);\n    }\n  },\n  // Basic building block is TLV (Tag-Length-Value)\n  _tlv: {\n    encode: (tag: number, data: string) => {\n      const { Err: E } = DER;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length & 1) throw new E('tlv.encode: unpadded data');\n      const dataLen = data.length / 2;\n      const len = ut.numberToHexUnpadded(dataLen);\n      if ((len.length / 2) & 0b1000_0000) throw new E('tlv.encode: long form length too big');\n      // length of length with long form flag\n      const lenLen = dataLen > 127 ? ut.numberToHexUnpadded((len.length / 2) | 0b1000_0000) : '';\n      return `${ut.numberToHexUnpadded(tag)}${lenLen}${len}${data}`;\n    },\n    // v - value, l - left bytes (unparsed)\n    decode(tag: number, data: Uint8Array): { v: Uint8Array; l: Uint8Array } {\n      const { Err: E } = DER;\n      let pos = 0;\n      if (tag < 0 || tag > 256) throw new E('tlv.encode: wrong tag');\n      if (data.length < 2 || data[pos++] !== tag) throw new E('tlv.decode: wrong tlv');\n      const first = data[pos++];\n      const isLong = !!(first & 0b1000_0000); // First bit of first length byte is flag for short/long form\n      let length = 0;\n      if (!isLong) length = first;\n      else {\n        // Long form: [longFlag(1bit), lengthLength(7bit), length (BE)]\n        const lenLen = first & 0b0111_1111;\n        if (!lenLen) throw new E('tlv.decode(long): indefinite length not supported');\n        if (lenLen > 4) throw new E('tlv.decode(long): byte length is too big'); // this will overflow u32 in js\n        const lengthBytes = data.subarray(pos, pos + lenLen);\n        if (lengthBytes.length !== lenLen) throw new E('tlv.decode: length bytes not complete');\n        if (lengthBytes[0] === 0) throw new E('tlv.decode(long): zero leftmost byte');\n        for (const b of lengthBytes) length = (length << 8) | b;\n        pos += lenLen;\n        if (length < 128) throw new E('tlv.decode(long): not minimal encoding');\n      }\n      const v = data.subarray(pos, pos + length);\n      if (v.length !== length) throw new E('tlv.decode: wrong value length');\n      return { v, l: data.subarray(pos + length) };\n    },\n  },\n  // https://crypto.stackexchange.com/a/57734 Leftmost bit of first byte is 'negative' flag,\n  // since we always use positive integers here. It must always be empty:\n  // - add zero byte if exists\n  // - if next byte doesn't have a flag, leading zero is not allowed (minimal encoding)\n  _int: {\n    encode(num: bigint) {\n      const { Err: E } = DER;\n      if (num < _0n) throw new E('integer: negative integers are not allowed');\n      let hex = ut.numberToHexUnpadded(num);\n      // Pad with zero byte if negative flag is present\n      if (Number.parseInt(hex[0], 16) & 0b1000) hex = '00' + hex;\n      if (hex.length & 1) throw new E('unexpected assertion');\n      return hex;\n    },\n    decode(data: Uint8Array): bigint {\n      const { Err: E } = DER;\n      if (data[0] & 0b1000_0000) throw new E('Invalid signature integer: negative');\n      if (data[0] === 0x00 && !(data[1] & 0b1000_0000))\n        throw new E('Invalid signature integer: unnecessary leading zero');\n      return b2n(data);\n    },\n  },\n  toSig(hex: string | Uint8Array): { r: bigint; s: bigint } {\n    // parse DER signature\n    const { Err: E, _int: int, _tlv: tlv } = DER;\n    const data = typeof hex === 'string' ? h2b(hex) : hex;\n    ut.abytes(data);\n    const { v: seqBytes, l: seqLeftBytes } = tlv.decode(0x30, data);\n    if (seqLeftBytes.length) throw new E('Invalid signature: left bytes after parsing');\n    const { v: rBytes, l: rLeftBytes } = tlv.decode(0x02, seqBytes);\n    const { v: sBytes, l: sLeftBytes } = tlv.decode(0x02, rLeftBytes);\n    if (sLeftBytes.length) throw new E('Invalid signature: left bytes after parsing');\n    return { r: int.decode(rBytes), s: int.decode(sBytes) };\n  },\n  hexFromSig(sig: { r: bigint; s: bigint }): string {\n    const { _tlv: tlv, _int: int } = DER;\n    const seq = `${tlv.encode(0x02, int.encode(sig.r))}${tlv.encode(0x02, int.encode(sig.s))}`;\n    return tlv.encode(0x30, seq);\n  },\n};\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3), _4n = BigInt(4);\n\nexport function weierstrassPoints<T>(opts: CurvePointsType<T>): CurvePointsRes<T> {\n  const CURVE = validatePointOpts(opts);\n  const { Fp } = CURVE; // All curves has same field / group length as for now, but they can differ\n  const Fn = mod.Field(CURVE.n, CURVE.nBitLength);\n\n  const toBytes =\n    CURVE.toBytes ||\n    ((_c: ProjConstructor<T>, point: ProjPointType<T>, _isCompressed: boolean) => {\n      const a = point.toAffine();\n      return ut.concatBytes(Uint8Array.from([0x04]), Fp.toBytes(a.x), Fp.toBytes(a.y));\n    });\n  const fromBytes =\n    CURVE.fromBytes ||\n    ((bytes: Uint8Array) => {\n      // const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // if (head !== 0x04) throw new Error('Only non-compressed encoding is supported');\n      const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n      const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n      return { x, y };\n    });\n\n  /**\n   * y\u00B2 = x\u00B3 + ax + b: Short weierstrass curve formula\n   * @returns y\u00B2\n   */\n  function weierstrassEquation(x: T): T {\n    const { a, b } = CURVE;\n    const x2 = Fp.sqr(x); // x * x\n    const x3 = Fp.mul(x2, x); // x2 * x\n    return Fp.add(Fp.add(x3, Fp.mul(x, a)), b); // x3 + a * x + b\n  }\n  // Validate whether the passed curve params are valid.\n  // We check if curve equation works for generator point.\n  // `assertValidity()` won't work: `isTorsionFree()` is not available at this point in bls12-381.\n  // ProjectivePoint class has not been initialized yet.\n  if (!Fp.eql(Fp.sqr(CURVE.Gy), weierstrassEquation(CURVE.Gx)))\n    throw new Error('bad generator point: equation left != right');\n\n  // Valid group elements reside in range 1..n-1\n  function isWithinCurveOrder(num: bigint): boolean {\n    return ut.inRange(num, _1n, CURVE.n);\n  }\n  // Validates if priv key is valid and converts it to bigint.\n  // Supports options allowedPrivateKeyLengths and wrapPrivateKey.\n  function normPrivateKeyToScalar(key: PrivKey): bigint {\n    const { allowedPrivateKeyLengths: lengths, nByteLength, wrapPrivateKey, n: N } = CURVE;\n    if (lengths && typeof key !== 'bigint') {\n      if (ut.isBytes(key)) key = ut.bytesToHex(key);\n      // Normalize to hex string, pad. E.g. P521 would norm 130-132 char hex to 132-char bytes\n      if (typeof key !== 'string' || !lengths.includes(key.length)) throw new Error('Invalid key');\n      key = key.padStart(nByteLength * 2, '0');\n    }\n    let num: bigint;\n    try {\n      num =\n        typeof key === 'bigint'\n          ? key\n          : ut.bytesToNumberBE(ensureBytes('private key', key, nByteLength));\n    } catch (error) {\n      throw new Error(`private key must be ${nByteLength} bytes, hex or bigint, not ${typeof key}`);\n    }\n    if (wrapPrivateKey) num = mod.mod(num, N); // disabled by default, enabled for BLS\n    ut.aInRange('private key', num, _1n, N); // num in range [1..N-1]\n    return num;\n  }\n\n  function assertPrjPoint(other: unknown) {\n    if (!(other instanceof Point)) throw new Error('ProjectivePoint expected');\n  }\n\n  // Memoized toAffine / validity check. They are heavy. Points are immutable.\n\n  // Converts Projective point to affine (x, y) coordinates.\n  // Can accept precomputed Z^-1 - for example, from invertBatch.\n  // (x, y, z) \u220B (x=x/z, y=y/z)\n  const toAffineMemo = memoized((p: Point, iz?: T): AffinePoint<T> => {\n    const { px: x, py: y, pz: z } = p;\n    // Fast-path for normalized points\n    if (Fp.eql(z, Fp.ONE)) return { x, y };\n    const is0 = p.is0();\n    // If invZ was 0, we return zero point. However we still want to execute\n    // all operations, so we replace invZ with a random number, 1.\n    if (iz == null) iz = is0 ? Fp.ONE : Fp.inv(z);\n    const ax = Fp.mul(x, iz);\n    const ay = Fp.mul(y, iz);\n    const zz = Fp.mul(z, iz);\n    if (is0) return { x: Fp.ZERO, y: Fp.ZERO };\n    if (!Fp.eql(zz, Fp.ONE)) throw new Error('invZ was invalid');\n    return { x: ax, y: ay };\n  });\n  // NOTE: on exception this will crash 'cached' and no value will be set.\n  // Otherwise true will be return\n  const assertValidMemo = memoized((p: Point) => {\n    if (p.is0()) {\n      // (0, 1, 0) aka ZERO is invalid in most contexts.\n      // In BLS, ZERO can be serialized, so we allow it.\n      // (0, 0, 0) is wrong representation of ZERO and is always invalid.\n      if (CURVE.allowInfinityPoint && !Fp.is0(p.py)) return;\n      throw new Error('bad point: ZERO');\n    }\n    // Some 3rd-party test vectors require different wording between here & `fromCompressedHex`\n    const { x, y } = p.toAffine();\n    // Check if x, y are valid field elements\n    if (!Fp.isValid(x) || !Fp.isValid(y)) throw new Error('bad point: x or y not FE');\n    const left = Fp.sqr(y); // y\u00B2\n    const right = weierstrassEquation(x); // x\u00B3 + ax + b\n    if (!Fp.eql(left, right)) throw new Error('bad point: equation left != right');\n    if (!p.isTorsionFree()) throw new Error('bad point: not in prime-order subgroup');\n    return true;\n  });\n\n  /**\n   * Projective Point works in 3d / projective (homogeneous) coordinates: (x, y, z) \u220B (x=x/z, y=y/z)\n   * Default Point works in 2d / affine coordinates: (x, y)\n   * We're doing calculations in projective, because its operations don't require costly inversion.\n   */\n  class Point implements ProjPointType<T> {\n    static readonly BASE = new Point(CURVE.Gx, CURVE.Gy, Fp.ONE);\n    static readonly ZERO = new Point(Fp.ZERO, Fp.ONE, Fp.ZERO);\n\n    constructor(\n      readonly px: T,\n      readonly py: T,\n      readonly pz: T\n    ) {\n      if (px == null || !Fp.isValid(px)) throw new Error('x required');\n      if (py == null || !Fp.isValid(py)) throw new Error('y required');\n      if (pz == null || !Fp.isValid(pz)) throw new Error('z required');\n      Object.freeze(this);\n    }\n\n    // Does not validate if the point is on-curve.\n    // Use fromHex instead, or call assertValidity() later.\n    static fromAffine(p: AffinePoint<T>): Point {\n      const { x, y } = p || {};\n      if (!p || !Fp.isValid(x) || !Fp.isValid(y)) throw new Error('invalid affine point');\n      if (p instanceof Point) throw new Error('projective point not allowed');\n      const is0 = (i: T) => Fp.eql(i, Fp.ZERO);\n      // fromAffine(x:0, y:0) would produce (x:0, y:0, z:1), but we need (x:0, y:1, z:0)\n      if (is0(x) && is0(y)) return Point.ZERO;\n      return new Point(x, y, Fp.ONE);\n    }\n\n    get x(): T {\n      return this.toAffine().x;\n    }\n    get y(): T {\n      return this.toAffine().y;\n    }\n\n    /**\n     * Takes a bunch of Projective Points but executes only one\n     * inversion on all of them. Inversion is very slow operation,\n     * so this improves performance massively.\n     * Optimization: converts a list of projective points to a list of identical points with Z=1.\n     */\n    static normalizeZ(points: Point[]): Point[] {\n      const toInv = Fp.invertBatch(points.map((p) => p.pz));\n      return points.map((p, i) => p.toAffine(toInv[i])).map(Point.fromAffine);\n    }\n\n    /**\n     * Converts hash string or Uint8Array to Point.\n     * @param hex short/long ECDSA hex\n     */\n    static fromHex(hex: Hex): Point {\n      const P = Point.fromAffine(fromBytes(ensureBytes('pointHex', hex)));\n      P.assertValidity();\n      return P;\n    }\n\n    // Multiplies generator point by privateKey.\n    static fromPrivateKey(privateKey: PrivKey) {\n      return Point.BASE.multiply(normPrivateKeyToScalar(privateKey));\n    }\n\n    // Multiscalar Multiplication\n    static msm(points: Point[], scalars: bigint[]) {\n      return pippenger(Point, Fn, points, scalars);\n    }\n\n    // \"Private method\", don't use it directly\n    _setWindowSize(windowSize: number) {\n      wnaf.setWindowSize(this, windowSize);\n    }\n\n    // A point on curve is valid if it conforms to equation.\n    assertValidity(): void {\n      assertValidMemo(this);\n    }\n\n    hasEvenY(): boolean {\n      const { y } = this.toAffine();\n      if (Fp.isOdd) return !Fp.isOdd(y);\n      throw new Error(\"Field doesn't support isOdd\");\n    }\n\n    /**\n     * Compare one point to another.\n     */\n    equals(other: Point): boolean {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      const U1 = Fp.eql(Fp.mul(X1, Z2), Fp.mul(X2, Z1));\n      const U2 = Fp.eql(Fp.mul(Y1, Z2), Fp.mul(Y2, Z1));\n      return U1 && U2;\n    }\n\n    /**\n     * Flips point to one corresponding to (x, -y) in Affine coordinates.\n     */\n    negate(): Point {\n      return new Point(this.px, Fp.neg(this.py), this.pz);\n    }\n\n    // Renes-Costello-Batina exception-free doubling formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 3\n    // Cost: 8M + 3S + 3*a + 2*b3 + 15add.\n    double() {\n      const { a, b } = CURVE;\n      const b3 = Fp.mul(b, _3n);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      let t0 = Fp.mul(X1, X1); // step 1\n      let t1 = Fp.mul(Y1, Y1);\n      let t2 = Fp.mul(Z1, Z1);\n      let t3 = Fp.mul(X1, Y1);\n      t3 = Fp.add(t3, t3); // step 5\n      Z3 = Fp.mul(X1, Z1);\n      Z3 = Fp.add(Z3, Z3);\n      X3 = Fp.mul(a, Z3);\n      Y3 = Fp.mul(b3, t2);\n      Y3 = Fp.add(X3, Y3); // step 10\n      X3 = Fp.sub(t1, Y3);\n      Y3 = Fp.add(t1, Y3);\n      Y3 = Fp.mul(X3, Y3);\n      X3 = Fp.mul(t3, X3);\n      Z3 = Fp.mul(b3, Z3); // step 15\n      t2 = Fp.mul(a, t2);\n      t3 = Fp.sub(t0, t2);\n      t3 = Fp.mul(a, t3);\n      t3 = Fp.add(t3, Z3);\n      Z3 = Fp.add(t0, t0); // step 20\n      t0 = Fp.add(Z3, t0);\n      t0 = Fp.add(t0, t2);\n      t0 = Fp.mul(t0, t3);\n      Y3 = Fp.add(Y3, t0);\n      t2 = Fp.mul(Y1, Z1); // step 25\n      t2 = Fp.add(t2, t2);\n      t0 = Fp.mul(t2, t3);\n      X3 = Fp.sub(X3, t0);\n      Z3 = Fp.mul(t2, t1);\n      Z3 = Fp.add(Z3, Z3); // step 30\n      Z3 = Fp.add(Z3, Z3);\n      return new Point(X3, Y3, Z3);\n    }\n\n    // Renes-Costello-Batina exception-free addition formula.\n    // There is 30% faster Jacobian formula, but it is not complete.\n    // https://eprint.iacr.org/2015/1060, algorithm 1\n    // Cost: 12M + 0S + 3*a + 3*b3 + 23add.\n    add(other: Point): Point {\n      assertPrjPoint(other);\n      const { px: X1, py: Y1, pz: Z1 } = this;\n      const { px: X2, py: Y2, pz: Z2 } = other;\n      let X3 = Fp.ZERO, Y3 = Fp.ZERO, Z3 = Fp.ZERO; // prettier-ignore\n      const a = CURVE.a;\n      const b3 = Fp.mul(CURVE.b, _3n);\n      let t0 = Fp.mul(X1, X2); // step 1\n      let t1 = Fp.mul(Y1, Y2);\n      let t2 = Fp.mul(Z1, Z2);\n      let t3 = Fp.add(X1, Y1);\n      let t4 = Fp.add(X2, Y2); // step 5\n      t3 = Fp.mul(t3, t4);\n      t4 = Fp.add(t0, t1);\n      t3 = Fp.sub(t3, t4);\n      t4 = Fp.add(X1, Z1);\n      let t5 = Fp.add(X2, Z2); // step 10\n      t4 = Fp.mul(t4, t5);\n      t5 = Fp.add(t0, t2);\n      t4 = Fp.sub(t4, t5);\n      t5 = Fp.add(Y1, Z1);\n      X3 = Fp.add(Y2, Z2); // step 15\n      t5 = Fp.mul(t5, X3);\n      X3 = Fp.add(t1, t2);\n      t5 = Fp.sub(t5, X3);\n      Z3 = Fp.mul(a, t4);\n      X3 = Fp.mul(b3, t2); // step 20\n      Z3 = Fp.add(X3, Z3);\n      X3 = Fp.sub(t1, Z3);\n      Z3 = Fp.add(t1, Z3);\n      Y3 = Fp.mul(X3, Z3);\n      t1 = Fp.add(t0, t0); // step 25\n      t1 = Fp.add(t1, t0);\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.mul(b3, t4);\n      t1 = Fp.add(t1, t2);\n      t2 = Fp.sub(t0, t2); // step 30\n      t2 = Fp.mul(a, t2);\n      t4 = Fp.add(t4, t2);\n      t0 = Fp.mul(t1, t4);\n      Y3 = Fp.add(Y3, t0);\n      t0 = Fp.mul(t5, t4); // step 35\n      X3 = Fp.mul(t3, X3);\n      X3 = Fp.sub(X3, t0);\n      t0 = Fp.mul(t3, t1);\n      Z3 = Fp.mul(t5, Z3);\n      Z3 = Fp.add(Z3, t0); // step 40\n      return new Point(X3, Y3, Z3);\n    }\n\n    subtract(other: Point) {\n      return this.add(other.negate());\n    }\n\n    is0() {\n      return this.equals(Point.ZERO);\n    }\n    private wNAF(n: bigint): { p: Point; f: Point } {\n      return wnaf.wNAFCached(this, n, Point.normalizeZ);\n    }\n\n    /**\n     * Non-constant-time multiplication. Uses double-and-add algorithm.\n     * It's faster, but should only be used when you don't care about\n     * an exposed private key e.g. sig verification, which works over *public* keys.\n     */\n    multiplyUnsafe(sc: bigint): Point {\n      ut.aInRange('scalar', sc, _0n, CURVE.n);\n      const I = Point.ZERO;\n      if (sc === _0n) return I;\n      if (sc === _1n) return this;\n      const { endo } = CURVE;\n      if (!endo) return wnaf.unsafeLadder(this, sc);\n\n      // Apply endomorphism\n      let { k1neg, k1, k2neg, k2 } = endo.splitScalar(sc);\n      let k1p = I;\n      let k2p = I;\n      let d: Point = this;\n      while (k1 > _0n || k2 > _0n) {\n        if (k1 & _1n) k1p = k1p.add(d);\n        if (k2 & _1n) k2p = k2p.add(d);\n        d = d.double();\n        k1 >>= _1n;\n        k2 >>= _1n;\n      }\n      if (k1neg) k1p = k1p.negate();\n      if (k2neg) k2p = k2p.negate();\n      k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n      return k1p.add(k2p);\n    }\n\n    /**\n     * Constant time multiplication.\n     * Uses wNAF method. Windowed method may be 10% faster,\n     * but takes 2x longer to generate and consumes 2x memory.\n     * Uses precomputes when available.\n     * Uses endomorphism for Koblitz curves.\n     * @param scalar by which the point would be multiplied\n     * @returns New point\n     */\n    multiply(scalar: bigint): Point {\n      const { endo, n: N } = CURVE;\n      ut.aInRange('scalar', scalar, _1n, N);\n      let point: Point, fake: Point; // Fake point is used to const-time mult\n      if (endo) {\n        const { k1neg, k1, k2neg, k2 } = endo.splitScalar(scalar);\n        let { p: k1p, f: f1p } = this.wNAF(k1);\n        let { p: k2p, f: f2p } = this.wNAF(k2);\n        k1p = wnaf.constTimeNegate(k1neg, k1p);\n        k2p = wnaf.constTimeNegate(k2neg, k2p);\n        k2p = new Point(Fp.mul(k2p.px, endo.beta), k2p.py, k2p.pz);\n        point = k1p.add(k2p);\n        fake = f1p.add(f2p);\n      } else {\n        const { p, f } = this.wNAF(scalar);\n        point = p;\n        fake = f;\n      }\n      // Normalize `z` for both points, but return only real one\n      return Point.normalizeZ([point, fake])[0];\n    }\n\n    /**\n     * Efficiently calculate `aP + bQ`. Unsafe, can expose private key, if used incorrectly.\n     * Not using Strauss-Shamir trick: precomputation tables are faster.\n     * The trick could be useful if both P and Q are not G (not in our case).\n     * @returns non-zero affine point\n     */\n    multiplyAndAddUnsafe(Q: Point, a: bigint, b: bigint): Point | undefined {\n      const G = Point.BASE; // No Strauss-Shamir trick: we have 10% faster G precomputes\n      const mul = (\n        P: Point,\n        a: bigint // Select faster multiply() method\n      ) => (a === _0n || a === _1n || !P.equals(G) ? P.multiplyUnsafe(a) : P.multiply(a));\n      const sum = mul(this, a).add(mul(Q, b));\n      return sum.is0() ? undefined : sum;\n    }\n\n    // Converts Projective point to affine (x, y) coordinates.\n    // Can accept precomputed Z^-1 - for example, from invertBatch.\n    // (x, y, z) \u220B (x=x/z, y=y/z)\n    toAffine(iz?: T): AffinePoint<T> {\n      return toAffineMemo(this, iz);\n    }\n    isTorsionFree(): boolean {\n      const { h: cofactor, isTorsionFree } = CURVE;\n      if (cofactor === _1n) return true; // No subgroups, always torsion-free\n      if (isTorsionFree) return isTorsionFree(Point, this);\n      throw new Error('isTorsionFree() has not been declared for the elliptic curve');\n    }\n    clearCofactor(): Point {\n      const { h: cofactor, clearCofactor } = CURVE;\n      if (cofactor === _1n) return this; // Fast-path\n      if (clearCofactor) return clearCofactor(Point, this) as Point;\n      return this.multiplyUnsafe(CURVE.h);\n    }\n\n    toRawBytes(isCompressed = true): Uint8Array {\n      abool('isCompressed', isCompressed);\n      this.assertValidity();\n      return toBytes(Point, this, isCompressed);\n    }\n\n    toHex(isCompressed = true): string {\n      abool('isCompressed', isCompressed);\n      return ut.bytesToHex(this.toRawBytes(isCompressed));\n    }\n  }\n  const _bits = CURVE.nBitLength;\n  const wnaf = wNAF(Point, CURVE.endo ? Math.ceil(_bits / 2) : _bits);\n  // Validate if generator point is on curve\n  return {\n    CURVE,\n    ProjectivePoint: Point as ProjConstructor<T>,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  };\n}\n\n// Instance\nexport interface SignatureType {\n  readonly r: bigint;\n  readonly s: bigint;\n  readonly recovery?: number;\n  assertValidity(): void;\n  addRecoveryBit(recovery: number): RecoveredSignatureType;\n  hasHighS(): boolean;\n  normalizeS(): SignatureType;\n  recoverPublicKey(msgHash: Hex): ProjPointType<bigint>;\n  toCompactRawBytes(): Uint8Array;\n  toCompactHex(): string;\n  // DER-encoded\n  toDERRawBytes(isCompressed?: boolean): Uint8Array;\n  toDERHex(isCompressed?: boolean): string;\n}\nexport type RecoveredSignatureType = SignatureType & {\n  readonly recovery: number;\n};\n// Static methods\nexport type SignatureConstructor = {\n  new (r: bigint, s: bigint): SignatureType;\n  fromCompact(hex: Hex): SignatureType;\n  fromDER(hex: Hex): SignatureType;\n};\ntype SignatureLike = { r: bigint; s: bigint };\n\nexport type PubKey = Hex | ProjPointType<bigint>;\n\nexport type CurveType = BasicWCurve<bigint> & {\n  hash: CHash; // CHash not FHash because we need outputLen for DRBG\n  hmac: HmacFnSync;\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  lowS?: boolean;\n  bits2int?: (bytes: Uint8Array) => bigint;\n  bits2int_modN?: (bytes: Uint8Array) => bigint;\n};\n\nfunction validateOpts(curve: CurveType) {\n  const opts = validateBasic(curve);\n  ut.validateObject(\n    opts,\n    {\n      hash: 'hash',\n      hmac: 'function',\n      randomBytes: 'function',\n    },\n    {\n      bits2int: 'function',\n      bits2int_modN: 'function',\n      lowS: 'boolean',\n    }\n  );\n  return Object.freeze({ lowS: true, ...opts } as const);\n}\n\nexport type CurveFn = {\n  CURVE: ReturnType<typeof validateOpts>;\n  getPublicKey: (privateKey: PrivKey, isCompressed?: boolean) => Uint8Array;\n  getSharedSecret: (privateA: PrivKey, publicB: Hex, isCompressed?: boolean) => Uint8Array;\n  sign: (msgHash: Hex, privKey: PrivKey, opts?: SignOpts) => RecoveredSignatureType;\n  verify: (signature: Hex | SignatureLike, msgHash: Hex, publicKey: Hex, opts?: VerOpts) => boolean;\n  ProjectivePoint: ProjConstructor<bigint>;\n  Signature: SignatureConstructor;\n  utils: {\n    normPrivateKeyToScalar: (key: PrivKey) => bigint;\n    isValidPrivateKey(privateKey: PrivKey): boolean;\n    randomPrivateKey: () => Uint8Array;\n    precompute: (windowSize?: number, point?: ProjPointType<bigint>) => ProjPointType<bigint>;\n  };\n};\n\n/**\n * Creates short weierstrass curve and ECDSA signature methods for it.\n * @example\n * import { Field } from '@noble/curves/abstract/modular';\n * // Before that, define BigInt-s: a, b, p, n, Gx, Gy\n * const curve = weierstrass({ a, b, Fp: Field(p), n, Gx, Gy, h: 1n })\n */\nexport function weierstrass(curveDef: CurveType): CurveFn {\n  const CURVE = validateOpts(curveDef) as ReturnType<typeof validateOpts>;\n  const { Fp, n: CURVE_ORDER } = CURVE;\n  const compressedLen = Fp.BYTES + 1; // e.g. 33 for 32\n  const uncompressedLen = 2 * Fp.BYTES + 1; // e.g. 65 for 32\n\n  function modN(a: bigint) {\n    return mod.mod(a, CURVE_ORDER);\n  }\n  function invN(a: bigint) {\n    return mod.invert(a, CURVE_ORDER);\n  }\n\n  const {\n    ProjectivePoint: Point,\n    normPrivateKeyToScalar,\n    weierstrassEquation,\n    isWithinCurveOrder,\n  } = weierstrassPoints({\n    ...CURVE,\n    toBytes(_c, point, isCompressed: boolean): Uint8Array {\n      const a = point.toAffine();\n      const x = Fp.toBytes(a.x);\n      const cat = ut.concatBytes;\n      abool('isCompressed', isCompressed);\n      if (isCompressed) {\n        return cat(Uint8Array.from([point.hasEvenY() ? 0x02 : 0x03]), x);\n      } else {\n        return cat(Uint8Array.from([0x04]), x, Fp.toBytes(a.y));\n      }\n    },\n    fromBytes(bytes: Uint8Array) {\n      const len = bytes.length;\n      const head = bytes[0];\n      const tail = bytes.subarray(1);\n      // this.assertValidity() is done inside of fromHex\n      if (len === compressedLen && (head === 0x02 || head === 0x03)) {\n        const x = ut.bytesToNumberBE(tail);\n        if (!ut.inRange(x, _1n, Fp.ORDER)) throw new Error('Point is not on curve');\n        const y2 = weierstrassEquation(x); // y\u00B2 = x\u00B3 + ax + b\n        let y: bigint;\n        try {\n          y = Fp.sqrt(y2); // y = y\u00B2 ^ (p+1)/4\n        } catch (sqrtError) {\n          const suffix = sqrtError instanceof Error ? ': ' + sqrtError.message : '';\n          throw new Error('Point is not on curve' + suffix);\n        }\n        const isYOdd = (y & _1n) === _1n;\n        // ECDSA\n        const isHeadOdd = (head & 1) === 1;\n        if (isHeadOdd !== isYOdd) y = Fp.neg(y);\n        return { x, y };\n      } else if (len === uncompressedLen && head === 0x04) {\n        const x = Fp.fromBytes(tail.subarray(0, Fp.BYTES));\n        const y = Fp.fromBytes(tail.subarray(Fp.BYTES, 2 * Fp.BYTES));\n        return { x, y };\n      } else {\n        throw new Error(\n          `Point of length ${len} was invalid. Expected ${compressedLen} compressed bytes or ${uncompressedLen} uncompressed bytes`\n        );\n      }\n    },\n  });\n  const numToNByteStr = (num: bigint): string =>\n    ut.bytesToHex(ut.numberToBytesBE(num, CURVE.nByteLength));\n\n  function isBiggerThanHalfOrder(number: bigint) {\n    const HALF = CURVE_ORDER >> _1n;\n    return number > HALF;\n  }\n\n  function normalizeS(s: bigint) {\n    return isBiggerThanHalfOrder(s) ? modN(-s) : s;\n  }\n  // slice bytes num\n  const slcNum = (b: Uint8Array, from: number, to: number) => ut.bytesToNumberBE(b.slice(from, to));\n\n  /**\n   * ECDSA signature with its (r, s) properties. Supports DER & compact representations.\n   */\n  class Signature implements SignatureType {\n    constructor(\n      readonly r: bigint,\n      readonly s: bigint,\n      readonly recovery?: number\n    ) {\n      this.assertValidity();\n    }\n\n    // pair (bytes of r, bytes of s)\n    static fromCompact(hex: Hex) {\n      const l = CURVE.nByteLength;\n      hex = ensureBytes('compactSignature', hex, l * 2);\n      return new Signature(slcNum(hex, 0, l), slcNum(hex, l, 2 * l));\n    }\n\n    // DER encoded ECDSA signature\n    // https://bitcoin.stackexchange.com/questions/57644/what-are-the-parts-of-a-bitcoin-transaction-input-script\n    static fromDER(hex: Hex) {\n      const { r, s } = DER.toSig(ensureBytes('DER', hex));\n      return new Signature(r, s);\n    }\n\n    assertValidity(): void {\n      ut.aInRange('r', this.r, _1n, CURVE_ORDER); // r in [1..N]\n      ut.aInRange('s', this.s, _1n, CURVE_ORDER); // s in [1..N]\n    }\n\n    addRecoveryBit(recovery: number): RecoveredSignature {\n      return new Signature(this.r, this.s, recovery) as RecoveredSignature;\n    }\n\n    recoverPublicKey(msgHash: Hex): typeof Point.BASE {\n      const { r, s, recovery: rec } = this;\n      const h = bits2int_modN(ensureBytes('msgHash', msgHash)); // Truncate hash\n      if (rec == null || ![0, 1, 2, 3].includes(rec)) throw new Error('recovery id invalid');\n      const radj = rec === 2 || rec === 3 ? r + CURVE.n : r;\n      if (radj >= Fp.ORDER) throw new Error('recovery id 2 or 3 invalid');\n      const prefix = (rec & 1) === 0 ? '02' : '03';\n      const R = Point.fromHex(prefix + numToNByteStr(radj));\n      const ir = invN(radj); // r^-1\n      const u1 = modN(-h * ir); // -hr^-1\n      const u2 = modN(s * ir); // sr^-1\n      const Q = Point.BASE.multiplyAndAddUnsafe(R, u1, u2); // (sr^-1)R-(hr^-1)G = -(hr^-1)G + (sr^-1)\n      if (!Q) throw new Error('point at infinify'); // unsafe is fine: no priv data leaked\n      Q.assertValidity();\n      return Q;\n    }\n\n    // Signatures should be low-s, to prevent malleability.\n    hasHighS(): boolean {\n      return isBiggerThanHalfOrder(this.s);\n    }\n\n    normalizeS() {\n      return this.hasHighS() ? new Signature(this.r, modN(-this.s), this.recovery) : this;\n    }\n\n    // DER-encoded\n    toDERRawBytes() {\n      return ut.hexToBytes(this.toDERHex());\n    }\n    toDERHex() {\n      return DER.hexFromSig({ r: this.r, s: this.s });\n    }\n\n    // padded bytes of r, then padded bytes of s\n    toCompactRawBytes() {\n      return ut.hexToBytes(this.toCompactHex());\n    }\n    toCompactHex() {\n      return numToNByteStr(this.r) + numToNByteStr(this.s);\n    }\n  }\n  type RecoveredSignature = Signature & { recovery: number };\n\n  const utils = {\n    isValidPrivateKey(privateKey: PrivKey) {\n      try {\n        normPrivateKeyToScalar(privateKey);\n        return true;\n      } catch (error) {\n        return false;\n      }\n    },\n    normPrivateKeyToScalar: normPrivateKeyToScalar,\n\n    /**\n     * Produces cryptographically secure private key from random of size\n     * (groupLen + ceil(groupLen / 2)) with modulo bias being negligible.\n     */\n    randomPrivateKey: (): Uint8Array => {\n      const length = mod.getMinHashLength(CURVE.n);\n      return mod.mapHashToField(CURVE.randomBytes(length), CURVE.n);\n    },\n\n    /**\n     * Creates precompute table for an arbitrary EC point. Makes point \"cached\".\n     * Allows to massively speed-up `point.multiply(scalar)`.\n     * @returns cached point\n     * @example\n     * const fast = utils.precompute(8, ProjectivePoint.fromHex(someonesPubKey));\n     * fast.multiply(privKey); // much faster ECDH now\n     */\n    precompute(windowSize = 8, point = Point.BASE): typeof Point.BASE {\n      point._setWindowSize(windowSize);\n      point.multiply(BigInt(3)); // 3 is arbitrary, just need any number here\n      return point;\n    },\n  };\n\n  /**\n   * Computes public key for a private key. Checks for validity of the private key.\n   * @param privateKey private key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns Public key, full when isCompressed=false; short when isCompressed=true\n   */\n  function getPublicKey(privateKey: PrivKey, isCompressed = true): Uint8Array {\n    return Point.fromPrivateKey(privateKey).toRawBytes(isCompressed);\n  }\n\n  /**\n   * Quick and dirty check for item being public key. Does not validate hex, or being on-curve.\n   */\n  function isProbPub(item: PrivKey | PubKey): boolean {\n    const arr = ut.isBytes(item);\n    const str = typeof item === 'string';\n    const len = (arr || str) && (item as Hex).length;\n    if (arr) return len === compressedLen || len === uncompressedLen;\n    if (str) return len === 2 * compressedLen || len === 2 * uncompressedLen;\n    if (item instanceof Point) return true;\n    return false;\n  }\n\n  /**\n   * ECDH (Elliptic Curve Diffie Hellman).\n   * Computes shared public key from private key and public key.\n   * Checks: 1) private key validity 2) shared key is on-curve.\n   * Does NOT hash the result.\n   * @param privateA private key\n   * @param publicB different public key\n   * @param isCompressed whether to return compact (default), or full key\n   * @returns shared public key\n   */\n  function getSharedSecret(privateA: PrivKey, publicB: Hex, isCompressed = true): Uint8Array {\n    if (isProbPub(privateA)) throw new Error('first arg must be private key');\n    if (!isProbPub(publicB)) throw new Error('second arg must be public key');\n    const b = Point.fromHex(publicB); // check for being on-curve\n    return b.multiply(normPrivateKeyToScalar(privateA)).toRawBytes(isCompressed);\n  }\n\n  // RFC6979: ensure ECDSA msg is X bytes and < N. RFC suggests optional truncating via bits2octets.\n  // FIPS 186-4 4.6 suggests the leftmost min(nBitLen, outLen) bits, which matches bits2int.\n  // bits2int can produce res>N, we can do mod(res, N) since the bitLen is the same.\n  // int2octets can't be used; pads small msgs with 0: unacceptatble for trunc as per RFC vectors\n  const bits2int =\n    CURVE.bits2int ||\n    function (bytes: Uint8Array): bigint {\n      // For curves with nBitLength % 8 !== 0: bits2octets(bits2octets(m)) !== bits2octets(m)\n      // for some cases, since bytes.length * 8 is not actual bitLength.\n      const num = ut.bytesToNumberBE(bytes); // check for == u8 done here\n      const delta = bytes.length * 8 - CURVE.nBitLength; // truncate to nBitLength leftmost bits\n      return delta > 0 ? num >> BigInt(delta) : num;\n    };\n  const bits2int_modN =\n    CURVE.bits2int_modN ||\n    function (bytes: Uint8Array): bigint {\n      return modN(bits2int(bytes)); // can't use bytesToNumberBE here\n    };\n  // NOTE: pads output with zero as per spec\n  const ORDER_MASK = ut.bitMask(CURVE.nBitLength);\n  /**\n   * Converts to bytes. Checks if num in `[0..ORDER_MASK-1]` e.g.: `[0..2^256-1]`.\n   */\n  function int2octets(num: bigint): Uint8Array {\n    ut.aInRange(`num < 2^${CURVE.nBitLength}`, num, _0n, ORDER_MASK);\n    // works with order, can have different size than numToField!\n    return ut.numberToBytesBE(num, CURVE.nByteLength);\n  }\n\n  // Steps A, D of RFC6979 3.2\n  // Creates RFC6979 seed; converts msg/privKey to numbers.\n  // Used only in sign, not in verify.\n  // NOTE: we cannot assume here that msgHash has same amount of bytes as curve order, this will be wrong at least for P521.\n  // Also it can be bigger for P224 + SHA256\n  function prepSig(msgHash: Hex, privateKey: PrivKey, opts = defaultSigOpts) {\n    if (['recovered', 'canonical'].some((k) => k in opts))\n      throw new Error('sign() legacy options not supported');\n    const { hash, randomBytes } = CURVE;\n    let { lowS, prehash, extraEntropy: ent } = opts; // generates low-s sigs by default\n    if (lowS == null) lowS = true; // RFC6979 3.2: we skip step A, because we already provide hash\n    msgHash = ensureBytes('msgHash', msgHash);\n    validateSigVerOpts(opts);\n    if (prehash) msgHash = ensureBytes('prehashed msgHash', hash(msgHash));\n\n    // We can't later call bits2octets, since nested bits2int is broken for curves\n    // with nBitLength % 8 !== 0. Because of that, we unwrap it here as int2octets call.\n    // const bits2octets = (bits) => int2octets(bits2int_modN(bits))\n    const h1int = bits2int_modN(msgHash);\n    const d = normPrivateKeyToScalar(privateKey); // validate private key, convert to bigint\n    const seedArgs = [int2octets(d), int2octets(h1int)];\n    // extraEntropy. RFC6979 3.6: additional k' (optional).\n    if (ent != null && ent !== false) {\n      // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1) || k')\n      const e = ent === true ? randomBytes(Fp.BYTES) : ent; // generate random bytes OR pass as-is\n      seedArgs.push(ensureBytes('extraEntropy', e)); // check for being bytes\n    }\n    const seed = ut.concatBytes(...seedArgs); // Step D of RFC6979 3.2\n    const m = h1int; // NOTE: no need to call bits2int second time here, it is inside truncateHash!\n    // Converts signature params into point w r/s, checks result for validity.\n    function k2sig(kBytes: Uint8Array): RecoveredSignature | undefined {\n      // RFC 6979 Section 3.2, step 3: k = bits2int(T)\n      const k = bits2int(kBytes); // Cannot use fields methods, since it is group element\n      if (!isWithinCurveOrder(k)) return; // Important: all mod() calls here must be done over N\n      const ik = invN(k); // k^-1 mod n\n      const q = Point.BASE.multiply(k).toAffine(); // q = Gk\n      const r = modN(q.x); // r = q.x mod n\n      if (r === _0n) return;\n      // Can use scalar blinding b^-1(bm + bdr) where b \u2208 [1,q\u22121] according to\n      // https://tches.iacr.org/index.php/TCHES/article/view/7337/6509. We've decided against it:\n      // a) dependency on CSPRNG b) 15% slowdown c) doesn't really help since bigints are not CT\n      const s = modN(ik * modN(m + r * d)); // Not using blinding here\n      if (s === _0n) return;\n      let recovery = (q.x === r ? 0 : 2) | Number(q.y & _1n); // recovery bit (2 or 3, when q.x > n)\n      let normS = s;\n      if (lowS && isBiggerThanHalfOrder(s)) {\n        normS = normalizeS(s); // if lowS was passed, ensure s is always\n        recovery ^= 1; // // in the bottom half of N\n      }\n      return new Signature(r, normS, recovery) as RecoveredSignature; // use normS, not s\n    }\n    return { seed, k2sig };\n  }\n  const defaultSigOpts: SignOpts = { lowS: CURVE.lowS, prehash: false };\n  const defaultVerOpts: VerOpts = { lowS: CURVE.lowS, prehash: false };\n\n  /**\n   * Signs message hash with a private key.\n   * ```\n   * sign(m, d, k) where\n   *   (x, y) = G \u00D7 k\n   *   r = x mod n\n   *   s = (m + dr)/k mod n\n   * ```\n   * @param msgHash NOT message. msg needs to be hashed to `msgHash`, or use `prehash`.\n   * @param privKey private key\n   * @param opts lowS for non-malleable sigs. extraEntropy for mixing randomness into k. prehash will hash first arg.\n   * @returns signature with recovery param\n   */\n  function sign(msgHash: Hex, privKey: PrivKey, opts = defaultSigOpts): RecoveredSignature {\n    const { seed, k2sig } = prepSig(msgHash, privKey, opts); // Steps A, D of RFC6979 3.2.\n    const C = CURVE;\n    const drbg = ut.createHmacDrbg<RecoveredSignature>(C.hash.outputLen, C.nByteLength, C.hmac);\n    return drbg(seed, k2sig); // Steps B, C, D, E, F, G\n  }\n\n  // Enable precomputes. Slows down first publicKey computation by 20ms.\n  Point.BASE._setWindowSize(8);\n  // utils.precompute(8, ProjectivePoint.BASE)\n\n  /**\n   * Verifies a signature against message hash and public key.\n   * Rejects lowS signatures by default: to override,\n   * specify option `{lowS: false}`. Implements section 4.1.4 from https://www.secg.org/sec1-v2.pdf:\n   *\n   * ```\n   * verify(r, s, h, P) where\n   *   U1 = hs^-1 mod n\n   *   U2 = rs^-1 mod n\n   *   R = U1\u22C5G - U2\u22C5P\n   *   mod(R.x, n) == r\n   * ```\n   */\n  function verify(\n    signature: Hex | SignatureLike,\n    msgHash: Hex,\n    publicKey: Hex,\n    opts = defaultVerOpts\n  ): boolean {\n    const sg = signature;\n    msgHash = ensureBytes('msgHash', msgHash);\n    publicKey = ensureBytes('publicKey', publicKey);\n    if ('strict' in opts) throw new Error('options.strict was renamed to lowS');\n    validateSigVerOpts(opts);\n    const { lowS, prehash } = opts;\n\n    let _sig: Signature | undefined = undefined;\n    let P: ProjPointType<bigint>;\n    try {\n      if (typeof sg === 'string' || ut.isBytes(sg)) {\n        // Signature can be represented in 2 ways: compact (2*nByteLength) & DER (variable-length).\n        // Since DER can also be 2*nByteLength bytes, we check for it first.\n        try {\n          _sig = Signature.fromDER(sg);\n        } catch (derError) {\n          if (!(derError instanceof DER.Err)) throw derError;\n          _sig = Signature.fromCompact(sg);\n        }\n      } else if (typeof sg === 'object' && typeof sg.r === 'bigint' && typeof sg.s === 'bigint') {\n        const { r, s } = sg;\n        _sig = new Signature(r, s);\n      } else {\n        throw new Error('PARSE');\n      }\n      P = Point.fromHex(publicKey);\n    } catch (error) {\n      if ((error as Error).message === 'PARSE')\n        throw new Error(`signature must be Signature instance, Uint8Array or hex string`);\n      return false;\n    }\n    if (lowS && _sig.hasHighS()) return false;\n    if (prehash) msgHash = CURVE.hash(msgHash);\n    const { r, s } = _sig;\n    const h = bits2int_modN(msgHash); // Cannot use fields methods, since it is group element\n    const is = invN(s); // s^-1\n    const u1 = modN(h * is); // u1 = hs^-1 mod n\n    const u2 = modN(r * is); // u2 = rs^-1 mod n\n    const R = Point.BASE.multiplyAndAddUnsafe(P, u1, u2)?.toAffine(); // R = u1\u22C5G + u2\u22C5P\n    if (!R) return false;\n    const v = modN(R.x);\n    return v === r;\n  }\n  return {\n    CURVE,\n    getPublicKey,\n    getSharedSecret,\n    sign,\n    verify,\n    ProjectivePoint: Point,\n    Signature,\n    utils,\n  };\n}\n\n/**\n * Implementation of the Shallue and van de Woestijne method for any weierstrass curve.\n * TODO: check if there is a way to merge this with uvRatio in Edwards; move to modular.\n * b = True and y = sqrt(u / v) if (u / v) is square in F, and\n * b = False and y = sqrt(Z * (u / v)) otherwise.\n * @param Fp\n * @param Z\n * @returns\n */\nexport function SWUFpSqrtRatio<T>(Fp: mod.IField<T>, Z: T) {\n  // Generic implementation\n  const q = Fp.ORDER;\n  let l = _0n;\n  for (let o = q - _1n; o % _2n === _0n; o /= _2n) l += _1n;\n  const c1 = l; // 1. c1, the largest integer such that 2^c1 divides q - 1.\n  // We need 2n ** c1 and 2n ** (c1-1). We can't use **; but we can use <<.\n  // 2n ** c1 == 2n << (c1-1)\n  const _2n_pow_c1_1 = _2n << (c1 - _1n - _1n);\n  const _2n_pow_c1 = _2n_pow_c1_1 * _2n;\n  const c2 = (q - _1n) / _2n_pow_c1; // 2. c2 = (q - 1) / (2^c1)  # Integer arithmetic\n  const c3 = (c2 - _1n) / _2n; // 3. c3 = (c2 - 1) / 2            # Integer arithmetic\n  const c4 = _2n_pow_c1 - _1n; // 4. c4 = 2^c1 - 1                # Integer arithmetic\n  const c5 = _2n_pow_c1_1; // 5. c5 = 2^(c1 - 1)                  # Integer arithmetic\n  const c6 = Fp.pow(Z, c2); // 6. c6 = Z^c2\n  const c7 = Fp.pow(Z, (c2 + _1n) / _2n); // 7. c7 = Z^((c2 + 1) / 2)\n  let sqrtRatio = (u: T, v: T): { isValid: boolean; value: T } => {\n    let tv1 = c6; // 1. tv1 = c6\n    let tv2 = Fp.pow(v, c4); // 2. tv2 = v^c4\n    let tv3 = Fp.sqr(tv2); // 3. tv3 = tv2^2\n    tv3 = Fp.mul(tv3, v); // 4. tv3 = tv3 * v\n    let tv5 = Fp.mul(u, tv3); // 5. tv5 = u * tv3\n    tv5 = Fp.pow(tv5, c3); // 6. tv5 = tv5^c3\n    tv5 = Fp.mul(tv5, tv2); // 7. tv5 = tv5 * tv2\n    tv2 = Fp.mul(tv5, v); // 8. tv2 = tv5 * v\n    tv3 = Fp.mul(tv5, u); // 9. tv3 = tv5 * u\n    let tv4 = Fp.mul(tv3, tv2); // 10. tv4 = tv3 * tv2\n    tv5 = Fp.pow(tv4, c5); // 11. tv5 = tv4^c5\n    let isQR = Fp.eql(tv5, Fp.ONE); // 12. isQR = tv5 == 1\n    tv2 = Fp.mul(tv3, c7); // 13. tv2 = tv3 * c7\n    tv5 = Fp.mul(tv4, tv1); // 14. tv5 = tv4 * tv1\n    tv3 = Fp.cmov(tv2, tv3, isQR); // 15. tv3 = CMOV(tv2, tv3, isQR)\n    tv4 = Fp.cmov(tv5, tv4, isQR); // 16. tv4 = CMOV(tv5, tv4, isQR)\n    // 17. for i in (c1, c1 - 1, ..., 2):\n    for (let i = c1; i > _1n; i--) {\n      let tv5 = i - _2n; // 18.    tv5 = i - 2\n      tv5 = _2n << (tv5 - _1n); // 19.    tv5 = 2^tv5\n      let tvv5 = Fp.pow(tv4, tv5); // 20.    tv5 = tv4^tv5\n      const e1 = Fp.eql(tvv5, Fp.ONE); // 21.    e1 = tv5 == 1\n      tv2 = Fp.mul(tv3, tv1); // 22.    tv2 = tv3 * tv1\n      tv1 = Fp.mul(tv1, tv1); // 23.    tv1 = tv1 * tv1\n      tvv5 = Fp.mul(tv4, tv1); // 24.    tv5 = tv4 * tv1\n      tv3 = Fp.cmov(tv2, tv3, e1); // 25.    tv3 = CMOV(tv2, tv3, e1)\n      tv4 = Fp.cmov(tvv5, tv4, e1); // 26.    tv4 = CMOV(tv5, tv4, e1)\n    }\n    return { isValid: isQR, value: tv3 };\n  };\n  if (Fp.ORDER % _4n === _3n) {\n    // sqrt_ratio_3mod4(u, v)\n    const c1 = (Fp.ORDER - _3n) / _4n; // 1. c1 = (q - 3) / 4     # Integer arithmetic\n    const c2 = Fp.sqrt(Fp.neg(Z)); // 2. c2 = sqrt(-Z)\n    sqrtRatio = (u: T, v: T) => {\n      let tv1 = Fp.sqr(v); // 1. tv1 = v^2\n      const tv2 = Fp.mul(u, v); // 2. tv2 = u * v\n      tv1 = Fp.mul(tv1, tv2); // 3. tv1 = tv1 * tv2\n      let y1 = Fp.pow(tv1, c1); // 4. y1 = tv1^c1\n      y1 = Fp.mul(y1, tv2); // 5. y1 = y1 * tv2\n      const y2 = Fp.mul(y1, c2); // 6. y2 = y1 * c2\n      const tv3 = Fp.mul(Fp.sqr(y1), v); // 7. tv3 = y1^2; 8. tv3 = tv3 * v\n      const isQR = Fp.eql(tv3, u); // 9. isQR = tv3 == u\n      let y = Fp.cmov(y2, y1, isQR); // 10. y = CMOV(y2, y1, isQR)\n      return { isValid: isQR, value: y }; // 11. return (isQR, y) isQR ? y : y*c2\n    };\n  }\n  // No curves uses that\n  // if (Fp.ORDER % _8n === _5n) // sqrt_ratio_5mod8\n  return sqrtRatio;\n}\n/**\n * Simplified Shallue-van de Woestijne-Ulas Method\n * https://www.rfc-editor.org/rfc/rfc9380#section-6.6.2\n */\nexport function mapToCurveSimpleSWU<T>(\n  Fp: mod.IField<T>,\n  opts: {\n    A: T;\n    B: T;\n    Z: T;\n  }\n) {\n  mod.validateField(Fp);\n  if (!Fp.isValid(opts.A) || !Fp.isValid(opts.B) || !Fp.isValid(opts.Z))\n    throw new Error('mapToCurveSimpleSWU: invalid opts');\n  const sqrtRatio = SWUFpSqrtRatio(Fp, opts.Z);\n  if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!');\n  // Input: u, an element of F.\n  // Output: (x, y), a point on E.\n  return (u: T): { x: T; y: T } => {\n    // prettier-ignore\n    let tv1, tv2, tv3, tv4, tv5, tv6, x, y;\n    tv1 = Fp.sqr(u); // 1.  tv1 = u^2\n    tv1 = Fp.mul(tv1, opts.Z); // 2.  tv1 = Z * tv1\n    tv2 = Fp.sqr(tv1); // 3.  tv2 = tv1^2\n    tv2 = Fp.add(tv2, tv1); // 4.  tv2 = tv2 + tv1\n    tv3 = Fp.add(tv2, Fp.ONE); // 5.  tv3 = tv2 + 1\n    tv3 = Fp.mul(tv3, opts.B); // 6.  tv3 = B * tv3\n    tv4 = Fp.cmov(opts.Z, Fp.neg(tv2), !Fp.eql(tv2, Fp.ZERO)); // 7.  tv4 = CMOV(Z, -tv2, tv2 != 0)\n    tv4 = Fp.mul(tv4, opts.A); // 8.  tv4 = A * tv4\n    tv2 = Fp.sqr(tv3); // 9.  tv2 = tv3^2\n    tv6 = Fp.sqr(tv4); // 10. tv6 = tv4^2\n    tv5 = Fp.mul(tv6, opts.A); // 11. tv5 = A * tv6\n    tv2 = Fp.add(tv2, tv5); // 12. tv2 = tv2 + tv5\n    tv2 = Fp.mul(tv2, tv3); // 13. tv2 = tv2 * tv3\n    tv6 = Fp.mul(tv6, tv4); // 14. tv6 = tv6 * tv4\n    tv5 = Fp.mul(tv6, opts.B); // 15. tv5 = B * tv6\n    tv2 = Fp.add(tv2, tv5); // 16. tv2 = tv2 + tv5\n    x = Fp.mul(tv1, tv3); // 17.   x = tv1 * tv3\n    const { isValid, value } = sqrtRatio(tv2, tv6); // 18. (is_gx1_square, y1) = sqrt_ratio(tv2, tv6)\n    y = Fp.mul(tv1, u); // 19.   y = tv1 * u  -> Z * u^3 * y1\n    y = Fp.mul(y, value); // 20.   y = y * y1\n    x = Fp.cmov(x, tv3, isValid); // 21.   x = CMOV(x, tv3, is_gx1_square)\n    y = Fp.cmov(y, value, isValid); // 22.   y = CMOV(y, y1, is_gx1_square)\n    const e1 = Fp.isOdd!(u) === Fp.isOdd!(y); // 23.  e1 = sgn0(u) == sgn0(y)\n    y = Fp.cmov(Fp.neg(y), y, e1); // 24.   y = CMOV(-y, y, e1)\n    x = Fp.div(x, tv4); // 25.   x = x / tv4\n    return { x, y };\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { hmac } from '@noble/hashes/hmac';\nimport { concatBytes, randomBytes } from '@noble/hashes/utils';\nimport { CHash } from './abstract/utils.js';\nimport { CurveType, weierstrass } from './abstract/weierstrass.js';\n\n// connects noble-curves to noble-hashes\nexport function getHash(hash: CHash) {\n  return {\n    hash,\n    hmac: (key: Uint8Array, ...msgs: Uint8Array[]) => hmac(hash, key, concatBytes(...msgs)),\n    randomBytes,\n  };\n}\n// Same API as @noble/hashes, with ability to create curve with custom hash\ntype CurveDef = Readonly<Omit<CurveType, 'hash' | 'hmac' | 'randomBytes'>>;\nexport function createCurve(curveDef: CurveDef, defHash: CHash) {\n  const create = (hash: CHash) => weierstrass({ ...curveDef, ...getHash(hash) });\n  return Object.freeze({ ...create(defHash), create });\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport type { AffinePoint, Group, GroupConstructor } from './curve.js';\nimport { IField, mod } from './modular.js';\nimport type { CHash } from './utils.js';\nimport { abytes, bytesToNumberBE, concatBytes, utf8ToBytes, validateObject } from './utils.js';\n\n/**\n * * `DST` is a domain separation tag, defined in section 2.2.5\n * * `p` characteristic of F, where F is a finite field of characteristic p and order q = p^m\n * * `m` is extension degree (1 for prime fields)\n * * `k` is the target security target in bits (e.g. 128), from section 5.1\n * * `expand` is `xmd` (SHA2, SHA3, BLAKE) or `xof` (SHAKE, BLAKE-XOF)\n * * `hash` conforming to `utils.CHash` interface, with `outputLen` / `blockLen` props\n */\ntype UnicodeOrBytes = string | Uint8Array;\nexport type Opts = {\n  DST: UnicodeOrBytes;\n  p: bigint;\n  m: number;\n  k: number;\n  expand: 'xmd' | 'xof';\n  hash: CHash;\n};\n\n// Octet Stream to Integer. \"spec\" implementation of os2ip is 2.5x slower vs bytesToNumberBE.\nconst os2ip = bytesToNumberBE;\n\n// Integer to Octet Stream (numberToBytesBE)\nfunction i2osp(value: number, length: number): Uint8Array {\n  anum(value);\n  anum(length);\n  if (value < 0 || value >= 1 << (8 * length)) {\n    throw new Error(`bad I2OSP call: value=${value} length=${length}`);\n  }\n  const res = Array.from({ length }).fill(0) as number[];\n  for (let i = length - 1; i >= 0; i--) {\n    res[i] = value & 0xff;\n    value >>>= 8;\n  }\n  return new Uint8Array(res);\n}\n\nfunction strxor(a: Uint8Array, b: Uint8Array): Uint8Array {\n  const arr = new Uint8Array(a.length);\n  for (let i = 0; i < a.length; i++) {\n    arr[i] = a[i] ^ b[i];\n  }\n  return arr;\n}\n\nfunction anum(item: unknown): void {\n  if (!Number.isSafeInteger(item)) throw new Error('number expected');\n}\n\n// Produces a uniformly random byte string using a cryptographic hash function H that outputs b bits\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.1\nexport function expand_message_xmd(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  if (DST.length > 255) DST = H(concatBytes(utf8ToBytes('H2C-OVERSIZE-DST-'), DST));\n  const { outputLen: b_in_bytes, blockLen: r_in_bytes } = H;\n  const ell = Math.ceil(lenInBytes / b_in_bytes);\n  if (lenInBytes > 65535 || ell > 255) throw new Error('expand_message_xmd: invalid lenInBytes');\n  const DST_prime = concatBytes(DST, i2osp(DST.length, 1));\n  const Z_pad = i2osp(0, r_in_bytes);\n  const l_i_b_str = i2osp(lenInBytes, 2); // len_in_bytes_str\n  const b = new Array<Uint8Array>(ell);\n  const b_0 = H(concatBytes(Z_pad, msg, l_i_b_str, i2osp(0, 1), DST_prime));\n  b[0] = H(concatBytes(b_0, i2osp(1, 1), DST_prime));\n  for (let i = 1; i <= ell; i++) {\n    const args = [strxor(b_0, b[i - 1]), i2osp(i + 1, 1), DST_prime];\n    b[i] = H(concatBytes(...args));\n  }\n  const pseudo_random_bytes = concatBytes(...b);\n  return pseudo_random_bytes.slice(0, lenInBytes);\n}\n\n// Produces a uniformly random byte string using an extendable-output function (XOF) H.\n// 1. The collision resistance of H MUST be at least k bits.\n// 2. H MUST be an XOF that has been proved indifferentiable from\n//    a random oracle under a reasonable cryptographic assumption.\n// https://www.rfc-editor.org/rfc/rfc9380#section-5.3.2\nexport function expand_message_xof(\n  msg: Uint8Array,\n  DST: Uint8Array,\n  lenInBytes: number,\n  k: number,\n  H: CHash\n): Uint8Array {\n  abytes(msg);\n  abytes(DST);\n  anum(lenInBytes);\n  // https://www.rfc-editor.org/rfc/rfc9380#section-5.3.3\n  // DST = H('H2C-OVERSIZE-DST-' || a_very_long_DST, Math.ceil((lenInBytes * k) / 8));\n  if (DST.length > 255) {\n    const dkLen = Math.ceil((2 * k) / 8);\n    DST = H.create({ dkLen }).update(utf8ToBytes('H2C-OVERSIZE-DST-')).update(DST).digest();\n  }\n  if (lenInBytes > 65535 || DST.length > 255)\n    throw new Error('expand_message_xof: invalid lenInBytes');\n  return (\n    H.create({ dkLen: lenInBytes })\n      .update(msg)\n      .update(i2osp(lenInBytes, 2))\n      // 2. DST_prime = DST || I2OSP(len(DST), 1)\n      .update(DST)\n      .update(i2osp(DST.length, 1))\n      .digest()\n  );\n}\n\n/**\n * Hashes arbitrary-length byte strings to a list of one or more elements of a finite field F\n * https://www.rfc-editor.org/rfc/rfc9380#section-5.2\n * @param msg a byte string containing the message to hash\n * @param count the number of elements of F to output\n * @param options `{DST: string, p: bigint, m: number, k: number, expand: 'xmd' | 'xof', hash: H}`, see above\n * @returns [u_0, ..., u_(count - 1)], a list of field elements.\n */\nexport function hash_to_field(msg: Uint8Array, count: number, options: Opts): bigint[][] {\n  validateObject(options, {\n    DST: 'stringOrUint8Array',\n    p: 'bigint',\n    m: 'isSafeInteger',\n    k: 'isSafeInteger',\n    hash: 'hash',\n  });\n  const { p, k, m, hash, expand, DST: _DST } = options;\n  abytes(msg);\n  anum(count);\n  const DST = typeof _DST === 'string' ? utf8ToBytes(_DST) : _DST;\n  const log2p = p.toString(2).length;\n  const L = Math.ceil((log2p + k) / 8); // section 5.1 of ietf draft link above\n  const len_in_bytes = count * m * L;\n  let prb; // pseudo_random_bytes\n  if (expand === 'xmd') {\n    prb = expand_message_xmd(msg, DST, len_in_bytes, hash);\n  } else if (expand === 'xof') {\n    prb = expand_message_xof(msg, DST, len_in_bytes, k, hash);\n  } else if (expand === '_internal_pass') {\n    // for internal tests only\n    prb = msg;\n  } else {\n    throw new Error('expand must be \"xmd\" or \"xof\"');\n  }\n  const u = new Array(count);\n  for (let i = 0; i < count; i++) {\n    const e = new Array(m);\n    for (let j = 0; j < m; j++) {\n      const elm_offset = L * (j + i * m);\n      const tv = prb.subarray(elm_offset, elm_offset + L);\n      e[j] = mod(os2ip(tv), p);\n    }\n    u[i] = e;\n  }\n  return u;\n}\n\nexport function isogenyMap<T, F extends IField<T>>(field: F, map: [T[], T[], T[], T[]]) {\n  // Make same order as in spec\n  const COEFF = map.map((i) => Array.from(i).reverse());\n  return (x: T, y: T) => {\n    const [xNum, xDen, yNum, yDen] = COEFF.map((val) =>\n      val.reduce((acc, i) => field.add(field.mul(acc, x), i))\n    );\n    x = field.div(xNum, xDen); // xNum / xDen\n    y = field.mul(y, field.div(yNum, yDen)); // y * (yNum / yDev)\n    return { x, y };\n  };\n}\n\nexport interface H2CPoint<T> extends Group<H2CPoint<T>> {\n  add(rhs: H2CPoint<T>): H2CPoint<T>;\n  toAffine(iz?: bigint): AffinePoint<T>;\n  clearCofactor(): H2CPoint<T>;\n  assertValidity(): void;\n}\n\nexport interface H2CPointConstructor<T> extends GroupConstructor<H2CPoint<T>> {\n  fromAffine(ap: AffinePoint<T>): H2CPoint<T>;\n}\n\nexport type MapToCurve<T> = (scalar: bigint[]) => AffinePoint<T>;\n\n// Separated from initialization opts, so users won't accidentally change per-curve parameters\n// (changing DST is ok!)\nexport type htfBasicOpts = { DST: UnicodeOrBytes };\n\nexport function createHasher<T>(\n  Point: H2CPointConstructor<T>,\n  mapToCurve: MapToCurve<T>,\n  def: Opts & { encodeDST?: UnicodeOrBytes }\n) {\n  if (typeof mapToCurve !== 'function') throw new Error('mapToCurve() must be defined');\n  return {\n    // Encodes byte string to elliptic curve.\n    // hash_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    hashToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 2, { ...def, DST: def.DST, ...options } as Opts);\n      const u0 = Point.fromAffine(mapToCurve(u[0]));\n      const u1 = Point.fromAffine(mapToCurve(u[1]));\n      const P = u0.add(u1).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n\n    // Encodes byte string to elliptic curve.\n    // encode_to_curve from https://www.rfc-editor.org/rfc/rfc9380#section-3\n    encodeToCurve(msg: Uint8Array, options?: htfBasicOpts) {\n      const u = hash_to_field(msg, 1, { ...def, DST: def.encodeDST, ...options } as Opts);\n      const P = Point.fromAffine(mapToCurve(u[0])).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n    // Same as encodeToCurve, but without hash\n    mapToCurve(scalars: bigint[]) {\n      if (!Array.isArray(scalars)) throw new Error('mapToCurve: expected array of bigints');\n      for (const i of scalars)\n        if (typeof i !== 'bigint')\n          throw new Error(`mapToCurve: expected array of bigints, got ${i} in array`);\n      const P = Point.fromAffine(mapToCurve(scalars)).clearCofactor();\n      P.assertValidity();\n      return P;\n    },\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// BLS (Barreto-Lynn-Scott) family of pairing-friendly curves.\n// TODO: import { AffinePoint } from './curve.js';\nimport { IField, getMinHashLength, mapHashToField } from './modular.js';\nimport { Hex, PrivKey, CHash, ensureBytes, memoized } from './utils.js';\n// prettier-ignore\nimport {\n  MapToCurve, Opts as HTFOpts, H2CPointConstructor, htfBasicOpts,\n  createHasher\n} from './hash-to-curve.js';\nimport {\n  CurvePointsType,\n  ProjPointType as ProjPointType,\n  CurvePointsRes,\n  weierstrassPoints,\n} from './weierstrass.js';\nimport type { Fp2, Fp6, Fp12, Fp2Bls, Fp12Bls } from './tower.js';\n\n/**\n * BLS != BLS.\n * The file implements BLS (Boneh-Lynn-Shacham) signatures.\n * Used in both BLS (Barreto-Lynn-Scott) and BN (Barreto-Naehrig)\n * families of pairing-friendly curves.\n * Consists of two curves: G1 and G2:\n * - G1 is a subgroup of (x, y) E(Fq) over y\u00B2 = x\u00B3 + 4.\n * - G2 is a subgroup of ((x\u2081, x\u2082+i), (y\u2081, y\u2082+i)) E(Fq\u00B2) over y\u00B2 = x\u00B3 + 4(1 + i) where i is \u221A-1\n * - Gt, created by bilinear (ate) pairing e(G1, G2), consists of p-th roots of unity in\n *   Fq^k where k is embedding degree. Only degree 12 is currently supported, 24 is not.\n * Pairing is used to aggregate and verify signatures.\n * There are two main ways to use it:\n * 1. Fp for short private keys, Fp\u2082 for signatures\n * 2. Fp for short signatures, Fp\u2082 for private keys\n **/\n\ntype Fp = bigint; // Can be different field?\n\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\nexport type TwistType = 'multiplicative' | 'divisive';\n\nexport type ShortSignatureCoder<Fp> = {\n  fromHex(hex: Hex): ProjPointType<Fp>;\n  toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n  toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type SignatureCoder<Fp> = {\n  fromHex(hex: Hex): ProjPointType<Fp>;\n  toRawBytes(point: ProjPointType<Fp>): Uint8Array;\n  toHex(point: ProjPointType<Fp>): string;\n};\n\nexport type CurveType = {\n  G1: Omit<CurvePointsType<Fp>, 'n'> & {\n    ShortSignature: SignatureCoder<Fp>;\n    mapToCurve: MapToCurve<Fp>;\n    htfDefaults: HTFOpts;\n  };\n  G2: Omit<CurvePointsType<Fp2>, 'n'> & {\n    Signature: SignatureCoder<Fp2>;\n    mapToCurve: MapToCurve<Fp2>;\n    htfDefaults: HTFOpts;\n  };\n  fields: {\n    Fp: IField<Fp>;\n    Fr: IField<bigint>;\n    Fp2: Fp2Bls;\n    Fp6: IField<Fp6>;\n    Fp12: Fp12Bls;\n  };\n  params: {\n    // NOTE: MSB is always ignored and used as marker for length,\n    // otherwise leading zeros will be lost.\n    // Can be different from 'X' (seed) param!\n    ateLoopSize: bigint;\n    xNegative: boolean;\n    r: bigint;\n    twistType: TwistType; // BLS12-381: Multiplicative, BN254: Divisive\n  };\n  htfDefaults: HTFOpts;\n  hash: CHash; // Because we need outputLen for DRBG\n  randomBytes: (bytesLength?: number) => Uint8Array;\n  // This is super ugly hack for untwist point in BN254 after miller loop\n  postPrecompute?: (\n    Rx: Fp2,\n    Ry: Fp2,\n    Rz: Fp2,\n    Qx: Fp2,\n    Qy: Fp2,\n    pointAdd: (Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) => { Rx: Fp2; Ry: Fp2; Rz: Fp2 }\n  ) => void;\n};\n\ntype PrecomputeSingle = [Fp2, Fp2, Fp2][];\ntype Precompute = PrecomputeSingle[];\n\nexport type CurveFn = {\n  getPublicKey: (privateKey: PrivKey) => Uint8Array;\n  getPublicKeyForShortSignatures: (privateKey: PrivKey) => Uint8Array;\n  sign: {\n    (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n    (message: ProjPointType<Fp2>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp2>;\n  };\n  signShortSignature: {\n    (message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n    (message: ProjPointType<Fp>, privateKey: PrivKey, htfOpts?: htfBasicOpts): ProjPointType<Fp>;\n  };\n  verify: (\n    signature: Hex | ProjPointType<Fp2>,\n    message: Hex | ProjPointType<Fp2>,\n    publicKey: Hex | ProjPointType<Fp>,\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  verifyShortSignature: (\n    signature: Hex | ProjPointType<Fp>,\n    message: Hex | ProjPointType<Fp>,\n    publicKey: Hex | ProjPointType<Fp2>,\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  verifyBatch: (\n    signature: Hex | ProjPointType<Fp2>,\n    messages: (Hex | ProjPointType<Fp2>)[],\n    publicKeys: (Hex | ProjPointType<Fp>)[],\n    htfOpts?: htfBasicOpts\n  ) => boolean;\n  aggregatePublicKeys: {\n    (publicKeys: Hex[]): Uint8Array;\n    (publicKeys: ProjPointType<Fp>[]): ProjPointType<Fp>;\n  };\n  aggregateSignatures: {\n    (signatures: Hex[]): Uint8Array;\n    (signatures: ProjPointType<Fp2>[]): ProjPointType<Fp2>;\n  };\n  aggregateShortSignatures: {\n    (signatures: Hex[]): Uint8Array;\n    (signatures: ProjPointType<Fp>[]): ProjPointType<Fp>;\n  };\n  millerLoopBatch: (pairs: [Precompute, Fp, Fp][]) => Fp12;\n  pairing: (P: ProjPointType<Fp>, Q: ProjPointType<Fp2>, withFinalExponent?: boolean) => Fp12;\n  pairingBatch: (\n    pairs: { g1: ProjPointType<Fp>; g2: ProjPointType<Fp2> }[],\n    withFinalExponent?: boolean\n  ) => Fp12;\n  G1: CurvePointsRes<Fp> & ReturnType<typeof createHasher<Fp>>;\n  G2: CurvePointsRes<Fp2> & ReturnType<typeof createHasher<Fp2>>;\n  Signature: SignatureCoder<Fp2>;\n  ShortSignature: ShortSignatureCoder<Fp>;\n  params: {\n    ateLoopSize: bigint;\n    r: bigint;\n    G1b: bigint;\n    G2b: Fp2;\n  };\n  fields: {\n    Fp: IField<Fp>;\n    Fp2: Fp2Bls;\n    Fp6: IField<Fp6>;\n    Fp12: Fp12Bls;\n    Fr: IField<bigint>;\n  };\n  utils: {\n    randomPrivateKey: () => Uint8Array;\n    calcPairingPrecomputes: (p: ProjPointType<Fp2>) => Precompute;\n  };\n};\n\n// Not used with BLS12-381 (no sequential `11` in X). Useful for other curves.\nfunction NAfDecomposition(a: bigint) {\n  const res = [];\n  // a>1 because of marker bit\n  for (; a > _1n; a >>= _1n) {\n    if ((a & _1n) === _0n) res.unshift(0);\n    else if ((a & _3n) === _3n) {\n      res.unshift(-1);\n      a += _1n;\n    } else res.unshift(1);\n  }\n  return res;\n}\n\nexport function bls(CURVE: CurveType): CurveFn {\n  // Fields are specific for curve, so for now we'll need to pass them with opts\n  const { Fp, Fr, Fp2, Fp6, Fp12 } = CURVE.fields;\n  const BLS_X_IS_NEGATIVE = CURVE.params.xNegative;\n  const TWIST: TwistType = CURVE.params.twistType;\n  // Point on G1 curve: (x, y)\n  const G1_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G1 });\n  const G1 = Object.assign(\n    G1_,\n    createHasher(G1_.ProjectivePoint, CURVE.G1.mapToCurve, {\n      ...CURVE.htfDefaults,\n      ...CURVE.G1.htfDefaults,\n    })\n  );\n  // Point on G2 curve (complex numbers): (x\u2081, x\u2082+i), (y\u2081, y\u2082+i)\n  const G2_ = weierstrassPoints({ n: Fr.ORDER, ...CURVE.G2 });\n  const G2 = Object.assign(\n    G2_,\n    createHasher(G2_.ProjectivePoint as H2CPointConstructor<Fp2>, CURVE.G2.mapToCurve, {\n      ...CURVE.htfDefaults,\n      ...CURVE.G2.htfDefaults,\n    })\n  );\n  type G1 = typeof G1.ProjectivePoint.BASE;\n  type G2 = typeof G2.ProjectivePoint.BASE;\n\n  // Applies sparse multiplication as line function\n  let lineFunction: (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) => Fp12;\n  if (TWIST === 'multiplicative') {\n    lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n      Fp12.mul014(f, c0, Fp2.mul(c1, Px), Fp2.mul(c2, Py));\n  } else if (TWIST === 'divisive') {\n    // NOTE: it should be [c0, c1, c2], but we use different order here to reduce complexity of\n    // precompute calculations.\n    lineFunction = (c0: Fp2, c1: Fp2, c2: Fp2, f: Fp12, Px: Fp, Py: Fp) =>\n      Fp12.mul034(f, Fp2.mul(c2, Py), Fp2.mul(c1, Px), c0);\n  } else throw new Error('bls: unknown twist type');\n\n  const Fp2div2 = Fp2.div(Fp2.ONE, Fp2.mul(Fp2.ONE, _2n));\n  function pointDouble(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2) {\n    const t0 = Fp2.sqr(Ry); // Ry\u00B2\n    const t1 = Fp2.sqr(Rz); // Rz\u00B2\n    const t2 = Fp2.mulByB(Fp2.mul(t1, _3n)); // 3 * T1 * B\n    const t3 = Fp2.mul(t2, _3n); // 3 * T2\n    const t4 = Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(Ry, Rz)), t1), t0); // (Ry + Rz)\u00B2 - T1 - T0\n    const c0 = Fp2.sub(t2, t0); // T2 - T0 (i)\n    const c1 = Fp2.mul(Fp2.sqr(Rx), _3n); // 3 * Rx\u00B2\n    const c2 = Fp2.neg(t4); // -T4 (-h)\n\n    ell.push([c0, c1, c2]);\n\n    Rx = Fp2.mul(Fp2.mul(Fp2.mul(Fp2.sub(t0, t3), Rx), Ry), Fp2div2); // ((T0 - T3) * Rx * Ry) / 2\n    Ry = Fp2.sub(Fp2.sqr(Fp2.mul(Fp2.add(t0, t3), Fp2div2)), Fp2.mul(Fp2.sqr(t2), _3n)); // ((T0 + T3) / 2)\u00B2 - 3 * T2\u00B2\n    Rz = Fp2.mul(t0, t4); // T0 * T4\n    return { Rx, Ry, Rz };\n  }\n  function pointAdd(ell: PrecomputeSingle, Rx: Fp2, Ry: Fp2, Rz: Fp2, Qx: Fp2, Qy: Fp2) {\n    // Addition\n    const t0 = Fp2.sub(Ry, Fp2.mul(Qy, Rz)); // Ry - Qy * Rz\n    const t1 = Fp2.sub(Rx, Fp2.mul(Qx, Rz)); // Rx - Qx * Rz\n    const c0 = Fp2.sub(Fp2.mul(t0, Qx), Fp2.mul(t1, Qy)); // T0 * Qx - T1 * Qy == Ry * Qx  - Rx * Qy\n    const c1 = Fp2.neg(t0); // -T0 == Qy * Rz - Ry\n    const c2 = t1; // == Rx - Qx * Rz\n\n    ell.push([c0, c1, c2]);\n\n    const t2 = Fp2.sqr(t1); // T1\u00B2\n    const t3 = Fp2.mul(t2, t1); // T2 * T1\n    const t4 = Fp2.mul(t2, Rx); // T2 * Rx\n    const t5 = Fp2.add(Fp2.sub(t3, Fp2.mul(t4, _2n)), Fp2.mul(Fp2.sqr(t0), Rz)); // T3 - 2 * T4 + T0\u00B2 * Rz\n    Rx = Fp2.mul(t1, t5); // T1 * T5\n    Ry = Fp2.sub(Fp2.mul(Fp2.sub(t4, t5), t0), Fp2.mul(t3, Ry)); // (T4 - T5) * T0 - T3 * Ry\n    Rz = Fp2.mul(Rz, t3); // Rz * T3\n    return { Rx, Ry, Rz };\n  }\n\n  // Pre-compute coefficients for sparse multiplication\n  // Point addition and point double calculations is reused for coefficients\n  // pointAdd happens only if bit set, so wNAF is reasonable. Unfortunately we cannot combine\n  // add + double in windowed precomputes here, otherwise it would be single op (since X is static)\n  const ATE_NAF = NAfDecomposition(CURVE.params.ateLoopSize);\n\n  const calcPairingPrecomputes = memoized((point: G2) => {\n    const p = point;\n    const { x, y } = p.toAffine();\n    // prettier-ignore\n    const Qx = x, Qy = y, negQy = Fp2.neg(y);\n    // prettier-ignore\n    let Rx = Qx, Ry = Qy, Rz = Fp2.ONE;\n    const ell: Precompute = [];\n    for (const bit of ATE_NAF) {\n      const cur: PrecomputeSingle = [];\n      ({ Rx, Ry, Rz } = pointDouble(cur, Rx, Ry, Rz));\n      if (bit) ({ Rx, Ry, Rz } = pointAdd(cur, Rx, Ry, Rz, Qx, bit === -1 ? negQy : Qy));\n      ell.push(cur);\n    }\n    if (CURVE.postPrecompute) {\n      const last = ell[ell.length - 1];\n      CURVE.postPrecompute(Rx, Ry, Rz, Qx, Qy, pointAdd.bind(null, last));\n    }\n    return ell;\n  });\n\n  // Main pairing logic is here. Computes product of miller loops + final exponentiate\n  // Applies calculated precomputes\n  type MillerInput = [Precompute, Fp, Fp][];\n  function millerLoopBatch(pairs: MillerInput, withFinalExponent: boolean = false) {\n    let f12 = Fp12.ONE;\n    if (pairs.length) {\n      const ellLen = pairs[0][0].length;\n      for (let i = 0; i < ellLen; i++) {\n        f12 = Fp12.sqr(f12); // This allows us to do sqr only one time for all pairings\n        // NOTE: we apply multiple pairings in parallel here\n        for (const [ell, Px, Py] of pairs) {\n          for (const [c0, c1, c2] of ell[i]) f12 = lineFunction(c0, c1, c2, f12, Px, Py);\n        }\n      }\n    }\n    if (BLS_X_IS_NEGATIVE) f12 = Fp12.conjugate(f12);\n    return withFinalExponent ? Fp12.finalExponentiate(f12) : f12;\n  }\n  type PairingInput = { g1: G1; g2: G2 };\n  // Calculates product of multiple pairings\n  // This up to x2 faster than just `map(({g1, g2})=>pairing({g1,g2}))`\n  function pairingBatch(pairs: PairingInput[], withFinalExponent: boolean = true) {\n    const res: MillerInput = [];\n    // This cache precomputed toAffine for all points\n    G1.ProjectivePoint.normalizeZ(pairs.map(({ g1 }) => g1));\n    G2.ProjectivePoint.normalizeZ(pairs.map(({ g2 }) => g2));\n    for (const { g1, g2 } of pairs) {\n      if (g1.equals(G1.ProjectivePoint.ZERO) || g2.equals(G2.ProjectivePoint.ZERO))\n        throw new Error('pairing is not available for ZERO point');\n      // This uses toAffine inside\n      g1.assertValidity();\n      g2.assertValidity();\n      const Qa = g1.toAffine();\n      res.push([calcPairingPrecomputes(g2), Qa.x, Qa.y]);\n    }\n    return millerLoopBatch(res, withFinalExponent);\n  }\n  // Calculates bilinear pairing\n  function pairing(Q: G1, P: G2, withFinalExponent: boolean = true): Fp12 {\n    return pairingBatch([{ g1: Q, g2: P }], withFinalExponent);\n  }\n\n  const utils = {\n    randomPrivateKey: (): Uint8Array => {\n      const length = getMinHashLength(Fr.ORDER);\n      return mapHashToField(CURVE.randomBytes(length), Fr.ORDER);\n    },\n    calcPairingPrecomputes,\n  };\n\n  const { ShortSignature } = CURVE.G1;\n  const { Signature } = CURVE.G2;\n\n  type G1Hex = Hex | G1;\n  type G2Hex = Hex | G2;\n  function normP1(point: G1Hex): G1 {\n    return point instanceof G1.ProjectivePoint ? (point as G1) : G1.ProjectivePoint.fromHex(point);\n  }\n  function normP1Hash(point: G1Hex, htfOpts?: htfBasicOpts): G1 {\n    return point instanceof G1.ProjectivePoint\n      ? point\n      : (G1.hashToCurve(ensureBytes('point', point), htfOpts) as G1);\n  }\n  function normP2(point: G2Hex): G2 {\n    return point instanceof G2.ProjectivePoint ? point : Signature.fromHex(point);\n  }\n  function normP2Hash(point: G2Hex, htfOpts?: htfBasicOpts): G2 {\n    return point instanceof G2.ProjectivePoint\n      ? point\n      : (G2.hashToCurve(ensureBytes('point', point), htfOpts) as G2);\n  }\n\n  // Multiplies generator (G1) by private key.\n  // P = pk x G\n  function getPublicKey(privateKey: PrivKey): Uint8Array {\n    return G1.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n  }\n\n  // Multiplies generator (G2) by private key.\n  // P = pk x G\n  function getPublicKeyForShortSignatures(privateKey: PrivKey): Uint8Array {\n    return G2.ProjectivePoint.fromPrivateKey(privateKey).toRawBytes(true);\n  }\n\n  // Executes `hashToCurve` on the message and then multiplies the result by private key.\n  // S = pk x H(m)\n  function sign(message: Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array;\n  function sign(message: G2, privateKey: PrivKey, htfOpts?: htfBasicOpts): G2;\n  function sign(message: G2Hex, privateKey: PrivKey, htfOpts?: htfBasicOpts): Uint8Array | G2 {\n    const msgPoint = normP2Hash(message, htfOpts);\n    msgPoint.assertValidity();\n    const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n    if (message instanceof G2.ProjectivePoint) return sigPoint;\n    return Signature.toRawBytes(sigPoint);\n  }\n\n  function signShortSignature(\n    message: Hex,\n    privateKey: PrivKey,\n    htfOpts?: htfBasicOpts\n  ): Uint8Array;\n  function signShortSignature(message: G1, privateKey: PrivKey, htfOpts?: htfBasicOpts): G1;\n  function signShortSignature(\n    message: G1Hex,\n    privateKey: PrivKey,\n    htfOpts?: htfBasicOpts\n  ): Uint8Array | G1 {\n    const msgPoint = normP1Hash(message, htfOpts);\n    msgPoint.assertValidity();\n    const sigPoint = msgPoint.multiply(G1.normPrivateKeyToScalar(privateKey));\n    if (message instanceof G1.ProjectivePoint) return sigPoint;\n    return ShortSignature.toRawBytes(sigPoint);\n  }\n\n  // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n  // e(P, H(m)) == e(G, S)\n  function verify(\n    signature: G2Hex,\n    message: G2Hex,\n    publicKey: G1Hex,\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    const P = normP1(publicKey);\n    const Hm = normP2Hash(message, htfOpts);\n    const G = G1.ProjectivePoint.BASE;\n    const S = normP2(signature);\n    const exp = pairingBatch([\n      { g1: P.negate(), g2: Hm }, // ePHM = pairing(P.negate(), Hm, false);\n      { g1: G, g2: S }, // eGS = pairing(G, S, false);\n    ]);\n    return Fp12.eql(exp, Fp12.ONE);\n  }\n\n  // Checks if pairing of public key & hash is equal to pairing of generator & signature.\n  // e(S, G) == e(H(m), P)\n  function verifyShortSignature(\n    signature: G1Hex,\n    message: G1Hex,\n    publicKey: G2Hex,\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    const P = normP2(publicKey);\n    const Hm = normP1Hash(message, htfOpts);\n    const G = G2.ProjectivePoint.BASE;\n    const S = normP1(signature);\n    const exp = pairingBatch([\n      { g1: Hm, g2: P }, // eHmP = pairing(Hm, P, false);\n      { g1: S, g2: G.negate() }, // eSG = pairing(S, G.negate(), false);\n    ]);\n    return Fp12.eql(exp, Fp12.ONE);\n  }\n\n  // Adds a bunch of public key points together.\n  // pk1 + pk2 + pk3 = pkA\n  function aggregatePublicKeys(publicKeys: Hex[]): Uint8Array;\n  function aggregatePublicKeys(publicKeys: G1[]): G1;\n  function aggregatePublicKeys(publicKeys: G1Hex[]): Uint8Array | G1 {\n    if (!publicKeys.length) throw new Error('Expected non-empty array');\n    const agg = publicKeys.map(normP1).reduce((sum, p) => sum.add(p), G1.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (publicKeys[0] instanceof G1.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    // toRawBytes ensures point validity\n    return aggAffine.toRawBytes(true);\n  }\n\n  // Adds a bunch of signature points together.\n  function aggregateSignatures(signatures: Hex[]): Uint8Array;\n  function aggregateSignatures(signatures: G2[]): G2;\n  function aggregateSignatures(signatures: G2Hex[]): Uint8Array | G2 {\n    if (!signatures.length) throw new Error('Expected non-empty array');\n    const agg = signatures.map(normP2).reduce((sum, s) => sum.add(s), G2.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (signatures[0] instanceof G2.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    return Signature.toRawBytes(aggAffine);\n  }\n\n  // Adds a bunch of signature points together.\n  function aggregateShortSignatures(signatures: Hex[]): Uint8Array;\n  function aggregateShortSignatures(signatures: G1[]): G1;\n  function aggregateShortSignatures(signatures: G1Hex[]): Uint8Array | G1 {\n    if (!signatures.length) throw new Error('Expected non-empty array');\n    const agg = signatures.map(normP1).reduce((sum, s) => sum.add(s), G1.ProjectivePoint.ZERO);\n    const aggAffine = agg; //.toAffine();\n    if (signatures[0] instanceof G1.ProjectivePoint) {\n      aggAffine.assertValidity();\n      return aggAffine;\n    }\n    return ShortSignature.toRawBytes(aggAffine);\n  }\n\n  // https://ethresear.ch/t/fast-verification-of-multiple-bls-signatures/5407\n  // e(G, S) = e(G, SUM(n)(Si)) = MUL(n)(e(G, Si))\n  function verifyBatch(\n    signature: G2Hex,\n    // TODO: maybe `{message: G2Hex, publicKey: G1Hex}[]` instead?\n    messages: G2Hex[],\n    publicKeys: G1Hex[],\n    htfOpts?: htfBasicOpts\n  ): boolean {\n    if (!messages.length) throw new Error('Expected non-empty messages array');\n    if (publicKeys.length !== messages.length)\n      throw new Error('Pubkey count should equal msg count');\n    const sig = normP2(signature);\n    const nMessages = messages.map((i) => normP2Hash(i, htfOpts));\n    const nPublicKeys = publicKeys.map(normP1);\n    // NOTE: this works only for exact same object\n    const messagePubKeyMap = new Map<G2, G1[]>();\n    for (let i = 0; i < nPublicKeys.length; i++) {\n      const pub = nPublicKeys[i];\n      const msg = nMessages[i];\n      let keys = messagePubKeyMap.get(msg);\n      if (keys === undefined) {\n        keys = [];\n        messagePubKeyMap.set(msg, keys);\n      }\n      keys.push(pub);\n    }\n    const paired = [];\n    try {\n      for (const [msg, keys] of messagePubKeyMap) {\n        const groupPublicKey = keys.reduce((acc, msg) => acc.add(msg));\n        paired.push({ g1: groupPublicKey, g2: msg });\n      }\n      paired.push({ g1: G1.ProjectivePoint.BASE.negate(), g2: sig });\n      return Fp12.eql(pairingBatch(paired), Fp12.ONE);\n    } catch {\n      return false;\n    }\n  }\n\n  G1.ProjectivePoint.BASE._setWindowSize(4);\n\n  return {\n    getPublicKey,\n    getPublicKeyForShortSignatures,\n    sign,\n    signShortSignature,\n    verify,\n    verifyBatch,\n    verifyShortSignature,\n    aggregatePublicKeys,\n    aggregateSignatures,\n    aggregateShortSignatures,\n    millerLoopBatch,\n    pairing,\n    pairingBatch,\n    G1,\n    G2,\n    Signature,\n    ShortSignature,\n    fields: {\n      Fr,\n      Fp,\n      Fp2,\n      Fp6,\n      Fp12,\n    },\n    params: {\n      ateLoopSize: CURVE.params.ateLoopSize,\n      r: CURVE.params.r,\n      G1b: CURVE.G1.b,\n      G2b: CURVE.G2.b,\n    },\n    utils,\n  };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport * as mod from './modular.js';\nimport { bitLen, bitMask, concatBytes, notImplemented } from './utils.js';\nimport type { ProjConstructor, ProjPointType } from './weierstrass.js';\n\n/*\nTowered extension fields\n\nRather than implementing a massive 12th-degree extension directly, it is more efficient\nto build it up from smaller extensions: a tower of extensions.\n\nFor BLS12-381, the Fp12 field is implemented as a quadratic (degree two) extension,\non top of a cubic (degree three) extension, on top of a quadratic extension of Fp.\n\nFor more info: \"Pairings for beginners\" by Costello, section 7.3.\n*/\n\n// Be friendly to bad ECMAScript parsers by not using bigint literals\n// prettier-ignore\nconst _0n = BigInt(0), _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n\n// Fp\u2082 over complex plane\nexport type BigintTuple = [bigint, bigint];\nexport type Fp = bigint;\n// Finite extension field over irreducible polynominal.\n// Fp(u) / (u\u00B2 - \u03B2) where \u03B2 = -1\nexport type Fp2 = { c0: bigint; c1: bigint };\nexport type BigintSix = [bigint, bigint, bigint, bigint, bigint, bigint];\nexport type Fp6 = { c0: Fp2; c1: Fp2; c2: Fp2 };\nexport type Fp12 = { c0: Fp6; c1: Fp6 }; // Fp\u2081\u2082 = Fp\u2086\u00B2 => Fp\u2082\u00B3, Fp\u2086(w) / (w\u00B2 - \u03B3) where \u03B3 = v\n// prettier-ignore\nexport type BigintTwelve = [\n  bigint, bigint, bigint, bigint, bigint, bigint,\n  bigint, bigint, bigint, bigint, bigint, bigint\n];\n\nexport type Fp2Bls = mod.IField<Fp2> & {\n  reim: (num: Fp2) => { re: Fp; im: Fp };\n  mulByB: (num: Fp2) => Fp2;\n  frobeniusMap(num: Fp2, power: number): Fp2;\n  fromBigTuple(num: [bigint, bigint]): Fp2;\n};\n\nexport type Fp12Bls = mod.IField<Fp12> & {\n  frobeniusMap(num: Fp12, power: number): Fp12;\n  mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n  mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n  conjugate(num: Fp12): Fp12;\n  finalExponentiate(num: Fp12): Fp12;\n};\n\nfunction calcFrobeniusCoefficients<T>(\n  Fp: mod.IField<T>,\n  nonResidue: T,\n  modulus: bigint,\n  degree: number,\n  num: number = 1,\n  divisor?: number\n) {\n  const _divisor = BigInt(divisor === undefined ? degree : divisor);\n  const towerModulus: any = modulus ** BigInt(degree);\n  const res: T[][] = [];\n  for (let i = 0; i < num; i++) {\n    const a = BigInt(i + 1);\n    const powers: T[] = [];\n    for (let j = 0, qPower = _1n; j < degree; j++) {\n      const power = ((a * qPower - a) / _divisor) % towerModulus;\n      powers.push(Fp.pow(nonResidue, power));\n      qPower *= modulus;\n    }\n    res.push(powers);\n  }\n  return res;\n}\n\n// This works same at least for bls12-381, bn254 and bls12-377\nexport function psiFrobenius(Fp: mod.IField<Fp>, Fp2: Fp2Bls, base: Fp2) {\n  // \u03A8 endomorphism\n  const PSI_X = Fp2.pow(base, (Fp.ORDER - _1n) / _3n); // u^((p-1)/3)\n  const PSI_Y = Fp2.pow(base, (Fp.ORDER - _1n) / _2n); // u^((p-1)/2)\n  function psi(x: Fp2, y: Fp2): [Fp2, Fp2] {\n    // This x10 faster than previous version in bls12-381\n    const x2 = Fp2.mul(Fp2.frobeniusMap(x, 1), PSI_X);\n    const y2 = Fp2.mul(Fp2.frobeniusMap(y, 1), PSI_Y);\n    return [x2, y2];\n  }\n  // \u03A8\u00B2(P) endomorphism (psi2(x) = psi(psi(x)))\n  const PSI2_X = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _3n); // u^((p^2 - 1)/3)\n  // This equals -1, which causes y to be Fp2.neg(y).\n  // But not sure if there are case when this is not true?\n  const PSI2_Y = Fp2.pow(base, (Fp.ORDER ** _2n - _1n) / _2n); // u^((p^2 - 1)/3)\n  if (!Fp2.eql(PSI2_Y, Fp2.neg(Fp2.ONE))) throw new Error('psiFrobenius: PSI2_Y!==-1');\n  function psi2(x: Fp2, y: Fp2): [Fp2, Fp2] {\n    return [Fp2.mul(x, PSI2_X), Fp2.neg(y)];\n  }\n  // Map points\n  const mapAffine =\n    <T>(fn: (x: T, y: T) => [T, T]) =>\n    (c: ProjConstructor<T>, P: ProjPointType<T>) => {\n      const affine = P.toAffine();\n      const p = fn(affine.x, affine.y);\n      return c.fromAffine({ x: p[0], y: p[1] });\n    };\n  const G2psi = mapAffine(psi);\n  const G2psi2 = mapAffine(psi2);\n  return { psi, psi2, G2psi, G2psi2, PSI_X, PSI_Y, PSI2_X, PSI2_Y };\n}\n\nexport type Tower12Opts = {\n  ORDER: bigint;\n  NONRESIDUE?: Fp;\n  // Fp2\n  FP2_NONRESIDUE: BigintTuple;\n  Fp2sqrt?: (num: Fp2) => Fp2;\n  Fp2mulByB: (num: Fp2) => Fp2;\n  // Fp12\n  Fp12cyclotomicSquare: (num: Fp12) => Fp12;\n  Fp12cyclotomicExp: (num: Fp12, n: bigint) => Fp12;\n  Fp12finalExponentiate: (num: Fp12) => Fp12;\n};\n\nexport function tower12(opts: Tower12Opts) {\n  const { ORDER } = opts;\n  // Fp\n  const Fp = mod.Field(ORDER);\n  const FpNONRESIDUE = Fp.create(opts.NONRESIDUE || BigInt(-1));\n  const FpLegendre = mod.FpLegendre(ORDER);\n  const Fpdiv2 = Fp.div(Fp.ONE, _2n); // 1/2\n\n  // Fp2\n  const FP2_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(Fp, FpNONRESIDUE, Fp.ORDER, 2)[0];\n  const Fp2Add = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n    c0: Fp.add(c0, r0),\n    c1: Fp.add(c1, r1),\n  });\n  const Fp2Subtract = ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => ({\n    c0: Fp.sub(c0, r0),\n    c1: Fp.sub(c1, r1),\n  });\n  const Fp2Multiply = ({ c0, c1 }: Fp2, rhs: Fp2) => {\n    if (typeof rhs === 'bigint') return { c0: Fp.mul(c0, rhs), c1: Fp.mul(c1, rhs) };\n    // (a+bi)(c+di) = (ac\u2212bd) + (ad+bc)i\n    const { c0: r0, c1: r1 } = rhs;\n    let t1 = Fp.mul(c0, r0); // c0 * o0\n    let t2 = Fp.mul(c1, r1); // c1 * o1\n    // (T1 - T2) + ((c0 + c1) * (r0 + r1) - (T1 + T2))*i\n    const o0 = Fp.sub(t1, t2);\n    const o1 = Fp.sub(Fp.mul(Fp.add(c0, c1), Fp.add(r0, r1)), Fp.add(t1, t2));\n    return { c0: o0, c1: o1 };\n  };\n  const Fp2Square = ({ c0, c1 }: Fp2) => {\n    const a = Fp.add(c0, c1);\n    const b = Fp.sub(c0, c1);\n    const c = Fp.add(c0, c0);\n    return { c0: Fp.mul(a, b), c1: Fp.mul(c, c1) };\n  };\n  type Fp2Utils = {\n    NONRESIDUE: Fp2;\n    fromBigTuple: (tuple: BigintTuple | bigint[]) => Fp2;\n    reim: (num: Fp2) => { re: bigint; im: bigint };\n    mulByNonresidue: (num: Fp2) => Fp2;\n    mulByB: (num: Fp2) => Fp2;\n    frobeniusMap(num: Fp2, power: number): Fp2;\n  };\n  const Fp2fromBigTuple = (tuple: BigintTuple | bigint[]) => {\n    if (tuple.length !== 2) throw new Error('Invalid tuple');\n    const fps = tuple.map((n) => Fp.create(n)) as [Fp, Fp];\n    return { c0: fps[0], c1: fps[1] };\n  };\n\n  const FP2_ORDER = ORDER * ORDER;\n  const Fp2Nonresidue = Fp2fromBigTuple(opts.FP2_NONRESIDUE);\n  const Fp2: mod.IField<Fp2> & Fp2Utils = {\n    ORDER: FP2_ORDER,\n    NONRESIDUE: Fp2Nonresidue,\n    BITS: bitLen(FP2_ORDER),\n    BYTES: Math.ceil(bitLen(FP2_ORDER) / 8),\n    MASK: bitMask(bitLen(FP2_ORDER)),\n    ZERO: { c0: Fp.ZERO, c1: Fp.ZERO },\n    ONE: { c0: Fp.ONE, c1: Fp.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1 }) => typeof c0 === 'bigint' && typeof c1 === 'bigint',\n    is0: ({ c0, c1 }) => Fp.is0(c0) && Fp.is0(c1),\n    eql: ({ c0, c1 }: Fp2, { c0: r0, c1: r1 }: Fp2) => Fp.eql(c0, r0) && Fp.eql(c1, r1),\n    neg: ({ c0, c1 }) => ({ c0: Fp.neg(c0), c1: Fp.neg(c1) }),\n    pow: (num, power) => mod.FpPow(Fp2, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp2, nums),\n    // Normalized\n    add: Fp2Add,\n    sub: Fp2Subtract,\n    mul: Fp2Multiply,\n    sqr: Fp2Square,\n    // NonNormalized stuff\n    addN: Fp2Add,\n    subN: Fp2Subtract,\n    mulN: Fp2Multiply,\n    sqrN: Fp2Square,\n    // Why inversion for bigint inside Fp instead of Fp2? it is even used in that context?\n    div: (lhs, rhs) =>\n      Fp2.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp2.inv(rhs)),\n    inv: ({ c0: a, c1: b }) => {\n      // We wish to find the multiplicative inverse of a nonzero\n      // element a + bu in Fp2. We leverage an identity\n      //\n      // (a + bu)(a - bu) = a\u00B2 + b\u00B2\n      //\n      // which holds because u\u00B2 = -1. This can be rewritten as\n      //\n      // (a + bu)(a - bu)/(a\u00B2 + b\u00B2) = 1\n      //\n      // because a\u00B2 + b\u00B2 = 0 has no nonzero solutions for (a, b).\n      // This gives that (a - bu)/(a\u00B2 + b\u00B2) is the inverse\n      // of (a + bu). Importantly, this can be computing using\n      // only a single inversion in Fp.\n      const factor = Fp.inv(Fp.create(a * a + b * b));\n      return { c0: Fp.mul(factor, Fp.create(a)), c1: Fp.mul(factor, Fp.create(-b)) };\n    },\n    sqrt: (num) => {\n      if (opts.Fp2sqrt) return opts.Fp2sqrt(num);\n      // This is generic for all quadratic extensions (Fp2)\n      const { c0, c1 } = num;\n      if (Fp.is0(c1)) {\n        // if c0 is quadratic residue\n        if (Fp.eql(FpLegendre(Fp, c0), Fp.ONE)) return Fp2.create({ c0: Fp.sqrt(c0), c1: Fp.ZERO });\n        else return Fp2.create({ c0: Fp.ZERO, c1: Fp.sqrt(Fp.div(c0, FpNONRESIDUE)) });\n      }\n      const a = Fp.sqrt(Fp.sub(Fp.sqr(c0), Fp.mul(Fp.sqr(c1), FpNONRESIDUE)));\n      let d = Fp.mul(Fp.add(a, c0), Fpdiv2);\n      const legendre = FpLegendre(Fp, d);\n      // -1, Quadratic non residue\n      if (!Fp.is0(legendre) && !Fp.eql(legendre, Fp.ONE)) d = Fp.sub(d, a);\n      const a0 = Fp.sqrt(d);\n      const candidateSqrt = Fp2.create({ c0: a0, c1: Fp.div(Fp.mul(c1, Fpdiv2), a0) });\n      if (!Fp2.eql(Fp2.sqr(candidateSqrt), num)) throw new Error('Cannot find square root');\n      // Normalize root: at this point candidateSqrt ** 2 = num, but also -candidateSqrt ** 2 = num\n      const x1 = candidateSqrt;\n      const x2 = Fp2.neg(x1);\n      const { re: re1, im: im1 } = Fp2.reim(x1);\n      const { re: re2, im: im2 } = Fp2.reim(x2);\n      if (im1 > im2 || (im1 === im2 && re1 > re2)) return x1;\n      return x2;\n    },\n    // Same as sgn0_m_eq_2 in RFC 9380\n    isOdd: (x: Fp2) => {\n      const { re: x0, im: x1 } = Fp2.reim(x);\n      const sign_0 = x0 % _2n;\n      const zero_0 = x0 === _0n;\n      const sign_1 = x1 % _2n;\n      return BigInt(sign_0 || (zero_0 && sign_1)) == _1n;\n    },\n    // Bytes util\n    fromBytes(b: Uint8Array): Fp2 {\n      if (b.length !== Fp2.BYTES) throw new Error(`fromBytes wrong length=${b.length}`);\n      return { c0: Fp.fromBytes(b.subarray(0, Fp.BYTES)), c1: Fp.fromBytes(b.subarray(Fp.BYTES)) };\n    },\n    toBytes: ({ c0, c1 }) => concatBytes(Fp.toBytes(c0), Fp.toBytes(c1)),\n    cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n      c0: Fp.cmov(c0, r0, c),\n      c1: Fp.cmov(c1, r1, c),\n    }),\n    reim: ({ c0, c1 }) => ({ re: c0, im: c1 }),\n    // multiply by u + 1\n    mulByNonresidue: ({ c0, c1 }) => Fp2.mul({ c0, c1 }, Fp2Nonresidue),\n    mulByB: opts.Fp2mulByB,\n    fromBigTuple: Fp2fromBigTuple,\n    frobeniusMap: ({ c0, c1 }, power: number): Fp2 => ({\n      c0,\n      c1: Fp.mul(c1, FP2_FROBENIUS_COEFFICIENTS[power % 2]),\n    }),\n  };\n  // Fp6\n  const Fp6Add = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n    c0: Fp2.add(c0, r0),\n    c1: Fp2.add(c1, r1),\n    c2: Fp2.add(c2, r2),\n  });\n  const Fp6Subtract = ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6) => ({\n    c0: Fp2.sub(c0, r0),\n    c1: Fp2.sub(c1, r1),\n    c2: Fp2.sub(c2, r2),\n  });\n  const Fp6Multiply = ({ c0, c1, c2 }: Fp6, rhs: Fp6 | bigint) => {\n    if (typeof rhs === 'bigint') {\n      return {\n        c0: Fp2.mul(c0, rhs),\n        c1: Fp2.mul(c1, rhs),\n        c2: Fp2.mul(c2, rhs),\n      };\n    }\n    const { c0: r0, c1: r1, c2: r2 } = rhs;\n    const t0 = Fp2.mul(c0, r0); // c0 * o0\n    const t1 = Fp2.mul(c1, r1); // c1 * o1\n    const t2 = Fp2.mul(c2, r2); // c2 * o2\n    return {\n      // t0 + (c1 + c2) * (r1 * r2) - (T1 + T2) * (u + 1)\n      c0: Fp2.add(\n        t0,\n        Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), Fp2.add(r1, r2)), Fp2.add(t1, t2)))\n      ),\n      // (c0 + c1) * (r0 + r1) - (T0 + T1) + T2 * (u + 1)\n      c1: Fp2.add(\n        Fp2.sub(Fp2.mul(Fp2.add(c0, c1), Fp2.add(r0, r1)), Fp2.add(t0, t1)),\n        Fp2.mulByNonresidue(t2)\n      ),\n      // T1 + (c0 + c2) * (r0 + r2) - T0 + T2\n      c2: Fp2.sub(Fp2.add(t1, Fp2.mul(Fp2.add(c0, c2), Fp2.add(r0, r2))), Fp2.add(t0, t2)),\n    };\n  };\n  const Fp6Square = ({ c0, c1, c2 }: Fp6) => {\n    let t0 = Fp2.sqr(c0); // c0\u00B2\n    let t1 = Fp2.mul(Fp2.mul(c0, c1), _2n); // 2 * c0 * c1\n    let t3 = Fp2.mul(Fp2.mul(c1, c2), _2n); // 2 * c1 * c2\n    let t4 = Fp2.sqr(c2); // c2\u00B2\n    return {\n      c0: Fp2.add(Fp2.mulByNonresidue(t3), t0), // T3 * (u + 1) + T0\n      c1: Fp2.add(Fp2.mulByNonresidue(t4), t1), // T4 * (u + 1) + T1\n      // T1 + (c0 - c1 + c2)\u00B2 + T3 - T0 - T4\n      c2: Fp2.sub(Fp2.sub(Fp2.add(Fp2.add(t1, Fp2.sqr(Fp2.add(Fp2.sub(c0, c1), c2))), t3), t0), t4),\n    };\n  };\n  type Fp6Utils = {\n    fromBigSix: (tuple: BigintSix) => Fp6;\n    mulByNonresidue: (num: Fp6) => Fp6;\n    frobeniusMap(num: Fp6, power: number): Fp6;\n    mul1(num: Fp6, b1: Fp2): Fp6;\n    mul01(num: Fp6, b0: Fp2, b1: Fp2): Fp6;\n    mulByFp2(lhs: Fp6, rhs: Fp2): Fp6;\n  };\n\n  const [FP6_FROBENIUS_COEFFICIENTS_1, FP6_FROBENIUS_COEFFICIENTS_2] = calcFrobeniusCoefficients(\n    Fp2,\n    Fp2Nonresidue,\n    Fp.ORDER,\n    6,\n    2,\n    3\n  );\n\n  const Fp6: mod.IField<Fp6> & Fp6Utils = {\n    ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n    BITS: 3 * Fp2.BITS,\n    BYTES: 3 * Fp2.BYTES,\n    MASK: bitMask(3 * Fp2.BITS),\n    ZERO: { c0: Fp2.ZERO, c1: Fp2.ZERO, c2: Fp2.ZERO },\n    ONE: { c0: Fp2.ONE, c1: Fp2.ZERO, c2: Fp2.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1, c2 }) => Fp2.isValid(c0) && Fp2.isValid(c1) && Fp2.isValid(c2),\n    is0: ({ c0, c1, c2 }) => Fp2.is0(c0) && Fp2.is0(c1) && Fp2.is0(c2),\n    neg: ({ c0, c1, c2 }) => ({ c0: Fp2.neg(c0), c1: Fp2.neg(c1), c2: Fp2.neg(c2) }),\n    eql: ({ c0, c1, c2 }, { c0: r0, c1: r1, c2: r2 }) =>\n      Fp2.eql(c0, r0) && Fp2.eql(c1, r1) && Fp2.eql(c2, r2),\n    sqrt: notImplemented,\n    // Do we need division by bigint at all? Should be done via order:\n    div: (lhs, rhs) =>\n      Fp6.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp6.inv(rhs)),\n    pow: (num, power) => mod.FpPow(Fp6, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp6, nums),\n    // Normalized\n    add: Fp6Add,\n    sub: Fp6Subtract,\n    mul: Fp6Multiply,\n    sqr: Fp6Square,\n    // NonNormalized stuff\n    addN: Fp6Add,\n    subN: Fp6Subtract,\n    mulN: Fp6Multiply,\n    sqrN: Fp6Square,\n\n    inv: ({ c0, c1, c2 }) => {\n      let t0 = Fp2.sub(Fp2.sqr(c0), Fp2.mulByNonresidue(Fp2.mul(c2, c1))); // c0\u00B2 - c2 * c1 * (u + 1)\n      let t1 = Fp2.sub(Fp2.mulByNonresidue(Fp2.sqr(c2)), Fp2.mul(c0, c1)); // c2\u00B2 * (u + 1) - c0 * c1\n      let t2 = Fp2.sub(Fp2.sqr(c1), Fp2.mul(c0, c2)); // c1\u00B2 - c0 * c2\n      // 1/(((c2 * T1 + c1 * T2) * v) + c0 * T0)\n      let t4 = Fp2.inv(\n        Fp2.add(Fp2.mulByNonresidue(Fp2.add(Fp2.mul(c2, t1), Fp2.mul(c1, t2))), Fp2.mul(c0, t0))\n      );\n      return { c0: Fp2.mul(t4, t0), c1: Fp2.mul(t4, t1), c2: Fp2.mul(t4, t2) };\n    },\n    // Bytes utils\n    fromBytes: (b: Uint8Array): Fp6 => {\n      if (b.length !== Fp6.BYTES) throw new Error(`fromBytes wrong length=${b.length}`);\n      return {\n        c0: Fp2.fromBytes(b.subarray(0, Fp2.BYTES)),\n        c1: Fp2.fromBytes(b.subarray(Fp2.BYTES, 2 * Fp2.BYTES)),\n        c2: Fp2.fromBytes(b.subarray(2 * Fp2.BYTES)),\n      };\n    },\n    toBytes: ({ c0, c1, c2 }): Uint8Array =>\n      concatBytes(Fp2.toBytes(c0), Fp2.toBytes(c1), Fp2.toBytes(c2)),\n    cmov: ({ c0, c1, c2 }: Fp6, { c0: r0, c1: r1, c2: r2 }: Fp6, c) => ({\n      c0: Fp2.cmov(c0, r0, c),\n      c1: Fp2.cmov(c1, r1, c),\n      c2: Fp2.cmov(c2, r2, c),\n    }),\n    fromBigSix: (t: BigintSix): Fp6 => {\n      if (!Array.isArray(t) || t.length !== 6) throw new Error('Invalid Fp6 usage');\n      return {\n        c0: Fp2.fromBigTuple(t.slice(0, 2)),\n        c1: Fp2.fromBigTuple(t.slice(2, 4)),\n        c2: Fp2.fromBigTuple(t.slice(4, 6)),\n      };\n    },\n    frobeniusMap: ({ c0, c1, c2 }, power: number) => ({\n      c0: Fp2.frobeniusMap(c0, power),\n      c1: Fp2.mul(Fp2.frobeniusMap(c1, power), FP6_FROBENIUS_COEFFICIENTS_1[power % 6]),\n      c2: Fp2.mul(Fp2.frobeniusMap(c2, power), FP6_FROBENIUS_COEFFICIENTS_2[power % 6]),\n    }),\n    mulByFp2: ({ c0, c1, c2 }, rhs: Fp2): Fp6 => ({\n      c0: Fp2.mul(c0, rhs),\n      c1: Fp2.mul(c1, rhs),\n      c2: Fp2.mul(c2, rhs),\n    }),\n    mulByNonresidue: ({ c0, c1, c2 }) => ({ c0: Fp2.mulByNonresidue(c2), c1: c0, c2: c1 }),\n    // Sparse multiplication\n    mul1: ({ c0, c1, c2 }, b1: Fp2): Fp6 => ({\n      c0: Fp2.mulByNonresidue(Fp2.mul(c2, b1)),\n      c1: Fp2.mul(c0, b1),\n      c2: Fp2.mul(c1, b1),\n    }),\n    // Sparse multiplication\n    mul01({ c0, c1, c2 }, b0: Fp2, b1: Fp2): Fp6 {\n      let t0 = Fp2.mul(c0, b0); // c0 * b0\n      let t1 = Fp2.mul(c1, b1); // c1 * b1\n      return {\n        // ((c1 + c2) * b1 - T1) * (u + 1) + T0\n        c0: Fp2.add(Fp2.mulByNonresidue(Fp2.sub(Fp2.mul(Fp2.add(c1, c2), b1), t1)), t0),\n        // (b0 + b1) * (c0 + c1) - T0 - T1\n        c1: Fp2.sub(Fp2.sub(Fp2.mul(Fp2.add(b0, b1), Fp2.add(c0, c1)), t0), t1),\n        // (c0 + c2) * b0 - T0 + T1\n        c2: Fp2.add(Fp2.sub(Fp2.mul(Fp2.add(c0, c2), b0), t0), t1),\n      };\n    },\n  };\n\n  // Fp12\n  const FP12_FROBENIUS_COEFFICIENTS = calcFrobeniusCoefficients(\n    Fp2,\n    Fp2Nonresidue,\n    Fp.ORDER,\n    12,\n    1,\n    6\n  )[0];\n\n  const Fp12Add = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n    c0: Fp6.add(c0, r0),\n    c1: Fp6.add(c1, r1),\n  });\n  const Fp12Subtract = ({ c0, c1 }: Fp12, { c0: r0, c1: r1 }: Fp12) => ({\n    c0: Fp6.sub(c0, r0),\n    c1: Fp6.sub(c1, r1),\n  });\n  const Fp12Multiply = ({ c0, c1 }: Fp12, rhs: Fp12 | bigint) => {\n    if (typeof rhs === 'bigint') return { c0: Fp6.mul(c0, rhs), c1: Fp6.mul(c1, rhs) };\n    let { c0: r0, c1: r1 } = rhs;\n    let t1 = Fp6.mul(c0, r0); // c0 * r0\n    let t2 = Fp6.mul(c1, r1); // c1 * r1\n    return {\n      c0: Fp6.add(t1, Fp6.mulByNonresidue(t2)), // T1 + T2 * v\n      // (c0 + c1) * (r0 + r1) - (T1 + T2)\n      c1: Fp6.sub(Fp6.mul(Fp6.add(c0, c1), Fp6.add(r0, r1)), Fp6.add(t1, t2)),\n    };\n  };\n  const Fp12Square = ({ c0, c1 }: Fp12) => {\n    let ab = Fp6.mul(c0, c1); // c0 * c1\n    return {\n      // (c1 * v + c0) * (c0 + c1) - AB - AB * v\n      c0: Fp6.sub(\n        Fp6.sub(Fp6.mul(Fp6.add(Fp6.mulByNonresidue(c1), c0), Fp6.add(c0, c1)), ab),\n        Fp6.mulByNonresidue(ab)\n      ),\n      c1: Fp6.add(ab, ab),\n    }; // AB + AB\n  };\n  function Fp4Square(a: Fp2, b: Fp2): { first: Fp2; second: Fp2 } {\n    const a2 = Fp2.sqr(a);\n    const b2 = Fp2.sqr(b);\n    return {\n      first: Fp2.add(Fp2.mulByNonresidue(b2), a2), // b\u00B2 * Nonresidue + a\u00B2\n      second: Fp2.sub(Fp2.sub(Fp2.sqr(Fp2.add(a, b)), a2), b2), // (a + b)\u00B2 - a\u00B2 - b\u00B2\n    };\n  }\n  type Fp12Utils = {\n    fromBigTwelve: (t: BigintTwelve) => Fp12;\n    frobeniusMap(num: Fp12, power: number): Fp12;\n    mul014(num: Fp12, o0: Fp2, o1: Fp2, o4: Fp2): Fp12;\n    mul034(num: Fp12, o0: Fp2, o3: Fp2, o4: Fp2): Fp12;\n    mulByFp2(lhs: Fp12, rhs: Fp2): Fp12;\n    conjugate(num: Fp12): Fp12;\n    finalExponentiate(num: Fp12): Fp12;\n    _cyclotomicSquare(num: Fp12): Fp12;\n    _cyclotomicExp(num: Fp12, n: bigint): Fp12;\n  };\n\n  const Fp12: mod.IField<Fp12> & Fp12Utils = {\n    ORDER: Fp2.ORDER, // TODO: unused, but need to verify\n    BITS: 2 * Fp2.BITS,\n    BYTES: 2 * Fp2.BYTES,\n    MASK: bitMask(2 * Fp2.BITS),\n    ZERO: { c0: Fp6.ZERO, c1: Fp6.ZERO },\n    ONE: { c0: Fp6.ONE, c1: Fp6.ZERO },\n    create: (num) => num,\n    isValid: ({ c0, c1 }) => Fp6.isValid(c0) && Fp6.isValid(c1),\n    is0: ({ c0, c1 }) => Fp6.is0(c0) && Fp6.is0(c1),\n    neg: ({ c0, c1 }) => ({ c0: Fp6.neg(c0), c1: Fp6.neg(c1) }),\n    eql: ({ c0, c1 }, { c0: r0, c1: r1 }) => Fp6.eql(c0, r0) && Fp6.eql(c1, r1),\n    sqrt: notImplemented,\n    inv: ({ c0, c1 }) => {\n      let t = Fp6.inv(Fp6.sub(Fp6.sqr(c0), Fp6.mulByNonresidue(Fp6.sqr(c1)))); // 1 / (c0\u00B2 - c1\u00B2 * v)\n      return { c0: Fp6.mul(c0, t), c1: Fp6.neg(Fp6.mul(c1, t)) }; // ((C0 * T) * T) + (-C1 * T) * w\n    },\n    div: (lhs, rhs) =>\n      Fp12.mul(lhs, typeof rhs === 'bigint' ? Fp.inv(Fp.create(rhs)) : Fp12.inv(rhs)),\n    pow: (num, power) => mod.FpPow(Fp12, num, power),\n    invertBatch: (nums) => mod.FpInvertBatch(Fp12, nums),\n    // Normalized\n    add: Fp12Add,\n    sub: Fp12Subtract,\n    mul: Fp12Multiply,\n    sqr: Fp12Square,\n    // NonNormalized stuff\n    addN: Fp12Add,\n    subN: Fp12Subtract,\n    mulN: Fp12Multiply,\n    sqrN: Fp12Square,\n\n    // Bytes utils\n    fromBytes: (b: Uint8Array): Fp12 => {\n      if (b.length !== Fp12.BYTES) throw new Error(`fromBytes wrong length=${b.length}`);\n      return {\n        c0: Fp6.fromBytes(b.subarray(0, Fp6.BYTES)),\n        c1: Fp6.fromBytes(b.subarray(Fp6.BYTES)),\n      };\n    },\n    toBytes: ({ c0, c1 }): Uint8Array => concatBytes(Fp6.toBytes(c0), Fp6.toBytes(c1)),\n    cmov: ({ c0, c1 }, { c0: r0, c1: r1 }, c) => ({\n      c0: Fp6.cmov(c0, r0, c),\n      c1: Fp6.cmov(c1, r1, c),\n    }),\n    // Utils\n    // toString() {\n    //   return `Fp12(${this.c0} + ${this.c1} * w)`;\n    // },\n    // fromTuple(c: [Fp6, Fp6]) {\n    //   return new Fp12(...c);\n    // }\n    fromBigTwelve: (t: BigintTwelve): Fp12 => ({\n      c0: Fp6.fromBigSix(t.slice(0, 6) as BigintSix),\n      c1: Fp6.fromBigSix(t.slice(6, 12) as BigintSix),\n    }),\n    // Raises to q**i -th power\n    frobeniusMap(lhs, power: number) {\n      const { c0, c1, c2 } = Fp6.frobeniusMap(lhs.c1, power);\n      const coeff = FP12_FROBENIUS_COEFFICIENTS[power % 12];\n      return {\n        c0: Fp6.frobeniusMap(lhs.c0, power),\n        c1: Fp6.create({\n          c0: Fp2.mul(c0, coeff),\n          c1: Fp2.mul(c1, coeff),\n          c2: Fp2.mul(c2, coeff),\n        }),\n      };\n    },\n    mulByFp2: ({ c0, c1 }, rhs: Fp2): Fp12 => ({\n      c0: Fp6.mulByFp2(c0, rhs),\n      c1: Fp6.mulByFp2(c1, rhs),\n    }),\n    conjugate: ({ c0, c1 }): Fp12 => ({ c0, c1: Fp6.neg(c1) }),\n    // Sparse multiplication\n    mul014: ({ c0, c1 }, o0: Fp2, o1: Fp2, o4: Fp2) => {\n      let t0 = Fp6.mul01(c0, o0, o1);\n      let t1 = Fp6.mul1(c1, o4);\n      return {\n        c0: Fp6.add(Fp6.mulByNonresidue(t1), t0), // T1 * v + T0\n        // (c1 + c0) * [o0, o1+o4] - T0 - T1\n        c1: Fp6.sub(Fp6.sub(Fp6.mul01(Fp6.add(c1, c0), o0, Fp2.add(o1, o4)), t0), t1),\n      };\n    },\n    mul034: ({ c0, c1 }, o0: Fp2, o3: Fp2, o4: Fp2) => {\n      const a = Fp6.create({\n        c0: Fp2.mul(c0.c0, o0),\n        c1: Fp2.mul(c0.c1, o0),\n        c2: Fp2.mul(c0.c2, o0),\n      });\n      const b = Fp6.mul01(c1, o3, o4);\n      const e = Fp6.mul01(Fp6.add(c0, c1), Fp2.add(o0, o3), o4);\n      return {\n        c0: Fp6.add(Fp6.mulByNonresidue(b), a),\n        c1: Fp6.sub(e, Fp6.add(a, b)),\n      };\n    },\n\n    // A cyclotomic group is a subgroup of Fp^n defined by\n    //   G\u03A6\u2099(p) = {\u03B1 \u2208 Fp\u207F : \u03B1^\u03A6\u2099(p) = 1}\n    // The result of any pairing is in a cyclotomic subgroup\n    // https://eprint.iacr.org/2009/565.pdf\n    _cyclotomicSquare: opts.Fp12cyclotomicSquare,\n    _cyclotomicExp: opts.Fp12cyclotomicExp,\n    // https://eprint.iacr.org/2010/354.pdf\n    // https://eprint.iacr.org/2009/565.pdf\n    finalExponentiate: opts.Fp12finalExponentiate,\n  };\n\n  return { Fp, Fp2, Fp6, Fp4Square, Fp12 };\n}\n", "/*! noble-curves - MIT License (c) 2022 Paul Miller (paulmillr.com) */\nimport { sha256 } from '@noble/hashes/sha256';\nimport { getHash } from './_shortw_utils.js';\nimport { weierstrass } from './abstract/weierstrass.js';\nimport { randomBytes } from '@noble/hashes/utils';\nimport { bls, CurveFn } from './abstract/bls.js';\nimport { Field } from './abstract/modular.js';\nimport { bitGet, bitLen, notImplemented } from './abstract/utils.js';\nimport { tower12, psiFrobenius } from './abstract/tower.js';\n// Types\nimport type { Fp, Fp2, Fp6, Fp12 } from './abstract/tower.js';\n// prettier-ignore\nconst _1n = BigInt(1), _2n = BigInt(2), _3n = BigInt(3);\n// prettier-ignore\nconst _6n = BigInt(6);\n\n/*\nbn254, previously known as alt_bn_128, when it had 128-bit security.\nBarbulescu-Duquesne 2017 shown it's weaker: just about 100 bits,\nso the naming has been adjusted to its prime bit count:\nhttps://hal.science/hal-01534101/file/main.pdf\n\nThere are huge compatibility issues in the ecosystem:\n\n1. Different libraries call it in different ways: \"bn254\", \"bn256\", \"alt_bn128\", \"bn128\".\n2. libff has bn128, but it's a different curve with different G2:\n   https://github.com/scipr-lab/libff/blob/a44f482e18b8ac04d034c193bd9d7df7817ad73f/libff/algebra/curves/bn128/bn128_init.cpp#L166-L169\n3. halo2curves bn256 is also incompatible and returns different outputs\n\nThe goal of our implementation is to support \"Ethereum\" variant of the curve,\nbecause it at least has specs:\n\n- EIP196 (https://eips.ethereum.org/EIPS/eip-196) describes bn254 ECADD and ECMUL opcodes for EVM\n- EIP197 (https://eips.ethereum.org/EIPS/eip-197) describes bn254 pairings\n- It's hard: EIPs don't have proper tests. EIP-197 returns boolean output instead of Fp12\n- The existing implementations are bad. Some are deprecated:\n    - https://github.com/paritytech/bn (old version)\n    - https://github.com/ewasm/ethereum-bn128.rs (uses paritytech/bn)\n    - https://github.com/zcash-hackworks/bn\n    - https://github.com/arkworks-rs/curves/blob/master/bn254/src/lib.rs\n- Python implementations use different towers and produce different Fp12 outputs:\n    - https://github.com/ethereum/py_pairing\n    - https://github.com/ethereum/execution-specs/blob/master/src/ethereum/crypto/alt_bn128.py\n- Points are encoded differently in different implementations\n*/\n\n/*\nSeed (X): 4965661367192848881\nFr: (36x\u2074+36x\u00B3+18x\u00B2+6x+1)\nFp: (36x\u2074+36x\u00B3+24x\u00B2+6x+1)\n(E  / Fp ): Y\u00B2 = X\u00B3+3\n(Et / Fp\u00B2): Y\u00B2 = X\u00B3+3/(u+9) (D-type twist)\nAte loop size: 6x+2\n\nTowers:\n- Fp\u00B2[u] = Fp/u\u00B2+1\n- Fp\u2076[v] = Fp\u00B2/v\u00B3-9-u\n- Fp\u00B9\u00B2[w] = Fp\u2076/w\u00B2-v\n*/\nconst BN_X = BigInt('4965661367192848881');\nconst BN_X_LEN = bitLen(BN_X);\nconst SIX_X_SQUARED = _6n * BN_X ** _2n;\n\n// Finite field over r. It's for convenience and is not used in the code below.\nconst Fr = Field(\n  BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617')\n);\n// Fp2.div(Fp2.mul(Fp2.ONE, _3n), Fp2.NONRESIDUE)\nconst Fp2B = {\n  c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478373'),\n  c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690'),\n};\n\nconst { Fp, Fp2, Fp6, Fp4Square, Fp12 } = tower12({\n  ORDER: BigInt('21888242871839275222246405745257275088696311157297823662689037894645226208583'),\n  FP2_NONRESIDUE: [BigInt(9), _1n],\n  Fp2mulByB: (num) => Fp2.mul(num, Fp2B),\n  // The result of any pairing is in a cyclotomic subgroup\n  // https://eprint.iacr.org/2009/565.pdf\n  Fp12cyclotomicSquare: ({ c0, c1 }): Fp12 => {\n    const { c0: c0c0, c1: c0c1, c2: c0c2 } = c0;\n    const { c0: c1c0, c1: c1c1, c2: c1c2 } = c1;\n    const { first: t3, second: t4 } = Fp4Square(c0c0, c1c1);\n    const { first: t5, second: t6 } = Fp4Square(c1c0, c0c2);\n    const { first: t7, second: t8 } = Fp4Square(c0c1, c1c2);\n    let t9 = Fp2.mulByNonresidue(t8); // T8 * (u + 1)\n    return {\n      c0: Fp6.create({\n        c0: Fp2.add(Fp2.mul(Fp2.sub(t3, c0c0), _2n), t3), // 2 * (T3 - c0c0)  + T3\n        c1: Fp2.add(Fp2.mul(Fp2.sub(t5, c0c1), _2n), t5), // 2 * (T5 - c0c1)  + T5\n        c2: Fp2.add(Fp2.mul(Fp2.sub(t7, c0c2), _2n), t7),\n      }), // 2 * (T7 - c0c2)  + T7\n      c1: Fp6.create({\n        c0: Fp2.add(Fp2.mul(Fp2.add(t9, c1c0), _2n), t9), // 2 * (T9 + c1c0) + T9\n        c1: Fp2.add(Fp2.mul(Fp2.add(t4, c1c1), _2n), t4), // 2 * (T4 + c1c1) + T4\n        c2: Fp2.add(Fp2.mul(Fp2.add(t6, c1c2), _2n), t6),\n      }),\n    }; // 2 * (T6 + c1c2) + T6\n  },\n  Fp12cyclotomicExp(num, n) {\n    let z = Fp12.ONE;\n    for (let i = BN_X_LEN - 1; i >= 0; i--) {\n      z = Fp12._cyclotomicSquare(z);\n      if (bitGet(n, i)) z = Fp12.mul(z, num);\n    }\n    return z;\n  },\n  // https://eprint.iacr.org/2010/354.pdf\n  // https://eprint.iacr.org/2009/565.pdf\n  Fp12finalExponentiate: (num) => {\n    const powMinusX = (num: Fp12) => Fp12.conjugate(Fp12._cyclotomicExp(num, BN_X));\n    const r0 = Fp12.mul(Fp12.conjugate(num), Fp12.inv(num));\n    const r = Fp12.mul(Fp12.frobeniusMap(r0, 2), r0);\n    const y1 = Fp12._cyclotomicSquare(powMinusX(r));\n    const y2 = Fp12.mul(Fp12._cyclotomicSquare(y1), y1);\n    const y4 = powMinusX(y2);\n    const y6 = powMinusX(Fp12._cyclotomicSquare(y4));\n    const y8 = Fp12.mul(Fp12.mul(Fp12.conjugate(y6), y4), Fp12.conjugate(y2));\n    const y9 = Fp12.mul(y8, y1);\n    return Fp12.mul(\n      Fp12.frobeniusMap(Fp12.mul(Fp12.conjugate(r), y9), 3),\n      Fp12.mul(\n        Fp12.frobeniusMap(y8, 2),\n        Fp12.mul(Fp12.frobeniusMap(y9, 1), Fp12.mul(Fp12.mul(y8, y4), r))\n      )\n    );\n  },\n});\n\n// END OF CURVE FIELDS\nconst { G2psi, psi } = psiFrobenius(Fp, Fp2, Fp2.NONRESIDUE);\n\n/*\nNo hashToCurve for now (and signatures):\n\n- RFC 9380 doesn't mention bn254 and doesn't provide test vectors\n- Overall seems like nobody is using BLS signatures on top of bn254\n- Seems like it can utilize SVDW, which is not implemented yet\n*/\nconst htfDefaults = Object.freeze({\n  // DST: a domain separation tag defined in section 2.2.5\n  DST: 'BN254G2_XMD:SHA-256_SVDW_RO_',\n  encodeDST: 'BN254G2_XMD:SHA-256_SVDW_RO_',\n  p: Fp.ORDER,\n  m: 2,\n  k: 128,\n  expand: 'xmd',\n  hash: sha256,\n} as const);\n\n/**\n * bn254 (a.k.a. alt_bn128) pairing-friendly curve.\n * Contains G1 / G2 operations and pairings.\n */\nexport const bn254: CurveFn = bls({\n  // Fields\n  fields: { Fp, Fp2, Fp6, Fp12, Fr },\n  G1: {\n    Fp,\n    h: BigInt(1),\n    Gx: BigInt(1),\n    Gy: BigInt(2),\n    a: Fp.ZERO,\n    b: _3n,\n    htfDefaults: { ...htfDefaults, m: 1, DST: 'BN254G2_XMD:SHA-256_SVDW_RO_' },\n    wrapPrivateKey: true,\n    allowInfinityPoint: true,\n    mapToCurve: notImplemented,\n    fromBytes: notImplemented,\n    toBytes: notImplemented,\n    ShortSignature: {\n      fromHex: notImplemented,\n      toRawBytes: notImplemented,\n      toHex: notImplemented,\n    },\n  },\n  G2: {\n    Fp: Fp2,\n    // cofactor: (36 * X^4) + (36 * X^3) + (30 * X^2) + 6*X + 1\n    h: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),\n    Gx: Fp2.fromBigTuple([\n      BigInt('10857046999023057135944570762232829481370756359578518086990519993285655852781'),\n      BigInt('11559732032986387107991004021392285783925812861821192530917403151452391805634'),\n    ]),\n    Gy: Fp2.fromBigTuple([\n      BigInt('8495653923123431417604973247489272438418190587263600148770280649306958101930'),\n      BigInt('4082367875863433681332203403145435568316851327593401208105741076214120093531'),\n    ]),\n    a: Fp2.ZERO,\n    b: Fp2B,\n    hEff: BigInt('21888242871839275222246405745257275088844257914179612981679871602714643921549'),\n    htfDefaults: { ...htfDefaults },\n    wrapPrivateKey: true,\n    allowInfinityPoint: true,\n    isTorsionFree: (c, P) => P.multiplyUnsafe(SIX_X_SQUARED).equals(G2psi(c, P)), // [p]P = [6X^2]P\n    mapToCurve: notImplemented,\n    fromBytes: notImplemented,\n    toBytes: notImplemented,\n    Signature: {\n      fromHex: notImplemented,\n      toRawBytes: notImplemented,\n      toHex: notImplemented,\n    },\n  },\n  params: {\n    ateLoopSize: BN_X * _6n + _2n,\n    r: Fr.ORDER,\n    xNegative: false,\n    twistType: 'divisive',\n  },\n  htfDefaults,\n  hash: sha256,\n  randomBytes,\n\n  postPrecompute: (Rx, Ry, Rz, Qx, Qy, pointAdd) => {\n    const q = psi(Qx, Qy);\n    ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1]));\n    const q2 = psi(q[0], q[1]);\n    pointAdd(Rx, Ry, Rz, q2[0], Fp2.neg(q2[1]));\n  },\n});\n\n/**\n * bn254 weierstrass curve with ECDSA.\n * This is very rare and probably not used anywhere.\n * Instead, you should use G1 / G2, defined above.\n */\nexport const bn254_weierstrass = weierstrass({\n  a: BigInt(0),\n  b: BigInt(3),\n  Fp,\n  n: BigInt('21888242871839275222246405745257275088548364400416034343698204186575808495617'),\n  Gx: BigInt(1),\n  Gy: BigInt(2),\n  h: BigInt(1),\n  ...getHash(sha256),\n});\n", "import { bn254 as _bn254 } from \"@noble/curves/bn254\"\nimport { psiFrobenius } from \"@noble/curves/abstract/tower\"\nimport { BasicWCurve } from \"@noble/curves/abstract/weierstrass\"\nimport { validateField, FpIsSquare } from \"@noble/curves/abstract/modular\"\nimport { keccak_256 } from \"@noble/hashes/sha3\"\nimport { randomBytes } from \"@noble/hashes/utils\"\nimport { bls, CurveFn } from \"@noble/curves/abstract/bls\"\n\n// seed used by the cofactor clearing on G2\nconst SEED = BigInt(\"4965661367192848881\")\n\n// Create a SVDW mapping with constant parameters for G1\nconst G1_SVDW = mapToCurveSVDW(_bn254.G1.CURVE, {\n    // Z = 1 satisfies the conditions described in https://datatracker.ietf.org/doc/html/rfc9380#svdw\n    z: _bn254.G1.CURVE.Fp.ONE,\n    // c1, c2, c3, c4 are the SvdW constants described in https://datatracker.ietf.org/doc/html/rfc9380#straightline-svdw\n    // c1 = g(Z)\n    c1: _bn254.G1.CURVE.Fp.create(\n        BigInt(4)\n    ),\n    // c2 = -Z / 2\n    c2: _bn254.G1.CURVE.Fp.create(\n        BigInt(\n            '10944121435919637611123202872628637544348155578648911831344518947322613104291'\n        )\n    ),\n    // c3 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))     # sgn0(c3) MUST equal 0\n    c3: _bn254.G1.CURVE.Fp.create(\n        BigInt(\n            '8815841940592487685674414971303048083897117035520822607866'\n        )\n    ),\n    // c4 = -4 * g(Z) / (3 * Z^2 + 4 * A)\n    c4: _bn254.G1.CURVE.Fp.create(\n        BigInt(\n            '7296080957279758407415468581752425029565437052432607887563012631548408736189'\n        )\n    ),\n});\n\n// Create a SVDW mapping with constant parameters for G2\nconst G2_SVDW = mapToCurveSVDW(_bn254.G2.CURVE, {\n    // Z = 1 satisfies the conditions described in https://datatracker.ietf.org/doc/html/rfc9380#svdw\n    z: _bn254.G2.CURVE.Fp.ONE,\n    // c1, c2, c3, c4 are the SvdW constants described in https://datatracker.ietf.org/doc/html/rfc9380#straightline-svdw\n    // c1 = g(Z)\n    c1: _bn254.G2.CURVE.Fp.create(\n        { c0: BigInt('19485874751759354771024239261021720505790618469301721065564631296452457478374'), c1: BigInt('266929791119991161246907387137283842545076965332900288569378510910307636690') }\n    ),\n    // c2 = -Z / 2\n    c2: _bn254.G2.CURVE.Fp.create(\n        { c0: BigInt('10944121435919637611123202872628637544348155578648911831344518947322613104291'), c1: BigInt(0) }\n    ),\n    // c3 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))     # sgn0(c3) MUST equal 0\n    c3: _bn254.G2.CURVE.Fp.create(\n        { c0: BigInt('18992192239972082890849143911285057164064277369389217330423471574879236301292'), c1: BigInt('21819008332247140148575583693947636719449476128975323941588917397607662637108') }\n    ),\n    // c4 = -4 * g(Z) / (3 * Z^2 + 4 * A)\n    c4: _bn254.G2.CURVE.Fp.create(\n        { c0: BigInt('10499238450719652342378357227399831140106360636427411350395554762472100376473'), c1: BigInt('6940174569119770192419592065569379906172001098655407502803841283667998553941') }\n    ),\n});\n\n// Hash to field parameters for G1\nexport const htfDefaultsG1 = Object.freeze({\n    // DST: a domain separation tag defined in section 2.2.5\n    DST: 'BN254G1_XMD:KECCAK-256_SVDW_RO_',\n    p: _bn254.fields.Fp.ORDER,\n    m: 1,\n    k: 128,\n    expand: 'xmd',\n    hash: keccak_256,\n} as const);\n\n// Hash to field parameters for G2\nexport const htfDefaultsG2 = Object.freeze({\n    // DST: a domain separation tag defined in section 2.2.5\n    DST: 'BN254G2_XMD:KECCAK-256_SVDW_RO_',\n    p: _bn254.fields.Fp.ORDER,\n    m: 2,\n    k: 128,\n    expand: 'xmd',\n    hash: keccak_256,\n} as const);\n\n// \u03A8 endomorphism for BN254\nconst { G2psi, G2psi2, psi } = psiFrobenius(_bn254.fields.Fp, _bn254.fields.Fp2, _bn254.fields.Fp2.create({ c0: BigInt(9), c1: BigInt(1) })) // 9 + i is the nonresidue\n\n/**\n * bn254 (a.k.a. alt_bn128) pairing-friendly curve.\n * Contains G1 / G2 operations and pairings.\n */\nexport const bn254: CurveFn = bls({\n    // Fields\n    fields: { Fp: _bn254.fields.Fp, Fp2: _bn254.fields.Fp2, Fp6: _bn254.fields.Fp6, Fp12: _bn254.fields.Fp12, Fr: _bn254.fields.Fr },\n    G1: {\n        ..._bn254.G1.CURVE,\n        htfDefaults: htfDefaultsG1,\n        ShortSignature: _bn254.ShortSignature,\n        mapToCurve: (scalars: bigint[]) => {\n            return G1_SVDW(_bn254.G1.CURVE.Fp.create(scalars[0]));\n        },\n    },\n    G2: {\n        ..._bn254.G2.CURVE,\n        htfDefaults: htfDefaultsG2,\n        mapToCurve: (scalars: bigint[]) => {\n            const u = _bn254.G2.CURVE.Fp.create(\n                { c0: scalars[0], c1: scalars[1] }\n            )\n            return G2_SVDW(u);\n        },\n        // Maps the point into the prime-order subgroup G2.\n        /// Based on http://cacr.uwaterloo.ca/techreports/2011/cacr2011-26.pdf, 6.1\n        /// Adapted from: https://github.com/nikkolasg/bn254_hash2curve/blob/5995e36149b0119fa2a97dfcc00758729f00cc93/src/hash2g2.rs#L291\n        clearCofactor: (c, P) => {\n            const x = SEED;\n            const p0 = P.multiplyUnsafe(x);           // [x]P\n            const p1 = G2psi(c, p0.add(p0.double())); // \u03A8([3x]P)\n            const p2 = G2psi2(c, p0);                 // \u03A8\u00B2([x]P)\n            const p3 = G2psi(c, G2psi2(c, P))         // \u03A8\u00B3(P)\n            // [x]P + \u03A8([3x]P) + \u03A8\u00B2([x]P) + \u03A8\u00B3(P)\n            return p0.add(p1.add(p2.add(p3)))\n        },\n        Signature: _bn254.Signature,\n    },\n    params: {\n        ..._bn254.params,\n        xNegative: false,\n        twistType: 'divisive',\n    },\n    htfDefaults: htfDefaultsG1,\n    hash: htfDefaultsG1.hash,\n    randomBytes: randomBytes,\n\n    postPrecompute: (Rx, Ry, Rz, Qx, Qy, pointAdd) => {\n        const q = psi(Qx, Qy);\n        ({ Rx, Ry, Rz } = pointAdd(Rx, Ry, Rz, q[0], q[1]));\n        const q2 = psi(q[0], q[1]);\n        pointAdd(Rx, Ry, Rz, q2[0], _bn254.fields.Fp2.neg(q2[1]));\n    },\n});\n\nexport function mapToG1(scalars: bigint[]) {\n    return G1_SVDW(_bn254.G1.CURVE.Fp.create(scalars[0]));\n}\n\nexport function mapToG2(scalars: bigint[]) {\n    const u = _bn254.G2.CURVE.Fp.create(\n        { c0: scalars[0], c1: scalars[1] }\n    )\n    return G2_SVDW(u);\n}\n\nfunction mapToCurveSVDW<T>(CG: BasicWCurve<T>, opts: { c1: T, c2: T, c3: T, c4: T, z: T }): (u: T) => { x: T, y: T } {\n    const Fp = CG.Fp;\n    const is_square = FpIsSquare(Fp);\n\n    validateField(Fp)\n    if (!Fp.isValid(CG.a) || !Fp.isValid(CG.b) || !Fp.isValid(opts.z))\n        throw new Error('mapToCurveSimpleSVDW: invalid opts')\n    if (!Fp.isOdd) throw new Error('Fp.isOdd is not implemented!')\n\n    // https://www.ietf.org/archive/id/draft-irtf-cfrg-hash-to-curve-10.html#section-f.1\n    //    1. c1 = g(Z)\n    const c1 = Fp.create(opts.c1)\n    //    2. c2 = -Z / 2\n    const c2 = Fp.create(opts.c2)\n    //    3. c3 = sqrt(-g(Z) * (3 * Z^2 + 4 * A))     # sgn0(c3) MUST equal 0\n    const c3 = Fp.create(opts.c3)\n    //    4. c4 = -4 * g(Z) / (3 * Z^2 + 4 * A)\n    const c4 = Fp.create(opts.c4)\n\n    return (_u: T): { x: T, y: T } => {\n        const u = Fp.create(_u)\n        //    1.  tv1 = u^2\n        let tv1 = Fp.sqr(u)\n        //    2.  tv1 = tv1 * c1\n        tv1 = Fp.mul(tv1, c1)\n        //    3.  tv2 = 1 + tv1\n        const tv2 = Fp.add(Fp.ONE, tv1)\n        //    4.  tv1 = 1 - tv1\n        tv1 = Fp.sub(Fp.ONE, tv1)\n        //    5.  tv3 = tv1 * tv2\n        let tv3 = Fp.mul(tv1, tv2)\n        //    6.  tv3 = inv0(tv3)\n        tv3 = Fp.inv(tv3)\n        //    7.  tv4 = u * tv1\n        let tv4 = Fp.mul(u, tv1)\n        //    8.  tv4 = tv4 * tv3\n        tv4 = Fp.mul(tv4, tv3)\n        //    9.  tv4 = tv4 * c3\n        tv4 = Fp.mul(tv4, c3)\n        //    10.  x1 = c2 - tv4\n        const x1 = Fp.sub(c2, tv4)\n        //    11. gx1 = x1^2\n        let gx1 = Fp.sqr(x1)\n        //    12. gx1 = gx1 + A\n        gx1 = Fp.add(gx1, CG.a); // a is 0 for used curves.\n\n        //    13. gx1 = gx1 * x1\n        gx1 = Fp.mul(gx1, x1)\n        //    14. gx1 = gx1 + B\n        gx1 = Fp.add(gx1, CG.b)\n\n        //    15.  e1 = is_square(gx1)\n        const e1 = is_square(gx1)\n        //    16.  x2 = c2 + tv4\n        const x2 = Fp.add(c2, tv4)\n        //    17. gx2 = x2^2\n        let gx2 = Fp.sqr(x2)\n        //    18. gx2 = gx2 + A\n        gx2 = Fp.add(gx2, CG.a); // a is 0 for used curves.\n\n        //    19. gx2 = gx2 * x2\n        gx2 = Fp.mul(gx2, x2)\n        //    20. gx2 = gx2 + B\n        gx2 = Fp.add(gx2, CG.b)\n        //    21.  e2 = is_square(gx2) AND NOT e1\n        const e2 = is_square(gx2) && !e1\n        //    22.  x3 = tv2^2\n        let x3 = Fp.sqr(tv2)\n        //    23.  x3 = x3 * tv3\n        x3 = Fp.mul(x3, tv3)\n        //    24.  x3 = x3^2\n        x3 = Fp.sqr(x3)\n        //    25.  x3 = x3 * c4\n        x3 = Fp.mul(x3, c4)\n        //    26.  x3 = x3 + Z\n        x3 = Fp.add(x3, opts.z)\n\n        //    27.  x = CMOV(x3, x1, e1)      # x = x1 if gx1 is square, else x = x3\n        let x = Fp.cmov(x3, x1, e1)\n        //    28.  x = CMOV(x, x2, e2)       # x = x2 if gx2 is square and gx1 is not\n        x = Fp.cmov(x, x2, e2)\n        //    29.  gx = x^2\n        let gx = Fp.sqr(x)\n        //    30.  gx = gx + A\n        gx = Fp.add(gx, CG.a)\n\n        //    31.  gx = gx * x\n        gx = Fp.mul(gx, x)\n        //    32.  gx = gx + B\n        gx = Fp.add(gx, CG.b)\n        //    33.   y = sqrt(gx)\n        let y = Fp.sqrt(gx)\n        //    34.  e3 = sgn0(u) == sgn0(y)\n        const e3 = Fp.isOdd?.(u) == Fp.isOdd?.(y)\n        //    35. y = CMOV(-y, y, e3)       # Select correct sign of y\n        y = Fp.cmov(Fp.neg(y), y, e3)\n\n        return { x, y }\n    }\n}\n", "// returns a new array with the xor of a ^ b\nexport function xor(a: Uint8Array, b: Uint8Array): Uint8Array {\n    if (a.length != b.length) {\n        throw new Error(\"Error: incompatible sizes\")\n    }\n\n    const ret = new Uint8Array(a.length)\n\n    for (let i = 0; i < a.length; i++) {\n        ret[i] = a[i] ^ b[i]\n    }\n\n    return ret\n}\n\nexport function toBigEndianBytes(n: bigint) {\n    const buffer = new ArrayBuffer(32)\n    const dataView = new DataView(buffer)\n    dataView.setBigUint64(0, (n >> 192n) & 0xffff_ffff_ffff_ffffn)\n    dataView.setBigUint64(8, (n >> 128n) & 0xffff_ffff_ffff_ffffn)\n    dataView.setBigUint64(16, (n >> 64n) & 0xffff_ffff_ffff_ffffn)\n    dataView.setBigUint64(24, n & 0xffff_ffff_ffff_ffffn)\n\n    return new Uint8Array(buffer)\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Base, BaseInterface } from \"../../Base.t.sol/Base\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setUp\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class Base__factory {\n  static readonly abi = _abi;\n  static createInterface(): BaseInterface {\n    return new Interface(_abi) as BaseInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Base {\n    return new Contract(address, _abi, runner) as unknown as Base;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  BlocklockTest,\n  BlocklockTestInterface,\n} from \"../../Blocklock.t.sol/BlocklockTest\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setUp\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_CallsToBlocklockSender_ShouldRevert_IfBlocklockSenderAddressIsIncorrect\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Deployment_Configurations\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Update_SignatureScheme\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x600c8054600160ff199182168117909255601f8054909116909117905560c0604052601360809081527f424e3235342d424c532d424c4f434b4c4f434b0000000000000000000000000060a0526023906100599082610234565b50604080516080810182527f2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca8183019081527f2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf6060830152815281518083019092527f193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c82527f11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba6020838101919091528101919091528051602490610120908290600261014a565b506020820151610136906002808401919061014a565b505050348015610144575f5ffd5b506102ee565b8260028101928215610178579160200282015b8281111561017857825182559160200191906001019061015d565b50610184929150610188565b5090565b5b80821115610184575f8155600101610189565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101c457607f821691505b6020821081036101e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022f57805f5260205f20601f840160051c8101602085101561020d5750805b601f840160051c820191505b8181101561022c575f8155600101610219565b50505b505050565b81516001600160401b0381111561024d5761024d61019c565b6102618161025b84546101b0565b846101e8565b6020601f821160018114610293575f831561027c5750848201515b5f19600385901b1c1916600184901b17845561022c565b5f84815260208120601f198516915b828110156102c257878501518255602094850194600190920191016102a2565b50848210156102df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b62010f9e80620002fd5f395ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c806385226c811161009e578063ba414fa61161006e578063ba414fa6146101e3578063e20c9f71146101fb578063edf06c3814610203578063fa7626d41461020b578063fcf6760e14610218575f5ffd5b806385226c81146101a9578063916a17c6146101be578063b0464fdc146101d3578063b5508aa9146101db575f5ffd5b80633f7286f4116100d95780633f7286f41461014f578063658e17261461015757806366d9a9a01461015f57806375b238fc14610174575f5ffd5b80630a9254e41461010a5780631ed7831c146101145780632ade3880146101325780633e5e3c2314610147575b5f5ffd5b610112610220565b005b61011c6102bf565b60405161012991906126f2565b60405180910390f35b61013a61031f565b604051610129919061276b565b61011c61045b565b61011c6104b9565b610112610517565b6101676108bc565b6040516101299190612878565b61019b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b604051908152602001610129565b6101b1610a20565b60405161012991906128f6565b6101c6610aeb565b604051610129919061294d565b6101c6610bcc565b6101b1610cad565b6101eb610d78565b6040519015158152602001610129565b61011c610e12565b610112610e70565b601f546101eb9060ff1681565b610112611505565b6102286116f2565b6102306116fa565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054821693831693909317909255602a8054831693821693909317909255602980548216938316939093179092556028805490921692169190911790556207a12062061a80620f4240622dc6c0620c3500600a6113886102b687878787878787611e08565b50505050505050565b6060601680548060200260200160405190810160405280929190818152602001828054801561031557602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116102f7575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015610452575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b8282101561043b578382905f5260205f200180546103b0906129c4565b80601f01602080910402602001604051908101604052809291908181526020018280546103dc906129c4565b80156104275780601f106103fe57610100808354040283529160200191610427565b820191905f5260205f20905b81548152906001019060200180831161040a57829003601f168201915b505050505081526020019060010190610393565b505050508152505081526020019060010190610342565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561031557602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116102f7575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561031557602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116102f7575050505050905090565b602a54601f54604051632474521560e21b81527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b0390811660248301526105b99216906391d1485490604401602060405180830381865afa158015610590573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b491906129fc565b611f0a565b6028546001600160a01b03166105d1576105d1612a22565b6029546001600160a01b03166105e9576105e9612a22565b602a546001600160a01b031661060157610601612a22565b602b546001600160a01b031661061957610619612a22565b602c546001600160a01b031661063157610631612a22565b602a546040805163e6b3ca7160e01b815290515f926001600160a01b03169163e6b3ca719160048083019260209291908290030181865afa158015610678573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061069c9190612a4a565b6001600160a01b0316036106b2576106b2612a22565b60295460408051632fbe3a9160e11b81529051610726926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa1580156106fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107219190810190612a79565b611f60565b60295460408051632fbe3a9160e11b8152905161079a926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa15801561076e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107959190810190612a79565b611fa6565b602b546040805163235296f760e01b815290516107e2926001600160a01b03169163235296f7916004808301925f9291908290030181865afa15801561076e573d5f5f3e3d5ffd5b602b5460408051631c613e8960e11b8152905161082a926001600160a01b0316916338c27d12916004808301925f9291908290030181865afa15801561076e573d5f5f3e3d5ffd5b602b54604080516339a87a2b60e11b81529051610872926001600160a01b031691637350f456916004808301925f9291908290030181865afa15801561076e573d5f5f3e3d5ffd5b602b54604080516367b276af60e01b815290516108ba926001600160a01b0316916367b276af916004808301925f9291908290030181865afa15801561076e573d5f5f3e3d5ffd5b565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015610452578382905f5260205f2090600202016040518060400160405290815f8201805461090f906129c4565b80601f016020809104026020016040519081016040528092919081815260200182805461093b906129c4565b80156109865780601f1061095d57610100808354040283529160200191610986565b820191905f5260205f20905b81548152906001019060200180831161096957829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015610a0857602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116109ca5790505b505050505081525050815260200190600101906108df565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015610452578382905f5260205f20018054610a60906129c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c906129c4565b8015610ad75780601f10610aae57610100808354040283529160200191610ad7565b820191905f5260205f20905b815481529060010190602001808311610aba57829003601f168201915b505050505081526020019060010190610a43565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015610452575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015610bb457602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610b765790505b50505050508152505081526020019060010190610b0e565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015610452575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015610c9557602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610c575790505b50505050508152505081526020019060010190610bef565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015610452578382905f5260205f20018054610ced906129c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d19906129c4565b8015610d645780601f10610d3b57610100808354040283529160200191610d64565b820191905f5260205f20905b815481529060010190602001808311610d4757829003601f168201915b505050505081526020019060010190610cd0565b6008545f9060ff1615610d8f575060085460ff1690565b604051630667f9d760e41b81525f51602062010e3c5f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa158015610de7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0b9190612b2c565b1415905090565b6060601580548060200260200160405190810160405280929190818152602001828054801561031557602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116102f7575050505050905090565b60408051808201909152600581526410938c8d4d60da1b60208201525f610e9682611fe9565b9050610ed05f6001600160a01b0316826001600160a01b0316141560405180606001604052806025815260200162010ebf60259139611ffa565b610eff816001600160a01b03163b5f1460405180606001604052806023815260200162010e5c60239139611ffa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610f53575f5ffd5b505af1158015610f65573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f51602062010e3c5f395f51905f52925063f28dceb39150610f9890600401612b43565b5f604051808303815f87803b158015610faf575f5ffd5b505af1158015610fc1573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da9150610ff79085908590600401612b8d565b5f604051808303815f87803b15801561100e575f5ffd5b505af1158015611020573d5f5f3e3d5ffd5b50506029546040805160608101909152602d8082526001600160a01b03909216945061105b935084151592509062010f3c6020830139611ffa565b61108a5f826001600160a01b03163b1160405180606001604052806023815260200162010ee460239139611ffa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156110de575f5ffd5b505af11580156110f0573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506111269085908590600401612b8d565b5f604051808303815f87803b15801561113d575f5ffd5b505af115801561114f573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b81526111d993506001600160a01b03858116935090911690635bb09cf89061118b908790600401612bb6565b602060405180830381865afa1580156111a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ca9190612a4a565b6001600160a01b031614611f0a565b50602b54601f5460405163ca669fa760e01b81526001600160a01b03610100909204821660048201529116905f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611235575f5ffd5b505af1158015611247573d5f5f3e3d5ffd5b505060405163f28dceb360e01b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201525f51602062010e3c5f395f51905f52925063f28dceb391506084015f604051808303815f87803b1580156112c6575f5ffd5b505af11580156112d8573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da915061130e9085908590600401612b8d565b5f604051808303815f87803b158015611325575f5ffd5b505af1158015611337573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b81526113dc93506001600160a01b03858116935090911690635bb09cf890611373908790600401612bb6565b602060405180830381865afa15801561138e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113b29190612a4a565b6001600160a01b0316141560405180606001604052806035815260200162010f0760359139611ffa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611430575f5ffd5b505af1158015611442573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f51602062010e3c5f395f51905f52925063f28dceb3915061147590600401612b43565b5f604051808303815f87803b15801561148c575f5ffd5b505af115801561149e573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506114d49085905f90600401612b8d565b5f604051808303815f87803b1580156114eb575f5ffd5b505af11580156114fd573d5f5f3e3d5ffd5b505050505050565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611555575f5ffd5b505af1158015611567573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b031660405161158d9061264c565b6001600160a01b039091168152602001604051809103905ff0801580156115b6573d5f5f3e3d5ffd5b50602c80546001600160a01b0319166001600160a01b0392831617905560205460405163ca669fa760e01b8152911660048201525f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561161a575f5ffd5b505af115801561162c573d5f5f3e3d5ffd5b505050505f51602062010e3c5f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611676575f5ffd5b505af1158015611688573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba75f6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156116d9575f5ffd5b505af11580156116eb573d5f5f3e3d5ffd5b5050505050565b6108ba612055565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f9081908190819081905f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611758575f5ffd5b505af115801561176a573d5f5f3e3d5ffd5b505050505f60405161177b9061265a565b604051809103905ff080158015611794573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156117ec575f5ffd5b505af11580156117fe573d5f5f3e3d5ffd5b505050505f8160405161181090612668565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015611847573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095508591505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156118a2575f5ffd5b505af11580156118b4573d5f5f3e3d5ffd5b505050505f6040516118c590612676565b604051809103905ff0801580156118de573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611936575f5ffd5b505af1158015611948573d5f5f3e3d5ffd5b505050505f8160405161195a90612668565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015611991573d5f5f3e3d5ffd5b5060205460405163ca669fa760e01b81526001600160a01b0390911660048201529096508691505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156119e8575f5ffd5b505af11580156119fa573d5f5f3e3d5ffd5b5050505080604051611a0b9061264c565b6001600160a01b039091168152602001604051809103905ff080158015611a34573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611a8c575f5ffd5b505af1158015611a9e573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b0316604051611ac490612684565b6001600160a01b039091168152602001604051809103905ff080158015611aed573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529099505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611b45575f5ffd5b505af1158015611b57573d5f5f3e3d5ffd5b50506040516024925060269150611b6d90612692565b611b78929190612bf0565b604051809103905ff080158015611b91573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529098505f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611be9575f5ffd5b505af1158015611bfb573d5f5f3e3d5ffd5b5050604051635d5c33ed60e11b81526001600160a01b038c16925063bab867da9150611c2e906023908c90600401612c0b565b5f604051808303815f87803b158015611c45575f5ffd5b505af1158015611c57573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062010e3c5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015611caf575f5ffd5b505af1158015611cc1573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528c811660248301528a16925063485cc95591506044015f604051808303815f87803b158015611d16575f5ffd5b505af1158015611d28573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062010e3c5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015611d80575f5ffd5b505af1158015611d92573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528a811660248301528916925063485cc95591506044015f604051808303815f87803b158015611de7575f5ffd5b505af1158015611df9573d5f5f3e3d5ffd5b50505050505050509091929394565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062010e3c5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611e5c575f5ffd5b505af1158015611e6e573d5f5f3e3d5ffd5b5050602b5460405163117e90d560e21b815263ffffffff808c166004830152808b166024830152808a1660448301528089166064830152808816608483015260ff871660a4830152851660c48201526001600160a01b0390911692506345fa4354915060e4015f604051808303815f87803b158015611eeb575f5ffd5b505af1158015611efd573d5f5f3e3d5ffd5b5050505050505050505050565b604051630c9fd58160e01b815281151560048201525f51602062010e3c5f395f51905f5290630c9fd581906024015f6040518083038186803b158015611f4e575f5ffd5b505afa1580156116eb573d5f5f3e3d5ffd5b611fa381604051602401611f749190612bb6565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b17905261228e565b50565b611fa381604051602401611fba9190612bb6565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b17905261228e565b5f611ff382612297565b5092915050565b60405163a34edc0360e01b81525f51602062010e3c5f395f51905f529063a34edc039061202d9085908590600401612ca0565b5f6040518083038186803b158015612043575f5ffd5b505afa1580156114fd573d5f5f3e3d5ffd5b61207b6040518060400160405280600581526020016430b236b4b760d91b815250611fe9565b601f60016101000a8154816001600160a01b0302191690836001600160a01b031602179055506120c760405180604001604052806005815260200164616c69636560d81b815250611fe9565b60205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550612110604051806040016040528060038152602001623137b160e91b815250611fe9565b602180546001600160a01b0319166001600160a01b03928316179055601f5460405163c88a5e6d60e01b81526101009091049091166004820152678ac7230489e8000060248201525f51602062010e3c5f395f51905f529063c88a5e6d906044015f604051808303815f87803b158015612188575f5ffd5b505af115801561219a573d5f5f3e3d5ffd5b505060205460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f51602062010e3c5f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b1580156121fc575f5ffd5b505af115801561220e573d5f5f3e3d5ffd5b505060215460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f51602062010e3c5f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b158015612270575f5ffd5b505af1158015612282573d5f5f3e3d5ffd5b505050506108ba612399565b611fa38161262d565b5f5f826040516020016122aa9190612cc2565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291505f51602062010e3c5f395f51905f529063ffa1864990602401602060405180830381865afa15801561230d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123319190612a4a565b6040516318caf8e360e31b81529092505f51602062010e3c5f395f51905f529063c657c718906123679085908790600401612cd8565b5f604051808303815f87803b15801561237e575f5ffd5b505af1158015612390573d5f5f3e3d5ffd5b50505050915091565b6040805160e0810182527f220c292a8d5482f0afc107989582021eb9d86fe3e75dbb7bcb749f30861c9f8f60a082019081527f14a3cdb4fec6d3ebb0ad2b5a943fdef4a458e6ac8bc6ff321afa898b4158ff5b60c08301526060808301918252835180850185527f269cdb66a4daaf03aeda655342cc38e431a83a914fcdf4daf73e4f6fde7729ac81527f2610ed6679d7a57287cf5d21045063efda28037e5b555d9103f60b83c5cee1ca6020828101919091526080850191909152918352835180850185528281527f54b744fa0514a42e8e8bf8a23a0c619e059fbc072d1774f5c4d389a218dce7f18184015282840152835180850185528281527fc0884030be948e1477202760f15f302c56fd9e22e39cb0afb21e9a2140d363d48184015283850152835190810184528381526729a2241af62c0000935f9262010e7f9083013990505f6040518060400160405280602081526020017f948918d64af8e911c98d62c282764bed2488a47797a31e711956a6e87846efa781525090506040518060a00160405280858152602001601260405160200161255891906040808252600190820152602160f91b6060820152602081019190915260800190565b60408051601f19818403018152918152908252602082810187905282820186905260609092018490525f8781526022835220825181559082015160018201906125a19082612d44565b506040820151805180516002808501929183916125bf9183916126a0565b5060208201516125d590600280840191906126a0565b505050602082015160048201906125ec9082612d44565b50604082015160058201906126019082612d44565b505050606082015160088201906126189082612d44565b50608082015160098201906102b69082612d44565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b611ae48062002e0083390190565b6132f380620048e483390190565b61042b8062007bd783390190565b615c73806200800283390190565b6109e0806200dc7583390190565b6127e7806200e65583390190565b82600281019282156126ce579160200282015b828111156126ce5782518255916020019190600101906126b3565b506126da9291506126de565b5090565b5b808211156126da575f81556001016126df565b602080825282518282018190525f918401906040840190835b818110156127325783516001600160a01b031683526020938401939092019160010161270b565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561282857603f19878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b8181101561280e57605f198a85030183526127f884865161273d565b60209586019590945092909201916001016127dc565b509197505050602094850194929092019150600101612791565b50929695505050505050565b5f8151808452602084019350602083015f5b8281101561286e5781516001600160e01b031916865260209586019590910190600101612846565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561282857603f1987860301845281518051604087526128c4604088018261273d565b90506020820151915086810360208801526128df8183612834565b96505050602093840193919091019060010161289e565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561282857603f1987860301845261293885835161273d565b9450602093840193919091019060010161291c565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561282857868503603f19018452815180516001600160a01b031686526020908101516040918701829052906129ae90870182612834565b9550506020938401939190910190600101612973565b600181811c908216806129d857607f821691505b6020821081036129f657634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215612a0c575f5ffd5b81518015158114612a1b575f5ffd5b9392505050565b634e487b7160e01b5f52600160045260245ffd5b6001600160a01b0381168114611fa3575f5ffd5b5f60208284031215612a5a575f5ffd5b8151612a1b81612a36565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215612a89575f5ffd5b815167ffffffffffffffff811115612a9f575f5ffd5b8201601f81018413612aaf575f5ffd5b805167ffffffffffffffff811115612ac957612ac9612a65565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715612af857612af8612a65565b604052818152828201602001861015612b0f575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f60208284031215612b3c575f5ffd5b5051919050565b6020808252602a908201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604082015269656d654164647265737360b01b606082015260800190565b604081525f612b9f604083018561273d565b905060018060a01b03831660208301529392505050565b602081525f612a1b602083018461273d565b805f5b6002811015612bea578154845260209093019260019182019101612bcb565b50505050565b60808101612bfe8285612bc8565b612a1b6040830184612bc8565b604081525f5f8454612c1c816129c4565b806040860152600182165f8114612c3a5760018114612c5657612c87565b60ff1983166060870152606082151560051b8701019350612c87565b875f5260205f205f5b83811015612c7e57815488820160600152600190910190602001612c5f565b87016060019450505b5050506001600160a01b03841660208401529050612a1b565b8215158152604060208201525f612cba604083018461273d565b949350505050565b5f82518060208501845e5f920191825250919050565b6001600160a01b03831681526040602082018190525f90612cba9083018461273d565b601f821115612d3f57805f5260205f20601f840160051c81016020851015612d205750805b601f840160051c820191505b818110156116eb575f8155600101612d2c565b505050565b815167ffffffffffffffff811115612d5e57612d5e612a65565b612d7281612d6c84546129c4565b84612cfb565b6020601f821160018114612da4575f8315612d8d5750848201515b5f19600385901b1c1916600184901b1784556116eb565b5f84815260208120601f198516915b82811015612dd35787850151825560209485019460019092019101612db3565b5084821015612df057868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe608060405234801561000f575f5ffd5b50604051611ae4380380611ae483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b611924806101c05f395ff3fe60806040526004361061011d575f3560e01c8063809800431161009d57806397a9c2851161006257806397a9c28514610321578063b8ca8dd814610336578063b96dbba714610355578063e64a66ea1461035d578063f2fde38b14610365575f5ffd5b8063809800431461027157806386e560be146102905780638da5cb5b146102b357806393b9740a146102e357806393d81d5814610302575f5ffd5b80634d3de353116100e35780634d3de353146101d85780634fa26d40146101eb57806359608fda1461020a5780635d9418021461023e57806379ba50971461025d575f5ffd5b80626d6cae1461016057806309c1ba2e1461018857806312065fe01461019d5780631d2b2afd146101af57806336bfffed146101b9575f5ffd5b3661015c57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b34801561016b575f5ffd5b5061017560045481565b6040519081526020015b60405180910390f35b348015610193575f5ffd5b5061017560035481565b3480156101a8575f5ffd5b5047610175565b6101b7610384565b005b3480156101c4575f5ffd5b506101b76101d33660046111c2565b61042b565b6101756101e6366004611278565b610528565b3480156101f6575f5ffd5b506101b761020536600461131b565b61058b565b348015610215575f5ffd5b50610229610224366004611278565b610615565b6040805192835260208301919091520161017f565b348015610249575f5ffd5b506101b761025836600461133b565b610680565b348015610268575f5ffd5b506101b76106e5565b34801561027c575f5ffd5b506101b761028b366004611383565b61078e565b34801561029b575f5ffd5b506102a46107c8565b60405161017f9392919061140d565b3480156102be575f5ffd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b3480156102ee575f5ffd5b506002546102cb906001600160a01b031681565b34801561030d575f5ffd5b506101b761031c36600461131b565b610954565b34801561032c575f5ffd5b50610175600b5481565b348015610341575f5ffd5b506101b7610350366004611448565b610968565b6101b7610a3b565b6101b7610a82565b348015610370575f5ffd5b506101b761037f36600461131b565b610b01565b6003545f036103c85760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b158015610412575f5ffd5b505af1158015610424573d5f5f3e3d5ffd5b5050505050565b610433610b12565b6003545f036104745760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b60448201526064016103bf565b5f5b81811015610523576002546003546001600160a01b039091169063bec4c08c908585858181106104a8576104a8611472565b90506020020160208101906104bd919061131b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b158015610501575f5ffd5b505af1158015610513573d5f5f3e3d5ffd5b5050600190920191506104769050565b505050565b5f5f61056b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b66915050565b6004819055905082600561057f8282611613565b50909695505050505050565b610593610b12565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b60648201526084016103bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f61065a8888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610be4915050565b600482905590925090508460056106718282611613565b50919890975095505050505050565b6002546001600160a01b031633146106da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c60448201526064016103bf565b610523838383610cda565b6001546001600160a01b031633146107385760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064016103bf565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610796610b12565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107e557505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161081b5750505050508152505090806004018054610847906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610873906114dd565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050908060050180546108d3906114dd565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff906114dd565b801561094a5780601f106109215761010080835404028352916020019161094a565b820191905f5260205f20905b81548152906001019060200180831161092d57829003601f168201915b5050505050905083565b61095c610b12565b61096581610ee2565b50565b610970610b12565b814710156109c05760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e7472616374000060448201526064016103bf565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109f3573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a2f91815260200190565b60405180910390a25050565b610a43610b12565b610a4b610f7a565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103fb565b5f3411610aca5760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b60448201526064016103bf565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610b09610b12565b610965816110a4565b5f546001600160a01b03163314610b645760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016103bf565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b9c91889188908890600401611754565b6020604051808303815f875af1158015610bb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc9190611795565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611795565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c8f908990899089906004016117ac565b60206040518083038185885af1158015610cab573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610cd09190611795565b9150935093915050565b8260045414610d215760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103932b8bab2b9ba1034b21760691b60448201526064016103bf565b6040805160e08101909152610ec79060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610d4a57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610d80575050505050815250508152602001600482018054610db0906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc906114dd565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b50505050508152602001600582018054610e40906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906114dd565b8015610eb75780601f10610e8e57610100808354040283529160200191610eb7565b820191905f5260205f20905b815481529060010190602001808311610e9a57829003601f168201915b505050505081525050838361114c565b806020019051810190610eda9190611795565b600b55505050565b6003545f03610f2c5760405162461bcd60e51b8152602060048201526016602482015275537562736372697074696f6e4964206973207a65726f60501b60448201526064016103bf565b600254600354604051622b825560e61b815260048101919091526001600160a01b03838116602483015290911690630ae09540906044015f604051808303815f87803b158015610412575f5ffd5b5f6003545f14610fcc5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f00000000000060448201526064016103bf565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561101d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110419190611795565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b15801561108b575f5ffd5b505af115801561109d573d5f5f3e3d5ffd5b5050505090565b336001600160a01b038216036110fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103bf565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c490611181908790879087906004016117dc565b5f60405180830381865afa15801561119b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdc919081019061183b565b5f5f602083850312156111d3575f5ffd5b823567ffffffffffffffff8111156111e9575f5ffd5b8301601f810185136111f9575f5ffd5b803567ffffffffffffffff81111561120f575f5ffd5b8560208260051b8401011115611223575f5ffd5b6020919091019590945092505050565b5f5f83601f840112611243575f5ffd5b50813567ffffffffffffffff81111561125a575f5ffd5b602083019150836020828501011115611271575f5ffd5b9250929050565b5f5f5f5f6060858703121561128b575f5ffd5b843563ffffffff8116811461129e575f5ffd5b9350602085013567ffffffffffffffff8111156112b9575f5ffd5b6112c587828801611233565b909450925050604085013567ffffffffffffffff8111156112e4575f5ffd5b850160c081880312156112f5575f5ffd5b939692955090935050565b80356001600160a01b0381168114611316575f5ffd5b919050565b5f6020828403121561132b575f5ffd5b61133482611300565b9392505050565b5f5f5f6040848603121561134d575f5ffd5b83359250602084013567ffffffffffffffff81111561136a575f5ffd5b61137686828701611233565b9497909650939450505050565b5f60208284031215611393575f5ffd5b5035919050565b805f5b60028110156113bc57815184526020938401939091019060010161139d565b50505050565b6113cd82825161139a565b6020810151610523604084018261139a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b61141781856113c2565b60c060808201525f61142c60c08301856113df565b82810360a084015261143e81856113df565b9695505050505050565b5f5f60408385031215611459575f5ffd5b8235915061146960208401611300565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e198436030181126114af575f5ffd5b83018035915067ffffffffffffffff8211156114c9575f5ffd5b602001915036819003821315611271575f5ffd5b600181811c908216806114f157607f821691505b60208210810361150f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561052357805f5260205f20601f840160051c8101602085101561153a5750805b601f840160051c820191505b81811015610424575f8155600101611546565b67ffffffffffffffff83111561157157611571611486565b6115858361157f83546114dd565b83611515565b5f601f8411600181146115b6575f851561159f5750838201355b5f19600387901b1c1916600186901b178355610424565b5f83815260208120601f198716915b828110156115e557868501358255602094850194600190920191016115c5565b5086821015611601575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b600281101561163357813583820155602090910190600101611616565b5050604082015f5b600281101561165b5781358382016002015560209091019060010161163b565b505061166a608083018361149a565b611678818360048601611559565b505061168760a083018361149a565b6113bc818360058601611559565b5f5f8335601e198436030181126116aa575f5ffd5b830160208101925035905067ffffffffffffffff8111156116c9575f5ffd5b803603821315611271575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61171c6080830183611695565b60c0608086015261173160c0860182846116d7565b91505061174160a0840184611695565b85830360a087015261143e8382846116d7565b63ffffffff85168152836020820152608060408201525f61177860808301856113df565b828103606084015261178a81856116ff565b979650505050505050565b5f602082840312156117a5575f5ffd5b5051919050565b63ffffffff84168152606060208201525f6117ca60608301856113df565b828103604084015261143e81856116ff565b604081526117ee6040820185516113c2565b5f602085015160c0808401526118086101008401826113df565b90506040860151603f198483030160e085015261182582826113df565b915050828103602084015261143e8185876116d7565b5f6020828403121561184b575f5ffd5b815167ffffffffffffffff811115611861575f5ffd5b8201601f81018413611871575f5ffd5b805167ffffffffffffffff81111561188b5761188b611486565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156118ba576118ba611486565b6040528181528282016020018610156118d1575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220c3b44a1906b2ea323c1b7dd1b7b303f120420afb0c338072e3b98639f89bc6d564736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131f26101015f395f8181611efb01528181611f24015261207101526131f25ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063c58343ef11610092578063e63b5d5811610062578063e63b5d581461054e578063e6b3ca7114610562578063f7cef80014610581578063f87f0e61146105a0575f5ffd5b8063c58343ef146104c5578063ca15c873146104f1578063cd802c9114610510578063d547741f1461052f575f5ffd5b8063a3246ad3116100cd578063a3246ad31461041e578063ac9650d81461044a578063ad3cb1cc14610476578063b0947289146104a6575f5ffd5b80639010d07c146103b557806391d14854146103ec578063a217fddf1461040b575f5ffd5b80634b96e16611610168578063571d708711610138578063571d70871461033b5780636f421ea91461034f57806375b238fc1461036357806381d12c5814610383575f5ffd5b80634b96e166146102bd5780634f1ef286146102de57806352d1902d146102f157806354fd4d5014610305575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461024b57806336568abe1461026a57806347c0318614610289578063485cc9551461029e575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461271f565b6105bf565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461275a565b6105e9565b005b348015610229575f5ffd5b5061023d610238366004612775565b610648565b6040519081526020016101f4565b348015610256575f5ffd5b5061021c61026536600461278c565b610668565b348015610275575f5ffd5b5061021c61028436600461278c565b61068a565b348015610294575f5ffd5b5061023d60015481565b3480156102a9575f5ffd5b5061021c6102b83660046127ba565b6106c2565b3480156102c8575f5ffd5b506102d1610882565b6040516101f491906127e6565b61021c6102ec366004612892565b610893565b3480156102fc575f5ffd5b5061023d6108b2565b348015610310575f5ffd5b50604080518082019091526005815264302e302e3160d81b60208201525b6040516101f4919061294c565b348015610346575f5ffd5b506102d16108cd565b34801561035a575f5ffd5b506102d16108d9565b34801561036e575f5ffd5b5061023d5f51602061319d5f395f51905f5281565b34801561038e575f5ffd5b506103a261039d366004612775565b6108e5565b6040516101f4979695949392919061295e565b3480156103c0575f5ffd5b506103d46103cf3660046129e3565b610bcc565b6040516001600160a01b0390911681526020016101f4565b3480156103f7575f5ffd5b506101e861040636600461278c565b610bf9565b348015610416575f5ffd5b5061023d5f81565b348015610429575f5ffd5b5061043d610438366004612775565b610c2f565b6040516101f49190612a03565b348015610455575f5ffd5b50610469610464366004612a43565b610c5f565b6040516101f49190612ab2565b348015610481575f5ffd5b5061032e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104b1575f5ffd5b506101e86104c0366004612775565b610d44565b3480156104d0575f5ffd5b506104e46104df366004612775565b610d50565b6040516101f49190612b15565b3480156104fc575f5ffd5b5061023d61050b366004612775565b6110ad565b34801561051b575f5ffd5b506101e861052a366004612775565b6110d1565b34801561053a575f5ffd5b5061021c61054936600461278c565b6110ee565b348015610559575f5ffd5b5061023d61110a565b34801561056d575f5ffd5b506003546103d4906001600160a01b031681565b34801561058c575f5ffd5b5061021c61059b366004612c1c565b611115565b3480156105ab575f5ffd5b5061023d6105ba366004612c93565b611883565b5f6001600160e01b03198216635a05180f60e01b14806105e357506105e382611df6565b92915050565b6105ff5f51602061319d5f395f51905f52611e2a565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f9081525f51602061317d5f395f51905f52602052604090206001015490565b61067182610648565b61067a81611e2a565b6106848383611e37565b50505050565b6001600160a01b03811633146106b35760405163334bd91960e11b815260040160405180910390fd5b6106bd8282611e79565b505050565b5f6106cb611eb2565b805490915060ff600160401b82041615906001600160401b03165f811580156106f15750825b90505f826001600160401b0316600114801561070c5750303b155b90508115801561071a575080155b156107385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845460ff60401b1916600160401b1785555b61076a611eda565b610772611eda565b6107895f51602061319d5f395f51905f5288611e37565b6107ce5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6107d85f88611e37565b6108185760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064016107c5565b600380546001600160a01b0319166001600160a01b038816179055831561087957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b606061088e6006611ee4565b905090565b61089b611ef0565b6108a482611f94565b6108ae8282611faa565b5050565b5f6108bb612066565b505f51602061315d5f395f51905f5290565b606061088e6004611ee4565b606061088e6008611ee4565b60026020525f90815260409020805481906108ff90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90612d2f565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b50505050509080600101805461098b90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b790612d2f565b8015610a025780601f106109d957610100808354040283529160200191610a02565b820191905f5260205f20905b8154815290600101906020018083116109e557829003601f168201915b505050505090806002018054610a1790612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390612d2f565b8015610a8e5780601f10610a6557610100808354040283529160200191610a8e565b820191905f5260205f20905b815481529060010190602001808311610a7157829003601f168201915b505050505090806003018054610aa390612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90612d2f565b8015610b1a5780601f10610af157610100808354040283529160200191610b1a565b820191905f5260205f20905b815481529060010190602001808311610afd57829003601f168201915b505050505090806004018054610b2f90612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612d2f565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b505050600590930154919250506001600160a01b0381169060ff600160a01b9091041687565b5f8281525f51602061313d5f395f51905f52602081905260408220610bf190846120af565b949350505050565b5f9182525f51602061317d5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f51602061313d5f395f51905f526020819052604090912060609190610c5890611ee4565b9392505050565b604080515f815260208101909152606090826001600160401b03811115610c8857610c88612828565b604051908082528060200260200182016040528015610cbb57816020015b6060815260200190600190039081610ca65790505b5091505f5b83811015610d3c57610d1730868684818110610cde57610cde612d8e565b9050602002810190610cf09190612da2565b85604051602001610d0393929190612dfb565b6040516020818303038152906040526120ba565b838281518110610d2957610d29612d8e565b6020908102919091010152600101610cc0565b505092915050565b5f6105e360088361212c565b610d996040518060e0016040528060608152602001606081526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f151581525090565b5f8281526002602052604090819020815160e08101909252805482908290610dc090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dec90612d2f565b8015610e375780601f10610e0e57610100808354040283529160200191610e37565b820191905f5260205f20905b815481529060010190602001808311610e1a57829003601f168201915b50505050508152602001600182018054610e5090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c90612d2f565b8015610ec75780601f10610e9e57610100808354040283529160200191610ec7565b820191905f5260205f20905b815481529060010190602001808311610eaa57829003601f168201915b50505050508152602001600282018054610ee090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c90612d2f565b8015610f575780601f10610f2e57610100808354040283529160200191610f57565b820191905f5260205f20905b815481529060010190602001808311610f3a57829003601f168201915b50505050508152602001600382018054610f7090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c90612d2f565b8015610fe75780601f10610fbe57610100808354040283529160200191610fe7565b820191905f5260205f20905b815481529060010190602001808311610fca57829003601f168201915b5050505050815260200160048201805461100090612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461102c90612d2f565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b5050509183525050600591909101546001600160a01b0381166020830152600160a01b900460ff16151560409091015292915050565b5f8181525f51602061313d5f395f51905f52602081905260408220610c5890612143565b5f6110dd60068361212c565b806105e357506105e360088361212c565b6110f782610648565b61110081611e2a565b6106848383611e79565b5f61088e6006612143565b61111d61214c565b611126856110d1565b6111865760405162461bcd60e51b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201526084016107c5565b5f85815260026020526040808220815160e081019092528054829082906111ac90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612d2f565b80156112235780601f106111fa57610100808354040283529160200191611223565b820191905f5260205f20905b81548152906001019060200180831161120657829003601f168201915b5050505050815260200160018201805461123c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461126890612d2f565b80156112b35780601f1061128a576101008083540402835291602001916112b3565b820191905f5260205f20905b81548152906001019060200180831161129657829003601f168201915b505050505081526020016002820180546112cc90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f890612d2f565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050815260200160038201805461135c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461138890612d2f565b80156113d35780601f106113aa576101008083540402835291602001916113d3565b820191905f5260205f20905b8154815290600101906020018083116113b657829003601f168201915b505050505081526020016004820180546113ec90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461141890612d2f565b80156114635780601f1061143a57610100808354040283529160200191611463565b820191905f5260205f20905b81548152906001019060200180831161144657829003601f168201915b5050509183525050600591909101546001600160a01b038082166020840152600160a01b90910460ff16151560409283015282516003549251630b76139f60e31b8152939450925f9290911690635bb09cf8906114c490859060040161294c565b602060405180830381865afa1580156114df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115039190612e1a565b90506001600160a01b03811661154c5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420736368656d6560901b60448201526064016107c5565b604080840151905163eae1e15b60e01b815282915f916001600160a01b0384169163eae1e15b91611580919060040161294c565b5f60405180830381865afa15801561159a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115c19190810190612e35565b9050816001600160a01b031663f6e548e9828989866001600160a01b031663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611610573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116379190810190612e35565b6040518563ffffffff1660e01b81526004016116569493929190612ed1565b602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190612f15565b6116e15760405162461bcd60e51b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107c5565b5f8560a001516001600160a01b0316635d3be00160e01b8c8c8c8c8c604051602401611711959493929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161174f9190612f6c565b5f604051808303815f865af19150503d805f8114611788576040519150601f19603f3d011682016040523d82523d5f602084013e61178d565b606091505b50505f8c8152600260205260409020600501805460ff60a01b1916600160a01b17905590506117bd60068c612174565b5080611807576117ce60088c61217f565b506040518b81527f3fed05c5d3a79e0e2f23ffd594267f0e29799ad1b4b6a7756138d5247baa4a7b9060200160405180910390a161186d565b6118108b610d44565b156118225761182060088c612174565b505b61182d60048c61217f565b508a7f0a1f5b3782d8f604353407c980dbfe6b55499c5b92cb8c39f089c73f348407e68b8b8b8b6040516118649493929190612f77565b60405180910390a25b50505050505061187c60015f55565b5050505050565b5f6001805f8282546118959190612f9d565b9091555050600354604051632fc9fa3360e01b81526001600160a01b0390911690632fc9fa33906118cc908a908a90600401612fb0565b602060405180830381865afa1580156118e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190b9190612f15565b6119575760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107c5565b61199e600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b6119f85760405162461bcd60e51b815260206004820152602560248201527f43697068657274657874206661696c6564206c656e67746820626f756e647320604482015264636865636b60d81b60648201526084016107c5565b611a3f600161100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b611a975760405162461bcd60e51b8152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e647320636044820152636865636b60e01b60648201526084016107c5565b611ad583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061221a92505050565b15611b2e5760405162461bcd60e51b815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a65604482015262726f7360e81b60648201526084016107c5565b600354604051630b76139f60e31b81525f916001600160a01b031690635bb09cf890611b60908b908b90600401612fb0565b602060405180830381865afa158015611b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9f9190612e1a565b90506001600160a01b038116611bf75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e617475726520736368656d65000000000000000060448201526064016107c5565b6040518060e0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8a01819004810282018101909252888152918101919089908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093855250506040805160208181018352848252808601919091528151808201835284815282860152336060860152608090940183905260015483526002909352502081518190611cf79082613007565b5060208201516001820190611d0c9082613007565b5060408201516002820190611d219082613007565b5060608201516003820190611d369082613007565b5060808201516004820190611d4b9082613007565b5060a08201516005909101805460c0909301511515600160a01b026001600160a81b03199093166001600160a01b0390921691909117919091179055600154611d969060069061217f565b50336001600160a01b03166001547f133b1acfa49920f88bc8c23faeb2ba43b75b3d6c453290a824f3c85e7733df138a8a88888c8c42604051611ddf97969594939291906130c1565b60405180910390a350506001549695505050505050565b5f6001600160e01b03198216637965db0b60e01b14806105e357506301ffc9a760e01b6001600160e01b03198316146105e3565b611e348133612265565b50565b5f5f51602061313d5f395f51905f5281611e51858561229e565b90508015610bf1575f858152602083905260409020611e70908561233f565b50949350505050565b5f5f51602061313d5f395f51905f5281611e938585612353565b90508015610bf1575f858152602083905260409020611e7090856123cc565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105e3565b611ee26123e0565b565b60605f610c5883612405565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f6a5f51602061315d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611ee25760405163703e46dd60e11b815260040160405180910390fd5b611e345f51602061319d5f395f51905f52611e2a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612004575060408051601f3d908101601f1916820190925261200191810190613111565b60015b61202c57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107c5565b5f51602061315d5f395f51905f52811461205c57604051632a87526960e21b8152600481018290526024016107c5565b6106bd838361245e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ee25760405163703e46dd60e11b815260040160405180910390fd5b5f610c5883836124b3565b60605f5f846001600160a01b0316846040516120d69190612f6c565b5f60405180830381855af49150503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b50915091506121238583836124d9565b95945050505050565b5f8181526001830160205260408120541515610c58565b5f6105e3825490565b60025f540361216e57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f610c588383612535565b5f610c58838361260f565b5f818311156122015760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107c5565b8351838110801590612123575091909111159392505050565b5f805b825181101561225c5782818151811061223857612238612d8e565b01602001516001600160f81b0319161561225457505f92915050565b60010161221d565b50600192915050565b61226f8282610bf9565b6108ae5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107c5565b5f5f51602061317d5f395f51905f526122b78484610bf9565b612336575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556122ec3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105e3565b5f9150506105e3565b5f610c58836001600160a01b03841661260f565b5f5f51602061317d5f395f51905f5261236c8484610bf9565b15612336575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105e3565b5f610c58836001600160a01b038416612535565b6123e861265b565b611ee257604051631afcd79f60e31b815260040160405180910390fd5b6060815f0180548060200260200160405190810160405280929190818152602001828054801561245257602002820191905f5260205f20905b81548152602001906001019080831161243e575b50505050509050919050565b61246782612674565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156124ab576106bd82826120ba565b6108ae6126d7565b5f825f0182815481106124c8576124c8612d8e565b905f5260205f200154905092915050565b6060826124ee576124e9826126f6565b610c58565b815115801561250557506001600160a01b0384163b155b1561252e57604051639996b31560e01b81526001600160a01b03851660048201526024016107c5565b5080610c58565b5f8181526001830160205260408120548015612336575f612557600183612d7b565b85549091505f9061256a90600190612d7b565b90508082146125c9575f865f01828154811061258857612588612d8e565b905f5260205f200154905080875f0184815481106125a8576125a8612d8e565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125da576125da613128565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105e3565b5f81815260018301602052604081205461265457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105e3565b505f6105e3565b5f612664611eb2565b54600160401b900460ff16919050565b806001600160a01b03163b5f036126a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107c5565b5f51602061315d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b3415611ee25760405163b398979f60e01b815260040160405180910390fd5b8051156127065780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561272f575f5ffd5b81356001600160e01b031981168114610c58575f5ffd5b6001600160a01b0381168114611e34575f5ffd5b5f6020828403121561276a575f5ffd5b8135610c5881612746565b5f60208284031215612785575f5ffd5b5035919050565b5f5f6040838503121561279d575f5ffd5b8235915060208301356127af81612746565b809150509250929050565b5f5f604083850312156127cb575f5ffd5b82356127d681612746565b915060208301356127af81612746565b602080825282518282018190525f918401906040840190835b8181101561281d5783518352602093840193909201916001016127ff565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561286457612864612828565b604052919050565b5f6001600160401b0382111561288457612884612828565b50601f01601f191660200190565b5f5f604083850312156128a3575f5ffd5b82356128ae81612746565b915060208301356001600160401b038111156128c8575f5ffd5b8301601f810185136128d8575f5ffd5b80356128eb6128e68261286c565b61283c565b8181528660208385010111156128ff575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c58602083018461291e565b60e081525f61297060e083018a61291e565b8281036020840152612982818a61291e565b90508281036040840152612996818961291e565b905082810360608401526129aa818861291e565b905082810360808401526129be818761291e565b6001600160a01b039590951660a0840152505090151560c09091015295945050505050565b5f5f604083850312156129f4575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561281d5783516001600160a01b0316835260209384019390920191600101612a1c565b5f5f60208385031215612a54575f5ffd5b82356001600160401b03811115612a69575f5ffd5b8301601f81018513612a79575f5ffd5b80356001600160401b03811115612a8e575f5ffd5b8560208260051b8401011115612aa2575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612b0957603f19878603018452612af485835161291e565b94506020938401939190910190600101612ad8565b50929695505050505050565b602081525f825160e06020840152612b3161010084018261291e565b90506020840151601f19848303016040850152612b4e828261291e565b9150506040840151601f19848303016060850152612b6c828261291e565b9150506060840151601f19848303016080850152612b8a828261291e565b9150506080840151601f198483030160a0850152612ba8828261291e565b91505060018060a01b0360a08501511660c084015260c0840151612bd060e085018215159052565b509392505050565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b602083019150836020828501011115612c15575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c30575f5ffd5b8535945060208601356001600160401b03811115612c4c575f5ffd5b612c5888828901612bd8565b90955093505060408601356001600160401b03811115612c76575f5ffd5b612c8288828901612bd8565b969995985093965092949392505050565b5f5f5f5f5f5f60608789031215612ca8575f5ffd5b86356001600160401b03811115612cbd575f5ffd5b612cc989828a01612bd8565b90975095505060208701356001600160401b03811115612ce7575f5ffd5b612cf389828a01612bd8565b90955093505060408701356001600160401b03811115612d11575f5ffd5b612d1d89828a01612bd8565b979a9699509497509295939492505050565b600181811c90821680612d4357607f821691505b602082108103612d6157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e3576105e3612d67565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612db7575f5ffd5b8301803591506001600160401b03821115612dd0575f5ffd5b602001915036819003821315612c15575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f8152612e108185612de4565b9695505050505050565b5f60208284031215612e2a575f5ffd5b8151610c5881612746565b5f60208284031215612e45575f5ffd5b81516001600160401b03811115612e5a575f5ffd5b8201601f81018413612e6a575f5ffd5b8051612e786128e68261286c565b818152856020838501011115612e8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612ee3606083018761291e565b8281036020840152612ef6818688612ea9565b90508281036040840152612f0a818561291e565b979650505050505050565b5f60208284031215612f25575f5ffd5b81518015158114610c58575f5ffd5b858152606060208201525f612f4d606083018688612ea9565b8281036040840152612f60818587612ea9565b98975050505050505050565b5f610c588284612de4565b604081525f612f8a604083018688612ea9565b8281036020840152612f0a818587612ea9565b808201808211156105e3576105e3612d67565b602081525f610bf1602083018486612ea9565b601f8211156106bd57805f5260205f20601f840160051c81016020851015612fe85750805b601f840160051c820191505b8181101561187c575f8155600101612ff4565b81516001600160401b0381111561302057613020612828565b6130348161302e8454612d2f565b84612fc3565b6020601f821160018114613066575f831561304f5750848201515b5f19600385901b1c1916600184901b17845561187c565b5f84815260208120601f198516915b828110156130955787850151825560209485019460019092019101613075565b50848210156130b257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608081525f6130d460808301898b612ea9565b82810360208401526130e781888a612ea9565b905082810360408401526130fc818688612ea9565b91505082606083015298975050505050505050565b5f60208284031215613121575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b9bf840b608447c267623fc79124450c15b070c6cf6f643c84d5b29677f23f5964736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c003360a060405230608052348015610013575f5ffd5b5060015f55610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b766100fd5f395f818161377c015281816137a501526138f20152615b765ff3fe608060405260043610610371575f3560e01c80637350f456116101c8578063aa433aff116100fd578063c58343ef1161009d578063cd802c911161006d578063cd802c9114610b18578063d547741f14610b37578063dac83d2914610b56578063dc311dd314610b75575f5ffd5b8063c58343ef14610a8f578063c9bc18c414610abb578063ca15c87314610ada578063cb63179714610af9575f5ffd5b8063b2a7cac5116100d8578063b2a7cac5146109d9578063bd18636b146109f8578063bec4c08c14610a17578063c3f909d414610a36575f5ffd5b8063aa433aff1461095e578063ad3cb1cc1461097d578063aefb212f146109ad575f5ffd5b8063995cb36e11610168578063a21a23e411610143578063a21a23e4146108ec578063a3246ad314610900578063a3907d711461092c578063a608a1e114610940575f5ffd5b8063995cb36e146108835780639d40a6fd146108a2578063a217fddf146108d9575f5ffd5b80638a1f165a116101a35780638a1f165a146107f45780639010d07c1461083257806391d148541461085157806395b55cfc14610870575f5ffd5b80637350f456146107ad57806375b238fc146107c15780637909dc7b146107e1575f5ffd5b806338c27d12116102a957806352d1902d116102495780635d3be001116102195780635d3be0011461071f5780635f7bda9f1461073e57806364d51a2a1461077257806367b276af14610799575f5ffd5b806352d1902d146106a657806354236fb3146106ba57806354fd4d50146106d957806357a8070a14610706575f5ffd5b806345fa43541161028457806345fa435414610636578063485cc955146106555780634b160935146106745780634f1ef28614610693575f5ffd5b806338c27d12146105dd5780633bc32c75146105f157806341af6c8714610617575f5ffd5b8063235296f7116103145780632f2ff15d116102ef5780632f2ff15d1461056e5780633255c4561461058d5780633408e470146105ac57806336568abe146105be575f5ffd5b8063235296f71461051a578063248a9ca31461053b5780632f2770db1461055a575f5ffd5b80630ae095401161034f5780630ae095401461046c578063133c40c71461048d57806318e3dd27146104c45780631e6ba15b146104fb575f5ffd5b806301ffc9a714610375578063062b1d90146103a9578063088070f5146103ca575b5f5ffd5b348015610380575f5ffd5b5061039461038f366004614a28565b610ba4565b60405190151581526020015b60405180910390f35b6103bc6103b7366004614b42565b610bce565b6040519081526020016103a0565b3480156103d5575f5ffd5b50600a546104259063ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b9091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e0016103a0565b348015610477575f5ffd5b5061048b610486366004614bd2565b610f43565b005b348015610498575f5ffd5b506001546104ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104cf575f5ffd5b506008546104e3906001600160601b031681565b6040516001600160601b0390911681526020016103a0565b348015610506575f5ffd5b5061048b610515366004614c00565b610f94565b348015610525575f5ffd5b5061052e610ff3565b6040516103a09190614c49565b348015610546575f5ffd5b506103bc610555366004614c5b565b61107f565b348015610565575f5ffd5b5061048b61109f565b348015610579575f5ffd5b5061048b610588366004614bd2565b6110ee565b348015610598575f5ffd5b506103bc6105a7366004614c72565b611110565b3480156105b7575f5ffd5b50466103bc565b3480156105c9575f5ffd5b5061048b6105d8366004614bd2565b611128565b3480156105e8575f5ffd5b5061052e61115b565b3480156105fc575f5ffd5b506008546104e390600160601b90046001600160601b031681565b348015610622575f5ffd5b50610394610631366004614c5b565b611168565b348015610641575f5ffd5b5061048b610650366004614c9a565b6111fd565b348015610660575f5ffd5b5061048b61066f366004614d22565b6113d9565b34801561067f575f5ffd5b506103bc61068e366004614d4e565b61166c565b61048b6106a1366004614d67565b61167d565b3480156106b1575f5ffd5b506103bc61169c565b3480156106c5575f5ffd5b5061048b6106d4366004614c00565b6116b8565b3480156106e4575f5ffd5b50604080518082019091526005815264302e302e3160d81b602082015261052e565b348015610711575f5ffd5b50600b546103949060ff1681565b34801561072a575f5ffd5b5061048b610739366004614df0565b61172c565b348015610749575f5ffd5b5061075d610758366004614c5b565b6117ff565b6040516103a099989796959493929190614edb565b34801561077d575f5ffd5b50610786606481565b60405161ffff90911681526020016103a0565b3480156107a4575f5ffd5b5061052e611b91565b3480156107b8575f5ffd5b5061052e611b9e565b3480156107cc575f5ffd5b506103bc5f516020615b215f395f51905f5281565b6103bc6107ef366004614f70565b611bab565b3480156107ff575f5ffd5b5061052e60405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b34801561083d575f5ffd5b506104ac61084c366004614fd0565b611c9b565b34801561085c575f5ffd5b5061039461086b366004614bd2565b611cc8565b61048b61087e366004614c5b565b611cfe565b34801561088e575f5ffd5b506009546104e3906001600160601b031681565b3480156108ad575f5ffd5b506005546108c1906001600160401b031681565b6040516001600160401b0390911681526020016103a0565b3480156108e4575f5ffd5b506103bc5f81565b3480156108f7575f5ffd5b506103bc611e09565b34801561090b575f5ffd5b5061091f61091a366004614c5b565b611fb3565b6040516103a09190615033565b348015610937575f5ffd5b5061048b611fdc565b34801561094b575f5ffd5b50600b5461039490610100900460ff1681565b348015610969575f5ffd5b5061048b610978366004614c5b565b612027565b348015610988575f5ffd5b5061052e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156109b8575f5ffd5b506109cc6109c7366004614fd0565b612067565b6040516103a09190615045565b3480156109e4575f5ffd5b5061048b6109f3366004614c5b565b61215c565b348015610a03575f5ffd5b5061048b610a12366004614c00565b612247565b348015610a22575f5ffd5b5061048b610a31366004614bd2565b6122e0565b348015610a41575f5ffd5b50600a5463ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b90910416610425565b348015610a9a575f5ffd5b50610aae610aa9366004614c5b565b6123d4565b6040516103a09190615087565b348015610ac6575f5ffd5b5061052e610ad536600461515e565b6127ef565b348015610ae5575f5ffd5b506103bc610af4366004614c5b565b612c0d565b348015610b04575f5ffd5b5061048b610b13366004614bd2565b612c31565b348015610b23575f5ffd5b50610394610b32366004614c5b565b612e1d565b348015610b42575f5ffd5b5061048b610b51366004614bd2565b612eb1565b348015610b61575f5ffd5b5061048b610b70366004614bd2565b612ecd565b348015610b80575f5ffd5b50610b94610b8f366004614c5b565b612f6a565b6040516103a094939291906151c5565b5f6001600160e01b03198216635a05180f60e01b1480610bc85750610bc882613029565b92915050565b600b545f9060ff16610c275760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610c765760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b83151580610c8357505f34115b610cf55760405162461bcd60e51b815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610c1e565b610cff858561305d565b5f610d5560405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525084604051602001610d4091906152c4565b60405160208183030381529060405286613287565b90506040518061012001604052808681526020013481526020018763ffffffff168152602001826001600160401b0316815260200185815260200184610d9a90615356565b815260408051602081810183525f808352818501929092528251808201845282815283850152336060948501526001600160401b0380871683526010825291839020855181559085015160018201559184015160028301805494860151909216600160201b026001600160601b031990941663ffffffff909116179290921790915560808201516003820190610e309082615467565b5060a0820151805180516004840191908290610e4f908290600261486b565b506020820151610e65906002808401919061486b565b50505060208201516004820190610e7c9082615467565b5060408201516005820190610e919082615467565b50505060c0820151600a820190610ea89082615467565b5060e0820151600b820190610ebd9082615467565b506101009190910151600c90910180546001600160a01b0319166001600160a01b0390921691909117905560405133906001600160401b038316907fa7cf57609b4abed689b408db0b0c3dc6309786b6c07d5efbbd1d5b150e6d2c0690610f2990889088904290615521565b60405180910390a36001600160401b031695945050505050565b81610f4d816132fb565b610f5561334f565b610f5e83611168565b15610f7c57604051631685ecdd60e31b815260040160405180910390fd5b610f868383613377565b610f8f60015f55565b505050565b610faa5f516020615b215f395f51905f526133e7565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f0dae1d002e96c238ebe140ca1799f77093ae09e0bde40f79bb29ed78d09e652d905f90a250565b600c8054611000906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461102c906153f1565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b5f9081525f516020615b015f395f51905f52602052604090206001015490565b6110b55f516020615b215f395f51905f526133e7565b600b805461ff0019166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b6110f78261107f565b611100816133e7565b61110a83836133f1565b50505050565b5f6111218363ffffffff1683613433565b9392505050565b6001600160a01b03811633146111515760405163334bd91960e11b815260040160405180910390fd5b610f8f828261353f565b600d8054611000906153f1565b5f8181526003602052604081206002018054825b818110156111f3575f60025f85848154811061119a5761119a615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208982529092529020546001600160401b03600160481b9091041611156111eb57506001949350505050565b60010161117c565b505f949350505050565b6112135f516020615b215f395f51905f526133e7565b60ff8216609b116112665760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610c1e565b6040805160e08101825263ffffffff89811680835289821660208401819052898316848601819052898416606086018190528985166080870181905260ff8a1660a0880181905295891660c0909701879052600a805467ffffffffffffffff1916909517600160201b909402939093176fffffffffffffffff00000000000000001916600160401b90920263ffffffff60601b191691909117600160601b9091021764ffffffffff60801b1916600160801b90910260ff60a01b191617600160a01b9092029190911763ffffffff60a81b1916600160a81b909202919091179055600b805460ff19166001179055517f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad5906113c890899089908990899089908990899063ffffffff97881681529587166020870152938616604086015291851660608501528416608084015260ff1660a083015290911660c082015260e00190565b60405180910390a150505050505050565b5f6113e2613578565b805490915060ff600160401b82041615906001600160401b03165f811580156114085750825b90505f826001600160401b031660011480156114235750303b155b905081158015611431575080155b1561144f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147957845460ff60401b1916600160401b1785555b6114816135a0565b6114896135a0565b6114a05f516020615b215f395f51905f52886133f1565b6114e05760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b6114ea5f886133f1565b61152a5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b600180546001600160a01b0319166001600160a01b03881617905561154e466135aa565b60405160200161155e9190615581565b604051602081830303815290604052600c908161157b9190615467565b50611585466135aa565b60405160200161159591906155d8565b604051602081830303815290604052600d90816115b29190615467565b506115bc466135aa565b6040516020016115cc9190615614565b604051602081830303815290604052600e90816115e99190615467565b506115f3466135aa565b6040516020016116039190615650565b604051602081830303815290604052600f90816116209190615467565b50831561166357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016113c8565b50505050505050565b5f610bc88263ffffffff163a613433565b611685613771565b61168e82613815565b611698828261382b565b5050565b5f6116a56138e7565b505f516020615ae15f395f51905f525b90565b6116c061334f565b6116d65f516020615b215f395f51905f526133e7565b600854600160601b90046001600160601b03166116f4811515613930565b600880546bffffffffffffffffffffffff60601b1916905561171f826001600160601b03831661394e565b5061172960015f55565b50565b6001546001600160a01b031633146117865760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792044656372797074696f6e53656e6465722063616e2063616c6c00006044820152606401610c1e565b6117f88585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506139be92505050565b5050505050565b60106020525f908152604090208054600182015460028301546003840180549394929363ffffffff831693600160201b9093046001600160401b0316929190611847906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611873906153f1565b80156118be5780601f10611895576101008083540402835291602001916118be565b820191905f5260205f20905b8154815290600101906020018083116118a157829003601f168201915b50506040805160e081019091529394939250506004830190508160608101828160a084018260028282826020028201915b8154815260200190600101908083116118ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311611925575050505050815250508152602001600482018054611955906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906153f1565b80156119cc5780601f106119a3576101008083540402835291602001916119cc565b820191905f5260205f20905b8154815290600101906020018083116119af57829003601f168201915b505050505081526020016005820180546119e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906153f1565b8015611a5c5780601f10611a3357610100808354040283529160200191611a5c565b820191905f5260205f20905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815250509080600a018054611a75906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa1906153f1565b8015611aec5780601f10611ac357610100808354040283529160200191611aec565b820191905f5260205f20905b815481529060010190602001808311611acf57829003601f168201915b50505050509080600b018054611b01906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d906153f1565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050600c90930154919250506001600160a01b031689565b600f8054611000906153f1565b600e8054611000906153f1565b600b545f9060ff16611bff5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610c1e565b600b54610100900460ff1615611c4e5760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b5f611c91865f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250610bce915050565b9695505050505050565b5f8281525f516020615ac15f395f51905f52602081905260408220611cc09084613b6f565b949350505050565b5f9182525f516020615b015f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d0661334f565b5f81815260036020526040902054611d26906001600160a01b0316613b7a565b5f81815260046020526040812080546001600160601b031691349190611d4c83856156a0565b92506101000a8154816001600160601b0302191690836001600160601b031602179055503460085f8282829054906101000a90046001600160601b0316611d9391906156a0565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611de691906156bf565b604080519283526020830191909152015b60405180910390a25061172960015f55565b5f611e1261334f565b6005546001600160401b031633611e2a6001436156d2565b6040516001600160601b0319606093841b81166020830152914060348201523090921b1660548201526001600160c01b031960c083901b16606882015260700160408051601f1981840301815291905280516020909101209150611e8f8160016156e5565b6005805467ffffffffffffffff19166001600160401b03928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516001600160601b039091166001600160a01b031992831617600160601b91909916029790971790558451918201855233825281810183815282860185815289855260038352959093208251815488166001600160a01b0391821617825593516001820180549098169416939093179095559251805192949192611f6292600285019201906148a9565b50611f7291506006905084613ba1565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250506116b560015f55565b5f8181525f516020615ac15f395f51905f52602081905260409091206060919061112190613bac565b611ff25f516020615b215f395f51905f526133e7565b600b805461ff00191690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b61203d5f516020615b215f395f51905f526133e7565b5f818152600360205260409020546001600160a01b031661205d81613b7a565b6116988282613377565b60605f6120746006613bb8565b905080841061209657604051631390f2a160e01b815260040160405180910390fd5b5f6120a184866156bf565b9050818111806120af575083155b6120b957806120bb565b815b90505f6120c886836156d2565b9050806001600160401b038111156120e2576120e2614a67565b60405190808252806020026020018201604052801561210b578160200160208202803683370190505b5093505f5b818110156121525761212d61212588836156bf565b600690613b6f565b85828151811061213f5761213f615556565b6020908102919091010152600101612110565b5050505092915050565b61216461334f565b5f818152600360205260409020546001600160a01b031661218481613b7a565b5f828152600360205260409020600101546001600160a01b031633146121db575f828152600360205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c1e565b5f828152600360209081526040918290208054336001600160a01b03199182168117835560019092018054909116905582516001600160a01b03851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611df7565b61224f61334f565b6122655f516020615b215f395f51905f526133e7565b6009546001600160601b031661227c811515613930565b600980546001600160601b0319169055600880548291905f906122a99084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061171f82826001600160601b031661394e565b816122ea816132fb565b6122f261334f565b6001600160a01b0382165f9081526002602090815260408083208684529091529020805460ff16156123245750610f86565b5f848152600360205260409020600201805460631901612357576040516305a48e0f60e01b815260040160405180910390fd5b8154600160ff1990911681178355815490810182555f82815260209081902090910180546001600160a01b0319166001600160a01b03871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610f8f60015f55565b6123dc6148fc565b5f82815260106020908152604080832081516101208101835281548152600182015493810193909352600281015463ffffffff811692840192909252600160201b9091046001600160401b03166060830152600381018054608084019190612443906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461246f906153f1565b80156124ba5780601f10612491576101008083540402835291602001916124ba565b820191905f5260205f20905b81548152906001019060200180831161249d57829003601f168201915b50505091835250506040805160e08101909152602090910190600483018160608101828160a084018260028282826020028201915b8154815260200190600101908083116124ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612525575050505050815250508152602001600482018054612555906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612581906153f1565b80156125cc5780601f106125a3576101008083540402835291602001916125cc565b820191905f5260205f20905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016005820180546125e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906153f1565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b5050505050815250508152602001600a82018054612679906153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546126a5906153f1565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600b82018054612709906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612735906153f1565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b5050509183525050600c91909101546001600160a01b031660209091015260608101519091506001600160401b0316610bc85760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c995c5d595cdd1251607a1b6044820152606401610c1e565b60606127fe6080850185615723565b9050610100036128505760405162461bcd60e51b815260206004820152601d60248201527f696e76616c69642064656372797074696f6e206b6579206c656e6774680000006044820152606401610c1e565b61010061286060a0860186615723565b9050106128af5760405162461bcd60e51b815260206004820152601d60248201527f6d657373616765206f6620756e737570706f72746564206c656e6774680000006044820152606401610c1e565b5f6128bd6080860186615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b838110156129515784848281811061290d5761290d615556565b9050013560f81c60f81b82828151811061292957612929615556565b0160200180516001600160f81b0319908116909218909116905f82901a9053506001016128f3565b505f61296060a0870187615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250600f80549596509094612a3e94509092506129aa91506153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906153f1565b8015612a215780601f106129f857610100808354040283529160200191612a21565b820191905f5260205f20905b815481529060010190602001808311612a0457829003601f168201915b505050505084898060a00190612a379190615723565b9050613bc1565b90505f5b612a4f60a0890189615723565b9050811015612aaf57818181518110612a6a57612a6a615556565b602001015160f81c60f81b838281518110612a8757612a87615556565b0160200180516001600160f81b0319908116909218909116905f82901a905350600101612a42565b505f612b64600e8054612ac1906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612aed906153f1565b8015612b385780601f10612b0f57610100808354040283529160200191612b38565b820191905f5260205f20905b815481529060010190602001808311612b1b57829003601f168201915b50505050508585604051602001612b50929190615765565b604051602081830303815290604052613d56565b90505f612b7082613db5565b90505f80612b8c83612b87368e90038e018e615779565b613e47565b909250905060018215158215151414612bfe5760405162461bcd60e51b815260206004820152602e60248201527f696e76616c69642064656372797074696f6e206b6579202f206369706865727460448201526d195e1d081c9959da5cdd195c995960921b6064820152608401610c1e565b50939998505050505050505050565b5f8181525f516020615ac15f395f51905f5260208190526040822061112190613bb8565b81612c3b816132fb565b612c4361334f565b612c4c83611168565b15612c6a57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b0382165f90815260026020908152604080832086845290915290205460ff16612cbf576040516379bfd40160e01b8152600481018490526001600160a01b0383166024820152604401610c1e565b5f838152600360205260408120600201805490915b81811015612dc257846001600160a01b0316838281548110612cf857612cf8615556565b5f918252602090912001546001600160a01b031603612dba5782612d1d6001846156d2565b81548110612d2d57612d2d615556565b905f5260205f20015f9054906101000a90046001600160a01b0316838281548110612d5a57612d5a615556565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082805480612d9557612d95615793565b5f8281526020902081015f1990810180546001600160a01b0319169055019055612dc2565b600101612cd4565b506001600160a01b0384165f818152600260209081526040808320898452825291829020805460ff19169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a791016123c1565b5f5f612e28836123d4565b606001516001600160401b03169050805f03612e4657505f92915050565b60015460405163cd802c9160e01b8152600481018390526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015612e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906157a7565b612eba8261107f565b612ec3816133e7565b61110a838361353f565b81612ed7816132fb565b612edf61334f565b5f83815260036020526040902060018101546001600160a01b03848116911614612f60576001810180546001600160a01b0319166001600160a01b03851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610f8f60015f55565b5f8181526003602052604081205481906001600160a01b03166060612f8e82613b7a565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526001600160601b03851694600160601b90046001600160401b031693879391839183018282801561301357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612ff5575b5050505050905093509350935093509193509193565b5f6001600160e01b03198216637965db0b60e01b1480610bc857506301ffc9a760e01b6001600160e01b0319831614610bc8565b600a5463ffffffff90811690831611156130b95760405162461bcd60e51b815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610c1e565b8015613236575f818152600360205260409020546001600160a01b03166130df81613b7a565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff811615158083526001600160401b036101008304811695840195909552600160481b909104909316918101919091529061318c5760405162461bcd60e51b815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c656044820152603960f91b6064820152608401610c1e565b80602001805161319b906157c6565b6001600160401b031690526040810180516131b5906157c6565b6001600160401b039081169091525f8581526020938452604090819020835181549585015192909401518316600160481b0270ffffffffffffffff00000000000000000019929093166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921791909116179055505050565b5f6132478363ffffffff163a613433565b905080341015610f8f5760405162461bcd60e51b815260206004820152600b60248201526a46656520746f6f206c6f7760a81b6044820152606401610c1e565b60015460405163f87f0e6160e01b81525f916001600160a01b03169063f87f0e61906132bb908790879087906004016157f0565b6020604051808303815f875af11580156132d7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc09190615828565b5f818152600360205260409020546001600160a01b031661331b81613b7a565b336001600160a01b0382161461169857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c1e565b60025f540361337157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f61338183613fb6565b905061339682826001600160601b031661394e565b604080516001600160a01b03841681526001600160601b038316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b6117298133614107565b5f5f516020615ac15f395f51905f528161340b8585614140565b90508015611cc0575f85815260208390526040902061342a90856141e1565b50949350505050565b6040805160e081018252600a5463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b81048316608083015260ff600160a01b82041660a0830152600160a81b900490911660c08201525f9081836134ba57816060015163ffffffff166134bc565b835b90505f6134c8866141f5565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6134f45f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161352f5761352f61583f565b04019a9950505050505050505050565b5f5f516020615ac15f395f51905f5281613559858561420c565b90508015611cc0575f85815260208390526040902061342a9085614285565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bc8565b6135a8614299565b565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f8151811061360a5761360a615556565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061363857613638615556565b60200101906001600160f81b03191690815f1a9053505f5b60208110156137695782600486836020811061366e5761366e615556565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061369457613694615556565b01602001516001600160f81b031916826136af836002615853565b6136ba9060026156bf565b815181106136ca576136ca615556565b60200101906001600160f81b03191690815f1a905350828582602081106136f3576136f3615556565b825191901a600f1690811061370a5761370a615556565b01602001516001600160f81b03191682613725836002615853565b6137309060026156bf565b61373b9060016156bf565b8151811061374b5761374b615556565b60200101906001600160f81b03191690815f1a905350600101613650565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806137f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166137eb5f516020615ae15f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156135a85760405163703e46dd60e11b815260040160405180910390fd5b6117295f516020615b215f395f51905f526133e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613885575060408051601f3d908101601f1916820190925261388291810190615828565b60015b6138ad57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c1e565b5f516020615ae15f395f51905f5281146138dd57604051632a87526960e21b815260048101829052602401610c1e565b610f8f83836142be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135a85760405163703e46dd60e11b815260040160405180910390fd5b8061172957604051631e9acf1760e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613997576040519150601f19603f3d011682016040523d82523d5f602084013e61399c565b606091505b5050905080610f8f5760405163950b247960e01b815260040160405180910390fd5b5f5a5f858152601060205260408120600281015492935091600160201b90046001600160401b03169003613a345760405162461bcd60e51b815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610c1e565b5f635d94180260e01b8686604051602401613a5092919061586a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600c8301546002840154600a549293505f92613ac09285926001600160a01b039091169163ffffffff91821691600160a81b90910481169061431316565b5090508015613b3157600b8301613ad78782615467565b50600a8301613ae68682615467565b50867f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f7846003018560040186600b01604051613b2493929190615923565b60405180910390a2613b65565b6040518781527f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d9060200160405180910390a15b611663878561434a565b5f6111218383614439565b6001600160a01b03811661172957604051630fb532db60e11b815260040160405180910390fd5b5f611121838361445f565b60605f611121836144ab565b5f610bc8825490565b825160609060ff811115613bea57846040516313727cdd60e11b8152600401610c1e9190614c49565b60408051608880825260c082019092525f916020820181803683370190505090505f81865f875f8b88604051602001613c299796959493929190615998565b60405160208183030381529060405290505f818051906020012090505f8160018a87604051602001613c5e9493929190615a02565b60408051601f19818403018152919052805160208201209091505f60ff89166001600160401b03811115613c9457613c94614a67565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f6005613cd2601f60ff8d166156bf565b901c905060015b81811015613d3857858418613cef8260016156bf565b8e8b604051602001613d049493929190615a02565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101613cd9565b505f1901602090810282010191909152955050505050509392505050565b5f5f613d6484846030613bc1565b601881015160308201519192506001600160c01b0391821691165f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478381600160c01b850908979650505050505050565b604080518082019091525f8082526020820152613dd0614957565b6001815260026020820152604081018390525f60608360808460076107d05a03fa905080613e405760405162461bcd60e51b815260206004820152601f60248201527f4731207363616c6172206d756c7469706c69636174696f6e206661696c6564006044820152606401610c1e565b5050919050565b5f5f5f604051806101800160405280865f01518152602001866020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020016001815260200160028152602001855f0151600160028110613f2557613f25615556565b60200201518152602001855f01515f60028110613f4457613f44615556565b602002015181526020018560200151600160028110613f6557613f65615556565b6020020151815260200185602001515f60028110613f8557613f85615556565b602002015190529050613f96614975565b6020816101808460086107d05a03fa9051151593509150505b9250929050565b5f8181526003602090815260408083206004909252822054600290910180546001600160601b03909216929091905b818110156140505760025f84838154811061400257614002615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208882529092529020805470ffffffffffffffffffffffffffffffffff19169055600101613fe5565b505f84815260036020526040812080546001600160a01b031990811682556001820180549091169055906140876002830182614993565b50505f84815260046020526040902080546001600160a01b03191690556140af600685614504565b506001600160601b03831615613e4057600880548491905f906140dc9084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050919050565b6141118282611cc8565b6116985760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c1e565b5f5f516020615b015f395f51905f526141598484611cc8565b6141d8575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561418e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610bc8565b5f915050610bc8565b5f611121836001600160a01b03841661445f565b5f614201603f83615a45565b610bc8906001615a78565b5f5f516020615b015f395f51905f526142258484611cc8565b156141d8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610bc8565b5f611121836001600160a01b03841661450b565b6142a16145e5565b6135a857604051631afcd79f60e31b815260040160405180910390fd5b6142c7826145fe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561430b57610f8f8282614661565b6116986146d3565b5f5f5a83811061434057839003604081048103851015614340575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614354836123d4565b8051909150156144285780515f9081526004602052604090208054600c9061438b90600160601b90046001600160401b03166157c6565b82546001600160401b0391821661010093840a90810290830219909116179092558201516001600160a01b03165f908152600260209081526040808320855184529091529020805490916009916143ea91600160481b90910416615a94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505f614419833a6146f2565b905061110a81835f0151614749565b610f8f8160200151825f0151614749565b5f825f01828154811061444e5761444e615556565b905f5260205f200154905092915050565b5f8181526001830160205260408120546144a457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b6060815f018054806020026020016040519081016040528092919081815260200182805480156144f857602002820191905f5260205f20905b8154815260200190600101908083116144e4575b50505050509050919050565b5f61112183835b5f81815260018301602052604081205480156141d8575f61452d6001836156d2565b85549091505f90614540906001906156d2565b905080821461459f575f865f01828154811061455e5761455e615556565b905f5260205f200154905080875f01848154811061457e5761457e615556565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145b0576145b0615793565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bc8565b5f6145ee613578565b54600160401b900460ff16919050565b806001600160a01b03163b5f0361463357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c1e565b5f516020615ae15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161467d9190615ab5565b5f60405180830381855af49150503d805f81146146b5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ba565b606091505b50915091506146ca8583836147e6565b95945050505050565b34156135a85760405163b398979f60e01b815260040160405180910390fd5b5f5f5a600a54600160201b900463ffffffff1685010390508281025f600a5460649190920160ff600160a01b8404168201020464e8d4a5100063ffffffff600160401b909304929092169190910201949350505050565b80156147af575f81815260046020526040902080546001600160601b0390811690614778908516821015613930565b81546001600160601b039185900382166001600160601b031991821617909255600980548083168601909216919092161790555050565b600880546001600160601b03600160601b80830482168601909116026bffffffffffffffffffffffff60601b199091161790555050565b6060826147fb576147f682614842565b611121565b815115801561481257506001600160a01b0384163b155b1561483b57604051639996b31560e01b81526001600160a01b0385166004820152602401610c1e565b5080611121565b8051156148525780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215614899579160200282015b8281111561489957825182559160200191906001019061487e565b506148a59291506149aa565b5090565b828054828255905f5260205f20908101928215614899579160200282015b8281111561489957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906148c7565b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f6001600160401b031681526020016060815260200161493e6149be565b8152606060208201819052604082018190525f91015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5080545f8255905f5260205f209081019061172991905b5b808211156148a5575f81556001016149ab565b60405180606001604052806149d16149e5565b815260200160608152602001606081525090565b60405180604001604052806149f8614a0a565b8152602001614a05614a0a565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215614a38575f5ffd5b81356001600160e01b031981168114611121575f5ffd5b803563ffffffff81168114614a62575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614a9d57614a9d614a67565b60405290565b5f82601f830112614ab2575f5ffd5b81356001600160401b03811115614acb57614acb614a67565b604051601f8201601f19908116603f011681016001600160401b0381118282101715614af957614af9614a67565b604052818152838201602001851015614b10575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60c08284031215614b3c575f5ffd5b50919050565b5f5f5f5f60808587031215614b55575f5ffd5b614b5e85614a4f565b93506020850135925060408501356001600160401b03811115614b7f575f5ffd5b614b8b87828801614aa3565b92505060608501356001600160401b03811115614ba6575f5ffd5b614bb287828801614b2c565b91505092959194509250565b6001600160a01b0381168114611729575f5ffd5b5f5f60408385031215614be3575f5ffd5b823591506020830135614bf581614bbe565b809150509250929050565b5f60208284031215614c10575f5ffd5b813561112181614bbe565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111216020830184614c1b565b5f60208284031215614c6b575f5ffd5b5035919050565b5f5f60408385031215614c83575f5ffd5b614c8c83614a4f565b946020939093013593505050565b5f5f5f5f5f5f5f60e0888a031215614cb0575f5ffd5b614cb988614a4f565b9650614cc760208901614a4f565b9550614cd560408901614a4f565b9450614ce360608901614a4f565b9350614cf160808901614a4f565b925060a088013560ff81168114614d06575f5ffd5b9150614d1460c08901614a4f565b905092959891949750929550565b5f5f60408385031215614d33575f5ffd5b8235614d3e81614bbe565b91506020830135614bf581614bbe565b5f60208284031215614d5e575f5ffd5b61112182614a4f565b5f5f60408385031215614d78575f5ffd5b8235614d8381614bbe565b915060208301356001600160401b03811115614d9d575f5ffd5b614da985828601614aa3565b9150509250929050565b5f5f83601f840112614dc3575f5ffd5b5081356001600160401b03811115614dd9575f5ffd5b602083019150836020828501011115613faf575f5ffd5b5f5f5f5f5f60608688031215614e04575f5ffd5b8535945060208601356001600160401b03811115614e20575f5ffd5b614e2c88828901614db3565b90955093505060408601356001600160401b03811115614e4a575f5ffd5b614e5688828901614db3565b969995985093965092949392505050565b805f5b600281101561110a578151845260209384019390910190600101614e6a565b5f8151614e97848251614e67565b60200151614ea86040850182614e67565b50602082015160c06080850152614ec260c0850182614c1b565b9050604083015184820360a08601526146ca8282614c1b565b89815288602082015263ffffffff881660408201526001600160401b038716606082015261012060808201525f614f16610120830188614c1b565b82810360a0840152614f288188614e89565b905082810360c0840152614f3c8187614c1b565b905082810360e0840152614f508186614c1b565b91505060018060a01b0383166101008301529a9950505050505050505050565b5f5f5f5f60608587031215614f83575f5ffd5b614f8c85614a4f565b935060208501356001600160401b03811115614fa6575f5ffd5b614fb287828801614db3565b90945092505060408501356001600160401b03811115614ba6575f5ffd5b5f5f60408385031215614fe1575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150295781516001600160a01b0316865260209586019590910190600101615002565b5093949350505050565b602081525f6111216020830184614ff0565b602080825282518282018190525f918401906040840190835b8181101561507c57835183526020938401939092019160010161505e565b509095945050505050565b6020815281516020820152602082015160408201525f60408301516150b4606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015161012060a08401526150e5610140840182614c1b565b905060a0840151601f198483030160c08501526151028282614e89565b91505060c0840151601f198483030160e08501526151208282614c1b565b91505060e0840151601f198483030161010085015261513f8282614c1b565b9150506101008401516137696101208501826001600160a01b03169052565b5f5f5f60408486031215615170575f5ffd5b83356001600160401b03811115615185575f5ffd5b61519186828701614b2c565b93505060208401356001600160401b038111156151ac575f5ffd5b6151b886828701614db3565b9497909650939450505050565b6001600160601b03851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190525f90611c9190830184614ff0565b5f5f8335601e1984360301811261521b575f5ffd5b83016020810192503590506001600160401b03811115615239575f5ffd5b803603821315613faf575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61528c6080830183615206565b60c060808601526152a160c086018284615247565b9150506152b160a0840184615206565b85830360a0870152611c91838284615247565b602081525f611121602083018461526f565b5f82601f8301126152e5575f5ffd5b6152ed614a7b565b8060408401858111156152fe575f5ffd5b845b8181101561507c578035845260209384019301615300565b5f60808284031215615328575f5ffd5b615330614a7b565b905061533c83836152d6565b815261534b83604084016152d6565b602082015292915050565b5f60c08236031215615366575f5ffd5b604051606081016001600160401b038111828210171561538857615388614a67565b6040526153953684615318565b815260808301356001600160401b038111156153af575f5ffd5b6153bb36828601614aa3565b60208301525060a08301356001600160401b038111156153d9575f5ffd5b6153e536828601614aa3565b60408301525092915050565b600181811c9082168061540557607f821691505b602082108103614b3c57634e487b7160e01b5f52602260045260245ffd5b601f821115610f8f57805f5260205f20601f840160051c810160208510156154485750805b601f840160051c820191505b818110156117f8575f8155600101615454565b81516001600160401b0381111561548057615480614a67565b6154948161548e84546153f1565b84615423565b6020601f8211600181146154c6575f83156154af5750848201515b5f19600385901b1c1916600184901b1784556117f8565b5f84815260208120601f198516915b828110156154f557878501518255602094850194600190920191016154d5565b508482101561551257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6155336060830186614c1b565b8281036020840152615545818661526f565b915050826040830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f6155c7602c83018461556a565b605f60f81b81526001019392505050565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261325f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261335f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261345f60f01b60208201525f6155c7602283018461556a565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b038181168382160190811115610bc857610bc861568c565b80820180821115610bc857610bc861568c565b81810381811115610bc857610bc861568c565b6001600160401b038181168382160190811115610bc857610bc861568c565b6001600160601b038281168282160390811115610bc857610bc861568c565b5f5f8335601e19843603018112615738575f5ffd5b8301803591506001600160401b03821115615751575f5ffd5b602001915036819003821315613faf575f5ffd5b5f611cc0615773838661556a565b8461556a565b5f60808284031215615789575f5ffd5b6111218383615318565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156157b7575f5ffd5b81518015158114611121575f5ffd5b5f6001600160401b0382166001600160401b0381036157e7576157e761568c565b60010192915050565b606081525f6158026060830186614c1b565b82810360208401526158148186614c1b565b90508281036040840152611c918185614c1b565b5f60208284031215615838575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b8082028115828204841417610bc857610bc861568c565b828152604060208201525f611cc06040830184614c1b565b5f815461588e816153f1565b8085526001821680156158a857600181146158c4576158f8565b60ff1983166020870152602082151560051b87010193506158f8565b845f5260205f205f5b838110156158ef5781546020828a0101526001820191506020810190506158cd565b87016020019450505b50505092915050565b805f5b600281101561110a578154845260209093019260019182019101615904565b606081525f6159356060830186615882565b82810360208401526159478186615901565b6159576040820160028701615901565b60c0608082015261596e60c0820160048701615882565b81810360a08301526159838160058801615882565b9150508281036040840152611c918185615882565b5f6159ac6159a6838b61556a565b8961556a565b6001600160f81b031960f889811b8216835288811b8216600184015287901b1660028201526159de600382018661556a565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f615a27602183018561556a565b60f89390931b6001600160f81b031916835250506001019392505050565b5f63ffffffff831680615a6657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610bc857610bc861568c565b5f6001600160401b03821680615aac57615aac61568c565b5f190192915050565b5f611121828461556a56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220380d1acfd2c11b36009bf449c1b9c1894bfe02a4fb8d8c35e32e1b449239fa8364736f6c634300081c0033608060405234801561000f575f5ffd5b506040516109e03803806109e083398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6107ff806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80635bb09cf81161006e5780635bb09cf81461013d57806375b238fc1461016857806391d148541461018f578063a217fddf146101a2578063bab867da146101a9578063d547741f146101bc575f5ffd5b806301ffc9a7146100aa578063248a9ca3146100d25780632f2ff15d146101025780632fc9fa331461011757806336568abe1461012a575b5f5ffd5b6100bd6100b836600461065c565b6101cf565b60405190151581526020015b60405180910390f35b6100f46100e036600461068a565b5f9081526020819052604090206001015490565b6040519081526020016100c9565b6101156101103660046106bc565b610205565b005b6100bd61012536600461072b565b61022f565b6101156101383660046106bc565b61026f565b61015061014b36600461072b565b6102a7565b6040516001600160a01b0390911681526020016100c9565b6100f47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100bd61019d3660046106bc565b6102db565b6100f45f81565b6101156101b736600461076a565b610303565b6101156101ca3660046106bc565b6104f6565b5f6001600160e01b03198216637965db0b60e01b14806101ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461021f8161051a565b6102298383610527565b50505050565b5f5f6001600160a01b03166001848460405161024c9291906107ba565b908152604051908190036020019020546001600160a01b03161415905092915050565b6001600160a01b03811633146102985760405163334bd91960e11b815260040160405180910390fd5b6102a282826105b6565b505050565b5f600183836040516102ba9291906107ba565b908152604051908190036020019020546001600160a01b0316905092915050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561051a565b6001600160a01b0381161580159061034d57505f816001600160a01b03163b115b6103b15760405162461bcd60e51b815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604482015269656d654164647265737360b01b60648201526084015b60405180910390fd5b5f6001600160a01b0316600184846040516103cd9291906107ba565b908152604051908190036020019020546001600160a01b03161461043d5760405162461bcd60e51b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201526084016103a8565b80600184846040516104509291906107ba565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b03199093169290921790915560019061049090859085906107ba565b908152604051908190036020018120546001600160a01b0316906104b790859085906107ba565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105108161051a565b61022983836105b6565b610524813361061f565b50565b5f61053283836102db565b6105af575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ff565b505f6101ff565b5f6105c183836102db565b156105af575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ff565b61062982826102db565b6106585760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016103a8565b5050565b5f6020828403121561066c575f5ffd5b81356001600160e01b031981168114610683575f5ffd5b9392505050565b5f6020828403121561069a575f5ffd5b5035919050565b80356001600160a01b03811681146106b7575f5ffd5b919050565b5f5f604083850312156106cd575f5ffd5b823591506106dd602084016106a1565b90509250929050565b5f5f83601f8401126106f6575f5ffd5b50813567ffffffffffffffff81111561070d575f5ffd5b602083019150836020828501011115610724575f5ffd5b9250929050565b5f5f6020838503121561073c575f5ffd5b823567ffffffffffffffff811115610752575f5ffd5b61075e858286016106e6565b90969095509350505050565b5f5f5f6040848603121561077c575f5ffd5b833567ffffffffffffffff811115610792575f5ffd5b61079e868287016106e6565b90945092506107b19050602085016106a1565b90509250925092565b818382375f910190815291905056fea2646970667358221220e5144df0d342a74d5f0128ec7e3d4f61ebce0b76c178b4747512db764315a6cd64736f6c634300081c00335f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b506040516127e73803806127e78339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104b3565b5050506105c5565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661056d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461056d565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61056d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061056d565b01602001516001600160f81b0319168261020b836002610595565b6102169060026105b2565b815181106102265761022661056d565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61056d565b825191901a600f169081106102665761026661056d565b01602001516001600160f81b03191682610281836002610595565b61028c9060026105b2565b6102979060016105b2565b815181106102a7576102a761056d565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f82518060208501602c85015e605f60f81b602c939091019283015250602d01919050565b600181811c9082168061044357607f821691505b60208210810361046157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104ae57805f5260205f20601f840160051c8101602085101561048c5750805b601f840160051c820191505b818110156104ab575f8155600101610498565b50505b505050565b81516001600160401b038111156104cc576104cc61031f565b6104e0816104da845461042f565b84610467565b6020601f821160018114610512575f83156104fb5750848201515b5f19600385901b1c1916600184901b1784556104ab565b5f84815260208120601f198516915b828110156105415787850151825560209485019460019092019101610521565b508482101561055e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105ac576105ac610581565b92915050565b808201808211156105ac576105ac610581565b612215806105d25f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee14610125578063eae1e15b1461012d578063f6e548e914610140575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b610091610163565b60405161009f929190611e88565b60405180910390f35b6100bb6100b6366004611ee8565b6101dc565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102bc565b60405161009f9190611f55565b6100e660405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b6100e6610348565b6100e661013b366004611ee8565b6103c7565b61015361014e366004611f67565b610401565b604051901515815260200161009f565b61016b611de1565b610173611de1565b60408051808201918290525f91600291908390839082845b81548152602001906001019080831161018b575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101ba5750505050509050915091509091565b5f5f5f6102a6600480546101ef90612006565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90612006565b80156102665780601f1061023d57610100808354040283529160200191610266565b820191905f5260205f20905b81548152906001019060200180831161024957829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e192505050565b80516020909101519093509150505b9250929050565b600480546102c990612006565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590612006565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081565b60408051608081018083526060926103c292915f91839190820190839060029082845b81548152602001906001019080831161036b57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103a1575050505050815250506105ad565b905090565b60605f5f6103d585856101dc565b915091506103f6604051806040016040528084815260200183815250610609565b925050505b92915050565b5f5f61044188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f61048287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f6104c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c592505050565b90505f6104d1838386610766565b509b9a5050505050505050505050565b604080518082019091525f80825260208201525f6104ff84846108d9565b90505f61051282825b602002015161098e565b90505f610520836001610508565b905061052a611dff565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105855781604051630251c7e160e31b815260040161057c9190612052565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106a65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161057c565b5060208181015160409283015183518085019094529083529082015290565b6106cd611e1d565b815160801461071e5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161057c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108495761084961203e565b60200201518152602001865f01515f600281106108685761086861203e565b6020020151815260200186602001516001600281106108895761088961203e565b6020020151815260200186602001515f600281106108a9576108a961203e565b6020020151905290506108ba611e42565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108e1611de1565b5f6108ec8484610c6f565b90505f5f5f5f601885016001600160c01b0381511693506030860190506001600160c01b0381511694505f5160206121a05f395f51905f52855f5160206121a05f395f51905f52600160c01b870908604887015160608801516001600160c01b03908116975016945092505f5160206121a05f395f51905f5290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b610996611de1565b5f5160206121a05f395f51905f5282106109c65760405163d53e941560e01b81526004810183905260240161057c565b5f5f5160206121a05f395f51905f5260045f5160206121a05f395f51905f528586090990505f5f5160206121a05f395f51905f528260010890505f5160206121a05f395f51905f52610a25835f5160206121a05f395f51905f52612096565b60010891505f610a445f5160206121a05f395f51905f52838509610dc6565b90505f5f5160206121a05f395f51905f5278016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa5f5160206121a05f395f51905f52845f5160206121a05f395f51905f52888b09090990505f5f5160206121a05f395f51905f52610ab9835f5160206121a05f395f51905f52612096565b5f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f52835f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f5286870990505f5f5160206121a05f395f51905f5286830990505f5f5160206121a05f395f51905f52805f5160206121a05f395f51905f528485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610b6e610b6988610dd0565b610e09565b5f0b600103610bbe57868c52610b8387610dd0565b9050610b8e81610e6e565b60208e0191909152915081610bb95760405163396ec77160e01b81526004810182905260240161057c565b610c21565b610bca610b6987610dd0565b5f0b600103610bdf57858c52610b8386610dd0565b828c52610beb83610dd0565b9050610bf681610e6e565b60208e0191909152915081610c215760405163396ec77160e01b81526004810182905260240161057c565b60208c0151610c2f90610e95565b610c388e610e95565b14610c5f5760208c0151610c59905f5160206121a05f395f51905f52612096565b60208d01525b5050505050505050505050919050565b815160609060ff811115610c9857836040516313727cdd60e11b815260040161057c9190611f55565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610cd897969594939291906120c0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610d0d949392919061212a565b60408051808303601f1901815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610da957858418610d6082600161216d565b8d8b604051602001610d75949392919061212a565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101610d4a565b505f19016020908102820101919091529550505050505092915050565b5f6103fb82610ea1565b5f5f5160206121a05f395f51905f5260035f5160206121a05f395f51905f52845f5160206121a05f395f51905f52868709090892915050565b5f5f610e14836115e6565b9050610e2e60015f5160206121a05f395f51905f52612096565b8103610e3d57505f1992915050565b8015801590610e4d575080600114155b156103fb5760405163396ec77160e01b81526004810184905260240161057c565b5f5f610e79836116ae565b9150825f5160206121a05f395f51905f52838409149050915091565b5f6103fb600283612180565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690525f5160206121c05f395f51905f5260a08401525f5160206121a05f395f51905f5260c0808501919091529293505f92839160055afa90505f519250806116a75760405163c6daf7ab60e01b8152600481018590525f5160206121c05f395f51905f5260248201525f5160206121a05f395f51905f52604482015260640161057c565b5050919050565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e30611de1565b8152602001611e3d611de1565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b6002811015611e82578151845260209384019390910190600101611e63565b50505050565b60808101611e968285611e60565b611ea36040830184611e60565b9392505050565b5f5f83601f840112611eba575f5ffd5b50813567ffffffffffffffff811115611ed1575f5ffd5b6020830191508360208285010111156102b5575f5ffd5b5f5f60208385031215611ef9575f5ffd5b823567ffffffffffffffff811115611f0f575f5ffd5b611f1b85828601611eaa565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ea36020830184611f27565b5f5f5f5f5f5f60608789031215611f7c575f5ffd5b863567ffffffffffffffff811115611f92575f5ffd5b611f9e89828a01611eaa565b909750955050602087013567ffffffffffffffff811115611fbd575f5ffd5b611fc989828a01611eaa565b909550935050604087013567ffffffffffffffff811115611fe8575f5ffd5b611ff489828a01611eaa565b979a9699509497509295939492505050565b600181811c9082168061201a57607f821691505b60208210810361203857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6080810181835f5b600481101561207957815183526020928301929091019060010161205a565b50505092915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156103fb576103fb612082565b5f81518060208401855e5f93019283525090919050565b5f6120d46120ce838b6120a9565b896120a9565b6001600160f81b031960f889811b8216835288811b8216600184015287901b16600282015261210660038201866120a9565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f61214f60218301856120a9565b60f89390931b6001600160f81b031916835250506001019392505050565b808201808211156103fb576103fb612082565b5f8261219a57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3a26469706673582212205caa4b51dcb44fb7ffd37136b7d8f1021f0fe438a1383457afcecdb09fc9411664736f6c634300081c00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d736368656d65416464722073686f756c64206e6f74206861766520616e7920636f646506b799aacebcbc3bd533cbd16bf42740be3402a20aec013e252553280df8774428e4c425fbe4c6803c0f58045e9a8dbd875d6c9a3d9b80c584c3481922927fd6736368656d65416464722073686f756c64206e6f74206265207a65726f2061646472657373736368656d654164647220616464726573732073686f756c64206861766520636f6465536368656d6520636f6e747261637420616464726573732073686f756c64206e6f742068617665206265656e207265706c61636564736368656d654164647220616464726573732073686f756c64206e6f74206265207a65726f2061646472657373a264697066735822122062c10aa62fe5dc25dc43ed862a270b030aea97495c04babd326264c3e95ffbd164736f6c634300081c0033\";\n\ntype BlocklockTestConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BlocklockTestConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BlocklockTest__factory extends ContractFactory {\n  constructor(...args: BlocklockTestConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BlocklockTest & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): BlocklockTest__factory {\n    return super.connect(runner) as BlocklockTest__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BlocklockTestInterface {\n    return new Interface(_abi) as BlocklockTestInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): BlocklockTest {\n    return new Contract(address, _abi, runner) as unknown as BlocklockTest;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployAllContracts,\n  DeployAllContractsInterface,\n} from \"../../DeployAllContracts.s.sol/DeployAllContracts\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deployAll\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blocklockSenderInstance\",\n        type: \"address\",\n        internalType: \"contract BlocklockSender\",\n      },\n      {\n        name: \"blocklockSignatureScheme\",\n        type: \"address\",\n        internalType: \"contract BlocklockSignatureScheme\",\n      },\n      {\n        name: \"decryptionSenderInstance\",\n        type: \"address\",\n        internalType: \"contract DecryptionSender\",\n      },\n      {\n        name: \"signatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"contract SignatureSchemeAddressProvider\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b5061ee5d8061002d5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80632d82333514610043578063c040622614610083578063f8ccbf471461008d575b5f5ffd5b61004b6100b0565b604080516001600160a01b03958616815293851660208501529184169183019190915290911660608201526080015b60405180910390f35b61008b610174565b005b600c546100a09062010000900460ff1681565b604051901515815260200161007a565b604051637ed1ec7d60e01b815260206004820152600a60248201526949535f5550475241444560b01b60448201525f9081908190819081905f51602061ec225f395f51905f5290637ed1ec7d90606401602060405180830381865afa15801561011b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013f9190612342565b9050610149610182565b9150610153610460565b935061015f8282610834565b925061016b8382610d3f565b94505090919293565b61017c6100b0565b50505050565b5f5f60405180602001610194906122be565b601f1982820381018352601f909101166040526101af61165c565b604080516001600160a01b0390921660208301520160408051601f19818403018152908290526101e2929160200161237f565b60405160208183030381529060405290505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610238575f5ffd5b505af115801561024a573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81525f92505f51602061ec225f395f51905f529150637ed1ec7d9061027e9060040161239b565b602060405180830381865afa158015610299573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102bd9190612342565b156103aa5760405163350d56bf60e01b81525f51602061ec225f395f51905f529063350d56bf906102f0906004016123c8565b602060405180830381865afa15801561030b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032f9190612410565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90610360906077908690600401612464565b6020604051808303815f875af115801561037c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103a09190612410565b90508092506103f4565b60776103b461165c565b6040516103c0906122be565b6001600160a01b0390911681526020018190604051809103905ff59050801580156103ed573d5f5f3e3d5ffd5b5092508290505b6104396040518060400160405280601581526020015f51602061edd35f395f51905f5281525060405180606001604052806025815260200161ed7f602591398361175d565b61045b60405180606001604052806035815260200161ecab6035913982611877565b505090565b5f5f60405180602001610472906122cb565b601f1982820381018352601f9091011660405261048d6118c0565b516104966118c0565b602001516040516020016104ab92919061249e565b60408051601f19818403018152908290526104c9929160200161237f565b60405160208183030381529060405290505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561051f575f5ffd5b505af1158015610531573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81525f92505f51602061ec225f395f51905f529150637ed1ec7d906105659060040161239b565b602060405180830381865afa158015610580573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a49190612342565b156106915760405163350d56bf60e01b81525f51602061ec225f395f51905f529063350d56bf906105d7906004016123c8565b602060405180830381865afa1580156105f2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106169190612410565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90610647906077908690600401612464565b6020604051808303815f875af1158015610663573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106879190612410565b90508092506106e3565b607761069b6118c0565b516106a46118c0565b602001516040516106b4906122cb565b6106bf92919061249e565b8190604051809103905ff59050801580156106dc573d5f5f3e3d5ffd5b5092508290505b6107056040518060600160405280602f815260200161eda4602f913982611877565b5f61074a6040518060400160405280601581526020015f51602061edd35f395f51905f5281525060405180606001604052806025815260200161ed7f60259139611b31565b90505f8190505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610795575f5ffd5b505af11580156107a7573d5f5f3e3d5ffd5b50506040805180820182526013815272424e3235342d424c532d424c4f434b4c4f434b60681b60208201529051635d5c33ed60e11b81526001600160a01b038516935063bab867da9250610800919087906004016124b9565b5f604051808303815f87803b158015610817575f5ffd5b505af1158015610829573d5f5f3e3d5ffd5b505050505050505090565b5f5f61083e611c51565b90508215610988575f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561088b575f5ffd5b505af115801561089d573d5f5f3e3d5ffd5b505050505f6109036040518060400160405280601581526020015f51602061edd35f395f51905f528152506040518060400160405280601c81526020017f64656372797074696f6e53656e64657250726f78794164647265737300000000815250611b31565b60405163278f794360e11b81529091506001600160a01b03821690634f1ef286906109329085906004016124e2565b5f604051808303815f87803b158015610949575f5ffd5b505af115801561095b573d5f5f3e3d5ffd5b505050506109816040518060600160405280603d815260200161ec6e603d913983611877565b9150610d38565b5f60405180602001610999906122d8565b601f1982820381018352601f9091011660408190526109bc9084906020016124e2565b60408051601f19818403018152908290526109da929160200161237f565b60405160208183030381529060405290505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610a30575f5ffd5b505af1158015610a42573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81525f92505f51602061ec225f395f51905f529150637ed1ec7d90610a769060040161239b565b602060405180830381865afa158015610a91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab59190612342565b15610ba25760405163350d56bf60e01b81525f51602061ec225f395f51905f529063350d56bf90610ae8906004016123c8565b602060405180830381865afa158015610b03573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b279190612410565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90610b58906077908690600401612464565b6020604051808303815f875af1158015610b74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b989190612410565b9050809350610be3565b5f60775f1b84604051610bb4906122d8565b610bbe91906124e2565b8190604051809103905ff5905080158015610bdb573d5f5f3e3d5ffd5b509450849150505b610c456040518060400160405280601581526020015f51602061edd35f395f51905f528152506040518060400160405280601c81526020017f64656372797074696f6e53656e64657250726f787941646472657373000000008152508361175d565b5f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610c8a575f5ffd5b505af1158015610c9c573d5f5f3e3d5ffd5b50505050836001600160a01b031663485cc955610cb761165c565b6040516001600160e01b031960e084901b1681526001600160a01b03918216600482015290891660248201526044015f604051808303815f87803b158015610cfd575f5ffd5b505af1158015610d0f573d5f5f3e3d5ffd5b50505050610d356040518060600160405280602d815260200161ed16602d913982611877565b50505b5092915050565b5f5f610d49611e84565b90508215610e93575f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610d96575f5ffd5b505af1158015610da8573d5f5f3e3d5ffd5b505050505f610e0e6040518060400160405280601581526020015f51602061edd35f395f51905f528152506040518060400160405280601b81526020017f626c6f636b6c6f636b53656e64657250726f7879416464726573730000000000815250611b31565b60405163278f794360e11b81529091506001600160a01b03821690634f1ef28690610e3d9085906004016124e2565b5f604051808303815f87803b158015610e54575f5ffd5b505af1158015610e66573d5f5f3e3d5ffd5b50505050610e8c6040518060600160405280603c815260200161ed43603c913983611877565b9150611243565b5f60405180602001610ea4906122d8565b601f1982820381018352601f909101166040819052610ec79084906020016124e2565b60408051601f1981840301815290829052610ee5929160200161237f565b60405160208183030381529060405290505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610f3b575f5ffd5b505af1158015610f4d573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81525f92505f51602061ec225f395f51905f529150637ed1ec7d90610f819060040161239b565b602060405180830381865afa158015610f9c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fc09190612342565b156110ad5760405163350d56bf60e01b81525f51602061ec225f395f51905f529063350d56bf90610ff3906004016123c8565b602060405180830381865afa15801561100e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110329190612410565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90611063906077908690600401612464565b6020604051808303815f875af115801561107f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110a39190612410565b90508093506110ee565b5f60775f1b846040516110bf906122d8565b6110c991906124e2565b8190604051809103905ff59050801580156110e6573d5f5f3e3d5ffd5b509450849150505b6111506040518060400160405280601581526020015f51602061edd35f395f51905f528152506040518060400160405280601b81526020017f626c6f636b6c6f636b53656e64657250726f78794164647265737300000000008152508361175d565b5f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611195575f5ffd5b505af11580156111a7573d5f5f3e3d5ffd5b50505050836001600160a01b031663485cc9556111c261165c565b6040516001600160e01b031960e084901b1681526001600160a01b03918216600482015290891660248201526044015f604051808303815f87803b158015611208575f5ffd5b505af115801561121a573d5f5f3e3d5ffd5b505050506112406040518060600160405280602c815260200161ec42602c913982611877565b50505b60405163c1978d1f60e01b815260206004820152600d60248201526c13505617d1d054d7d312535255609a1b6044820152610d38905f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa1580156112ab573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cf9190612504565b60405163c1978d1f60e01b815260206004820152601d60248201527f4741535f41465445525f5041594d454e545f43414c43554c4154494f4e00000060448201525f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa158015611343573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113679190612504565b60405163c1978d1f60e01b815260206004820152601f60248201527f46554c46494c4c4d454e545f464c41545f4645455f4e41544956455f50504d0060448201525f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa1580156113db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ff9190612504565b60405163c1978d1f60e01b815260206004820152601060248201526f5745495f5045525f554e49545f47415360801b60448201525f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa158015611466573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061148a9190612504565b60405163c1978d1f60e01b815260206004820152601a60248201527f424c535f50414952494e475f434845434b5f4f5645524845414400000000000060448201525f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa1580156114fe573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115229190612504565b60405163c1978d1f60e01b815260206004820152601960248201527f4e41544956455f5052454d49554d5f50455243454e544147450000000000000060448201525f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa158015611596573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ba9190612504565b60405163c1978d1f60e01b815260206004820152601860248201527f4741535f464f525f43414c4c5f45584143545f434845434b000000000000000060448201525f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa15801561162e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116529190612504565b61ffff16896120b3565b60405163c1978d1f60e01b815260206004820152600b60248201526a505249564154455f4b455960a81b60448201525f9081905f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa1580156116c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e69190612504565b6040516001625e79b760e01b03198152600481018290529091505f51602061ec225f395f51905f529063ffa1864990602401602060405180830381865afa158015611733573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117579190612410565b91505090565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e70757400000000000060208201529051634b96303160e11b81525f905f51602061ec225f395f51905f529063972c6062906117c59085908890889060040161251b565b5f604051808303815f875af11580156117e0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611807919081019061256c565b90505f51602061ec225f395f51905f5263e23cd19f82611826886121f5565b6040518363ffffffff1660e01b815260040161184392919061261f565b5f604051808303815f87803b15801561185a575f5ffd5b505af115801561186c573d5f5f3e3d5ffd5b505050505050505050565b6118bc828260405160240161188d9291906124b9565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052612293565b5050565b6118c86122e5565b604080516080810180835263c1978d1f60e01b905260206084820152601160a4820152700424c535f5055424c49435f4b45595f583607c1b60c48201529081908101805f51602061ec225f395f51905f5263c1978d1f60e48501602060405180830381865afa15801561193d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119619190612504565b815260405163c1978d1f60e01b81526020600482018190526011602483015270424c535f5055424c49435f4b45595f583160781b6044830152909101905f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa1580156119d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119f59190612504565b90528152604080518082019182905263c1978d1f60e01b90915260206044820181905260116064830152700424c535f5055424c49435f4b45595f593607c1b608483015290910190805f51602061ec225f395f51905f5263c1978d1f60a48301602060405180830381865afa158015611a70573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a949190612504565b815260405163c1978d1f60e01b81526020600482018190526011602483015270424c535f5055424c49435f4b45595f593160781b6044830152909101905f51602061ec225f395f51905f529063c1978d1f90606401602060405180830381865afa158015611b04573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b289190612504565b90529052919050565b5f5f611b3c846121f5565b6040516360f9bb1160e01b81529091505f905f51602061ec225f395f51905f52906360f9bb1190611b7190859060040161264c565b5f60405180830381865afa158015611b8b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bb2919081019061256c565b90505f84604051602001611bc6919061265e565b60408051601f1981840301815290829052631e19e65760e01b825291505f51602061ec225f395f51905f5290631e19e65790611c08908590859060040161261f565b602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190612410565b9695505050505050565b5f5f60405180602001611c639061230a565b6020820181038252601f19601f8201166040525090505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611cbe575f5ffd5b505af1158015611cd0573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81525f51602061ec225f395f51905f529250637ed1ec7d9150611d029060040161239b565b602060405180830381865afa158015611d1d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d419190612342565b15611e2b5760405163350d56bf60e01b81525f51602061ec225f395f51905f529063350d56bf90611d74906004016123c8565b602060405180830381865afa158015611d8f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db39190612410565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90611de4906077908590600401612464565b6020604051808303815f875af1158015611e00573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e249190612410565b9150611e5e565b5f60775f1b604051611e3c9061230a565b8190604051809103905ff5905080158015611e59573d5f5f3e3d5ffd5b509250505b611e8060405180606001604052806036815260200161ece06036913983611877565b5090565b5f5f60405180602001611e9690612317565b6020820181038252601f19601f8201166040525090505f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611ef1575f5ffd5b505af1158015611f03573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81525f51602061ec225f395f51905f529250637ed1ec7d9150611f359060040161239b565b602060405180830381865afa158015611f50573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f749190612342565b1561205e5760405163350d56bf60e01b81525f51602061ec225f395f51905f529063350d56bf90611fa7906004016123c8565b602060405180830381865afa158015611fc2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fe69190612410565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90612017906077908590600401612464565b6020604051808303815f875af1158015612033573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120579190612410565b9150612091565b5f60775f1b60405161206f90612317565b8190604051809103905ff590508015801561208c573d5f5f3e3d5ffd5b509250505b611e8060405180606001604052806035815260200161edf36035913983611877565b4661013a8114806120c65750806204cb2f145b15612104576120d76101f48a612673565b98506120e56101f489612673565b97506120f36101f486612673565b94506121016101f484612673565b92505b5f51602061ec225f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015612149575f5ffd5b505af115801561215b573d5f5f3e3d5ffd5b505060405163117e90d560e21b815263ffffffff808d166004830152808c166024830152808b166044830152808a166064830152808916608483015260ff881660a4830152861660c48201526001600160a01b03851692506345fa4354915060e4015f604051808303815f87803b1580156121d4575f5ffd5b505af11580156121e6573d5f5f3e3d5ffd5b50505050505050505050505050565b60605f5f51602061ec225f395f51905f526001600160a01b031663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa158015612240573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612267919081019061256c565b9050808360405160200161227c92919061269e565b604051602081830303815290604052915050919050565b61229c8161229f565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6109e0806126ca83390190565b6127e7806130aa83390190565b61042b8061589183390190565b60405180604001604052806122f8612324565b8152602001612305612324565b905290565b6132f380615cbc83390190565b615c7380618faf83390190565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215612352575f5ffd5b81518015158114612361575f5ffd5b9392505050565b5f81518060208401855e5f93019283525090919050565b5f61239361238d8386612368565b84612368565b949350505050565b6020808252601390820152725553455f52414e44414d555f464143544f525960681b604082015260600190565b60208082526028908201527f52414e44414d555f435245415445325f464143544f52595f434f4e54524143546040820152675f4144445245535360c01b606082015260800190565b5f60208284031215612420575f5ffd5b81516001600160a01b0381168114612361575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f6123936040830184612436565b805f5b600281101561017c57815184526020938401939091019060010161247f565b608081016124ac828561247c565b612361604083018461247c565b604081525f6124cb6040830185612436565b905060018060a01b03831660208301529392505050565b6001600160a01b039190911681526040602082018190525f9082015260600190565b5f60208284031215612514575f5ffd5b5051919050565b606081525f61252d6060830186612436565b828103602084015261253f8186612436565b91505060018060a01b0383166040830152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561257c575f5ffd5b815167ffffffffffffffff811115612592575f5ffd5b8201601f810184136125a2575f5ffd5b805167ffffffffffffffff8111156125bc576125bc612558565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156125eb576125eb612558565b604052818152828201602001861015612602575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b604081525f6126316040830185612436565b82810360208401526126438185612436565b95945050505050565b602081525f6123616020830184612436565b601760f91b81525f6123616001830184612368565b63ffffffff8181168382160290811690818114610d3857634e487b7160e01b5f52601160045260245ffd5b5f6126a98285612368565b6c2f7363726970742f6a736f6e2f60981b8152612643600d82018561236856fe608060405234801561000f575f5ffd5b506040516109e03803806109e083398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6107ff806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80635bb09cf81161006e5780635bb09cf81461013d57806375b238fc1461016857806391d148541461018f578063a217fddf146101a2578063bab867da146101a9578063d547741f146101bc575f5ffd5b806301ffc9a7146100aa578063248a9ca3146100d25780632f2ff15d146101025780632fc9fa331461011757806336568abe1461012a575b5f5ffd5b6100bd6100b836600461065c565b6101cf565b60405190151581526020015b60405180910390f35b6100f46100e036600461068a565b5f9081526020819052604090206001015490565b6040519081526020016100c9565b6101156101103660046106bc565b610205565b005b6100bd61012536600461072b565b61022f565b6101156101383660046106bc565b61026f565b61015061014b36600461072b565b6102a7565b6040516001600160a01b0390911681526020016100c9565b6100f47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100bd61019d3660046106bc565b6102db565b6100f45f81565b6101156101b736600461076a565b610303565b6101156101ca3660046106bc565b6104f6565b5f6001600160e01b03198216637965db0b60e01b14806101ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461021f8161051a565b6102298383610527565b50505050565b5f5f6001600160a01b03166001848460405161024c9291906107ba565b908152604051908190036020019020546001600160a01b03161415905092915050565b6001600160a01b03811633146102985760405163334bd91960e11b815260040160405180910390fd5b6102a282826105b6565b505050565b5f600183836040516102ba9291906107ba565b908152604051908190036020019020546001600160a01b0316905092915050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561051a565b6001600160a01b0381161580159061034d57505f816001600160a01b03163b115b6103b15760405162461bcd60e51b815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604482015269656d654164647265737360b01b60648201526084015b60405180910390fd5b5f6001600160a01b0316600184846040516103cd9291906107ba565b908152604051908190036020019020546001600160a01b03161461043d5760405162461bcd60e51b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201526084016103a8565b80600184846040516104509291906107ba565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b03199093169290921790915560019061049090859085906107ba565b908152604051908190036020018120546001600160a01b0316906104b790859085906107ba565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105108161051a565b61022983836105b6565b610524813361061f565b50565b5f61053283836102db565b6105af575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ff565b505f6101ff565b5f6105c183836102db565b156105af575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ff565b61062982826102db565b6106585760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016103a8565b5050565b5f6020828403121561066c575f5ffd5b81356001600160e01b031981168114610683575f5ffd5b9392505050565b5f6020828403121561069a575f5ffd5b5035919050565b80356001600160a01b03811681146106b7575f5ffd5b919050565b5f5f604083850312156106cd575f5ffd5b823591506106dd602084016106a1565b90509250929050565b5f5f83601f8401126106f6575f5ffd5b50813567ffffffffffffffff81111561070d575f5ffd5b602083019150836020828501011115610724575f5ffd5b9250929050565b5f5f6020838503121561073c575f5ffd5b823567ffffffffffffffff811115610752575f5ffd5b61075e858286016106e6565b90969095509350505050565b5f5f5f6040848603121561077c575f5ffd5b833567ffffffffffffffff811115610792575f5ffd5b61079e868287016106e6565b90945092506107b19050602085016106a1565b90509250925092565b818382375f910190815291905056fea2646970667358221220e5144df0d342a74d5f0128ec7e3d4f61ebce0b76c178b4747512db764315a6cd64736f6c634300081c00335f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b506040516127e73803806127e78339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104b3565b5050506105c5565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661056d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461056d565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61056d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061056d565b01602001516001600160f81b0319168261020b836002610595565b6102169060026105b2565b815181106102265761022661056d565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61056d565b825191901a600f169081106102665761026661056d565b01602001516001600160f81b03191682610281836002610595565b61028c9060026105b2565b6102979060016105b2565b815181106102a7576102a761056d565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f82518060208501602c85015e605f60f81b602c939091019283015250602d01919050565b600181811c9082168061044357607f821691505b60208210810361046157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104ae57805f5260205f20601f840160051c8101602085101561048c5750805b601f840160051c820191505b818110156104ab575f8155600101610498565b50505b505050565b81516001600160401b038111156104cc576104cc61031f565b6104e0816104da845461042f565b84610467565b6020601f821160018114610512575f83156104fb5750848201515b5f19600385901b1c1916600184901b1784556104ab565b5f84815260208120601f198516915b828110156105415787850151825560209485019460019092019101610521565b508482101561055e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105ac576105ac610581565b92915050565b808201808211156105ac576105ac610581565b612215806105d25f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee14610125578063eae1e15b1461012d578063f6e548e914610140575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b610091610163565b60405161009f929190611e88565b60405180910390f35b6100bb6100b6366004611ee8565b6101dc565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102bc565b60405161009f9190611f55565b6100e660405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b6100e6610348565b6100e661013b366004611ee8565b6103c7565b61015361014e366004611f67565b610401565b604051901515815260200161009f565b61016b611de1565b610173611de1565b60408051808201918290525f91600291908390839082845b81548152602001906001019080831161018b575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101ba5750505050509050915091509091565b5f5f5f6102a6600480546101ef90612006565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90612006565b80156102665780601f1061023d57610100808354040283529160200191610266565b820191905f5260205f20905b81548152906001019060200180831161024957829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e192505050565b80516020909101519093509150505b9250929050565b600480546102c990612006565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590612006565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081565b60408051608081018083526060926103c292915f91839190820190839060029082845b81548152602001906001019080831161036b57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103a1575050505050815250506105ad565b905090565b60605f5f6103d585856101dc565b915091506103f6604051806040016040528084815260200183815250610609565b925050505b92915050565b5f5f61044188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f61048287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f6104c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c592505050565b90505f6104d1838386610766565b509b9a5050505050505050505050565b604080518082019091525f80825260208201525f6104ff84846108d9565b90505f61051282825b602002015161098e565b90505f610520836001610508565b905061052a611dff565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105855781604051630251c7e160e31b815260040161057c9190612052565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106a65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161057c565b5060208181015160409283015183518085019094529083529082015290565b6106cd611e1d565b815160801461071e5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161057c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108495761084961203e565b60200201518152602001865f01515f600281106108685761086861203e565b6020020151815260200186602001516001600281106108895761088961203e565b6020020151815260200186602001515f600281106108a9576108a961203e565b6020020151905290506108ba611e42565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108e1611de1565b5f6108ec8484610c6f565b90505f5f5f5f601885016001600160c01b0381511693506030860190506001600160c01b0381511694505f5160206121a05f395f51905f52855f5160206121a05f395f51905f52600160c01b870908604887015160608801516001600160c01b03908116975016945092505f5160206121a05f395f51905f5290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b610996611de1565b5f5160206121a05f395f51905f5282106109c65760405163d53e941560e01b81526004810183905260240161057c565b5f5f5160206121a05f395f51905f5260045f5160206121a05f395f51905f528586090990505f5f5160206121a05f395f51905f528260010890505f5160206121a05f395f51905f52610a25835f5160206121a05f395f51905f52612096565b60010891505f610a445f5160206121a05f395f51905f52838509610dc6565b90505f5f5160206121a05f395f51905f5278016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa5f5160206121a05f395f51905f52845f5160206121a05f395f51905f52888b09090990505f5f5160206121a05f395f51905f52610ab9835f5160206121a05f395f51905f52612096565b5f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f52835f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f5286870990505f5f5160206121a05f395f51905f5286830990505f5f5160206121a05f395f51905f52805f5160206121a05f395f51905f528485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610b6e610b6988610dd0565b610e09565b5f0b600103610bbe57868c52610b8387610dd0565b9050610b8e81610e6e565b60208e0191909152915081610bb95760405163396ec77160e01b81526004810182905260240161057c565b610c21565b610bca610b6987610dd0565b5f0b600103610bdf57858c52610b8386610dd0565b828c52610beb83610dd0565b9050610bf681610e6e565b60208e0191909152915081610c215760405163396ec77160e01b81526004810182905260240161057c565b60208c0151610c2f90610e95565b610c388e610e95565b14610c5f5760208c0151610c59905f5160206121a05f395f51905f52612096565b60208d01525b5050505050505050505050919050565b815160609060ff811115610c9857836040516313727cdd60e11b815260040161057c9190611f55565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610cd897969594939291906120c0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610d0d949392919061212a565b60408051808303601f1901815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610da957858418610d6082600161216d565b8d8b604051602001610d75949392919061212a565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101610d4a565b505f19016020908102820101919091529550505050505092915050565b5f6103fb82610ea1565b5f5f5160206121a05f395f51905f5260035f5160206121a05f395f51905f52845f5160206121a05f395f51905f52868709090892915050565b5f5f610e14836115e6565b9050610e2e60015f5160206121a05f395f51905f52612096565b8103610e3d57505f1992915050565b8015801590610e4d575080600114155b156103fb5760405163396ec77160e01b81526004810184905260240161057c565b5f5f610e79836116ae565b9150825f5160206121a05f395f51905f52838409149050915091565b5f6103fb600283612180565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690525f5160206121c05f395f51905f5260a08401525f5160206121a05f395f51905f5260c0808501919091529293505f92839160055afa90505f519250806116a75760405163c6daf7ab60e01b8152600481018590525f5160206121c05f395f51905f5260248201525f5160206121a05f395f51905f52604482015260640161057c565b5050919050565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e30611de1565b8152602001611e3d611de1565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b6002811015611e82578151845260209384019390910190600101611e63565b50505050565b60808101611e968285611e60565b611ea36040830184611e60565b9392505050565b5f5f83601f840112611eba575f5ffd5b50813567ffffffffffffffff811115611ed1575f5ffd5b6020830191508360208285010111156102b5575f5ffd5b5f5f60208385031215611ef9575f5ffd5b823567ffffffffffffffff811115611f0f575f5ffd5b611f1b85828601611eaa565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ea36020830184611f27565b5f5f5f5f5f5f60608789031215611f7c575f5ffd5b863567ffffffffffffffff811115611f92575f5ffd5b611f9e89828a01611eaa565b909750955050602087013567ffffffffffffffff811115611fbd575f5ffd5b611fc989828a01611eaa565b909550935050604087013567ffffffffffffffff811115611fe8575f5ffd5b611ff489828a01611eaa565b979a9699509497509295939492505050565b600181811c9082168061201a57607f821691505b60208210810361203857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6080810181835f5b600481101561207957815183526020928301929091019060010161205a565b50505092915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156103fb576103fb612082565b5f81518060208401855e5f93019283525090919050565b5f6120d46120ce838b6120a9565b896120a9565b6001600160f81b031960f889811b8216835288811b8216600184015287901b16600282015261210660038201866120a9565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f61214f60218301856120a9565b60f89390931b6001600160f81b031916835250506001019392505050565b808201808211156103fb576103fb612082565b5f8261219a57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3a26469706673582212205caa4b51dcb44fb7ffd37136b7d8f1021f0fe438a1383457afcecdb09fc9411664736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131f26101015f395f8181611efb01528181611f24015261207101526131f25ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063c58343ef11610092578063e63b5d5811610062578063e63b5d581461054e578063e6b3ca7114610562578063f7cef80014610581578063f87f0e61146105a0575f5ffd5b8063c58343ef146104c5578063ca15c873146104f1578063cd802c9114610510578063d547741f1461052f575f5ffd5b8063a3246ad3116100cd578063a3246ad31461041e578063ac9650d81461044a578063ad3cb1cc14610476578063b0947289146104a6575f5ffd5b80639010d07c146103b557806391d14854146103ec578063a217fddf1461040b575f5ffd5b80634b96e16611610168578063571d708711610138578063571d70871461033b5780636f421ea91461034f57806375b238fc1461036357806381d12c5814610383575f5ffd5b80634b96e166146102bd5780634f1ef286146102de57806352d1902d146102f157806354fd4d5014610305575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461024b57806336568abe1461026a57806347c0318614610289578063485cc9551461029e575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461271f565b6105bf565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461275a565b6105e9565b005b348015610229575f5ffd5b5061023d610238366004612775565b610648565b6040519081526020016101f4565b348015610256575f5ffd5b5061021c61026536600461278c565b610668565b348015610275575f5ffd5b5061021c61028436600461278c565b61068a565b348015610294575f5ffd5b5061023d60015481565b3480156102a9575f5ffd5b5061021c6102b83660046127ba565b6106c2565b3480156102c8575f5ffd5b506102d1610882565b6040516101f491906127e6565b61021c6102ec366004612892565b610893565b3480156102fc575f5ffd5b5061023d6108b2565b348015610310575f5ffd5b50604080518082019091526005815264302e302e3160d81b60208201525b6040516101f4919061294c565b348015610346575f5ffd5b506102d16108cd565b34801561035a575f5ffd5b506102d16108d9565b34801561036e575f5ffd5b5061023d5f51602061319d5f395f51905f5281565b34801561038e575f5ffd5b506103a261039d366004612775565b6108e5565b6040516101f4979695949392919061295e565b3480156103c0575f5ffd5b506103d46103cf3660046129e3565b610bcc565b6040516001600160a01b0390911681526020016101f4565b3480156103f7575f5ffd5b506101e861040636600461278c565b610bf9565b348015610416575f5ffd5b5061023d5f81565b348015610429575f5ffd5b5061043d610438366004612775565b610c2f565b6040516101f49190612a03565b348015610455575f5ffd5b50610469610464366004612a43565b610c5f565b6040516101f49190612ab2565b348015610481575f5ffd5b5061032e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104b1575f5ffd5b506101e86104c0366004612775565b610d44565b3480156104d0575f5ffd5b506104e46104df366004612775565b610d50565b6040516101f49190612b15565b3480156104fc575f5ffd5b5061023d61050b366004612775565b6110ad565b34801561051b575f5ffd5b506101e861052a366004612775565b6110d1565b34801561053a575f5ffd5b5061021c61054936600461278c565b6110ee565b348015610559575f5ffd5b5061023d61110a565b34801561056d575f5ffd5b506003546103d4906001600160a01b031681565b34801561058c575f5ffd5b5061021c61059b366004612c1c565b611115565b3480156105ab575f5ffd5b5061023d6105ba366004612c93565b611883565b5f6001600160e01b03198216635a05180f60e01b14806105e357506105e382611df6565b92915050565b6105ff5f51602061319d5f395f51905f52611e2a565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f9081525f51602061317d5f395f51905f52602052604090206001015490565b61067182610648565b61067a81611e2a565b6106848383611e37565b50505050565b6001600160a01b03811633146106b35760405163334bd91960e11b815260040160405180910390fd5b6106bd8282611e79565b505050565b5f6106cb611eb2565b805490915060ff600160401b82041615906001600160401b03165f811580156106f15750825b90505f826001600160401b0316600114801561070c5750303b155b90508115801561071a575080155b156107385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845460ff60401b1916600160401b1785555b61076a611eda565b610772611eda565b6107895f51602061319d5f395f51905f5288611e37565b6107ce5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6107d85f88611e37565b6108185760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064016107c5565b600380546001600160a01b0319166001600160a01b038816179055831561087957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b606061088e6006611ee4565b905090565b61089b611ef0565b6108a482611f94565b6108ae8282611faa565b5050565b5f6108bb612066565b505f51602061315d5f395f51905f5290565b606061088e6004611ee4565b606061088e6008611ee4565b60026020525f90815260409020805481906108ff90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90612d2f565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b50505050509080600101805461098b90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b790612d2f565b8015610a025780601f106109d957610100808354040283529160200191610a02565b820191905f5260205f20905b8154815290600101906020018083116109e557829003601f168201915b505050505090806002018054610a1790612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390612d2f565b8015610a8e5780601f10610a6557610100808354040283529160200191610a8e565b820191905f5260205f20905b815481529060010190602001808311610a7157829003601f168201915b505050505090806003018054610aa390612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90612d2f565b8015610b1a5780601f10610af157610100808354040283529160200191610b1a565b820191905f5260205f20905b815481529060010190602001808311610afd57829003601f168201915b505050505090806004018054610b2f90612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612d2f565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b505050600590930154919250506001600160a01b0381169060ff600160a01b9091041687565b5f8281525f51602061313d5f395f51905f52602081905260408220610bf190846120af565b949350505050565b5f9182525f51602061317d5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f51602061313d5f395f51905f526020819052604090912060609190610c5890611ee4565b9392505050565b604080515f815260208101909152606090826001600160401b03811115610c8857610c88612828565b604051908082528060200260200182016040528015610cbb57816020015b6060815260200190600190039081610ca65790505b5091505f5b83811015610d3c57610d1730868684818110610cde57610cde612d8e565b9050602002810190610cf09190612da2565b85604051602001610d0393929190612dfb565b6040516020818303038152906040526120ba565b838281518110610d2957610d29612d8e565b6020908102919091010152600101610cc0565b505092915050565b5f6105e360088361212c565b610d996040518060e0016040528060608152602001606081526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f151581525090565b5f8281526002602052604090819020815160e08101909252805482908290610dc090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dec90612d2f565b8015610e375780601f10610e0e57610100808354040283529160200191610e37565b820191905f5260205f20905b815481529060010190602001808311610e1a57829003601f168201915b50505050508152602001600182018054610e5090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c90612d2f565b8015610ec75780601f10610e9e57610100808354040283529160200191610ec7565b820191905f5260205f20905b815481529060010190602001808311610eaa57829003601f168201915b50505050508152602001600282018054610ee090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c90612d2f565b8015610f575780601f10610f2e57610100808354040283529160200191610f57565b820191905f5260205f20905b815481529060010190602001808311610f3a57829003601f168201915b50505050508152602001600382018054610f7090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c90612d2f565b8015610fe75780601f10610fbe57610100808354040283529160200191610fe7565b820191905f5260205f20905b815481529060010190602001808311610fca57829003601f168201915b5050505050815260200160048201805461100090612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461102c90612d2f565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b5050509183525050600591909101546001600160a01b0381166020830152600160a01b900460ff16151560409091015292915050565b5f8181525f51602061313d5f395f51905f52602081905260408220610c5890612143565b5f6110dd60068361212c565b806105e357506105e360088361212c565b6110f782610648565b61110081611e2a565b6106848383611e79565b5f61088e6006612143565b61111d61214c565b611126856110d1565b6111865760405162461bcd60e51b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201526084016107c5565b5f85815260026020526040808220815160e081019092528054829082906111ac90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612d2f565b80156112235780601f106111fa57610100808354040283529160200191611223565b820191905f5260205f20905b81548152906001019060200180831161120657829003601f168201915b5050505050815260200160018201805461123c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461126890612d2f565b80156112b35780601f1061128a576101008083540402835291602001916112b3565b820191905f5260205f20905b81548152906001019060200180831161129657829003601f168201915b505050505081526020016002820180546112cc90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f890612d2f565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050815260200160038201805461135c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461138890612d2f565b80156113d35780601f106113aa576101008083540402835291602001916113d3565b820191905f5260205f20905b8154815290600101906020018083116113b657829003601f168201915b505050505081526020016004820180546113ec90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461141890612d2f565b80156114635780601f1061143a57610100808354040283529160200191611463565b820191905f5260205f20905b81548152906001019060200180831161144657829003601f168201915b5050509183525050600591909101546001600160a01b038082166020840152600160a01b90910460ff16151560409283015282516003549251630b76139f60e31b8152939450925f9290911690635bb09cf8906114c490859060040161294c565b602060405180830381865afa1580156114df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115039190612e1a565b90506001600160a01b03811661154c5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420736368656d6560901b60448201526064016107c5565b604080840151905163eae1e15b60e01b815282915f916001600160a01b0384169163eae1e15b91611580919060040161294c565b5f60405180830381865afa15801561159a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115c19190810190612e35565b9050816001600160a01b031663f6e548e9828989866001600160a01b031663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611610573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116379190810190612e35565b6040518563ffffffff1660e01b81526004016116569493929190612ed1565b602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190612f15565b6116e15760405162461bcd60e51b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107c5565b5f8560a001516001600160a01b0316635d3be00160e01b8c8c8c8c8c604051602401611711959493929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161174f9190612f6c565b5f604051808303815f865af19150503d805f8114611788576040519150601f19603f3d011682016040523d82523d5f602084013e61178d565b606091505b50505f8c8152600260205260409020600501805460ff60a01b1916600160a01b17905590506117bd60068c612174565b5080611807576117ce60088c61217f565b506040518b81527f3fed05c5d3a79e0e2f23ffd594267f0e29799ad1b4b6a7756138d5247baa4a7b9060200160405180910390a161186d565b6118108b610d44565b156118225761182060088c612174565b505b61182d60048c61217f565b508a7f0a1f5b3782d8f604353407c980dbfe6b55499c5b92cb8c39f089c73f348407e68b8b8b8b6040516118649493929190612f77565b60405180910390a25b50505050505061187c60015f55565b5050505050565b5f6001805f8282546118959190612f9d565b9091555050600354604051632fc9fa3360e01b81526001600160a01b0390911690632fc9fa33906118cc908a908a90600401612fb0565b602060405180830381865afa1580156118e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190b9190612f15565b6119575760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107c5565b61199e600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b6119f85760405162461bcd60e51b815260206004820152602560248201527f43697068657274657874206661696c6564206c656e67746820626f756e647320604482015264636865636b60d81b60648201526084016107c5565b611a3f600161100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b611a975760405162461bcd60e51b8152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e647320636044820152636865636b60e01b60648201526084016107c5565b611ad583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061221a92505050565b15611b2e5760405162461bcd60e51b815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a65604482015262726f7360e81b60648201526084016107c5565b600354604051630b76139f60e31b81525f916001600160a01b031690635bb09cf890611b60908b908b90600401612fb0565b602060405180830381865afa158015611b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9f9190612e1a565b90506001600160a01b038116611bf75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e617475726520736368656d65000000000000000060448201526064016107c5565b6040518060e0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8a01819004810282018101909252888152918101919089908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093855250506040805160208181018352848252808601919091528151808201835284815282860152336060860152608090940183905260015483526002909352502081518190611cf79082613007565b5060208201516001820190611d0c9082613007565b5060408201516002820190611d219082613007565b5060608201516003820190611d369082613007565b5060808201516004820190611d4b9082613007565b5060a08201516005909101805460c0909301511515600160a01b026001600160a81b03199093166001600160a01b0390921691909117919091179055600154611d969060069061217f565b50336001600160a01b03166001547f133b1acfa49920f88bc8c23faeb2ba43b75b3d6c453290a824f3c85e7733df138a8a88888c8c42604051611ddf97969594939291906130c1565b60405180910390a350506001549695505050505050565b5f6001600160e01b03198216637965db0b60e01b14806105e357506301ffc9a760e01b6001600160e01b03198316146105e3565b611e348133612265565b50565b5f5f51602061313d5f395f51905f5281611e51858561229e565b90508015610bf1575f858152602083905260409020611e70908561233f565b50949350505050565b5f5f51602061313d5f395f51905f5281611e938585612353565b90508015610bf1575f858152602083905260409020611e7090856123cc565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105e3565b611ee26123e0565b565b60605f610c5883612405565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f6a5f51602061315d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611ee25760405163703e46dd60e11b815260040160405180910390fd5b611e345f51602061319d5f395f51905f52611e2a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612004575060408051601f3d908101601f1916820190925261200191810190613111565b60015b61202c57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107c5565b5f51602061315d5f395f51905f52811461205c57604051632a87526960e21b8152600481018290526024016107c5565b6106bd838361245e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ee25760405163703e46dd60e11b815260040160405180910390fd5b5f610c5883836124b3565b60605f5f846001600160a01b0316846040516120d69190612f6c565b5f60405180830381855af49150503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b50915091506121238583836124d9565b95945050505050565b5f8181526001830160205260408120541515610c58565b5f6105e3825490565b60025f540361216e57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f610c588383612535565b5f610c58838361260f565b5f818311156122015760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107c5565b8351838110801590612123575091909111159392505050565b5f805b825181101561225c5782818151811061223857612238612d8e565b01602001516001600160f81b0319161561225457505f92915050565b60010161221d565b50600192915050565b61226f8282610bf9565b6108ae5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107c5565b5f5f51602061317d5f395f51905f526122b78484610bf9565b612336575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556122ec3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105e3565b5f9150506105e3565b5f610c58836001600160a01b03841661260f565b5f5f51602061317d5f395f51905f5261236c8484610bf9565b15612336575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105e3565b5f610c58836001600160a01b038416612535565b6123e861265b565b611ee257604051631afcd79f60e31b815260040160405180910390fd5b6060815f0180548060200260200160405190810160405280929190818152602001828054801561245257602002820191905f5260205f20905b81548152602001906001019080831161243e575b50505050509050919050565b61246782612674565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156124ab576106bd82826120ba565b6108ae6126d7565b5f825f0182815481106124c8576124c8612d8e565b905f5260205f200154905092915050565b6060826124ee576124e9826126f6565b610c58565b815115801561250557506001600160a01b0384163b155b1561252e57604051639996b31560e01b81526001600160a01b03851660048201526024016107c5565b5080610c58565b5f8181526001830160205260408120548015612336575f612557600183612d7b565b85549091505f9061256a90600190612d7b565b90508082146125c9575f865f01828154811061258857612588612d8e565b905f5260205f200154905080875f0184815481106125a8576125a8612d8e565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125da576125da613128565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105e3565b5f81815260018301602052604081205461265457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105e3565b505f6105e3565b5f612664611eb2565b54600160401b900460ff16919050565b806001600160a01b03163b5f036126a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107c5565b5f51602061315d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b3415611ee25760405163b398979f60e01b815260040160405180910390fd5b8051156127065780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561272f575f5ffd5b81356001600160e01b031981168114610c58575f5ffd5b6001600160a01b0381168114611e34575f5ffd5b5f6020828403121561276a575f5ffd5b8135610c5881612746565b5f60208284031215612785575f5ffd5b5035919050565b5f5f6040838503121561279d575f5ffd5b8235915060208301356127af81612746565b809150509250929050565b5f5f604083850312156127cb575f5ffd5b82356127d681612746565b915060208301356127af81612746565b602080825282518282018190525f918401906040840190835b8181101561281d5783518352602093840193909201916001016127ff565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561286457612864612828565b604052919050565b5f6001600160401b0382111561288457612884612828565b50601f01601f191660200190565b5f5f604083850312156128a3575f5ffd5b82356128ae81612746565b915060208301356001600160401b038111156128c8575f5ffd5b8301601f810185136128d8575f5ffd5b80356128eb6128e68261286c565b61283c565b8181528660208385010111156128ff575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c58602083018461291e565b60e081525f61297060e083018a61291e565b8281036020840152612982818a61291e565b90508281036040840152612996818961291e565b905082810360608401526129aa818861291e565b905082810360808401526129be818761291e565b6001600160a01b039590951660a0840152505090151560c09091015295945050505050565b5f5f604083850312156129f4575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561281d5783516001600160a01b0316835260209384019390920191600101612a1c565b5f5f60208385031215612a54575f5ffd5b82356001600160401b03811115612a69575f5ffd5b8301601f81018513612a79575f5ffd5b80356001600160401b03811115612a8e575f5ffd5b8560208260051b8401011115612aa2575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612b0957603f19878603018452612af485835161291e565b94506020938401939190910190600101612ad8565b50929695505050505050565b602081525f825160e06020840152612b3161010084018261291e565b90506020840151601f19848303016040850152612b4e828261291e565b9150506040840151601f19848303016060850152612b6c828261291e565b9150506060840151601f19848303016080850152612b8a828261291e565b9150506080840151601f198483030160a0850152612ba8828261291e565b91505060018060a01b0360a08501511660c084015260c0840151612bd060e085018215159052565b509392505050565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b602083019150836020828501011115612c15575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c30575f5ffd5b8535945060208601356001600160401b03811115612c4c575f5ffd5b612c5888828901612bd8565b90955093505060408601356001600160401b03811115612c76575f5ffd5b612c8288828901612bd8565b969995985093965092949392505050565b5f5f5f5f5f5f60608789031215612ca8575f5ffd5b86356001600160401b03811115612cbd575f5ffd5b612cc989828a01612bd8565b90975095505060208701356001600160401b03811115612ce7575f5ffd5b612cf389828a01612bd8565b90955093505060408701356001600160401b03811115612d11575f5ffd5b612d1d89828a01612bd8565b979a9699509497509295939492505050565b600181811c90821680612d4357607f821691505b602082108103612d6157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e3576105e3612d67565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612db7575f5ffd5b8301803591506001600160401b03821115612dd0575f5ffd5b602001915036819003821315612c15575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f8152612e108185612de4565b9695505050505050565b5f60208284031215612e2a575f5ffd5b8151610c5881612746565b5f60208284031215612e45575f5ffd5b81516001600160401b03811115612e5a575f5ffd5b8201601f81018413612e6a575f5ffd5b8051612e786128e68261286c565b818152856020838501011115612e8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612ee3606083018761291e565b8281036020840152612ef6818688612ea9565b90508281036040840152612f0a818561291e565b979650505050505050565b5f60208284031215612f25575f5ffd5b81518015158114610c58575f5ffd5b858152606060208201525f612f4d606083018688612ea9565b8281036040840152612f60818587612ea9565b98975050505050505050565b5f610c588284612de4565b604081525f612f8a604083018688612ea9565b8281036020840152612f0a818587612ea9565b808201808211156105e3576105e3612d67565b602081525f610bf1602083018486612ea9565b601f8211156106bd57805f5260205f20601f840160051c81016020851015612fe85750805b601f840160051c820191505b8181101561187c575f8155600101612ff4565b81516001600160401b0381111561302057613020612828565b6130348161302e8454612d2f565b84612fc3565b6020601f821160018114613066575f831561304f5750848201515b5f19600385901b1c1916600184901b17845561187c565b5f84815260208120601f198516915b828110156130955787850151825560209485019460019092019101613075565b50848210156130b257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608081525f6130d460808301898b612ea9565b82810360208401526130e781888a612ea9565b905082810360408401526130fc818688612ea9565b91505082606083015298975050505050505050565b5f60208284031215613121575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b9bf840b608447c267623fc79124450c15b070c6cf6f643c84d5b29677f23f5964736f6c634300081c003360a060405230608052348015610013575f5ffd5b5060015f55610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b766100fd5f395f818161377c015281816137a501526138f20152615b765ff3fe608060405260043610610371575f3560e01c80637350f456116101c8578063aa433aff116100fd578063c58343ef1161009d578063cd802c911161006d578063cd802c9114610b18578063d547741f14610b37578063dac83d2914610b56578063dc311dd314610b75575f5ffd5b8063c58343ef14610a8f578063c9bc18c414610abb578063ca15c87314610ada578063cb63179714610af9575f5ffd5b8063b2a7cac5116100d8578063b2a7cac5146109d9578063bd18636b146109f8578063bec4c08c14610a17578063c3f909d414610a36575f5ffd5b8063aa433aff1461095e578063ad3cb1cc1461097d578063aefb212f146109ad575f5ffd5b8063995cb36e11610168578063a21a23e411610143578063a21a23e4146108ec578063a3246ad314610900578063a3907d711461092c578063a608a1e114610940575f5ffd5b8063995cb36e146108835780639d40a6fd146108a2578063a217fddf146108d9575f5ffd5b80638a1f165a116101a35780638a1f165a146107f45780639010d07c1461083257806391d148541461085157806395b55cfc14610870575f5ffd5b80637350f456146107ad57806375b238fc146107c15780637909dc7b146107e1575f5ffd5b806338c27d12116102a957806352d1902d116102495780635d3be001116102195780635d3be0011461071f5780635f7bda9f1461073e57806364d51a2a1461077257806367b276af14610799575f5ffd5b806352d1902d146106a657806354236fb3146106ba57806354fd4d50146106d957806357a8070a14610706575f5ffd5b806345fa43541161028457806345fa435414610636578063485cc955146106555780634b160935146106745780634f1ef28614610693575f5ffd5b806338c27d12146105dd5780633bc32c75146105f157806341af6c8714610617575f5ffd5b8063235296f7116103145780632f2ff15d116102ef5780632f2ff15d1461056e5780633255c4561461058d5780633408e470146105ac57806336568abe146105be575f5ffd5b8063235296f71461051a578063248a9ca31461053b5780632f2770db1461055a575f5ffd5b80630ae095401161034f5780630ae095401461046c578063133c40c71461048d57806318e3dd27146104c45780631e6ba15b146104fb575f5ffd5b806301ffc9a714610375578063062b1d90146103a9578063088070f5146103ca575b5f5ffd5b348015610380575f5ffd5b5061039461038f366004614a28565b610ba4565b60405190151581526020015b60405180910390f35b6103bc6103b7366004614b42565b610bce565b6040519081526020016103a0565b3480156103d5575f5ffd5b50600a546104259063ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b9091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e0016103a0565b348015610477575f5ffd5b5061048b610486366004614bd2565b610f43565b005b348015610498575f5ffd5b506001546104ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104cf575f5ffd5b506008546104e3906001600160601b031681565b6040516001600160601b0390911681526020016103a0565b348015610506575f5ffd5b5061048b610515366004614c00565b610f94565b348015610525575f5ffd5b5061052e610ff3565b6040516103a09190614c49565b348015610546575f5ffd5b506103bc610555366004614c5b565b61107f565b348015610565575f5ffd5b5061048b61109f565b348015610579575f5ffd5b5061048b610588366004614bd2565b6110ee565b348015610598575f5ffd5b506103bc6105a7366004614c72565b611110565b3480156105b7575f5ffd5b50466103bc565b3480156105c9575f5ffd5b5061048b6105d8366004614bd2565b611128565b3480156105e8575f5ffd5b5061052e61115b565b3480156105fc575f5ffd5b506008546104e390600160601b90046001600160601b031681565b348015610622575f5ffd5b50610394610631366004614c5b565b611168565b348015610641575f5ffd5b5061048b610650366004614c9a565b6111fd565b348015610660575f5ffd5b5061048b61066f366004614d22565b6113d9565b34801561067f575f5ffd5b506103bc61068e366004614d4e565b61166c565b61048b6106a1366004614d67565b61167d565b3480156106b1575f5ffd5b506103bc61169c565b3480156106c5575f5ffd5b5061048b6106d4366004614c00565b6116b8565b3480156106e4575f5ffd5b50604080518082019091526005815264302e302e3160d81b602082015261052e565b348015610711575f5ffd5b50600b546103949060ff1681565b34801561072a575f5ffd5b5061048b610739366004614df0565b61172c565b348015610749575f5ffd5b5061075d610758366004614c5b565b6117ff565b6040516103a099989796959493929190614edb565b34801561077d575f5ffd5b50610786606481565b60405161ffff90911681526020016103a0565b3480156107a4575f5ffd5b5061052e611b91565b3480156107b8575f5ffd5b5061052e611b9e565b3480156107cc575f5ffd5b506103bc5f516020615b215f395f51905f5281565b6103bc6107ef366004614f70565b611bab565b3480156107ff575f5ffd5b5061052e60405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b34801561083d575f5ffd5b506104ac61084c366004614fd0565b611c9b565b34801561085c575f5ffd5b5061039461086b366004614bd2565b611cc8565b61048b61087e366004614c5b565b611cfe565b34801561088e575f5ffd5b506009546104e3906001600160601b031681565b3480156108ad575f5ffd5b506005546108c1906001600160401b031681565b6040516001600160401b0390911681526020016103a0565b3480156108e4575f5ffd5b506103bc5f81565b3480156108f7575f5ffd5b506103bc611e09565b34801561090b575f5ffd5b5061091f61091a366004614c5b565b611fb3565b6040516103a09190615033565b348015610937575f5ffd5b5061048b611fdc565b34801561094b575f5ffd5b50600b5461039490610100900460ff1681565b348015610969575f5ffd5b5061048b610978366004614c5b565b612027565b348015610988575f5ffd5b5061052e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156109b8575f5ffd5b506109cc6109c7366004614fd0565b612067565b6040516103a09190615045565b3480156109e4575f5ffd5b5061048b6109f3366004614c5b565b61215c565b348015610a03575f5ffd5b5061048b610a12366004614c00565b612247565b348015610a22575f5ffd5b5061048b610a31366004614bd2565b6122e0565b348015610a41575f5ffd5b50600a5463ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b90910416610425565b348015610a9a575f5ffd5b50610aae610aa9366004614c5b565b6123d4565b6040516103a09190615087565b348015610ac6575f5ffd5b5061052e610ad536600461515e565b6127ef565b348015610ae5575f5ffd5b506103bc610af4366004614c5b565b612c0d565b348015610b04575f5ffd5b5061048b610b13366004614bd2565b612c31565b348015610b23575f5ffd5b50610394610b32366004614c5b565b612e1d565b348015610b42575f5ffd5b5061048b610b51366004614bd2565b612eb1565b348015610b61575f5ffd5b5061048b610b70366004614bd2565b612ecd565b348015610b80575f5ffd5b50610b94610b8f366004614c5b565b612f6a565b6040516103a094939291906151c5565b5f6001600160e01b03198216635a05180f60e01b1480610bc85750610bc882613029565b92915050565b600b545f9060ff16610c275760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610c765760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b83151580610c8357505f34115b610cf55760405162461bcd60e51b815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610c1e565b610cff858561305d565b5f610d5560405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525084604051602001610d4091906152c4565b60405160208183030381529060405286613287565b90506040518061012001604052808681526020013481526020018763ffffffff168152602001826001600160401b0316815260200185815260200184610d9a90615356565b815260408051602081810183525f808352818501929092528251808201845282815283850152336060948501526001600160401b0380871683526010825291839020855181559085015160018201559184015160028301805494860151909216600160201b026001600160601b031990941663ffffffff909116179290921790915560808201516003820190610e309082615467565b5060a0820151805180516004840191908290610e4f908290600261486b565b506020820151610e65906002808401919061486b565b50505060208201516004820190610e7c9082615467565b5060408201516005820190610e919082615467565b50505060c0820151600a820190610ea89082615467565b5060e0820151600b820190610ebd9082615467565b506101009190910151600c90910180546001600160a01b0319166001600160a01b0390921691909117905560405133906001600160401b038316907fa7cf57609b4abed689b408db0b0c3dc6309786b6c07d5efbbd1d5b150e6d2c0690610f2990889088904290615521565b60405180910390a36001600160401b031695945050505050565b81610f4d816132fb565b610f5561334f565b610f5e83611168565b15610f7c57604051631685ecdd60e31b815260040160405180910390fd5b610f868383613377565b610f8f60015f55565b505050565b610faa5f516020615b215f395f51905f526133e7565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f0dae1d002e96c238ebe140ca1799f77093ae09e0bde40f79bb29ed78d09e652d905f90a250565b600c8054611000906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461102c906153f1565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b5f9081525f516020615b015f395f51905f52602052604090206001015490565b6110b55f516020615b215f395f51905f526133e7565b600b805461ff0019166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b6110f78261107f565b611100816133e7565b61110a83836133f1565b50505050565b5f6111218363ffffffff1683613433565b9392505050565b6001600160a01b03811633146111515760405163334bd91960e11b815260040160405180910390fd5b610f8f828261353f565b600d8054611000906153f1565b5f8181526003602052604081206002018054825b818110156111f3575f60025f85848154811061119a5761119a615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208982529092529020546001600160401b03600160481b9091041611156111eb57506001949350505050565b60010161117c565b505f949350505050565b6112135f516020615b215f395f51905f526133e7565b60ff8216609b116112665760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610c1e565b6040805160e08101825263ffffffff89811680835289821660208401819052898316848601819052898416606086018190528985166080870181905260ff8a1660a0880181905295891660c0909701879052600a805467ffffffffffffffff1916909517600160201b909402939093176fffffffffffffffff00000000000000001916600160401b90920263ffffffff60601b191691909117600160601b9091021764ffffffffff60801b1916600160801b90910260ff60a01b191617600160a01b9092029190911763ffffffff60a81b1916600160a81b909202919091179055600b805460ff19166001179055517f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad5906113c890899089908990899089908990899063ffffffff97881681529587166020870152938616604086015291851660608501528416608084015260ff1660a083015290911660c082015260e00190565b60405180910390a150505050505050565b5f6113e2613578565b805490915060ff600160401b82041615906001600160401b03165f811580156114085750825b90505f826001600160401b031660011480156114235750303b155b905081158015611431575080155b1561144f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147957845460ff60401b1916600160401b1785555b6114816135a0565b6114896135a0565b6114a05f516020615b215f395f51905f52886133f1565b6114e05760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b6114ea5f886133f1565b61152a5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b600180546001600160a01b0319166001600160a01b03881617905561154e466135aa565b60405160200161155e9190615581565b604051602081830303815290604052600c908161157b9190615467565b50611585466135aa565b60405160200161159591906155d8565b604051602081830303815290604052600d90816115b29190615467565b506115bc466135aa565b6040516020016115cc9190615614565b604051602081830303815290604052600e90816115e99190615467565b506115f3466135aa565b6040516020016116039190615650565b604051602081830303815290604052600f90816116209190615467565b50831561166357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016113c8565b50505050505050565b5f610bc88263ffffffff163a613433565b611685613771565b61168e82613815565b611698828261382b565b5050565b5f6116a56138e7565b505f516020615ae15f395f51905f525b90565b6116c061334f565b6116d65f516020615b215f395f51905f526133e7565b600854600160601b90046001600160601b03166116f4811515613930565b600880546bffffffffffffffffffffffff60601b1916905561171f826001600160601b03831661394e565b5061172960015f55565b50565b6001546001600160a01b031633146117865760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792044656372797074696f6e53656e6465722063616e2063616c6c00006044820152606401610c1e565b6117f88585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506139be92505050565b5050505050565b60106020525f908152604090208054600182015460028301546003840180549394929363ffffffff831693600160201b9093046001600160401b0316929190611847906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611873906153f1565b80156118be5780601f10611895576101008083540402835291602001916118be565b820191905f5260205f20905b8154815290600101906020018083116118a157829003601f168201915b50506040805160e081019091529394939250506004830190508160608101828160a084018260028282826020028201915b8154815260200190600101908083116118ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311611925575050505050815250508152602001600482018054611955906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906153f1565b80156119cc5780601f106119a3576101008083540402835291602001916119cc565b820191905f5260205f20905b8154815290600101906020018083116119af57829003601f168201915b505050505081526020016005820180546119e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906153f1565b8015611a5c5780601f10611a3357610100808354040283529160200191611a5c565b820191905f5260205f20905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815250509080600a018054611a75906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa1906153f1565b8015611aec5780601f10611ac357610100808354040283529160200191611aec565b820191905f5260205f20905b815481529060010190602001808311611acf57829003601f168201915b50505050509080600b018054611b01906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d906153f1565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050600c90930154919250506001600160a01b031689565b600f8054611000906153f1565b600e8054611000906153f1565b600b545f9060ff16611bff5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610c1e565b600b54610100900460ff1615611c4e5760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b5f611c91865f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250610bce915050565b9695505050505050565b5f8281525f516020615ac15f395f51905f52602081905260408220611cc09084613b6f565b949350505050565b5f9182525f516020615b015f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d0661334f565b5f81815260036020526040902054611d26906001600160a01b0316613b7a565b5f81815260046020526040812080546001600160601b031691349190611d4c83856156a0565b92506101000a8154816001600160601b0302191690836001600160601b031602179055503460085f8282829054906101000a90046001600160601b0316611d9391906156a0565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611de691906156bf565b604080519283526020830191909152015b60405180910390a25061172960015f55565b5f611e1261334f565b6005546001600160401b031633611e2a6001436156d2565b6040516001600160601b0319606093841b81166020830152914060348201523090921b1660548201526001600160c01b031960c083901b16606882015260700160408051601f1981840301815291905280516020909101209150611e8f8160016156e5565b6005805467ffffffffffffffff19166001600160401b03928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516001600160601b039091166001600160a01b031992831617600160601b91909916029790971790558451918201855233825281810183815282860185815289855260038352959093208251815488166001600160a01b0391821617825593516001820180549098169416939093179095559251805192949192611f6292600285019201906148a9565b50611f7291506006905084613ba1565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250506116b560015f55565b5f8181525f516020615ac15f395f51905f52602081905260409091206060919061112190613bac565b611ff25f516020615b215f395f51905f526133e7565b600b805461ff00191690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b61203d5f516020615b215f395f51905f526133e7565b5f818152600360205260409020546001600160a01b031661205d81613b7a565b6116988282613377565b60605f6120746006613bb8565b905080841061209657604051631390f2a160e01b815260040160405180910390fd5b5f6120a184866156bf565b9050818111806120af575083155b6120b957806120bb565b815b90505f6120c886836156d2565b9050806001600160401b038111156120e2576120e2614a67565b60405190808252806020026020018201604052801561210b578160200160208202803683370190505b5093505f5b818110156121525761212d61212588836156bf565b600690613b6f565b85828151811061213f5761213f615556565b6020908102919091010152600101612110565b5050505092915050565b61216461334f565b5f818152600360205260409020546001600160a01b031661218481613b7a565b5f828152600360205260409020600101546001600160a01b031633146121db575f828152600360205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c1e565b5f828152600360209081526040918290208054336001600160a01b03199182168117835560019092018054909116905582516001600160a01b03851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611df7565b61224f61334f565b6122655f516020615b215f395f51905f526133e7565b6009546001600160601b031661227c811515613930565b600980546001600160601b0319169055600880548291905f906122a99084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061171f82826001600160601b031661394e565b816122ea816132fb565b6122f261334f565b6001600160a01b0382165f9081526002602090815260408083208684529091529020805460ff16156123245750610f86565b5f848152600360205260409020600201805460631901612357576040516305a48e0f60e01b815260040160405180910390fd5b8154600160ff1990911681178355815490810182555f82815260209081902090910180546001600160a01b0319166001600160a01b03871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610f8f60015f55565b6123dc6148fc565b5f82815260106020908152604080832081516101208101835281548152600182015493810193909352600281015463ffffffff811692840192909252600160201b9091046001600160401b03166060830152600381018054608084019190612443906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461246f906153f1565b80156124ba5780601f10612491576101008083540402835291602001916124ba565b820191905f5260205f20905b81548152906001019060200180831161249d57829003601f168201915b50505091835250506040805160e08101909152602090910190600483018160608101828160a084018260028282826020028201915b8154815260200190600101908083116124ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612525575050505050815250508152602001600482018054612555906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612581906153f1565b80156125cc5780601f106125a3576101008083540402835291602001916125cc565b820191905f5260205f20905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016005820180546125e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906153f1565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b5050505050815250508152602001600a82018054612679906153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546126a5906153f1565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600b82018054612709906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612735906153f1565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b5050509183525050600c91909101546001600160a01b031660209091015260608101519091506001600160401b0316610bc85760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c995c5d595cdd1251607a1b6044820152606401610c1e565b60606127fe6080850185615723565b9050610100036128505760405162461bcd60e51b815260206004820152601d60248201527f696e76616c69642064656372797074696f6e206b6579206c656e6774680000006044820152606401610c1e565b61010061286060a0860186615723565b9050106128af5760405162461bcd60e51b815260206004820152601d60248201527f6d657373616765206f6620756e737570706f72746564206c656e6774680000006044820152606401610c1e565b5f6128bd6080860186615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b838110156129515784848281811061290d5761290d615556565b9050013560f81c60f81b82828151811061292957612929615556565b0160200180516001600160f81b0319908116909218909116905f82901a9053506001016128f3565b505f61296060a0870187615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250600f80549596509094612a3e94509092506129aa91506153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906153f1565b8015612a215780601f106129f857610100808354040283529160200191612a21565b820191905f5260205f20905b815481529060010190602001808311612a0457829003601f168201915b505050505084898060a00190612a379190615723565b9050613bc1565b90505f5b612a4f60a0890189615723565b9050811015612aaf57818181518110612a6a57612a6a615556565b602001015160f81c60f81b838281518110612a8757612a87615556565b0160200180516001600160f81b0319908116909218909116905f82901a905350600101612a42565b505f612b64600e8054612ac1906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612aed906153f1565b8015612b385780601f10612b0f57610100808354040283529160200191612b38565b820191905f5260205f20905b815481529060010190602001808311612b1b57829003601f168201915b50505050508585604051602001612b50929190615765565b604051602081830303815290604052613d56565b90505f612b7082613db5565b90505f80612b8c83612b87368e90038e018e615779565b613e47565b909250905060018215158215151414612bfe5760405162461bcd60e51b815260206004820152602e60248201527f696e76616c69642064656372797074696f6e206b6579202f206369706865727460448201526d195e1d081c9959da5cdd195c995960921b6064820152608401610c1e565b50939998505050505050505050565b5f8181525f516020615ac15f395f51905f5260208190526040822061112190613bb8565b81612c3b816132fb565b612c4361334f565b612c4c83611168565b15612c6a57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b0382165f90815260026020908152604080832086845290915290205460ff16612cbf576040516379bfd40160e01b8152600481018490526001600160a01b0383166024820152604401610c1e565b5f838152600360205260408120600201805490915b81811015612dc257846001600160a01b0316838281548110612cf857612cf8615556565b5f918252602090912001546001600160a01b031603612dba5782612d1d6001846156d2565b81548110612d2d57612d2d615556565b905f5260205f20015f9054906101000a90046001600160a01b0316838281548110612d5a57612d5a615556565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082805480612d9557612d95615793565b5f8281526020902081015f1990810180546001600160a01b0319169055019055612dc2565b600101612cd4565b506001600160a01b0384165f818152600260209081526040808320898452825291829020805460ff19169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a791016123c1565b5f5f612e28836123d4565b606001516001600160401b03169050805f03612e4657505f92915050565b60015460405163cd802c9160e01b8152600481018390526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015612e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906157a7565b612eba8261107f565b612ec3816133e7565b61110a838361353f565b81612ed7816132fb565b612edf61334f565b5f83815260036020526040902060018101546001600160a01b03848116911614612f60576001810180546001600160a01b0319166001600160a01b03851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610f8f60015f55565b5f8181526003602052604081205481906001600160a01b03166060612f8e82613b7a565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526001600160601b03851694600160601b90046001600160401b031693879391839183018282801561301357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612ff5575b5050505050905093509350935093509193509193565b5f6001600160e01b03198216637965db0b60e01b1480610bc857506301ffc9a760e01b6001600160e01b0319831614610bc8565b600a5463ffffffff90811690831611156130b95760405162461bcd60e51b815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610c1e565b8015613236575f818152600360205260409020546001600160a01b03166130df81613b7a565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff811615158083526001600160401b036101008304811695840195909552600160481b909104909316918101919091529061318c5760405162461bcd60e51b815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c656044820152603960f91b6064820152608401610c1e565b80602001805161319b906157c6565b6001600160401b031690526040810180516131b5906157c6565b6001600160401b039081169091525f8581526020938452604090819020835181549585015192909401518316600160481b0270ffffffffffffffff00000000000000000019929093166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921791909116179055505050565b5f6132478363ffffffff163a613433565b905080341015610f8f5760405162461bcd60e51b815260206004820152600b60248201526a46656520746f6f206c6f7760a81b6044820152606401610c1e565b60015460405163f87f0e6160e01b81525f916001600160a01b03169063f87f0e61906132bb908790879087906004016157f0565b6020604051808303815f875af11580156132d7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc09190615828565b5f818152600360205260409020546001600160a01b031661331b81613b7a565b336001600160a01b0382161461169857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c1e565b60025f540361337157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f61338183613fb6565b905061339682826001600160601b031661394e565b604080516001600160a01b03841681526001600160601b038316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b6117298133614107565b5f5f516020615ac15f395f51905f528161340b8585614140565b90508015611cc0575f85815260208390526040902061342a90856141e1565b50949350505050565b6040805160e081018252600a5463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b81048316608083015260ff600160a01b82041660a0830152600160a81b900490911660c08201525f9081836134ba57816060015163ffffffff166134bc565b835b90505f6134c8866141f5565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6134f45f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161352f5761352f61583f565b04019a9950505050505050505050565b5f5f516020615ac15f395f51905f5281613559858561420c565b90508015611cc0575f85815260208390526040902061342a9085614285565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bc8565b6135a8614299565b565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f8151811061360a5761360a615556565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061363857613638615556565b60200101906001600160f81b03191690815f1a9053505f5b60208110156137695782600486836020811061366e5761366e615556565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061369457613694615556565b01602001516001600160f81b031916826136af836002615853565b6136ba9060026156bf565b815181106136ca576136ca615556565b60200101906001600160f81b03191690815f1a905350828582602081106136f3576136f3615556565b825191901a600f1690811061370a5761370a615556565b01602001516001600160f81b03191682613725836002615853565b6137309060026156bf565b61373b9060016156bf565b8151811061374b5761374b615556565b60200101906001600160f81b03191690815f1a905350600101613650565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806137f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166137eb5f516020615ae15f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156135a85760405163703e46dd60e11b815260040160405180910390fd5b6117295f516020615b215f395f51905f526133e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613885575060408051601f3d908101601f1916820190925261388291810190615828565b60015b6138ad57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c1e565b5f516020615ae15f395f51905f5281146138dd57604051632a87526960e21b815260048101829052602401610c1e565b610f8f83836142be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135a85760405163703e46dd60e11b815260040160405180910390fd5b8061172957604051631e9acf1760e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613997576040519150601f19603f3d011682016040523d82523d5f602084013e61399c565b606091505b5050905080610f8f5760405163950b247960e01b815260040160405180910390fd5b5f5a5f858152601060205260408120600281015492935091600160201b90046001600160401b03169003613a345760405162461bcd60e51b815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610c1e565b5f635d94180260e01b8686604051602401613a5092919061586a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600c8301546002840154600a549293505f92613ac09285926001600160a01b039091169163ffffffff91821691600160a81b90910481169061431316565b5090508015613b3157600b8301613ad78782615467565b50600a8301613ae68682615467565b50867f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f7846003018560040186600b01604051613b2493929190615923565b60405180910390a2613b65565b6040518781527f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d9060200160405180910390a15b611663878561434a565b5f6111218383614439565b6001600160a01b03811661172957604051630fb532db60e11b815260040160405180910390fd5b5f611121838361445f565b60605f611121836144ab565b5f610bc8825490565b825160609060ff811115613bea57846040516313727cdd60e11b8152600401610c1e9190614c49565b60408051608880825260c082019092525f916020820181803683370190505090505f81865f875f8b88604051602001613c299796959493929190615998565b60405160208183030381529060405290505f818051906020012090505f8160018a87604051602001613c5e9493929190615a02565b60408051601f19818403018152919052805160208201209091505f60ff89166001600160401b03811115613c9457613c94614a67565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f6005613cd2601f60ff8d166156bf565b901c905060015b81811015613d3857858418613cef8260016156bf565b8e8b604051602001613d049493929190615a02565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101613cd9565b505f1901602090810282010191909152955050505050509392505050565b5f5f613d6484846030613bc1565b601881015160308201519192506001600160c01b0391821691165f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478381600160c01b850908979650505050505050565b604080518082019091525f8082526020820152613dd0614957565b6001815260026020820152604081018390525f60608360808460076107d05a03fa905080613e405760405162461bcd60e51b815260206004820152601f60248201527f4731207363616c6172206d756c7469706c69636174696f6e206661696c6564006044820152606401610c1e565b5050919050565b5f5f5f604051806101800160405280865f01518152602001866020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020016001815260200160028152602001855f0151600160028110613f2557613f25615556565b60200201518152602001855f01515f60028110613f4457613f44615556565b602002015181526020018560200151600160028110613f6557613f65615556565b6020020151815260200185602001515f60028110613f8557613f85615556565b602002015190529050613f96614975565b6020816101808460086107d05a03fa9051151593509150505b9250929050565b5f8181526003602090815260408083206004909252822054600290910180546001600160601b03909216929091905b818110156140505760025f84838154811061400257614002615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208882529092529020805470ffffffffffffffffffffffffffffffffff19169055600101613fe5565b505f84815260036020526040812080546001600160a01b031990811682556001820180549091169055906140876002830182614993565b50505f84815260046020526040902080546001600160a01b03191690556140af600685614504565b506001600160601b03831615613e4057600880548491905f906140dc9084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050919050565b6141118282611cc8565b6116985760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c1e565b5f5f516020615b015f395f51905f526141598484611cc8565b6141d8575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561418e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610bc8565b5f915050610bc8565b5f611121836001600160a01b03841661445f565b5f614201603f83615a45565b610bc8906001615a78565b5f5f516020615b015f395f51905f526142258484611cc8565b156141d8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610bc8565b5f611121836001600160a01b03841661450b565b6142a16145e5565b6135a857604051631afcd79f60e31b815260040160405180910390fd5b6142c7826145fe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561430b57610f8f8282614661565b6116986146d3565b5f5f5a83811061434057839003604081048103851015614340575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614354836123d4565b8051909150156144285780515f9081526004602052604090208054600c9061438b90600160601b90046001600160401b03166157c6565b82546001600160401b0391821661010093840a90810290830219909116179092558201516001600160a01b03165f908152600260209081526040808320855184529091529020805490916009916143ea91600160481b90910416615a94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505f614419833a6146f2565b905061110a81835f0151614749565b610f8f8160200151825f0151614749565b5f825f01828154811061444e5761444e615556565b905f5260205f200154905092915050565b5f8181526001830160205260408120546144a457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b6060815f018054806020026020016040519081016040528092919081815260200182805480156144f857602002820191905f5260205f20905b8154815260200190600101908083116144e4575b50505050509050919050565b5f61112183835b5f81815260018301602052604081205480156141d8575f61452d6001836156d2565b85549091505f90614540906001906156d2565b905080821461459f575f865f01828154811061455e5761455e615556565b905f5260205f200154905080875f01848154811061457e5761457e615556565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145b0576145b0615793565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bc8565b5f6145ee613578565b54600160401b900460ff16919050565b806001600160a01b03163b5f0361463357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c1e565b5f516020615ae15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161467d9190615ab5565b5f60405180830381855af49150503d805f81146146b5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ba565b606091505b50915091506146ca8583836147e6565b95945050505050565b34156135a85760405163b398979f60e01b815260040160405180910390fd5b5f5f5a600a54600160201b900463ffffffff1685010390508281025f600a5460649190920160ff600160a01b8404168201020464e8d4a5100063ffffffff600160401b909304929092169190910201949350505050565b80156147af575f81815260046020526040902080546001600160601b0390811690614778908516821015613930565b81546001600160601b039185900382166001600160601b031991821617909255600980548083168601909216919092161790555050565b600880546001600160601b03600160601b80830482168601909116026bffffffffffffffffffffffff60601b199091161790555050565b6060826147fb576147f682614842565b611121565b815115801561481257506001600160a01b0384163b155b1561483b57604051639996b31560e01b81526001600160a01b0385166004820152602401610c1e565b5080611121565b8051156148525780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215614899579160200282015b8281111561489957825182559160200191906001019061487e565b506148a59291506149aa565b5090565b828054828255905f5260205f20908101928215614899579160200282015b8281111561489957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906148c7565b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f6001600160401b031681526020016060815260200161493e6149be565b8152606060208201819052604082018190525f91015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5080545f8255905f5260205f209081019061172991905b5b808211156148a5575f81556001016149ab565b60405180606001604052806149d16149e5565b815260200160608152602001606081525090565b60405180604001604052806149f8614a0a565b8152602001614a05614a0a565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215614a38575f5ffd5b81356001600160e01b031981168114611121575f5ffd5b803563ffffffff81168114614a62575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614a9d57614a9d614a67565b60405290565b5f82601f830112614ab2575f5ffd5b81356001600160401b03811115614acb57614acb614a67565b604051601f8201601f19908116603f011681016001600160401b0381118282101715614af957614af9614a67565b604052818152838201602001851015614b10575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60c08284031215614b3c575f5ffd5b50919050565b5f5f5f5f60808587031215614b55575f5ffd5b614b5e85614a4f565b93506020850135925060408501356001600160401b03811115614b7f575f5ffd5b614b8b87828801614aa3565b92505060608501356001600160401b03811115614ba6575f5ffd5b614bb287828801614b2c565b91505092959194509250565b6001600160a01b0381168114611729575f5ffd5b5f5f60408385031215614be3575f5ffd5b823591506020830135614bf581614bbe565b809150509250929050565b5f60208284031215614c10575f5ffd5b813561112181614bbe565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111216020830184614c1b565b5f60208284031215614c6b575f5ffd5b5035919050565b5f5f60408385031215614c83575f5ffd5b614c8c83614a4f565b946020939093013593505050565b5f5f5f5f5f5f5f60e0888a031215614cb0575f5ffd5b614cb988614a4f565b9650614cc760208901614a4f565b9550614cd560408901614a4f565b9450614ce360608901614a4f565b9350614cf160808901614a4f565b925060a088013560ff81168114614d06575f5ffd5b9150614d1460c08901614a4f565b905092959891949750929550565b5f5f60408385031215614d33575f5ffd5b8235614d3e81614bbe565b91506020830135614bf581614bbe565b5f60208284031215614d5e575f5ffd5b61112182614a4f565b5f5f60408385031215614d78575f5ffd5b8235614d8381614bbe565b915060208301356001600160401b03811115614d9d575f5ffd5b614da985828601614aa3565b9150509250929050565b5f5f83601f840112614dc3575f5ffd5b5081356001600160401b03811115614dd9575f5ffd5b602083019150836020828501011115613faf575f5ffd5b5f5f5f5f5f60608688031215614e04575f5ffd5b8535945060208601356001600160401b03811115614e20575f5ffd5b614e2c88828901614db3565b90955093505060408601356001600160401b03811115614e4a575f5ffd5b614e5688828901614db3565b969995985093965092949392505050565b805f5b600281101561110a578151845260209384019390910190600101614e6a565b5f8151614e97848251614e67565b60200151614ea86040850182614e67565b50602082015160c06080850152614ec260c0850182614c1b565b9050604083015184820360a08601526146ca8282614c1b565b89815288602082015263ffffffff881660408201526001600160401b038716606082015261012060808201525f614f16610120830188614c1b565b82810360a0840152614f288188614e89565b905082810360c0840152614f3c8187614c1b565b905082810360e0840152614f508186614c1b565b91505060018060a01b0383166101008301529a9950505050505050505050565b5f5f5f5f60608587031215614f83575f5ffd5b614f8c85614a4f565b935060208501356001600160401b03811115614fa6575f5ffd5b614fb287828801614db3565b90945092505060408501356001600160401b03811115614ba6575f5ffd5b5f5f60408385031215614fe1575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150295781516001600160a01b0316865260209586019590910190600101615002565b5093949350505050565b602081525f6111216020830184614ff0565b602080825282518282018190525f918401906040840190835b8181101561507c57835183526020938401939092019160010161505e565b509095945050505050565b6020815281516020820152602082015160408201525f60408301516150b4606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015161012060a08401526150e5610140840182614c1b565b905060a0840151601f198483030160c08501526151028282614e89565b91505060c0840151601f198483030160e08501526151208282614c1b565b91505060e0840151601f198483030161010085015261513f8282614c1b565b9150506101008401516137696101208501826001600160a01b03169052565b5f5f5f60408486031215615170575f5ffd5b83356001600160401b03811115615185575f5ffd5b61519186828701614b2c565b93505060208401356001600160401b038111156151ac575f5ffd5b6151b886828701614db3565b9497909650939450505050565b6001600160601b03851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190525f90611c9190830184614ff0565b5f5f8335601e1984360301811261521b575f5ffd5b83016020810192503590506001600160401b03811115615239575f5ffd5b803603821315613faf575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61528c6080830183615206565b60c060808601526152a160c086018284615247565b9150506152b160a0840184615206565b85830360a0870152611c91838284615247565b602081525f611121602083018461526f565b5f82601f8301126152e5575f5ffd5b6152ed614a7b565b8060408401858111156152fe575f5ffd5b845b8181101561507c578035845260209384019301615300565b5f60808284031215615328575f5ffd5b615330614a7b565b905061533c83836152d6565b815261534b83604084016152d6565b602082015292915050565b5f60c08236031215615366575f5ffd5b604051606081016001600160401b038111828210171561538857615388614a67565b6040526153953684615318565b815260808301356001600160401b038111156153af575f5ffd5b6153bb36828601614aa3565b60208301525060a08301356001600160401b038111156153d9575f5ffd5b6153e536828601614aa3565b60408301525092915050565b600181811c9082168061540557607f821691505b602082108103614b3c57634e487b7160e01b5f52602260045260245ffd5b601f821115610f8f57805f5260205f20601f840160051c810160208510156154485750805b601f840160051c820191505b818110156117f8575f8155600101615454565b81516001600160401b0381111561548057615480614a67565b6154948161548e84546153f1565b84615423565b6020601f8211600181146154c6575f83156154af5750848201515b5f19600385901b1c1916600184901b1784556117f8565b5f84815260208120601f198516915b828110156154f557878501518255602094850194600190920191016154d5565b508482101561551257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6155336060830186614c1b565b8281036020840152615545818661526f565b915050826040830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f6155c7602c83018461556a565b605f60f81b81526001019392505050565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261325f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261335f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261345f60f01b60208201525f6155c7602283018461556a565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b038181168382160190811115610bc857610bc861568c565b80820180821115610bc857610bc861568c565b81810381811115610bc857610bc861568c565b6001600160401b038181168382160190811115610bc857610bc861568c565b6001600160601b038281168282160390811115610bc857610bc861568c565b5f5f8335601e19843603018112615738575f5ffd5b8301803591506001600160401b03821115615751575f5ffd5b602001915036819003821315613faf575f5ffd5b5f611cc0615773838661556a565b8461556a565b5f60808284031215615789575f5ffd5b6111218383615318565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156157b7575f5ffd5b81518015158114611121575f5ffd5b5f6001600160401b0382166001600160401b0381036157e7576157e761568c565b60010192915050565b606081525f6158026060830186614c1b565b82810360208401526158148186614c1b565b90508281036040840152611c918185614c1b565b5f60208284031215615838575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b8082028115828204841417610bc857610bc861568c565b828152604060208201525f611cc06040830184614c1b565b5f815461588e816153f1565b8085526001821680156158a857600181146158c4576158f8565b60ff1983166020870152602082151560051b87010193506158f8565b845f5260205f205f5b838110156158ef5781546020828a0101526001820191506020810190506158cd565b87016020019450505b50505092915050565b805f5b600281101561110a578154845260209093019260019182019101615904565b606081525f6159356060830186615882565b82810360208401526159478186615901565b6159576040820160028701615901565b60c0608082015261596e60c0820160048701615882565b81810360a08301526159838160058801615882565b9150508281036040840152611c918185615882565b5f6159ac6159a6838b61556a565b8961556a565b6001600160f81b031960f889811b8216835288811b8216600184015287901b1660028201526159de600382018661556a565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f615a27602183018561556a565b60f89390931b6001600160f81b031916835250506001019392505050565b5f63ffffffff831680615a6657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610bc857610bc861568c565b5f6001600160401b03821680615aac57615aac61568c565b5f190192915050565b5f611121828461556a56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220380d1acfd2c11b36009bf449c1b9c1894bfe02a4fb8d8c35e32e1b449239fa8364736f6c634300081c00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d426c6f636b6c6f636b53656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a2044656372797074696f6e53656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a205369676e6174757265536368656d654164647265737350726f766964657220636f6e7472616374206465706c6f7965642061743a2044656372797074696f6e53656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a2044656372797074696f6e53656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a20426c6f636b6c6f636b53656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a207369676e6174757265536368656d654164647265737350726f766964657241646472657373426c6f636b6c6f636b5369676e6174757265536368656d6520636f6e7472616374206465706c6f79656420746f3a204465706c6f796d656e745f696e7075742e6a736f6e0000000000000000000000426c6f636b6c6f636b53656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a20a26469706673582212206e6946efa800e87de5c6f4a253c6e5c00c4818e37eced73bd70c30c3640e7ab764736f6c634300081c0033\";\n\ntype DeployAllContractsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployAllContractsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployAllContracts__factory extends ContractFactory {\n  constructor(...args: DeployAllContractsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployAllContracts & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): DeployAllContracts__factory {\n    return super.connect(runner) as DeployAllContracts__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployAllContractsInterface {\n    return new Interface(_abi) as DeployAllContractsInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployAllContracts {\n    return new Contract(address, _abi, runner) as unknown as DeployAllContracts;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployBlocklockReceiver,\n  DeployBlocklockReceiverInterface,\n} from \"../../DeployBlocklockReceiver.s.sol/DeployBlocklockReceiver\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b5061239e8061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b5f6100d6604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060400160405280601b81526020017f626c6f636b6c6f636b53656e64657250726f78794164647265737300000000008152506100e5565b90506100e181610213565b5050565b5f5f6100f084610510565b6040516360f9bb1160e01b81529091505f90737109709ecfa91a80626ff3989d68f67f5b1dd12d906360f9bb119061012c90859060040161065b565b5f60405180830381865afa158015610146573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261016d9190810190610688565b90505f846040516020016101819190610752565b60408051601f1981840301815290829052631e19e65760e01b82529150737109709ecfa91a80626ff3989d68f67f5b1dd12d90631e19e657906101ca9085908590600401610767565b602060405180830381865afa1580156101e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102099190610794565b9695505050505050565b5f5f6040518060200161022590610620565b601f1982820381018352601f9091011660408181526001600160a01b03861660208301520160408051601f198184030181529082905261026892916020016107ba565b6040516020818303038152906040529050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156102c5575f5ffd5b505af11580156102d7573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa15801561034e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061037291906107d6565b156104a25760405163350d56bf60e01b815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e54524143546044820152675f4144445245535360c01b6064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa158015610403573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104279190610794565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a906104589060779086906004016107f5565b6020604051808303815f875af1158015610474573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104989190610794565b90508092506104e7565b60775f1b846040516104b390610620565b6001600160a01b0390911681526020018190604051809103905ff59050801580156104e0573d5f5f3e3d5ffd5b5092508290505b61050960405180606001604052806023815260200161234660239139826105b5565b5050919050565b60605f737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b031663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa158015610562573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526105899190810190610688565b9050808360405160200161059e92919061080d565b604051602081830303815290604052915050919050565b6100e182826040516024016105cb929190610838565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526105fe81610601565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b611ae48061086283390190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61066d602083018461062d565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610698575f5ffd5b815167ffffffffffffffff8111156106ae575f5ffd5b8201601f810184136106be575f5ffd5b805167ffffffffffffffff8111156106d8576106d8610674565b604051601f8201601f19908116603f0116810167ffffffffffffffff8111828210171561070757610707610674565b60405281815282820160200186101561071e575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b601760f91b81525f61066d600183018461073b565b604081525f610779604083018561062d565b828103602084015261078b818561062d565b95945050505050565b5f602082840312156107a4575f5ffd5b81516001600160a01b038116811461066d575f5ffd5b5f6107ce6107c8838661073b565b8461073b565b949350505050565b5f602082840312156107e6575f5ffd5b8151801515811461066d575f5ffd5b828152604060208201525f6107ce604083018461062d565b5f610818828561073b565b6c2f7363726970742f6a736f6e2f60981b815261078b600d82018561073b565b604081525f61084a604083018561062d565b905060018060a01b0383166020830152939250505056fe608060405234801561000f575f5ffd5b50604051611ae4380380611ae483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b611924806101c05f395ff3fe60806040526004361061011d575f3560e01c8063809800431161009d57806397a9c2851161006257806397a9c28514610321578063b8ca8dd814610336578063b96dbba714610355578063e64a66ea1461035d578063f2fde38b14610365575f5ffd5b8063809800431461027157806386e560be146102905780638da5cb5b146102b357806393b9740a146102e357806393d81d5814610302575f5ffd5b80634d3de353116100e35780634d3de353146101d85780634fa26d40146101eb57806359608fda1461020a5780635d9418021461023e57806379ba50971461025d575f5ffd5b80626d6cae1461016057806309c1ba2e1461018857806312065fe01461019d5780631d2b2afd146101af57806336bfffed146101b9575f5ffd5b3661015c57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b34801561016b575f5ffd5b5061017560045481565b6040519081526020015b60405180910390f35b348015610193575f5ffd5b5061017560035481565b3480156101a8575f5ffd5b5047610175565b6101b7610384565b005b3480156101c4575f5ffd5b506101b76101d33660046111c2565b61042b565b6101756101e6366004611278565b610528565b3480156101f6575f5ffd5b506101b761020536600461131b565b61058b565b348015610215575f5ffd5b50610229610224366004611278565b610615565b6040805192835260208301919091520161017f565b348015610249575f5ffd5b506101b761025836600461133b565b610680565b348015610268575f5ffd5b506101b76106e5565b34801561027c575f5ffd5b506101b761028b366004611383565b61078e565b34801561029b575f5ffd5b506102a46107c8565b60405161017f9392919061140d565b3480156102be575f5ffd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b3480156102ee575f5ffd5b506002546102cb906001600160a01b031681565b34801561030d575f5ffd5b506101b761031c36600461131b565b610954565b34801561032c575f5ffd5b50610175600b5481565b348015610341575f5ffd5b506101b7610350366004611448565b610968565b6101b7610a3b565b6101b7610a82565b348015610370575f5ffd5b506101b761037f36600461131b565b610b01565b6003545f036103c85760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b158015610412575f5ffd5b505af1158015610424573d5f5f3e3d5ffd5b5050505050565b610433610b12565b6003545f036104745760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b60448201526064016103bf565b5f5b81811015610523576002546003546001600160a01b039091169063bec4c08c908585858181106104a8576104a8611472565b90506020020160208101906104bd919061131b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b158015610501575f5ffd5b505af1158015610513573d5f5f3e3d5ffd5b5050600190920191506104769050565b505050565b5f5f61056b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b66915050565b6004819055905082600561057f8282611613565b50909695505050505050565b610593610b12565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b60648201526084016103bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f61065a8888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610be4915050565b600482905590925090508460056106718282611613565b50919890975095505050505050565b6002546001600160a01b031633146106da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c60448201526064016103bf565b610523838383610cda565b6001546001600160a01b031633146107385760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064016103bf565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610796610b12565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107e557505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161081b5750505050508152505090806004018054610847906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610873906114dd565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050908060050180546108d3906114dd565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff906114dd565b801561094a5780601f106109215761010080835404028352916020019161094a565b820191905f5260205f20905b81548152906001019060200180831161092d57829003601f168201915b5050505050905083565b61095c610b12565b61096581610ee2565b50565b610970610b12565b814710156109c05760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e7472616374000060448201526064016103bf565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109f3573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a2f91815260200190565b60405180910390a25050565b610a43610b12565b610a4b610f7a565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103fb565b5f3411610aca5760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b60448201526064016103bf565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610b09610b12565b610965816110a4565b5f546001600160a01b03163314610b645760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016103bf565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b9c91889188908890600401611754565b6020604051808303815f875af1158015610bb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc9190611795565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611795565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c8f908990899089906004016117ac565b60206040518083038185885af1158015610cab573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610cd09190611795565b9150935093915050565b8260045414610d215760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103932b8bab2b9ba1034b21760691b60448201526064016103bf565b6040805160e08101909152610ec79060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610d4a57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610d80575050505050815250508152602001600482018054610db0906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc906114dd565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b50505050508152602001600582018054610e40906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906114dd565b8015610eb75780601f10610e8e57610100808354040283529160200191610eb7565b820191905f5260205f20905b815481529060010190602001808311610e9a57829003601f168201915b505050505081525050838361114c565b806020019051810190610eda9190611795565b600b55505050565b6003545f03610f2c5760405162461bcd60e51b8152602060048201526016602482015275537562736372697074696f6e4964206973207a65726f60501b60448201526064016103bf565b600254600354604051622b825560e61b815260048101919091526001600160a01b03838116602483015290911690630ae09540906044015f604051808303815f87803b158015610412575f5ffd5b5f6003545f14610fcc5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f00000000000060448201526064016103bf565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561101d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110419190611795565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b15801561108b575f5ffd5b505af115801561109d573d5f5f3e3d5ffd5b5050505090565b336001600160a01b038216036110fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103bf565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c490611181908790879087906004016117dc565b5f60405180830381865afa15801561119b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdc919081019061183b565b5f5f602083850312156111d3575f5ffd5b823567ffffffffffffffff8111156111e9575f5ffd5b8301601f810185136111f9575f5ffd5b803567ffffffffffffffff81111561120f575f5ffd5b8560208260051b8401011115611223575f5ffd5b6020919091019590945092505050565b5f5f83601f840112611243575f5ffd5b50813567ffffffffffffffff81111561125a575f5ffd5b602083019150836020828501011115611271575f5ffd5b9250929050565b5f5f5f5f6060858703121561128b575f5ffd5b843563ffffffff8116811461129e575f5ffd5b9350602085013567ffffffffffffffff8111156112b9575f5ffd5b6112c587828801611233565b909450925050604085013567ffffffffffffffff8111156112e4575f5ffd5b850160c081880312156112f5575f5ffd5b939692955090935050565b80356001600160a01b0381168114611316575f5ffd5b919050565b5f6020828403121561132b575f5ffd5b61133482611300565b9392505050565b5f5f5f6040848603121561134d575f5ffd5b83359250602084013567ffffffffffffffff81111561136a575f5ffd5b61137686828701611233565b9497909650939450505050565b5f60208284031215611393575f5ffd5b5035919050565b805f5b60028110156113bc57815184526020938401939091019060010161139d565b50505050565b6113cd82825161139a565b6020810151610523604084018261139a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b61141781856113c2565b60c060808201525f61142c60c08301856113df565b82810360a084015261143e81856113df565b9695505050505050565b5f5f60408385031215611459575f5ffd5b8235915061146960208401611300565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e198436030181126114af575f5ffd5b83018035915067ffffffffffffffff8211156114c9575f5ffd5b602001915036819003821315611271575f5ffd5b600181811c908216806114f157607f821691505b60208210810361150f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561052357805f5260205f20601f840160051c8101602085101561153a5750805b601f840160051c820191505b81811015610424575f8155600101611546565b67ffffffffffffffff83111561157157611571611486565b6115858361157f83546114dd565b83611515565b5f601f8411600181146115b6575f851561159f5750838201355b5f19600387901b1c1916600186901b178355610424565b5f83815260208120601f198716915b828110156115e557868501358255602094850194600190920191016115c5565b5086821015611601575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b600281101561163357813583820155602090910190600101611616565b5050604082015f5b600281101561165b5781358382016002015560209091019060010161163b565b505061166a608083018361149a565b611678818360048601611559565b505061168760a083018361149a565b6113bc818360058601611559565b5f5f8335601e198436030181126116aa575f5ffd5b830160208101925035905067ffffffffffffffff8111156116c9575f5ffd5b803603821315611271575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61171c6080830183611695565b60c0608086015261173160c0860182846116d7565b91505061174160a0840184611695565b85830360a087015261143e8382846116d7565b63ffffffff85168152836020820152608060408201525f61177860808301856113df565b828103606084015261178a81856116ff565b979650505050505050565b5f602082840312156117a5575f5ffd5b5051919050565b63ffffffff84168152606060208201525f6117ca60608301856113df565b828103604084015261143e81856116ff565b604081526117ee6040820185516113c2565b5f602085015160c0808401526118086101008401826113df565b90506040860151603f198483030160e085015261182582826113df565b915050828103602084015261143e8185876116d7565b5f6020828403121561184b575f5ffd5b815167ffffffffffffffff811115611861575f5ffd5b8201601f81018413611871575f5ffd5b805167ffffffffffffffff81111561188b5761188b611486565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156118ba576118ba611486565b6040528181528282016020018610156118d1575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220c3b44a1906b2ea323c1b7dd1b7b303f120420afb0c338072e3b98639f89bc6d564736f6c634300081c00334d6f636b426c6f636b6c6f636b5265636569766572206465706c6f7965642061743a20a264697066735822122025874ab2432a81cd05bccf29cf2c02660c10a786db6db40f55c9d2ef8d5c7ff064736f6c634300081c0033\";\n\ntype DeployBlocklockReceiverConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployBlocklockReceiverConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployBlocklockReceiver__factory extends ContractFactory {\n  constructor(...args: DeployBlocklockReceiverConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployBlocklockReceiver & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployBlocklockReceiver__factory {\n    return super.connect(runner) as DeployBlocklockReceiver__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployBlocklockReceiverInterface {\n    return new Interface(_abi) as DeployBlocklockReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployBlocklockReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployBlocklockReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployBlocklockSender,\n  DeployBlocklockSenderInterface,\n} from \"../../DeployBlocklockSender.s.sol/DeployBlocklockSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506177828061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b604051637ed1ec7d60e01b815260206004820152600a60248201526949535f5550475241444560b01b60448201525f905f5160206176905f395f51905f5290637ed1ec7d90606401602060405180830381865afa1580156100cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f091906112f6565b90505f61015f604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060400160405280601c81526020017f64656372797074696f6e53656e64657250726f78794164647265737300000000815250610170565b905061016b8183610290565b505050565b5f5f61017b84610c19565b6040516360f9bb1160e01b81529091505f905f5160206176905f395f51905f52906360f9bb11906101b090859060040161134a565b5f60405180830381865afa1580156101ca573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101f19190810190611370565b90505f84604051602001610205919061143a565b60408051601f1981840301815290829052631e19e65760e01b825291505f5160206176905f395f51905f5290631e19e65790610247908590859060040161144f565b602060405180830381865afa158015610262573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610286919061147c565b9695505050505050565b5f5f61029a610cb7565b905082156103fb575f5160206176905f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156102e7575f5ffd5b505af11580156102f9573d5f5f3e3d5ffd5b505050505f61036a604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060400160405280601b81526020017f626c6f636b6c6f636b53656e64657250726f7879416464726573730000000000815250610170565b6040805163278f794360e11b81526001600160a01b03858116600483015260248201929092525f6044820152919250821690634f1ef286906064015f604051808303815f87803b1580156103bc575f5ffd5b505af11580156103ce573d5f5f3e3d5ffd5b505050506103f46040518060600160405280603c81526020016176dc603c913983610f0b565b91506107f9565b5f6040518060200161040c906112dc565b601f1982820381018352601f9091011660408181526001600160a01b0385166020830152808201525f606082015260800160408051601f198184030181529082905261045b92916020016114a2565b60405160208183030381529060405290505f5160206176905f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156104b1575f5ffd5b505af11580156104c3573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f92505f5160206176905f395f51905f529150637ed1ec7d90606401602060405180830381865afa158015610533573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055791906112f6565b156106445760405163350d56bf60e01b81525f5160206176905f395f51905f529063350d56bf9061058a906004016114be565b602060405180830381865afa1580156105a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c9919061147c565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a906105fa906077908690600401611506565b6020604051808303815f875af1158015610616573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a919061147c565b9050809350610699565b5f60775f1b84604051610656906112dc565b6001600160a01b0390911681526040602082018190525f908201526060018190604051809103905ff5905080158015610691573d5f5f3e3d5ffd5b509450849150505b610706604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060400160405280601b81526020017f626c6f636b6c6f636b53656e64657250726f787941646472657373000000000081525083610f54565b5f5160206176905f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561074b575f5ffd5b505af115801561075d573d5f5f3e3d5ffd5b50505050836001600160a01b031663485cc95561077861106e565b6040516001600160e01b031960e084901b1681526001600160a01b03918216600482015290891660248201526044015f604051808303815f87803b1580156107be575f5ffd5b505af11580156107d0573d5f5f3e3d5ffd5b505050506107f66040518060600160405280602c81526020016176b0602c913982610f0b565b50505b60405163c1978d1f60e01b815260206004820152600d60248201526c13505617d1d054d7d312535255609a1b6044820152610c12905f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa158015610861573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610885919061151e565b60405163c1978d1f60e01b815260206004820152601d60248201527f4741535f41465445525f5041594d454e545f43414c43554c4154494f4e00000060448201525f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa1580156108f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091d919061151e565b60405163c1978d1f60e01b815260206004820152601f60248201527f46554c46494c4c4d454e545f464c41545f4645455f4e41544956455f50504d0060448201525f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa158015610991573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b5919061151e565b60405163c1978d1f60e01b815260206004820152601060248201526f5745495f5045525f554e49545f47415360801b60448201525f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa158015610a1c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a40919061151e565b60405163c1978d1f60e01b815260206004820152601a60248201527f424c535f50414952494e475f434845434b5f4f5645524845414400000000000060448201525f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa158015610ab4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad8919061151e565b60405163c1978d1f60e01b815260206004820152601960248201527f4e41544956455f5052454d49554d5f50455243454e544147450000000000000060448201525f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa158015610b4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b70919061151e565b60405163c1978d1f60e01b815260206004820152601860248201527f4741535f464f525f43414c4c5f45584143545f434845434b000000000000000060448201525f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa158015610be4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c08919061151e565b61ffff168961116f565b5092915050565b60605f5f5160206176905f395f51905f526001600160a01b031663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa158015610c64573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c8b9190810190611370565b90508083604051602001610ca0929190611535565b604051602081830303815290604052915050919050565b5f5f60405180602001610cc9906112e9565b6020820181038252601f19601f8201166040525090505f5160206176905f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610d24575f5ffd5b505af1158015610d36573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f5160206176905f395f51905f529250637ed1ec7d9150606401602060405180830381865afa158015610da4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dc891906112f6565b15610eb25760405163350d56bf60e01b81525f5160206176905f395f51905f529063350d56bf90610dfb906004016114be565b602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a919061147c565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90610e6b906077908590600401611506565b6020604051808303815f875af1158015610e87573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eab919061147c565b9150610ee5565b5f60775f1b604051610ec3906112e9565b8190604051809103905ff5905080158015610ee0573d5f5f3e3d5ffd5b509250505b610f076040518060600160405280603581526020016177186035913983610f0b565b5090565b610f508282604051602401610f21929190611560565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526112b1565b5050565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e70757400000000000060208201529051634b96303160e11b81525f905f5160206176905f395f51905f529063972c606290610fbc90859088908890600401611589565b5f604051808303815f875af1158015610fd7573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ffe9190810190611370565b90505f5160206176905f395f51905f5263e23cd19f8261101d88610c19565b6040518363ffffffff1660e01b815260040161103a92919061144f565b5f604051808303815f87803b158015611051575f5ffd5b505af1158015611063573d5f5f3e3d5ffd5b505050505050505050565b60405163c1978d1f60e01b815260206004820152600b60248201526a505249564154455f4b455960a81b60448201525f9081905f5160206176905f395f51905f529063c1978d1f90606401602060405180830381865afa1580156110d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110f8919061151e565b6040516001625e79b760e01b03198152600481018290529091505f5160206176905f395f51905f529063ffa1864990602401602060405180830381865afa158015611145573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611169919061147c565b91505090565b4661013a8114806111825750806204cb2f145b156111c0576111936101f48a6115c6565b98506111a16101f4896115c6565b97506111af6101f4866115c6565b94506111bd6101f4846115c6565b92505b5f5160206176905f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611205575f5ffd5b505af1158015611217573d5f5f3e3d5ffd5b505060405163117e90d560e21b815263ffffffff808d166004830152808c166024830152808b166044830152808a166064830152808916608483015260ff881660a4830152861660c48201526001600160a01b03851692506345fa4354915060e4015f604051808303815f87803b158015611290575f5ffd5b505af11580156112a2573d5f5f3e3d5ffd5b50505050505050505050505050565b6112ba816112bd565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b61042b806115f283390190565b615c7380611a1d83390190565b5f60208284031215611306575f5ffd5b81518015158114611315575f5ffd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611315602083018461131c565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215611380575f5ffd5b815167ffffffffffffffff811115611396575f5ffd5b8201601f810184136113a6575f5ffd5b805167ffffffffffffffff8111156113c0576113c061135c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156113ef576113ef61135c565b604052818152828201602001861015611406575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b601760f91b81525f6113156001830184611423565b604081525f611461604083018561131c565b8281036020840152611473818561131c565b95945050505050565b5f6020828403121561148c575f5ffd5b81516001600160a01b0381168114611315575f5ffd5b5f6114b66114b08386611423565b84611423565b949350505050565b60208082526028908201527f52414e44414d555f435245415445325f464143544f52595f434f4e54524143546040820152675f4144445245535360c01b606082015260800190565b828152604060208201525f6114b6604083018461131c565b5f6020828403121561152e575f5ffd5b5051919050565b5f6115408285611423565b6c2f7363726970742f6a736f6e2f60981b8152611473600d820185611423565b604081525f611572604083018561131c565b905060018060a01b03831660208301529392505050565b606081525f61159b606083018661131c565b82810360208401526115ad818661131c565b91505060018060a01b0383166040830152949350505050565b63ffffffff8181168382160290811690818114610c1257634e487b7160e01b5f52601160045260245ffdfe608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c003360a060405230608052348015610013575f5ffd5b5060015f55610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b766100fd5f395f818161377c015281816137a501526138f20152615b765ff3fe608060405260043610610371575f3560e01c80637350f456116101c8578063aa433aff116100fd578063c58343ef1161009d578063cd802c911161006d578063cd802c9114610b18578063d547741f14610b37578063dac83d2914610b56578063dc311dd314610b75575f5ffd5b8063c58343ef14610a8f578063c9bc18c414610abb578063ca15c87314610ada578063cb63179714610af9575f5ffd5b8063b2a7cac5116100d8578063b2a7cac5146109d9578063bd18636b146109f8578063bec4c08c14610a17578063c3f909d414610a36575f5ffd5b8063aa433aff1461095e578063ad3cb1cc1461097d578063aefb212f146109ad575f5ffd5b8063995cb36e11610168578063a21a23e411610143578063a21a23e4146108ec578063a3246ad314610900578063a3907d711461092c578063a608a1e114610940575f5ffd5b8063995cb36e146108835780639d40a6fd146108a2578063a217fddf146108d9575f5ffd5b80638a1f165a116101a35780638a1f165a146107f45780639010d07c1461083257806391d148541461085157806395b55cfc14610870575f5ffd5b80637350f456146107ad57806375b238fc146107c15780637909dc7b146107e1575f5ffd5b806338c27d12116102a957806352d1902d116102495780635d3be001116102195780635d3be0011461071f5780635f7bda9f1461073e57806364d51a2a1461077257806367b276af14610799575f5ffd5b806352d1902d146106a657806354236fb3146106ba57806354fd4d50146106d957806357a8070a14610706575f5ffd5b806345fa43541161028457806345fa435414610636578063485cc955146106555780634b160935146106745780634f1ef28614610693575f5ffd5b806338c27d12146105dd5780633bc32c75146105f157806341af6c8714610617575f5ffd5b8063235296f7116103145780632f2ff15d116102ef5780632f2ff15d1461056e5780633255c4561461058d5780633408e470146105ac57806336568abe146105be575f5ffd5b8063235296f71461051a578063248a9ca31461053b5780632f2770db1461055a575f5ffd5b80630ae095401161034f5780630ae095401461046c578063133c40c71461048d57806318e3dd27146104c45780631e6ba15b146104fb575f5ffd5b806301ffc9a714610375578063062b1d90146103a9578063088070f5146103ca575b5f5ffd5b348015610380575f5ffd5b5061039461038f366004614a28565b610ba4565b60405190151581526020015b60405180910390f35b6103bc6103b7366004614b42565b610bce565b6040519081526020016103a0565b3480156103d5575f5ffd5b50600a546104259063ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b9091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e0016103a0565b348015610477575f5ffd5b5061048b610486366004614bd2565b610f43565b005b348015610498575f5ffd5b506001546104ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104cf575f5ffd5b506008546104e3906001600160601b031681565b6040516001600160601b0390911681526020016103a0565b348015610506575f5ffd5b5061048b610515366004614c00565b610f94565b348015610525575f5ffd5b5061052e610ff3565b6040516103a09190614c49565b348015610546575f5ffd5b506103bc610555366004614c5b565b61107f565b348015610565575f5ffd5b5061048b61109f565b348015610579575f5ffd5b5061048b610588366004614bd2565b6110ee565b348015610598575f5ffd5b506103bc6105a7366004614c72565b611110565b3480156105b7575f5ffd5b50466103bc565b3480156105c9575f5ffd5b5061048b6105d8366004614bd2565b611128565b3480156105e8575f5ffd5b5061052e61115b565b3480156105fc575f5ffd5b506008546104e390600160601b90046001600160601b031681565b348015610622575f5ffd5b50610394610631366004614c5b565b611168565b348015610641575f5ffd5b5061048b610650366004614c9a565b6111fd565b348015610660575f5ffd5b5061048b61066f366004614d22565b6113d9565b34801561067f575f5ffd5b506103bc61068e366004614d4e565b61166c565b61048b6106a1366004614d67565b61167d565b3480156106b1575f5ffd5b506103bc61169c565b3480156106c5575f5ffd5b5061048b6106d4366004614c00565b6116b8565b3480156106e4575f5ffd5b50604080518082019091526005815264302e302e3160d81b602082015261052e565b348015610711575f5ffd5b50600b546103949060ff1681565b34801561072a575f5ffd5b5061048b610739366004614df0565b61172c565b348015610749575f5ffd5b5061075d610758366004614c5b565b6117ff565b6040516103a099989796959493929190614edb565b34801561077d575f5ffd5b50610786606481565b60405161ffff90911681526020016103a0565b3480156107a4575f5ffd5b5061052e611b91565b3480156107b8575f5ffd5b5061052e611b9e565b3480156107cc575f5ffd5b506103bc5f516020615b215f395f51905f5281565b6103bc6107ef366004614f70565b611bab565b3480156107ff575f5ffd5b5061052e60405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b34801561083d575f5ffd5b506104ac61084c366004614fd0565b611c9b565b34801561085c575f5ffd5b5061039461086b366004614bd2565b611cc8565b61048b61087e366004614c5b565b611cfe565b34801561088e575f5ffd5b506009546104e3906001600160601b031681565b3480156108ad575f5ffd5b506005546108c1906001600160401b031681565b6040516001600160401b0390911681526020016103a0565b3480156108e4575f5ffd5b506103bc5f81565b3480156108f7575f5ffd5b506103bc611e09565b34801561090b575f5ffd5b5061091f61091a366004614c5b565b611fb3565b6040516103a09190615033565b348015610937575f5ffd5b5061048b611fdc565b34801561094b575f5ffd5b50600b5461039490610100900460ff1681565b348015610969575f5ffd5b5061048b610978366004614c5b565b612027565b348015610988575f5ffd5b5061052e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156109b8575f5ffd5b506109cc6109c7366004614fd0565b612067565b6040516103a09190615045565b3480156109e4575f5ffd5b5061048b6109f3366004614c5b565b61215c565b348015610a03575f5ffd5b5061048b610a12366004614c00565b612247565b348015610a22575f5ffd5b5061048b610a31366004614bd2565b6122e0565b348015610a41575f5ffd5b50600a5463ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b90910416610425565b348015610a9a575f5ffd5b50610aae610aa9366004614c5b565b6123d4565b6040516103a09190615087565b348015610ac6575f5ffd5b5061052e610ad536600461515e565b6127ef565b348015610ae5575f5ffd5b506103bc610af4366004614c5b565b612c0d565b348015610b04575f5ffd5b5061048b610b13366004614bd2565b612c31565b348015610b23575f5ffd5b50610394610b32366004614c5b565b612e1d565b348015610b42575f5ffd5b5061048b610b51366004614bd2565b612eb1565b348015610b61575f5ffd5b5061048b610b70366004614bd2565b612ecd565b348015610b80575f5ffd5b50610b94610b8f366004614c5b565b612f6a565b6040516103a094939291906151c5565b5f6001600160e01b03198216635a05180f60e01b1480610bc85750610bc882613029565b92915050565b600b545f9060ff16610c275760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610c765760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b83151580610c8357505f34115b610cf55760405162461bcd60e51b815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610c1e565b610cff858561305d565b5f610d5560405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525084604051602001610d4091906152c4565b60405160208183030381529060405286613287565b90506040518061012001604052808681526020013481526020018763ffffffff168152602001826001600160401b0316815260200185815260200184610d9a90615356565b815260408051602081810183525f808352818501929092528251808201845282815283850152336060948501526001600160401b0380871683526010825291839020855181559085015160018201559184015160028301805494860151909216600160201b026001600160601b031990941663ffffffff909116179290921790915560808201516003820190610e309082615467565b5060a0820151805180516004840191908290610e4f908290600261486b565b506020820151610e65906002808401919061486b565b50505060208201516004820190610e7c9082615467565b5060408201516005820190610e919082615467565b50505060c0820151600a820190610ea89082615467565b5060e0820151600b820190610ebd9082615467565b506101009190910151600c90910180546001600160a01b0319166001600160a01b0390921691909117905560405133906001600160401b038316907fa7cf57609b4abed689b408db0b0c3dc6309786b6c07d5efbbd1d5b150e6d2c0690610f2990889088904290615521565b60405180910390a36001600160401b031695945050505050565b81610f4d816132fb565b610f5561334f565b610f5e83611168565b15610f7c57604051631685ecdd60e31b815260040160405180910390fd5b610f868383613377565b610f8f60015f55565b505050565b610faa5f516020615b215f395f51905f526133e7565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f0dae1d002e96c238ebe140ca1799f77093ae09e0bde40f79bb29ed78d09e652d905f90a250565b600c8054611000906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461102c906153f1565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b5f9081525f516020615b015f395f51905f52602052604090206001015490565b6110b55f516020615b215f395f51905f526133e7565b600b805461ff0019166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b6110f78261107f565b611100816133e7565b61110a83836133f1565b50505050565b5f6111218363ffffffff1683613433565b9392505050565b6001600160a01b03811633146111515760405163334bd91960e11b815260040160405180910390fd5b610f8f828261353f565b600d8054611000906153f1565b5f8181526003602052604081206002018054825b818110156111f3575f60025f85848154811061119a5761119a615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208982529092529020546001600160401b03600160481b9091041611156111eb57506001949350505050565b60010161117c565b505f949350505050565b6112135f516020615b215f395f51905f526133e7565b60ff8216609b116112665760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610c1e565b6040805160e08101825263ffffffff89811680835289821660208401819052898316848601819052898416606086018190528985166080870181905260ff8a1660a0880181905295891660c0909701879052600a805467ffffffffffffffff1916909517600160201b909402939093176fffffffffffffffff00000000000000001916600160401b90920263ffffffff60601b191691909117600160601b9091021764ffffffffff60801b1916600160801b90910260ff60a01b191617600160a01b9092029190911763ffffffff60a81b1916600160a81b909202919091179055600b805460ff19166001179055517f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad5906113c890899089908990899089908990899063ffffffff97881681529587166020870152938616604086015291851660608501528416608084015260ff1660a083015290911660c082015260e00190565b60405180910390a150505050505050565b5f6113e2613578565b805490915060ff600160401b82041615906001600160401b03165f811580156114085750825b90505f826001600160401b031660011480156114235750303b155b905081158015611431575080155b1561144f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147957845460ff60401b1916600160401b1785555b6114816135a0565b6114896135a0565b6114a05f516020615b215f395f51905f52886133f1565b6114e05760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b6114ea5f886133f1565b61152a5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b600180546001600160a01b0319166001600160a01b03881617905561154e466135aa565b60405160200161155e9190615581565b604051602081830303815290604052600c908161157b9190615467565b50611585466135aa565b60405160200161159591906155d8565b604051602081830303815290604052600d90816115b29190615467565b506115bc466135aa565b6040516020016115cc9190615614565b604051602081830303815290604052600e90816115e99190615467565b506115f3466135aa565b6040516020016116039190615650565b604051602081830303815290604052600f90816116209190615467565b50831561166357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016113c8565b50505050505050565b5f610bc88263ffffffff163a613433565b611685613771565b61168e82613815565b611698828261382b565b5050565b5f6116a56138e7565b505f516020615ae15f395f51905f525b90565b6116c061334f565b6116d65f516020615b215f395f51905f526133e7565b600854600160601b90046001600160601b03166116f4811515613930565b600880546bffffffffffffffffffffffff60601b1916905561171f826001600160601b03831661394e565b5061172960015f55565b50565b6001546001600160a01b031633146117865760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792044656372797074696f6e53656e6465722063616e2063616c6c00006044820152606401610c1e565b6117f88585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506139be92505050565b5050505050565b60106020525f908152604090208054600182015460028301546003840180549394929363ffffffff831693600160201b9093046001600160401b0316929190611847906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611873906153f1565b80156118be5780601f10611895576101008083540402835291602001916118be565b820191905f5260205f20905b8154815290600101906020018083116118a157829003601f168201915b50506040805160e081019091529394939250506004830190508160608101828160a084018260028282826020028201915b8154815260200190600101908083116118ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311611925575050505050815250508152602001600482018054611955906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906153f1565b80156119cc5780601f106119a3576101008083540402835291602001916119cc565b820191905f5260205f20905b8154815290600101906020018083116119af57829003601f168201915b505050505081526020016005820180546119e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906153f1565b8015611a5c5780601f10611a3357610100808354040283529160200191611a5c565b820191905f5260205f20905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815250509080600a018054611a75906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa1906153f1565b8015611aec5780601f10611ac357610100808354040283529160200191611aec565b820191905f5260205f20905b815481529060010190602001808311611acf57829003601f168201915b50505050509080600b018054611b01906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d906153f1565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050600c90930154919250506001600160a01b031689565b600f8054611000906153f1565b600e8054611000906153f1565b600b545f9060ff16611bff5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610c1e565b600b54610100900460ff1615611c4e5760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b5f611c91865f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250610bce915050565b9695505050505050565b5f8281525f516020615ac15f395f51905f52602081905260408220611cc09084613b6f565b949350505050565b5f9182525f516020615b015f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d0661334f565b5f81815260036020526040902054611d26906001600160a01b0316613b7a565b5f81815260046020526040812080546001600160601b031691349190611d4c83856156a0565b92506101000a8154816001600160601b0302191690836001600160601b031602179055503460085f8282829054906101000a90046001600160601b0316611d9391906156a0565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611de691906156bf565b604080519283526020830191909152015b60405180910390a25061172960015f55565b5f611e1261334f565b6005546001600160401b031633611e2a6001436156d2565b6040516001600160601b0319606093841b81166020830152914060348201523090921b1660548201526001600160c01b031960c083901b16606882015260700160408051601f1981840301815291905280516020909101209150611e8f8160016156e5565b6005805467ffffffffffffffff19166001600160401b03928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516001600160601b039091166001600160a01b031992831617600160601b91909916029790971790558451918201855233825281810183815282860185815289855260038352959093208251815488166001600160a01b0391821617825593516001820180549098169416939093179095559251805192949192611f6292600285019201906148a9565b50611f7291506006905084613ba1565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250506116b560015f55565b5f8181525f516020615ac15f395f51905f52602081905260409091206060919061112190613bac565b611ff25f516020615b215f395f51905f526133e7565b600b805461ff00191690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b61203d5f516020615b215f395f51905f526133e7565b5f818152600360205260409020546001600160a01b031661205d81613b7a565b6116988282613377565b60605f6120746006613bb8565b905080841061209657604051631390f2a160e01b815260040160405180910390fd5b5f6120a184866156bf565b9050818111806120af575083155b6120b957806120bb565b815b90505f6120c886836156d2565b9050806001600160401b038111156120e2576120e2614a67565b60405190808252806020026020018201604052801561210b578160200160208202803683370190505b5093505f5b818110156121525761212d61212588836156bf565b600690613b6f565b85828151811061213f5761213f615556565b6020908102919091010152600101612110565b5050505092915050565b61216461334f565b5f818152600360205260409020546001600160a01b031661218481613b7a565b5f828152600360205260409020600101546001600160a01b031633146121db575f828152600360205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c1e565b5f828152600360209081526040918290208054336001600160a01b03199182168117835560019092018054909116905582516001600160a01b03851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611df7565b61224f61334f565b6122655f516020615b215f395f51905f526133e7565b6009546001600160601b031661227c811515613930565b600980546001600160601b0319169055600880548291905f906122a99084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061171f82826001600160601b031661394e565b816122ea816132fb565b6122f261334f565b6001600160a01b0382165f9081526002602090815260408083208684529091529020805460ff16156123245750610f86565b5f848152600360205260409020600201805460631901612357576040516305a48e0f60e01b815260040160405180910390fd5b8154600160ff1990911681178355815490810182555f82815260209081902090910180546001600160a01b0319166001600160a01b03871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610f8f60015f55565b6123dc6148fc565b5f82815260106020908152604080832081516101208101835281548152600182015493810193909352600281015463ffffffff811692840192909252600160201b9091046001600160401b03166060830152600381018054608084019190612443906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461246f906153f1565b80156124ba5780601f10612491576101008083540402835291602001916124ba565b820191905f5260205f20905b81548152906001019060200180831161249d57829003601f168201915b50505091835250506040805160e08101909152602090910190600483018160608101828160a084018260028282826020028201915b8154815260200190600101908083116124ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612525575050505050815250508152602001600482018054612555906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612581906153f1565b80156125cc5780601f106125a3576101008083540402835291602001916125cc565b820191905f5260205f20905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016005820180546125e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906153f1565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b5050505050815250508152602001600a82018054612679906153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546126a5906153f1565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600b82018054612709906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612735906153f1565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b5050509183525050600c91909101546001600160a01b031660209091015260608101519091506001600160401b0316610bc85760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c995c5d595cdd1251607a1b6044820152606401610c1e565b60606127fe6080850185615723565b9050610100036128505760405162461bcd60e51b815260206004820152601d60248201527f696e76616c69642064656372797074696f6e206b6579206c656e6774680000006044820152606401610c1e565b61010061286060a0860186615723565b9050106128af5760405162461bcd60e51b815260206004820152601d60248201527f6d657373616765206f6620756e737570706f72746564206c656e6774680000006044820152606401610c1e565b5f6128bd6080860186615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b838110156129515784848281811061290d5761290d615556565b9050013560f81c60f81b82828151811061292957612929615556565b0160200180516001600160f81b0319908116909218909116905f82901a9053506001016128f3565b505f61296060a0870187615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250600f80549596509094612a3e94509092506129aa91506153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906153f1565b8015612a215780601f106129f857610100808354040283529160200191612a21565b820191905f5260205f20905b815481529060010190602001808311612a0457829003601f168201915b505050505084898060a00190612a379190615723565b9050613bc1565b90505f5b612a4f60a0890189615723565b9050811015612aaf57818181518110612a6a57612a6a615556565b602001015160f81c60f81b838281518110612a8757612a87615556565b0160200180516001600160f81b0319908116909218909116905f82901a905350600101612a42565b505f612b64600e8054612ac1906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612aed906153f1565b8015612b385780601f10612b0f57610100808354040283529160200191612b38565b820191905f5260205f20905b815481529060010190602001808311612b1b57829003601f168201915b50505050508585604051602001612b50929190615765565b604051602081830303815290604052613d56565b90505f612b7082613db5565b90505f80612b8c83612b87368e90038e018e615779565b613e47565b909250905060018215158215151414612bfe5760405162461bcd60e51b815260206004820152602e60248201527f696e76616c69642064656372797074696f6e206b6579202f206369706865727460448201526d195e1d081c9959da5cdd195c995960921b6064820152608401610c1e565b50939998505050505050505050565b5f8181525f516020615ac15f395f51905f5260208190526040822061112190613bb8565b81612c3b816132fb565b612c4361334f565b612c4c83611168565b15612c6a57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b0382165f90815260026020908152604080832086845290915290205460ff16612cbf576040516379bfd40160e01b8152600481018490526001600160a01b0383166024820152604401610c1e565b5f838152600360205260408120600201805490915b81811015612dc257846001600160a01b0316838281548110612cf857612cf8615556565b5f918252602090912001546001600160a01b031603612dba5782612d1d6001846156d2565b81548110612d2d57612d2d615556565b905f5260205f20015f9054906101000a90046001600160a01b0316838281548110612d5a57612d5a615556565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082805480612d9557612d95615793565b5f8281526020902081015f1990810180546001600160a01b0319169055019055612dc2565b600101612cd4565b506001600160a01b0384165f818152600260209081526040808320898452825291829020805460ff19169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a791016123c1565b5f5f612e28836123d4565b606001516001600160401b03169050805f03612e4657505f92915050565b60015460405163cd802c9160e01b8152600481018390526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015612e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906157a7565b612eba8261107f565b612ec3816133e7565b61110a838361353f565b81612ed7816132fb565b612edf61334f565b5f83815260036020526040902060018101546001600160a01b03848116911614612f60576001810180546001600160a01b0319166001600160a01b03851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610f8f60015f55565b5f8181526003602052604081205481906001600160a01b03166060612f8e82613b7a565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526001600160601b03851694600160601b90046001600160401b031693879391839183018282801561301357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612ff5575b5050505050905093509350935093509193509193565b5f6001600160e01b03198216637965db0b60e01b1480610bc857506301ffc9a760e01b6001600160e01b0319831614610bc8565b600a5463ffffffff90811690831611156130b95760405162461bcd60e51b815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610c1e565b8015613236575f818152600360205260409020546001600160a01b03166130df81613b7a565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff811615158083526001600160401b036101008304811695840195909552600160481b909104909316918101919091529061318c5760405162461bcd60e51b815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c656044820152603960f91b6064820152608401610c1e565b80602001805161319b906157c6565b6001600160401b031690526040810180516131b5906157c6565b6001600160401b039081169091525f8581526020938452604090819020835181549585015192909401518316600160481b0270ffffffffffffffff00000000000000000019929093166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921791909116179055505050565b5f6132478363ffffffff163a613433565b905080341015610f8f5760405162461bcd60e51b815260206004820152600b60248201526a46656520746f6f206c6f7760a81b6044820152606401610c1e565b60015460405163f87f0e6160e01b81525f916001600160a01b03169063f87f0e61906132bb908790879087906004016157f0565b6020604051808303815f875af11580156132d7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc09190615828565b5f818152600360205260409020546001600160a01b031661331b81613b7a565b336001600160a01b0382161461169857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c1e565b60025f540361337157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f61338183613fb6565b905061339682826001600160601b031661394e565b604080516001600160a01b03841681526001600160601b038316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b6117298133614107565b5f5f516020615ac15f395f51905f528161340b8585614140565b90508015611cc0575f85815260208390526040902061342a90856141e1565b50949350505050565b6040805160e081018252600a5463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b81048316608083015260ff600160a01b82041660a0830152600160a81b900490911660c08201525f9081836134ba57816060015163ffffffff166134bc565b835b90505f6134c8866141f5565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6134f45f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161352f5761352f61583f565b04019a9950505050505050505050565b5f5f516020615ac15f395f51905f5281613559858561420c565b90508015611cc0575f85815260208390526040902061342a9085614285565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bc8565b6135a8614299565b565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f8151811061360a5761360a615556565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061363857613638615556565b60200101906001600160f81b03191690815f1a9053505f5b60208110156137695782600486836020811061366e5761366e615556565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061369457613694615556565b01602001516001600160f81b031916826136af836002615853565b6136ba9060026156bf565b815181106136ca576136ca615556565b60200101906001600160f81b03191690815f1a905350828582602081106136f3576136f3615556565b825191901a600f1690811061370a5761370a615556565b01602001516001600160f81b03191682613725836002615853565b6137309060026156bf565b61373b9060016156bf565b8151811061374b5761374b615556565b60200101906001600160f81b03191690815f1a905350600101613650565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806137f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166137eb5f516020615ae15f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156135a85760405163703e46dd60e11b815260040160405180910390fd5b6117295f516020615b215f395f51905f526133e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613885575060408051601f3d908101601f1916820190925261388291810190615828565b60015b6138ad57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c1e565b5f516020615ae15f395f51905f5281146138dd57604051632a87526960e21b815260048101829052602401610c1e565b610f8f83836142be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135a85760405163703e46dd60e11b815260040160405180910390fd5b8061172957604051631e9acf1760e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613997576040519150601f19603f3d011682016040523d82523d5f602084013e61399c565b606091505b5050905080610f8f5760405163950b247960e01b815260040160405180910390fd5b5f5a5f858152601060205260408120600281015492935091600160201b90046001600160401b03169003613a345760405162461bcd60e51b815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610c1e565b5f635d94180260e01b8686604051602401613a5092919061586a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600c8301546002840154600a549293505f92613ac09285926001600160a01b039091169163ffffffff91821691600160a81b90910481169061431316565b5090508015613b3157600b8301613ad78782615467565b50600a8301613ae68682615467565b50867f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f7846003018560040186600b01604051613b2493929190615923565b60405180910390a2613b65565b6040518781527f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d9060200160405180910390a15b611663878561434a565b5f6111218383614439565b6001600160a01b03811661172957604051630fb532db60e11b815260040160405180910390fd5b5f611121838361445f565b60605f611121836144ab565b5f610bc8825490565b825160609060ff811115613bea57846040516313727cdd60e11b8152600401610c1e9190614c49565b60408051608880825260c082019092525f916020820181803683370190505090505f81865f875f8b88604051602001613c299796959493929190615998565b60405160208183030381529060405290505f818051906020012090505f8160018a87604051602001613c5e9493929190615a02565b60408051601f19818403018152919052805160208201209091505f60ff89166001600160401b03811115613c9457613c94614a67565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f6005613cd2601f60ff8d166156bf565b901c905060015b81811015613d3857858418613cef8260016156bf565b8e8b604051602001613d049493929190615a02565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101613cd9565b505f1901602090810282010191909152955050505050509392505050565b5f5f613d6484846030613bc1565b601881015160308201519192506001600160c01b0391821691165f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478381600160c01b850908979650505050505050565b604080518082019091525f8082526020820152613dd0614957565b6001815260026020820152604081018390525f60608360808460076107d05a03fa905080613e405760405162461bcd60e51b815260206004820152601f60248201527f4731207363616c6172206d756c7469706c69636174696f6e206661696c6564006044820152606401610c1e565b5050919050565b5f5f5f604051806101800160405280865f01518152602001866020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020016001815260200160028152602001855f0151600160028110613f2557613f25615556565b60200201518152602001855f01515f60028110613f4457613f44615556565b602002015181526020018560200151600160028110613f6557613f65615556565b6020020151815260200185602001515f60028110613f8557613f85615556565b602002015190529050613f96614975565b6020816101808460086107d05a03fa9051151593509150505b9250929050565b5f8181526003602090815260408083206004909252822054600290910180546001600160601b03909216929091905b818110156140505760025f84838154811061400257614002615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208882529092529020805470ffffffffffffffffffffffffffffffffff19169055600101613fe5565b505f84815260036020526040812080546001600160a01b031990811682556001820180549091169055906140876002830182614993565b50505f84815260046020526040902080546001600160a01b03191690556140af600685614504565b506001600160601b03831615613e4057600880548491905f906140dc9084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050919050565b6141118282611cc8565b6116985760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c1e565b5f5f516020615b015f395f51905f526141598484611cc8565b6141d8575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561418e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610bc8565b5f915050610bc8565b5f611121836001600160a01b03841661445f565b5f614201603f83615a45565b610bc8906001615a78565b5f5f516020615b015f395f51905f526142258484611cc8565b156141d8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610bc8565b5f611121836001600160a01b03841661450b565b6142a16145e5565b6135a857604051631afcd79f60e31b815260040160405180910390fd5b6142c7826145fe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561430b57610f8f8282614661565b6116986146d3565b5f5f5a83811061434057839003604081048103851015614340575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614354836123d4565b8051909150156144285780515f9081526004602052604090208054600c9061438b90600160601b90046001600160401b03166157c6565b82546001600160401b0391821661010093840a90810290830219909116179092558201516001600160a01b03165f908152600260209081526040808320855184529091529020805490916009916143ea91600160481b90910416615a94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505f614419833a6146f2565b905061110a81835f0151614749565b610f8f8160200151825f0151614749565b5f825f01828154811061444e5761444e615556565b905f5260205f200154905092915050565b5f8181526001830160205260408120546144a457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b6060815f018054806020026020016040519081016040528092919081815260200182805480156144f857602002820191905f5260205f20905b8154815260200190600101908083116144e4575b50505050509050919050565b5f61112183835b5f81815260018301602052604081205480156141d8575f61452d6001836156d2565b85549091505f90614540906001906156d2565b905080821461459f575f865f01828154811061455e5761455e615556565b905f5260205f200154905080875f01848154811061457e5761457e615556565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145b0576145b0615793565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bc8565b5f6145ee613578565b54600160401b900460ff16919050565b806001600160a01b03163b5f0361463357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c1e565b5f516020615ae15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161467d9190615ab5565b5f60405180830381855af49150503d805f81146146b5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ba565b606091505b50915091506146ca8583836147e6565b95945050505050565b34156135a85760405163b398979f60e01b815260040160405180910390fd5b5f5f5a600a54600160201b900463ffffffff1685010390508281025f600a5460649190920160ff600160a01b8404168201020464e8d4a5100063ffffffff600160401b909304929092169190910201949350505050565b80156147af575f81815260046020526040902080546001600160601b0390811690614778908516821015613930565b81546001600160601b039185900382166001600160601b031991821617909255600980548083168601909216919092161790555050565b600880546001600160601b03600160601b80830482168601909116026bffffffffffffffffffffffff60601b199091161790555050565b6060826147fb576147f682614842565b611121565b815115801561481257506001600160a01b0384163b155b1561483b57604051639996b31560e01b81526001600160a01b0385166004820152602401610c1e565b5080611121565b8051156148525780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215614899579160200282015b8281111561489957825182559160200191906001019061487e565b506148a59291506149aa565b5090565b828054828255905f5260205f20908101928215614899579160200282015b8281111561489957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906148c7565b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f6001600160401b031681526020016060815260200161493e6149be565b8152606060208201819052604082018190525f91015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5080545f8255905f5260205f209081019061172991905b5b808211156148a5575f81556001016149ab565b60405180606001604052806149d16149e5565b815260200160608152602001606081525090565b60405180604001604052806149f8614a0a565b8152602001614a05614a0a565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215614a38575f5ffd5b81356001600160e01b031981168114611121575f5ffd5b803563ffffffff81168114614a62575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614a9d57614a9d614a67565b60405290565b5f82601f830112614ab2575f5ffd5b81356001600160401b03811115614acb57614acb614a67565b604051601f8201601f19908116603f011681016001600160401b0381118282101715614af957614af9614a67565b604052818152838201602001851015614b10575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60c08284031215614b3c575f5ffd5b50919050565b5f5f5f5f60808587031215614b55575f5ffd5b614b5e85614a4f565b93506020850135925060408501356001600160401b03811115614b7f575f5ffd5b614b8b87828801614aa3565b92505060608501356001600160401b03811115614ba6575f5ffd5b614bb287828801614b2c565b91505092959194509250565b6001600160a01b0381168114611729575f5ffd5b5f5f60408385031215614be3575f5ffd5b823591506020830135614bf581614bbe565b809150509250929050565b5f60208284031215614c10575f5ffd5b813561112181614bbe565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111216020830184614c1b565b5f60208284031215614c6b575f5ffd5b5035919050565b5f5f60408385031215614c83575f5ffd5b614c8c83614a4f565b946020939093013593505050565b5f5f5f5f5f5f5f60e0888a031215614cb0575f5ffd5b614cb988614a4f565b9650614cc760208901614a4f565b9550614cd560408901614a4f565b9450614ce360608901614a4f565b9350614cf160808901614a4f565b925060a088013560ff81168114614d06575f5ffd5b9150614d1460c08901614a4f565b905092959891949750929550565b5f5f60408385031215614d33575f5ffd5b8235614d3e81614bbe565b91506020830135614bf581614bbe565b5f60208284031215614d5e575f5ffd5b61112182614a4f565b5f5f60408385031215614d78575f5ffd5b8235614d8381614bbe565b915060208301356001600160401b03811115614d9d575f5ffd5b614da985828601614aa3565b9150509250929050565b5f5f83601f840112614dc3575f5ffd5b5081356001600160401b03811115614dd9575f5ffd5b602083019150836020828501011115613faf575f5ffd5b5f5f5f5f5f60608688031215614e04575f5ffd5b8535945060208601356001600160401b03811115614e20575f5ffd5b614e2c88828901614db3565b90955093505060408601356001600160401b03811115614e4a575f5ffd5b614e5688828901614db3565b969995985093965092949392505050565b805f5b600281101561110a578151845260209384019390910190600101614e6a565b5f8151614e97848251614e67565b60200151614ea86040850182614e67565b50602082015160c06080850152614ec260c0850182614c1b565b9050604083015184820360a08601526146ca8282614c1b565b89815288602082015263ffffffff881660408201526001600160401b038716606082015261012060808201525f614f16610120830188614c1b565b82810360a0840152614f288188614e89565b905082810360c0840152614f3c8187614c1b565b905082810360e0840152614f508186614c1b565b91505060018060a01b0383166101008301529a9950505050505050505050565b5f5f5f5f60608587031215614f83575f5ffd5b614f8c85614a4f565b935060208501356001600160401b03811115614fa6575f5ffd5b614fb287828801614db3565b90945092505060408501356001600160401b03811115614ba6575f5ffd5b5f5f60408385031215614fe1575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150295781516001600160a01b0316865260209586019590910190600101615002565b5093949350505050565b602081525f6111216020830184614ff0565b602080825282518282018190525f918401906040840190835b8181101561507c57835183526020938401939092019160010161505e565b509095945050505050565b6020815281516020820152602082015160408201525f60408301516150b4606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015161012060a08401526150e5610140840182614c1b565b905060a0840151601f198483030160c08501526151028282614e89565b91505060c0840151601f198483030160e08501526151208282614c1b565b91505060e0840151601f198483030161010085015261513f8282614c1b565b9150506101008401516137696101208501826001600160a01b03169052565b5f5f5f60408486031215615170575f5ffd5b83356001600160401b03811115615185575f5ffd5b61519186828701614b2c565b93505060208401356001600160401b038111156151ac575f5ffd5b6151b886828701614db3565b9497909650939450505050565b6001600160601b03851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190525f90611c9190830184614ff0565b5f5f8335601e1984360301811261521b575f5ffd5b83016020810192503590506001600160401b03811115615239575f5ffd5b803603821315613faf575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61528c6080830183615206565b60c060808601526152a160c086018284615247565b9150506152b160a0840184615206565b85830360a0870152611c91838284615247565b602081525f611121602083018461526f565b5f82601f8301126152e5575f5ffd5b6152ed614a7b565b8060408401858111156152fe575f5ffd5b845b8181101561507c578035845260209384019301615300565b5f60808284031215615328575f5ffd5b615330614a7b565b905061533c83836152d6565b815261534b83604084016152d6565b602082015292915050565b5f60c08236031215615366575f5ffd5b604051606081016001600160401b038111828210171561538857615388614a67565b6040526153953684615318565b815260808301356001600160401b038111156153af575f5ffd5b6153bb36828601614aa3565b60208301525060a08301356001600160401b038111156153d9575f5ffd5b6153e536828601614aa3565b60408301525092915050565b600181811c9082168061540557607f821691505b602082108103614b3c57634e487b7160e01b5f52602260045260245ffd5b601f821115610f8f57805f5260205f20601f840160051c810160208510156154485750805b601f840160051c820191505b818110156117f8575f8155600101615454565b81516001600160401b0381111561548057615480614a67565b6154948161548e84546153f1565b84615423565b6020601f8211600181146154c6575f83156154af5750848201515b5f19600385901b1c1916600184901b1784556117f8565b5f84815260208120601f198516915b828110156154f557878501518255602094850194600190920191016154d5565b508482101561551257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6155336060830186614c1b565b8281036020840152615545818661526f565b915050826040830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f6155c7602c83018461556a565b605f60f81b81526001019392505050565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261325f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261335f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261345f60f01b60208201525f6155c7602283018461556a565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b038181168382160190811115610bc857610bc861568c565b80820180821115610bc857610bc861568c565b81810381811115610bc857610bc861568c565b6001600160401b038181168382160190811115610bc857610bc861568c565b6001600160601b038281168282160390811115610bc857610bc861568c565b5f5f8335601e19843603018112615738575f5ffd5b8301803591506001600160401b03821115615751575f5ffd5b602001915036819003821315613faf575f5ffd5b5f611cc0615773838661556a565b8461556a565b5f60808284031215615789575f5ffd5b6111218383615318565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156157b7575f5ffd5b81518015158114611121575f5ffd5b5f6001600160401b0382166001600160401b0381036157e7576157e761568c565b60010192915050565b606081525f6158026060830186614c1b565b82810360208401526158148186614c1b565b90508281036040840152611c918185614c1b565b5f60208284031215615838575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b8082028115828204841417610bc857610bc861568c565b828152604060208201525f611cc06040830184614c1b565b5f815461588e816153f1565b8085526001821680156158a857600181146158c4576158f8565b60ff1983166020870152602082151560051b87010193506158f8565b845f5260205f205f5b838110156158ef5781546020828a0101526001820191506020810190506158cd565b87016020019450505b50505092915050565b805f5b600281101561110a578154845260209093019260019182019101615904565b606081525f6159356060830186615882565b82810360208401526159478186615901565b6159576040820160028701615901565b60c0608082015261596e60c0820160048701615882565b81810360a08301526159838160058801615882565b9150508281036040840152611c918185615882565b5f6159ac6159a6838b61556a565b8961556a565b6001600160f81b031960f889811b8216835288811b8216600184015287901b1660028201526159de600382018661556a565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f615a27602183018561556a565b60f89390931b6001600160f81b031916835250506001019392505050565b5f63ffffffff831680615a6657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610bc857610bc861568c565b5f6001600160401b03821680615aac57615aac61568c565b5f190192915050565b5f611121828461556a56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220380d1acfd2c11b36009bf449c1b9c1894bfe02a4fb8d8c35e32e1b449239fa8364736f6c634300081c00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d426c6f636b6c6f636b53656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a20426c6f636b6c6f636b53656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a20426c6f636b6c6f636b53656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a20a26469706673582212204e4887938e0f57956e12e200b9b32fafa948e830a9720cad0766c21995aff54764736f6c634300081c0033\";\n\ntype DeployBlocklockSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployBlocklockSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployBlocklockSender__factory extends ContractFactory {\n  constructor(...args: DeployBlocklockSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployBlocklockSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployBlocklockSender__factory {\n    return super.connect(runner) as DeployBlocklockSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployBlocklockSenderInterface {\n    return new Interface(_abi) as DeployBlocklockSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployBlocklockSender {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployBlocklockSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployBlocklockSignatureScheme,\n  DeployBlocklockSignatureSchemeInterface,\n} from \"../../DeployBlocklockSignatureScheme.s.sol/DeployBlocklockSignatureScheme\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506134bf8061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b610071610074565b50565b5f5f6040518060200161008690610950565b601f1982820381018352601f909101166040526100a16104b0565b516100aa6104b0565b602001516040516020016100bf9291906109c8565b60408051601f19818403018152908290526100dd9291602001610a01565b60405160208183030381529060405290505f5160206134165f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610133575f5ffd5b505af1158015610145573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f92505f5160206134165f395f51905f529150637ed1ec7d90606401602060405180830381865afa1580156101b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d99190610a1d565b156103025760405163350d56bf60e01b815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e54524143546044820152675f4144445245535360c01b60648201525f5160206134165f395f51905f529063350d56bf90608401602060405180830381865afa158015610263573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102879190610a3c565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a906102b8906077908690600401610a90565b6020604051808303815f875af11580156102d4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102f89190610a3c565b9050809250610354565b607761030c6104b0565b516103156104b0565b6020015160405161032590610950565b6103309291906109c8565b8190604051809103905ff590508015801561034d573d5f5f3e3d5ffd5b5092508290505b6103766040518060600160405280602f815260200161345b602f913982610721565b5f6103c6604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060600160405280602581526020016134366025913961076a565b90505f8190505f5160206134165f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610411575f5ffd5b505af1158015610423573d5f5f3e3d5ffd5b50506040805180820182526013815272424e3235342d424c532d424c4f434b4c4f434b60681b60208201529051635d5c33ed60e11b81526001600160a01b038516935063bab867da925061047c91908790600401610aa8565b5f604051808303815f87803b158015610493575f5ffd5b505af11580156104a5573d5f5f3e3d5ffd5b505050505050505090565b6104b861095d565b604080516080810180835263c1978d1f60e01b905260206084820152601160a4820152700424c535f5055424c49435f4b45595f583607c1b60c48201529081908101805f5160206134165f395f51905f5263c1978d1f60e48501602060405180830381865afa15801561052d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105519190610ad1565b815260405163c1978d1f60e01b81526020600482018190526011602483015270424c535f5055424c49435f4b45595f583160781b6044830152909101905f5160206134165f395f51905f529063c1978d1f90606401602060405180830381865afa1580156105c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105e59190610ad1565b90528152604080518082019182905263c1978d1f60e01b90915260206044820181905260116064830152700424c535f5055424c49435f4b45595f593607c1b608483015290910190805f5160206134165f395f51905f5263c1978d1f60a48301602060405180830381865afa158015610660573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106849190610ad1565b815260405163c1978d1f60e01b81526020600482018190526011602483015270424c535f5055424c49435f4b45595f593160781b6044830152909101905f5160206134165f395f51905f529063c1978d1f90606401602060405180830381865afa1580156106f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107189190610ad1565b90529052919050565b6107668282604051602401610737929190610aa8565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b17905261088a565b5050565b5f5f61077584610893565b6040516360f9bb1160e01b81529091505f905f5160206134165f395f51905f52906360f9bb11906107aa908590600401610ae8565b5f60405180830381865afa1580156107c4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107eb9190810190610b0e565b90505f846040516020016107ff9190610bc1565b60408051601f1981840301815290829052631e19e65760e01b825291505f5160206134165f395f51905f5290631e19e657906108419085908590600401610bd6565b602060405180830381865afa15801561085c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108809190610a3c565b9695505050505050565b61007181610931565b60605f5f5160206134165f395f51905f526001600160a01b031663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa1580156108de573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109059190810190610b0e565b9050808360405160200161091a929190610c03565b604051602081830303815290604052915050919050565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6127e780610c2f83390190565b6040518060400160405280610970610982565b815260200161097d610982565b905290565b60405180604001604052806002906020820280368337509192915050565b805f5b60028110156109c25781518452602093840193909101906001016109a3565b50505050565b608081016109d682856109a0565b6109e360408301846109a0565b9392505050565b5f81518060208401855e5f93019283525090919050565b5f610a15610a0f83866109ea565b846109ea565b949350505050565b5f60208284031215610a2d575f5ffd5b815180151581146109e3575f5ffd5b5f60208284031215610a4c575f5ffd5b81516001600160a01b03811681146109e3575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f610a156040830184610a62565b604081525f610aba6040830185610a62565b905060018060a01b03831660208301529392505050565b5f60208284031215610ae1575f5ffd5b5051919050565b602081525f6109e36020830184610a62565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610b1e575f5ffd5b815167ffffffffffffffff811115610b34575f5ffd5b8201601f81018413610b44575f5ffd5b805167ffffffffffffffff811115610b5e57610b5e610afa565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610b8d57610b8d610afa565b604052818152828201602001861015610ba4575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b601760f91b81525f6109e360018301846109ea565b604081525f610be86040830185610a62565b8281036020840152610bfa8185610a62565b95945050505050565b5f610c0e82856109ea565b6c2f7363726970742f6a736f6e2f60981b8152610bfa600d8201856109ea56fe5f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b506040516127e73803806127e78339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104b3565b5050506105c5565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661056d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461056d565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61056d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061056d565b01602001516001600160f81b0319168261020b836002610595565b6102169060026105b2565b815181106102265761022661056d565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61056d565b825191901a600f169081106102665761026661056d565b01602001516001600160f81b03191682610281836002610595565b61028c9060026105b2565b6102979060016105b2565b815181106102a7576102a761056d565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f82518060208501602c85015e605f60f81b602c939091019283015250602d01919050565b600181811c9082168061044357607f821691505b60208210810361046157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104ae57805f5260205f20601f840160051c8101602085101561048c5750805b601f840160051c820191505b818110156104ab575f8155600101610498565b50505b505050565b81516001600160401b038111156104cc576104cc61031f565b6104e0816104da845461042f565b84610467565b6020601f821160018114610512575f83156104fb5750848201515b5f19600385901b1c1916600184901b1784556104ab565b5f84815260208120601f198516915b828110156105415787850151825560209485019460019092019101610521565b508482101561055e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105ac576105ac610581565b92915050565b808201808211156105ac576105ac610581565b612215806105d25f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee14610125578063eae1e15b1461012d578063f6e548e914610140575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b610091610163565b60405161009f929190611e88565b60405180910390f35b6100bb6100b6366004611ee8565b6101dc565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102bc565b60405161009f9190611f55565b6100e660405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b6100e6610348565b6100e661013b366004611ee8565b6103c7565b61015361014e366004611f67565b610401565b604051901515815260200161009f565b61016b611de1565b610173611de1565b60408051808201918290525f91600291908390839082845b81548152602001906001019080831161018b575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101ba5750505050509050915091509091565b5f5f5f6102a6600480546101ef90612006565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90612006565b80156102665780601f1061023d57610100808354040283529160200191610266565b820191905f5260205f20905b81548152906001019060200180831161024957829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e192505050565b80516020909101519093509150505b9250929050565b600480546102c990612006565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590612006565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081565b60408051608081018083526060926103c292915f91839190820190839060029082845b81548152602001906001019080831161036b57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103a1575050505050815250506105ad565b905090565b60605f5f6103d585856101dc565b915091506103f6604051806040016040528084815260200183815250610609565b925050505b92915050565b5f5f61044188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f61048287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f6104c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c592505050565b90505f6104d1838386610766565b509b9a5050505050505050505050565b604080518082019091525f80825260208201525f6104ff84846108d9565b90505f61051282825b602002015161098e565b90505f610520836001610508565b905061052a611dff565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105855781604051630251c7e160e31b815260040161057c9190612052565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106a65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161057c565b5060208181015160409283015183518085019094529083529082015290565b6106cd611e1d565b815160801461071e5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161057c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108495761084961203e565b60200201518152602001865f01515f600281106108685761086861203e565b6020020151815260200186602001516001600281106108895761088961203e565b6020020151815260200186602001515f600281106108a9576108a961203e565b6020020151905290506108ba611e42565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108e1611de1565b5f6108ec8484610c6f565b90505f5f5f5f601885016001600160c01b0381511693506030860190506001600160c01b0381511694505f5160206121a05f395f51905f52855f5160206121a05f395f51905f52600160c01b870908604887015160608801516001600160c01b03908116975016945092505f5160206121a05f395f51905f5290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b610996611de1565b5f5160206121a05f395f51905f5282106109c65760405163d53e941560e01b81526004810183905260240161057c565b5f5f5160206121a05f395f51905f5260045f5160206121a05f395f51905f528586090990505f5f5160206121a05f395f51905f528260010890505f5160206121a05f395f51905f52610a25835f5160206121a05f395f51905f52612096565b60010891505f610a445f5160206121a05f395f51905f52838509610dc6565b90505f5f5160206121a05f395f51905f5278016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa5f5160206121a05f395f51905f52845f5160206121a05f395f51905f52888b09090990505f5f5160206121a05f395f51905f52610ab9835f5160206121a05f395f51905f52612096565b5f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f52835f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f5286870990505f5f5160206121a05f395f51905f5286830990505f5f5160206121a05f395f51905f52805f5160206121a05f395f51905f528485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610b6e610b6988610dd0565b610e09565b5f0b600103610bbe57868c52610b8387610dd0565b9050610b8e81610e6e565b60208e0191909152915081610bb95760405163396ec77160e01b81526004810182905260240161057c565b610c21565b610bca610b6987610dd0565b5f0b600103610bdf57858c52610b8386610dd0565b828c52610beb83610dd0565b9050610bf681610e6e565b60208e0191909152915081610c215760405163396ec77160e01b81526004810182905260240161057c565b60208c0151610c2f90610e95565b610c388e610e95565b14610c5f5760208c0151610c59905f5160206121a05f395f51905f52612096565b60208d01525b5050505050505050505050919050565b815160609060ff811115610c9857836040516313727cdd60e11b815260040161057c9190611f55565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610cd897969594939291906120c0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610d0d949392919061212a565b60408051808303601f1901815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610da957858418610d6082600161216d565b8d8b604051602001610d75949392919061212a565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101610d4a565b505f19016020908102820101919091529550505050505092915050565b5f6103fb82610ea1565b5f5f5160206121a05f395f51905f5260035f5160206121a05f395f51905f52845f5160206121a05f395f51905f52868709090892915050565b5f5f610e14836115e6565b9050610e2e60015f5160206121a05f395f51905f52612096565b8103610e3d57505f1992915050565b8015801590610e4d575080600114155b156103fb5760405163396ec77160e01b81526004810184905260240161057c565b5f5f610e79836116ae565b9150825f5160206121a05f395f51905f52838409149050915091565b5f6103fb600283612180565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690525f5160206121c05f395f51905f5260a08401525f5160206121a05f395f51905f5260c0808501919091529293505f92839160055afa90505f519250806116a75760405163c6daf7ab60e01b8152600481018590525f5160206121c05f395f51905f5260248201525f5160206121a05f395f51905f52604482015260640161057c565b5050919050565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e30611de1565b8152602001611e3d611de1565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b6002811015611e82578151845260209384019390910190600101611e63565b50505050565b60808101611e968285611e60565b611ea36040830184611e60565b9392505050565b5f5f83601f840112611eba575f5ffd5b50813567ffffffffffffffff811115611ed1575f5ffd5b6020830191508360208285010111156102b5575f5ffd5b5f5f60208385031215611ef9575f5ffd5b823567ffffffffffffffff811115611f0f575f5ffd5b611f1b85828601611eaa565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ea36020830184611f27565b5f5f5f5f5f5f60608789031215611f7c575f5ffd5b863567ffffffffffffffff811115611f92575f5ffd5b611f9e89828a01611eaa565b909750955050602087013567ffffffffffffffff811115611fbd575f5ffd5b611fc989828a01611eaa565b909550935050604087013567ffffffffffffffff811115611fe8575f5ffd5b611ff489828a01611eaa565b979a9699509497509295939492505050565b600181811c9082168061201a57607f821691505b60208210810361203857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6080810181835f5b600481101561207957815183526020928301929091019060010161205a565b50505092915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156103fb576103fb612082565b5f81518060208401855e5f93019283525090919050565b5f6120d46120ce838b6120a9565b896120a9565b6001600160f81b031960f889811b8216835288811b8216600184015287901b16600282015261210660038201866120a9565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f61214f60218301856120a9565b60f89390931b6001600160f81b031916835250506001019392505050565b808201808211156103fb576103fb612082565b5f8261219a57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3a26469706673582212205caa4b51dcb44fb7ffd37136b7d8f1021f0fe438a1383457afcecdb09fc9411664736f6c634300081c00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d7369676e6174757265536368656d654164647265737350726f766964657241646472657373426c6f636b6c6f636b5369676e6174757265536368656d6520636f6e7472616374206465706c6f79656420746f3a20a264697066735822122065ea8ed49b5e19b92f1e7c1e9a19b47dba0d5278ba53109e587daf7ed20ac97f64736f6c634300081c0033\";\n\ntype DeployBlocklockSignatureSchemeConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployBlocklockSignatureSchemeConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployBlocklockSignatureScheme__factory extends ContractFactory {\n  constructor(...args: DeployBlocklockSignatureSchemeConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployBlocklockSignatureScheme & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployBlocklockSignatureScheme__factory {\n    return super.connect(runner) as DeployBlocklockSignatureScheme__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployBlocklockSignatureSchemeInterface {\n    return new Interface(_abi) as DeployBlocklockSignatureSchemeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployBlocklockSignatureScheme {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployBlocklockSignatureScheme;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployDecryptionSender,\n  DeployDecryptionSenderInterface,\n} from \"../../DeployDecryptionSender.s.sol/DeployDecryptionSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506148878061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b604051637ed1ec7d60e01b815260206004820152600a60248201526949535f5550475241444560b01b60448201525f905f51602061476d5f395f51905f5290637ed1ec7d90606401602060405180830381865afa1580156100cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100f09190610d7e565b90505f610142604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b81525060405180606001604052806025815260200161482d60259139610153565b905061014e8183610273565b505050565b5f5f61015e846107e3565b6040516360f9bb1160e01b81529091505f905f51602061476d5f395f51905f52906360f9bb1190610193908590600401610dd2565b5f60405180830381865afa1580156101ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526101d49190810190610df8565b90505f846040516020016101e89190610ec2565b60408051601f1981840301815290829052631e19e65760e01b825291505f51602061476d5f395f51905f5290631e19e6579061022a9085908590600401610ed7565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610f04565b9695505050505050565b5f5f61027d610881565b905082156103de575f51602061476d5f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156102ca575f5ffd5b505af11580156102dc573d5f5f3e3d5ffd5b505050505f61034d604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060400160405280601c81526020017f64656372797074696f6e53656e64657250726f78794164647265737300000000815250610153565b6040805163278f794360e11b81526001600160a01b03858116600483015260248201929092525f6044820152919250821690634f1ef286906064015f604051808303815f87803b15801561039f575f5ffd5b505af11580156103b1573d5f5f3e3d5ffd5b505050506103d76040518060600160405280603d815260200161478d603d913983610ad5565b91506107dc565b5f604051806020016103ef90610d64565b601f1982820381018352601f9091011660408181526001600160a01b0385166020830152808201525f606082015260800160408051601f198184030181529082905261043e9291602001610f2a565b60405160208183030381529060405290505f51602061476d5f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610494575f5ffd5b505af11580156104a6573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f92505f51602061476d5f395f51905f529150637ed1ec7d90606401602060405180830381865afa158015610516573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053a9190610d7e565b156106275760405163350d56bf60e01b81525f51602061476d5f395f51905f529063350d56bf9061056d90600401610f46565b602060405180830381865afa158015610588573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105ac9190610f04565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a906105dd906077908690600401610f8e565b6020604051808303815f875af11580156105f9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061061d9190610f04565b905080935061067c565b5f60775f1b8460405161063990610d64565b6001600160a01b0390911681526040602082018190525f908201526060018190604051809103905ff5905080158015610674573d5f5f3e3d5ffd5b509450849150505b6106e9604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b8152506040518060400160405280601c81526020017f64656372797074696f6e53656e64657250726f7879416464726573730000000081525083610b1e565b5f51602061476d5f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561072e575f5ffd5b505af1158015610740573d5f5f3e3d5ffd5b50505050836001600160a01b031663485cc95561075b610c38565b6040516001600160e01b031960e084901b1681526001600160a01b03918216600482015290891660248201526044015f604051808303815f87803b1580156107a1575f5ffd5b505af11580156107b3573d5f5f3e3d5ffd5b505050506107d96040518060600160405280602d8152602001614800602d913982610ad5565b50505b5092915050565b60605f5f51602061476d5f395f51905f526001600160a01b031663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa15801561082e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108559190810190610df8565b9050808360405160200161086a929190610fa6565b604051602081830303815290604052915050919050565b5f5f6040518060200161089390610d71565b6020820181038252601f19601f8201166040525090505f51602061476d5f395f51905f526001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156108ee575f5ffd5b505af1158015610900573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f51602061476d5f395f51905f529250637ed1ec7d9150606401602060405180830381865afa15801561096e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109929190610d7e565b15610a7c5760405163350d56bf60e01b81525f51602061476d5f395f51905f529063350d56bf906109c590600401610f46565b602060405180830381865afa1580156109e0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a049190610f04565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a90610a35906077908590600401610f8e565b6020604051808303815f875af1158015610a51573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a759190610f04565b9150610aaf565b5f60775f1b604051610a8d90610d71565b8190604051809103905ff5905080158015610aaa573d5f5f3e3d5ffd5b509250505b610ad16040518060600160405280603681526020016147ca6036913983610ad5565b5090565b610b1a8282604051602401610aeb929190610fd1565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052610d39565b5050565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e70757400000000000060208201529051634b96303160e11b81525f905f51602061476d5f395f51905f529063972c606290610b8690859088908890600401610ffa565b5f604051808303815f875af1158015610ba1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bc89190810190610df8565b90505f51602061476d5f395f51905f5263e23cd19f82610be7886107e3565b6040518363ffffffff1660e01b8152600401610c04929190610ed7565b5f604051808303815f87803b158015610c1b575f5ffd5b505af1158015610c2d573d5f5f3e3d5ffd5b505050505050505050565b60405163c1978d1f60e01b815260206004820152600b60248201526a505249564154455f4b455960a81b60448201525f9081905f51602061476d5f395f51905f529063c1978d1f90606401602060405180830381865afa158015610c9e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc29190611037565b6040516001625e79b760e01b03198152600481018290529091505f51602061476d5f395f51905f529063ffa1864990602401602060405180830381865afa158015610d0f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d339190610f04565b91505090565b610d4281610d45565b50565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b61042b8061104f83390190565b6132f38061147a83390190565b5f60208284031215610d8e575f5ffd5b81518015158114610d9d575f5ffd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610d9d6020830184610da4565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610e08575f5ffd5b815167ffffffffffffffff811115610e1e575f5ffd5b8201601f81018413610e2e575f5ffd5b805167ffffffffffffffff811115610e4857610e48610de4565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610e7757610e77610de4565b604052818152828201602001861015610e8e575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f81518060208401855e5f93019283525090919050565b601760f91b81525f610d9d6001830184610eab565b604081525f610ee96040830185610da4565b8281036020840152610efb8185610da4565b95945050505050565b5f60208284031215610f14575f5ffd5b81516001600160a01b0381168114610d9d575f5ffd5b5f610f3e610f388386610eab565b84610eab565b949350505050565b60208082526028908201527f52414e44414d555f435245415445325f464143544f52595f434f4e54524143546040820152675f4144445245535360c01b606082015260800190565b828152604060208201525f610f3e6040830184610da4565b5f610fb18285610eab565b6c2f7363726970742f6a736f6e2f60981b8152610efb600d820185610eab565b604081525f610fe36040830185610da4565b905060018060a01b03831660208301529392505050565b606081525f61100c6060830186610da4565b828103602084015261101e8186610da4565b91505060018060a01b0383166040830152949350505050565b5f60208284031215611047575f5ffd5b505191905056fe608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131f26101015f395f8181611efb01528181611f24015261207101526131f25ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063c58343ef11610092578063e63b5d5811610062578063e63b5d581461054e578063e6b3ca7114610562578063f7cef80014610581578063f87f0e61146105a0575f5ffd5b8063c58343ef146104c5578063ca15c873146104f1578063cd802c9114610510578063d547741f1461052f575f5ffd5b8063a3246ad3116100cd578063a3246ad31461041e578063ac9650d81461044a578063ad3cb1cc14610476578063b0947289146104a6575f5ffd5b80639010d07c146103b557806391d14854146103ec578063a217fddf1461040b575f5ffd5b80634b96e16611610168578063571d708711610138578063571d70871461033b5780636f421ea91461034f57806375b238fc1461036357806381d12c5814610383575f5ffd5b80634b96e166146102bd5780634f1ef286146102de57806352d1902d146102f157806354fd4d5014610305575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461024b57806336568abe1461026a57806347c0318614610289578063485cc9551461029e575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461271f565b6105bf565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461275a565b6105e9565b005b348015610229575f5ffd5b5061023d610238366004612775565b610648565b6040519081526020016101f4565b348015610256575f5ffd5b5061021c61026536600461278c565b610668565b348015610275575f5ffd5b5061021c61028436600461278c565b61068a565b348015610294575f5ffd5b5061023d60015481565b3480156102a9575f5ffd5b5061021c6102b83660046127ba565b6106c2565b3480156102c8575f5ffd5b506102d1610882565b6040516101f491906127e6565b61021c6102ec366004612892565b610893565b3480156102fc575f5ffd5b5061023d6108b2565b348015610310575f5ffd5b50604080518082019091526005815264302e302e3160d81b60208201525b6040516101f4919061294c565b348015610346575f5ffd5b506102d16108cd565b34801561035a575f5ffd5b506102d16108d9565b34801561036e575f5ffd5b5061023d5f51602061319d5f395f51905f5281565b34801561038e575f5ffd5b506103a261039d366004612775565b6108e5565b6040516101f4979695949392919061295e565b3480156103c0575f5ffd5b506103d46103cf3660046129e3565b610bcc565b6040516001600160a01b0390911681526020016101f4565b3480156103f7575f5ffd5b506101e861040636600461278c565b610bf9565b348015610416575f5ffd5b5061023d5f81565b348015610429575f5ffd5b5061043d610438366004612775565b610c2f565b6040516101f49190612a03565b348015610455575f5ffd5b50610469610464366004612a43565b610c5f565b6040516101f49190612ab2565b348015610481575f5ffd5b5061032e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104b1575f5ffd5b506101e86104c0366004612775565b610d44565b3480156104d0575f5ffd5b506104e46104df366004612775565b610d50565b6040516101f49190612b15565b3480156104fc575f5ffd5b5061023d61050b366004612775565b6110ad565b34801561051b575f5ffd5b506101e861052a366004612775565b6110d1565b34801561053a575f5ffd5b5061021c61054936600461278c565b6110ee565b348015610559575f5ffd5b5061023d61110a565b34801561056d575f5ffd5b506003546103d4906001600160a01b031681565b34801561058c575f5ffd5b5061021c61059b366004612c1c565b611115565b3480156105ab575f5ffd5b5061023d6105ba366004612c93565b611883565b5f6001600160e01b03198216635a05180f60e01b14806105e357506105e382611df6565b92915050565b6105ff5f51602061319d5f395f51905f52611e2a565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f9081525f51602061317d5f395f51905f52602052604090206001015490565b61067182610648565b61067a81611e2a565b6106848383611e37565b50505050565b6001600160a01b03811633146106b35760405163334bd91960e11b815260040160405180910390fd5b6106bd8282611e79565b505050565b5f6106cb611eb2565b805490915060ff600160401b82041615906001600160401b03165f811580156106f15750825b90505f826001600160401b0316600114801561070c5750303b155b90508115801561071a575080155b156107385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845460ff60401b1916600160401b1785555b61076a611eda565b610772611eda565b6107895f51602061319d5f395f51905f5288611e37565b6107ce5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6107d85f88611e37565b6108185760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064016107c5565b600380546001600160a01b0319166001600160a01b038816179055831561087957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b606061088e6006611ee4565b905090565b61089b611ef0565b6108a482611f94565b6108ae8282611faa565b5050565b5f6108bb612066565b505f51602061315d5f395f51905f5290565b606061088e6004611ee4565b606061088e6008611ee4565b60026020525f90815260409020805481906108ff90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90612d2f565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b50505050509080600101805461098b90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b790612d2f565b8015610a025780601f106109d957610100808354040283529160200191610a02565b820191905f5260205f20905b8154815290600101906020018083116109e557829003601f168201915b505050505090806002018054610a1790612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390612d2f565b8015610a8e5780601f10610a6557610100808354040283529160200191610a8e565b820191905f5260205f20905b815481529060010190602001808311610a7157829003601f168201915b505050505090806003018054610aa390612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90612d2f565b8015610b1a5780601f10610af157610100808354040283529160200191610b1a565b820191905f5260205f20905b815481529060010190602001808311610afd57829003601f168201915b505050505090806004018054610b2f90612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612d2f565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b505050600590930154919250506001600160a01b0381169060ff600160a01b9091041687565b5f8281525f51602061313d5f395f51905f52602081905260408220610bf190846120af565b949350505050565b5f9182525f51602061317d5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f51602061313d5f395f51905f526020819052604090912060609190610c5890611ee4565b9392505050565b604080515f815260208101909152606090826001600160401b03811115610c8857610c88612828565b604051908082528060200260200182016040528015610cbb57816020015b6060815260200190600190039081610ca65790505b5091505f5b83811015610d3c57610d1730868684818110610cde57610cde612d8e565b9050602002810190610cf09190612da2565b85604051602001610d0393929190612dfb565b6040516020818303038152906040526120ba565b838281518110610d2957610d29612d8e565b6020908102919091010152600101610cc0565b505092915050565b5f6105e360088361212c565b610d996040518060e0016040528060608152602001606081526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f151581525090565b5f8281526002602052604090819020815160e08101909252805482908290610dc090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dec90612d2f565b8015610e375780601f10610e0e57610100808354040283529160200191610e37565b820191905f5260205f20905b815481529060010190602001808311610e1a57829003601f168201915b50505050508152602001600182018054610e5090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c90612d2f565b8015610ec75780601f10610e9e57610100808354040283529160200191610ec7565b820191905f5260205f20905b815481529060010190602001808311610eaa57829003601f168201915b50505050508152602001600282018054610ee090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c90612d2f565b8015610f575780601f10610f2e57610100808354040283529160200191610f57565b820191905f5260205f20905b815481529060010190602001808311610f3a57829003601f168201915b50505050508152602001600382018054610f7090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c90612d2f565b8015610fe75780601f10610fbe57610100808354040283529160200191610fe7565b820191905f5260205f20905b815481529060010190602001808311610fca57829003601f168201915b5050505050815260200160048201805461100090612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461102c90612d2f565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b5050509183525050600591909101546001600160a01b0381166020830152600160a01b900460ff16151560409091015292915050565b5f8181525f51602061313d5f395f51905f52602081905260408220610c5890612143565b5f6110dd60068361212c565b806105e357506105e360088361212c565b6110f782610648565b61110081611e2a565b6106848383611e79565b5f61088e6006612143565b61111d61214c565b611126856110d1565b6111865760405162461bcd60e51b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201526084016107c5565b5f85815260026020526040808220815160e081019092528054829082906111ac90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612d2f565b80156112235780601f106111fa57610100808354040283529160200191611223565b820191905f5260205f20905b81548152906001019060200180831161120657829003601f168201915b5050505050815260200160018201805461123c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461126890612d2f565b80156112b35780601f1061128a576101008083540402835291602001916112b3565b820191905f5260205f20905b81548152906001019060200180831161129657829003601f168201915b505050505081526020016002820180546112cc90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f890612d2f565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050815260200160038201805461135c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461138890612d2f565b80156113d35780601f106113aa576101008083540402835291602001916113d3565b820191905f5260205f20905b8154815290600101906020018083116113b657829003601f168201915b505050505081526020016004820180546113ec90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461141890612d2f565b80156114635780601f1061143a57610100808354040283529160200191611463565b820191905f5260205f20905b81548152906001019060200180831161144657829003601f168201915b5050509183525050600591909101546001600160a01b038082166020840152600160a01b90910460ff16151560409283015282516003549251630b76139f60e31b8152939450925f9290911690635bb09cf8906114c490859060040161294c565b602060405180830381865afa1580156114df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115039190612e1a565b90506001600160a01b03811661154c5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420736368656d6560901b60448201526064016107c5565b604080840151905163eae1e15b60e01b815282915f916001600160a01b0384169163eae1e15b91611580919060040161294c565b5f60405180830381865afa15801561159a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115c19190810190612e35565b9050816001600160a01b031663f6e548e9828989866001600160a01b031663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611610573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116379190810190612e35565b6040518563ffffffff1660e01b81526004016116569493929190612ed1565b602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190612f15565b6116e15760405162461bcd60e51b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107c5565b5f8560a001516001600160a01b0316635d3be00160e01b8c8c8c8c8c604051602401611711959493929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161174f9190612f6c565b5f604051808303815f865af19150503d805f8114611788576040519150601f19603f3d011682016040523d82523d5f602084013e61178d565b606091505b50505f8c8152600260205260409020600501805460ff60a01b1916600160a01b17905590506117bd60068c612174565b5080611807576117ce60088c61217f565b506040518b81527f3fed05c5d3a79e0e2f23ffd594267f0e29799ad1b4b6a7756138d5247baa4a7b9060200160405180910390a161186d565b6118108b610d44565b156118225761182060088c612174565b505b61182d60048c61217f565b508a7f0a1f5b3782d8f604353407c980dbfe6b55499c5b92cb8c39f089c73f348407e68b8b8b8b6040516118649493929190612f77565b60405180910390a25b50505050505061187c60015f55565b5050505050565b5f6001805f8282546118959190612f9d565b9091555050600354604051632fc9fa3360e01b81526001600160a01b0390911690632fc9fa33906118cc908a908a90600401612fb0565b602060405180830381865afa1580156118e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190b9190612f15565b6119575760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107c5565b61199e600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b6119f85760405162461bcd60e51b815260206004820152602560248201527f43697068657274657874206661696c6564206c656e67746820626f756e647320604482015264636865636b60d81b60648201526084016107c5565b611a3f600161100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b611a975760405162461bcd60e51b8152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e647320636044820152636865636b60e01b60648201526084016107c5565b611ad583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061221a92505050565b15611b2e5760405162461bcd60e51b815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a65604482015262726f7360e81b60648201526084016107c5565b600354604051630b76139f60e31b81525f916001600160a01b031690635bb09cf890611b60908b908b90600401612fb0565b602060405180830381865afa158015611b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9f9190612e1a565b90506001600160a01b038116611bf75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e617475726520736368656d65000000000000000060448201526064016107c5565b6040518060e0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8a01819004810282018101909252888152918101919089908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093855250506040805160208181018352848252808601919091528151808201835284815282860152336060860152608090940183905260015483526002909352502081518190611cf79082613007565b5060208201516001820190611d0c9082613007565b5060408201516002820190611d219082613007565b5060608201516003820190611d369082613007565b5060808201516004820190611d4b9082613007565b5060a08201516005909101805460c0909301511515600160a01b026001600160a81b03199093166001600160a01b0390921691909117919091179055600154611d969060069061217f565b50336001600160a01b03166001547f133b1acfa49920f88bc8c23faeb2ba43b75b3d6c453290a824f3c85e7733df138a8a88888c8c42604051611ddf97969594939291906130c1565b60405180910390a350506001549695505050505050565b5f6001600160e01b03198216637965db0b60e01b14806105e357506301ffc9a760e01b6001600160e01b03198316146105e3565b611e348133612265565b50565b5f5f51602061313d5f395f51905f5281611e51858561229e565b90508015610bf1575f858152602083905260409020611e70908561233f565b50949350505050565b5f5f51602061313d5f395f51905f5281611e938585612353565b90508015610bf1575f858152602083905260409020611e7090856123cc565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105e3565b611ee26123e0565b565b60605f610c5883612405565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f6a5f51602061315d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611ee25760405163703e46dd60e11b815260040160405180910390fd5b611e345f51602061319d5f395f51905f52611e2a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612004575060408051601f3d908101601f1916820190925261200191810190613111565b60015b61202c57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107c5565b5f51602061315d5f395f51905f52811461205c57604051632a87526960e21b8152600481018290526024016107c5565b6106bd838361245e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ee25760405163703e46dd60e11b815260040160405180910390fd5b5f610c5883836124b3565b60605f5f846001600160a01b0316846040516120d69190612f6c565b5f60405180830381855af49150503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b50915091506121238583836124d9565b95945050505050565b5f8181526001830160205260408120541515610c58565b5f6105e3825490565b60025f540361216e57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f610c588383612535565b5f610c58838361260f565b5f818311156122015760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107c5565b8351838110801590612123575091909111159392505050565b5f805b825181101561225c5782818151811061223857612238612d8e565b01602001516001600160f81b0319161561225457505f92915050565b60010161221d565b50600192915050565b61226f8282610bf9565b6108ae5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107c5565b5f5f51602061317d5f395f51905f526122b78484610bf9565b612336575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556122ec3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105e3565b5f9150506105e3565b5f610c58836001600160a01b03841661260f565b5f5f51602061317d5f395f51905f5261236c8484610bf9565b15612336575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105e3565b5f610c58836001600160a01b038416612535565b6123e861265b565b611ee257604051631afcd79f60e31b815260040160405180910390fd5b6060815f0180548060200260200160405190810160405280929190818152602001828054801561245257602002820191905f5260205f20905b81548152602001906001019080831161243e575b50505050509050919050565b61246782612674565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156124ab576106bd82826120ba565b6108ae6126d7565b5f825f0182815481106124c8576124c8612d8e565b905f5260205f200154905092915050565b6060826124ee576124e9826126f6565b610c58565b815115801561250557506001600160a01b0384163b155b1561252e57604051639996b31560e01b81526001600160a01b03851660048201526024016107c5565b5080610c58565b5f8181526001830160205260408120548015612336575f612557600183612d7b565b85549091505f9061256a90600190612d7b565b90508082146125c9575f865f01828154811061258857612588612d8e565b905f5260205f200154905080875f0184815481106125a8576125a8612d8e565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125da576125da613128565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105e3565b5f81815260018301602052604081205461265457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105e3565b505f6105e3565b5f612664611eb2565b54600160401b900460ff16919050565b806001600160a01b03163b5f036126a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107c5565b5f51602061315d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b3415611ee25760405163b398979f60e01b815260040160405180910390fd5b8051156127065780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561272f575f5ffd5b81356001600160e01b031981168114610c58575f5ffd5b6001600160a01b0381168114611e34575f5ffd5b5f6020828403121561276a575f5ffd5b8135610c5881612746565b5f60208284031215612785575f5ffd5b5035919050565b5f5f6040838503121561279d575f5ffd5b8235915060208301356127af81612746565b809150509250929050565b5f5f604083850312156127cb575f5ffd5b82356127d681612746565b915060208301356127af81612746565b602080825282518282018190525f918401906040840190835b8181101561281d5783518352602093840193909201916001016127ff565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561286457612864612828565b604052919050565b5f6001600160401b0382111561288457612884612828565b50601f01601f191660200190565b5f5f604083850312156128a3575f5ffd5b82356128ae81612746565b915060208301356001600160401b038111156128c8575f5ffd5b8301601f810185136128d8575f5ffd5b80356128eb6128e68261286c565b61283c565b8181528660208385010111156128ff575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c58602083018461291e565b60e081525f61297060e083018a61291e565b8281036020840152612982818a61291e565b90508281036040840152612996818961291e565b905082810360608401526129aa818861291e565b905082810360808401526129be818761291e565b6001600160a01b039590951660a0840152505090151560c09091015295945050505050565b5f5f604083850312156129f4575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561281d5783516001600160a01b0316835260209384019390920191600101612a1c565b5f5f60208385031215612a54575f5ffd5b82356001600160401b03811115612a69575f5ffd5b8301601f81018513612a79575f5ffd5b80356001600160401b03811115612a8e575f5ffd5b8560208260051b8401011115612aa2575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612b0957603f19878603018452612af485835161291e565b94506020938401939190910190600101612ad8565b50929695505050505050565b602081525f825160e06020840152612b3161010084018261291e565b90506020840151601f19848303016040850152612b4e828261291e565b9150506040840151601f19848303016060850152612b6c828261291e565b9150506060840151601f19848303016080850152612b8a828261291e565b9150506080840151601f198483030160a0850152612ba8828261291e565b91505060018060a01b0360a08501511660c084015260c0840151612bd060e085018215159052565b509392505050565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b602083019150836020828501011115612c15575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c30575f5ffd5b8535945060208601356001600160401b03811115612c4c575f5ffd5b612c5888828901612bd8565b90955093505060408601356001600160401b03811115612c76575f5ffd5b612c8288828901612bd8565b969995985093965092949392505050565b5f5f5f5f5f5f60608789031215612ca8575f5ffd5b86356001600160401b03811115612cbd575f5ffd5b612cc989828a01612bd8565b90975095505060208701356001600160401b03811115612ce7575f5ffd5b612cf389828a01612bd8565b90955093505060408701356001600160401b03811115612d11575f5ffd5b612d1d89828a01612bd8565b979a9699509497509295939492505050565b600181811c90821680612d4357607f821691505b602082108103612d6157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e3576105e3612d67565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612db7575f5ffd5b8301803591506001600160401b03821115612dd0575f5ffd5b602001915036819003821315612c15575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f8152612e108185612de4565b9695505050505050565b5f60208284031215612e2a575f5ffd5b8151610c5881612746565b5f60208284031215612e45575f5ffd5b81516001600160401b03811115612e5a575f5ffd5b8201601f81018413612e6a575f5ffd5b8051612e786128e68261286c565b818152856020838501011115612e8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612ee3606083018761291e565b8281036020840152612ef6818688612ea9565b90508281036040840152612f0a818561291e565b979650505050505050565b5f60208284031215612f25575f5ffd5b81518015158114610c58575f5ffd5b858152606060208201525f612f4d606083018688612ea9565b8281036040840152612f60818587612ea9565b98975050505050505050565b5f610c588284612de4565b604081525f612f8a604083018688612ea9565b8281036020840152612f0a818587612ea9565b808201808211156105e3576105e3612d67565b602081525f610bf1602083018486612ea9565b601f8211156106bd57805f5260205f20601f840160051c81016020851015612fe85750805b601f840160051c820191505b8181101561187c575f8155600101612ff4565b81516001600160401b0381111561302057613020612828565b6130348161302e8454612d2f565b84612fc3565b6020601f821160018114613066575f831561304f5750848201515b5f19600385901b1c1916600184901b17845561187c565b5f84815260208120601f198516915b828110156130955787850151825560209485019460019092019101613075565b50848210156130b257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608081525f6130d460808301898b612ea9565b82810360208401526130e781888a612ea9565b905082810360408401526130fc818688612ea9565b91505082606083015298975050505050505050565b5f60208284031215613121575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b9bf840b608447c267623fc79124450c15b070c6cf6f643c84d5b29677f23f5964736f6c634300081c00330000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12d44656372797074696f6e53656e64657220636f6e747261637420757067726164656420746f206e657720696d706c656d656e746174696f6e2061743a2044656372797074696f6e53656e64657220696d706c656d656e746174696f6e20636f6e7472616374206465706c6f7965642061743a2044656372797074696f6e53656e6465722070726f787920636f6e7472616374206465706c6f7965642061743a207369676e6174757265536368656d654164647265737350726f766964657241646472657373a26469706673582212202062963a6e5def2f9fe731c30d929906f9788a6a6bb4d61474664e2fe414d44864736f6c634300081c0033\";\n\ntype DeployDecryptionSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployDecryptionSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployDecryptionSender__factory extends ContractFactory {\n  constructor(...args: DeployDecryptionSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployDecryptionSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeployDecryptionSender__factory {\n    return super.connect(runner) as DeployDecryptionSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployDecryptionSenderInterface {\n    return new Interface(_abi) as DeployDecryptionSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployDecryptionSender {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeployDecryptionSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeployFactory,\n  DeployFactoryInterface,\n} from \"../../DeployFactory.s.sol/DeployFactory\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506104b98061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b610071610073565b565b737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b1580156100bf575f5ffd5b505af11580156100d1573d5f5f3e3d5ffd5b505050505f6040516100e2906101ac565b604051809103905ff0801580156100fb573d5f5f3e3d5ffd5b50905061013d6040518060400160405280601d81526020017f4352454154453220466163746f7279206465706c6f7965642061743a2000000081525082610140565b50565b61018582826040516024016101569291906101b9565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052610189565b5050565b61013d815f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6102838061020183390190565b604081525f83518060408401528060208601606085015e5f60608285018101919091526001600160a01b03949094166020840152601f01601f19169091019091019291505056fe6080604052348015600e575f5ffd5b506102678061001c5f395ff3fe608060405260043610610028575f3560e01c8063481286e61461002c578063cdcb760a14610067575b5f5ffd5b348015610037575f5ffd5b5061004b610046366004610140565b61007a565b6040516001600160a01b03909116815260200160405180910390f35b61004b610075366004610174565b6100a4565b6040805190810182905260208101839052308082525f91600b0160ff815360559020949350505050565b5f81515f036100c657604051631328927760e21b815260040160405180910390fd5b8282516020840134f590506001600160a01b0381166100f857604051633a0ba96160e11b815260040160405180910390fd5b604080516001600160a01b0383168152602081018590527f4108529e399e9cd5343c48ae06aa62a23c8c1b7c93f59d4691a0ea1e6f5b4603910160405180910390a192915050565b5f5f60408385031215610151575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610185575f5ffd5b82359150602083013567ffffffffffffffff8111156101a2575f5ffd5b8301601f810185136101b2575f5ffd5b803567ffffffffffffffff8111156101cc576101cc610160565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156101fb576101fb610160565b604052818152828201602001871015610212575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220b6b4f5de71e8ac337dd845cc23b73f6808935dd762517a951944059c04b08a3b64736f6c634300081c0033a2646970667358221220a0c71abecf75177f927671a83d632426b8479bda2759908bd1ce7977185b794c64736f6c634300081c0033\";\n\ntype DeployFactoryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeployFactoryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeployFactory__factory extends ContractFactory {\n  constructor(...args: DeployFactoryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeployFactory & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): DeployFactory__factory {\n    return super.connect(runner) as DeployFactory__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeployFactoryInterface {\n    return new Interface(_abi) as DeployFactoryInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeployFactory {\n    return new Contract(address, _abi, runner) as unknown as DeployFactory;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DeploySignatureSchemeAddressProvider,\n  DeploySignatureSchemeAddressProviderInterface,\n} from \"../../DeploySignatureSchemeAddressProvider.s.sol/DeploySignatureSchemeAddressProvider\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"run\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b506113f58061002d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610034575f3560e01c8063c040622614610038578063f8ccbf4714610042575b5f5ffd5b610040610069565b005b600c546100559062010000900460ff1681565b604051901515815260200160405180910390f35b610071610074565b50565b5f5f6040518060200161008690610717565b601f1982820381018352601f909101166040526100a16103cf565b604080516001600160a01b0390921660208301520160408051601f19818403018152908290526100d4929160200161073b565b6040516020818303038152906040529050737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b031663afc980406040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610131575f5ffd5b505af1158015610143573d5f5f3e3d5ffd5b5050604051637ed1ec7d60e01b81526020600482015260136024820152725553455f52414e44414d555f464143544f525960681b60448201525f9250737109709ecfa91a80626ff3989d68f67f5b1dd12d9150637ed1ec7d90606401602060405180830381865afa1580156101ba573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101de9190610757565b1561030e5760405163350d56bf60e01b815260206004820152602860248201527f52414e44414d555f435245415445325f464143544f52595f434f4e54524143546044820152675f4144445245535360c01b6064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063350d56bf90608401602060405180830381865afa15801561026f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610293919061077d565b6040516366e5bb0560e11b81526001600160a01b03919091169063cdcb760a906102c49060779086906004016107d1565b6020604051808303815f875af11580156102e0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610304919061077d565b9050809250610358565b60776103186103cf565b60405161032490610717565b6001600160a01b0390911681526020018190604051809103905ff5905080158015610351573d5f5f3e3d5ffd5b5092508290505b6103a8604051806040016040528060158152602001742232b83637bcb6b2b73a2fb4b7383aba173539b7b760591b81525060405180606001604052806025815260200161139b60259139836104de565b6103ca6040518060600160405280603581526020016113666035913982610606565b505090565b60405163c1978d1f60e01b815260206004820152600b60248201526a505249564154455f4b455960a81b60448201525f908190737109709ecfa91a80626ff3989d68f67f5b1dd12d9063c1978d1f90606401602060405180830381865afa15801561043c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046091906107e9565b6040516001625e79b760e01b0319815260048101829052909150737109709ecfa91a80626ff3989d68f67f5b1dd12d9063ffa1864990602401602060405180830381865afa1580156104b4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d8919061077d565b91505090565b604080518082018252601a81527f6465706c6f796d656e742061646472657373657320696e70757400000000000060208201529051634b96303160e11b81525f90737109709ecfa91a80626ff3989d68f67f5b1dd12d9063972c60629061054d90859088908890600401610800565b5f604051808303815f875af1158015610568573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261058f9190810190610851565b9050737109709ecfa91a80626ff3989d68f67f5b1dd12d63e23cd19f826105b58861064f565b6040518363ffffffff1660e01b81526004016105d2929190610904565b5f604051808303815f87803b1580156105e9575f5ffd5b505af11580156105fb573d5f5f3e3d5ffd5b505050505050505050565b61064b828260405160240161061c929190610931565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b1790526106f4565b5050565b60605f737109709ecfa91a80626ff3989d68f67f5b1dd12d6001600160a01b031663d930a0e66040518163ffffffff1660e01b81526004015f60405180830381865afa1580156106a1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106c89190810190610851565b905080836040516020016106dd92919061095a565b604051602081830303815290604052915050919050565b610071815f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6109e08061098683390190565b5f81518060208401855e5f93019283525090919050565b5f61074f6107498386610724565b84610724565b949350505050565b5f60208284031215610767575f5ffd5b81518015158114610776575f5ffd5b9392505050565b5f6020828403121561078d575f5ffd5b81516001600160a01b0381168114610776575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b828152604060208201525f61074f60408301846107a3565b5f602082840312156107f9575f5ffd5b5051919050565b606081525f61081260608301866107a3565b828103602084015261082481866107a3565b91505060018060a01b0383166040830152949350505050565b634e487b7160e01b5f52604160045260245ffd5b5f60208284031215610861575f5ffd5b815167ffffffffffffffff811115610877575f5ffd5b8201601f81018413610887575f5ffd5b805167ffffffffffffffff8111156108a1576108a161083d565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156108d0576108d061083d565b6040528181528282016020018610156108e7575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b604081525f61091660408301856107a3565b828103602084015261092881856107a3565b95945050505050565b604081525f61094360408301856107a3565b905060018060a01b03831660208301529392505050565b5f6109658285610724565b6c2f7363726970742f6a736f6e2f60981b8152610928600d82018561072456fe608060405234801561000f575f5ffd5b506040516109e03803806109e083398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6107ff806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80635bb09cf81161006e5780635bb09cf81461013d57806375b238fc1461016857806391d148541461018f578063a217fddf146101a2578063bab867da146101a9578063d547741f146101bc575f5ffd5b806301ffc9a7146100aa578063248a9ca3146100d25780632f2ff15d146101025780632fc9fa331461011757806336568abe1461012a575b5f5ffd5b6100bd6100b836600461065c565b6101cf565b60405190151581526020015b60405180910390f35b6100f46100e036600461068a565b5f9081526020819052604090206001015490565b6040519081526020016100c9565b6101156101103660046106bc565b610205565b005b6100bd61012536600461072b565b61022f565b6101156101383660046106bc565b61026f565b61015061014b36600461072b565b6102a7565b6040516001600160a01b0390911681526020016100c9565b6100f47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100bd61019d3660046106bc565b6102db565b6100f45f81565b6101156101b736600461076a565b610303565b6101156101ca3660046106bc565b6104f6565b5f6001600160e01b03198216637965db0b60e01b14806101ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461021f8161051a565b6102298383610527565b50505050565b5f5f6001600160a01b03166001848460405161024c9291906107ba565b908152604051908190036020019020546001600160a01b03161415905092915050565b6001600160a01b03811633146102985760405163334bd91960e11b815260040160405180910390fd5b6102a282826105b6565b505050565b5f600183836040516102ba9291906107ba565b908152604051908190036020019020546001600160a01b0316905092915050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561051a565b6001600160a01b0381161580159061034d57505f816001600160a01b03163b115b6103b15760405162461bcd60e51b815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604482015269656d654164647265737360b01b60648201526084015b60405180910390fd5b5f6001600160a01b0316600184846040516103cd9291906107ba565b908152604051908190036020019020546001600160a01b03161461043d5760405162461bcd60e51b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201526084016103a8565b80600184846040516104509291906107ba565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b03199093169290921790915560019061049090859085906107ba565b908152604051908190036020018120546001600160a01b0316906104b790859085906107ba565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105108161051a565b61022983836105b6565b610524813361061f565b50565b5f61053283836102db565b6105af575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ff565b505f6101ff565b5f6105c183836102db565b156105af575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ff565b61062982826102db565b6106585760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016103a8565b5050565b5f6020828403121561066c575f5ffd5b81356001600160e01b031981168114610683575f5ffd5b9392505050565b5f6020828403121561069a575f5ffd5b5035919050565b80356001600160a01b03811681146106b7575f5ffd5b919050565b5f5f604083850312156106cd575f5ffd5b823591506106dd602084016106a1565b90509250929050565b5f5f83601f8401126106f6575f5ffd5b50813567ffffffffffffffff81111561070d575f5ffd5b602083019150836020828501011115610724575f5ffd5b9250929050565b5f5f6020838503121561073c575f5ffd5b823567ffffffffffffffff811115610752575f5ffd5b61075e858286016106e6565b90969095509350505050565b5f5f5f6040848603121561077c575f5ffd5b833567ffffffffffffffff811115610792575f5ffd5b61079e868287016106e6565b90945092506107b19050602085016106a1565b90509250925092565b818382375f910190815291905056fea2646970667358221220e5144df0d342a74d5f0128ec7e3d4f61ebce0b76c178b4747512db764315a6cd64736f6c634300081c00335369676e6174757265536368656d654164647265737350726f766964657220636f6e7472616374206465706c6f7965642061743a207369676e6174757265536368656d654164647265737350726f766964657241646472657373a26469706673582212206736288a080b3daa4ef4a8c1b01675c9c3623ccdc8cf1d911d8f4fa662c4159664736f6c634300081c0033\";\n\ntype DeploySignatureSchemeAddressProviderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DeploySignatureSchemeAddressProviderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DeploySignatureSchemeAddressProvider__factory extends ContractFactory {\n  constructor(...args: DeploySignatureSchemeAddressProviderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DeploySignatureSchemeAddressProvider & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): DeploySignatureSchemeAddressProvider__factory {\n    return super.connect(\n      runner\n    ) as DeploySignatureSchemeAddressProvider__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DeploySignatureSchemeAddressProviderInterface {\n    return new Interface(_abi) as DeploySignatureSchemeAddressProviderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DeploySignatureSchemeAddressProvider {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DeploySignatureSchemeAddressProvider;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  Deployment,\n  DeploymentInterface,\n} from \"../../Deployment.t.sol/Deployment\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setUp\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class Deployment__factory {\n  static readonly abi = _abi;\n  static createInterface(): DeploymentInterface {\n    return new Interface(_abi) as DeploymentInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Deployment {\n    return new Contract(address, _abi, runner) as unknown as Deployment;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  DirectFundingTest,\n  DirectFundingTestInterface,\n} from \"../../DirectFunding.t.sol/DirectFundingTest\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setUp\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Callback_Should_NotRevert_If_Interface_Is_Not_Implemented\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_CallsToBlocklockSender_ShouldRevert_IfBlocklockSenderAddressIsIncorrect\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Deployment_Configurations\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_DirectFundingRequest_With_RevertingReceiver\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_DirectFunding_Request_Successfully\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_DirectFunding_Request_With_Low_CallbackGasLimit\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_DirectFunding_Request_With_Zero_CallbackGasLimit\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Fulfill_WithUnauthorisedCaller_Reverts\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_InvalidRequestId_For_DirectFundingRequest_Reverts\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_InvalidSignature_For_DirectFundingRequest_Reverts\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Update_SignatureScheme\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"BlocklockCallbackFailed\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x600c8054600160ff199182168117909255601f8054909116909117905560c0604052601360809081527f424e3235342d424c532d424c4f434b4c4f434b0000000000000000000000000060a0526023906100599082610234565b50604080516080810182527f2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca8183019081527f2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf6060830152815281518083019092527f193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c82527f11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba6020838101919091528101919091528051602490610120908290600261014a565b506020820151610136906002808401919061014a565b505050348015610144575f5ffd5b506102ee565b8260028101928215610178579160200282015b8281111561017857825182559160200191906001019061015d565b50610184929150610188565b5090565b5b80821115610184575f8155600101610189565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101c457607f821691505b6020821081036101e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022f57805f5260205f20601f840160051c8101602085101561020d5750805b601f840160051c820191505b8181101561022c575f8155600101610219565b50505b505050565b81516001600160401b0381111561024d5761024d61019c565b6102618161025b84546101b0565b846101e8565b6020601f821160018114610293575f831561027c5750848201515b5f19600385901b1c1916600184901b17845561022c565b5f84815260208120601f198516915b828110156102c257878501518255602094850194600190920191016102a2565b50848210156102df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b620181a280620002fd5f395ff3fe608060405234801561000f575f5ffd5b506004361061016d575f3560e01c806385226c81116100d9578063ba414fa611610093578063e9828f4d1161006e578063e9828f4d146102a2578063edf06c38146102aa578063fa7626d4146102b2578063fcf6760e146102bf575f5ffd5b8063ba414fa61461027a578063d37ad8c714610292578063e20c9f711461029a575f5ffd5b806385226c8114610230578063916a17c61461024557806392fe56a61461025a57806393dfd1b514610262578063b0464fdc1461026a578063b5508aa914610272575f5ffd5b8063658e17261161012a578063658e1726146101c657806366d9a9a0146101ce5780636a1623ec146101e35780636f070b0d146101eb57806375b238fc146101f35780637be3185214610228575f5ffd5b806307d8e1e9146101715780630a9254e41461017b5780631ed7831c146101835780632ade3880146101a15780633e5e3c23146101b65780633f7286f4146101be575b5f5ffd5b6101796102c7565b005b6101796113d4565b61018b611473565b604051610198919061767f565b60405180910390f35b6101a96114d3565b60405161019891906176f8565b61018b61160f565b61018b61166d565b6101796116cb565b6101d6611a70565b6040516101989190617805565b610179611bd4565b6101796129c9565b61021a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b604051908152602001610198565b61017961344e565b610238613619565b6040516101989190617883565b61024d6136e4565b60405161019891906178da565b6101796137c5565b6101796141f5565b61024d6147e4565b6102386148c5565b610282614990565b6040519015158152602001610198565b610179614a2a565b61018b6157c3565b610179615821565b610179615d36565b601f546102829060ff1681565b6101796163c3565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610317575f5ffd5b505af1158015610329573d5f5f3e3d5ffd5b5050602b546040515f93506001600160a01b03909116915061034a906175cb565b6001600160a01b039091168152602001604051809103905ff080158015610373573d5f5f3e3d5ffd5b509050806001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103d69190617951565b156103e3576103e3617968565b806001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561041e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104429190617951565b1561044f5761044f617968565b602b5460408051632bd4038560e11b815290516104f7926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610498573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bc9190617990565b6040518060400160405280601e81526020017f426c6f636b6c6f636b53656e646572206e6f7420636f6e6669677572656400008152506165b0565b602b546040805163a608a1e160e01b8152905161059f926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610540573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105649190617990565b6040518060400160405280601981526020017f426c6f636b6c6f636b53656e646572206973207061757365640000000000000081525061660b565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa1580156105ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106119190617951565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610669575f5ffd5b505af115801561067b573d5f5f3e3d5ffd5b50670de0b6b3a7640000925050506001600160a01b03851663e64a66ea6106a283866179c4565b6040518263ffffffff1660e01b81526004015f604051808303818588803b1580156106cb575f5ffd5b505af11580156106dd573d5f5f3e3d5ffd5b505050505061077181846106f191906179c4565b866001600160a01b03166312065fe06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107519190617951565b14604051806060016040528060378152602001620180d1603791396165b0565b6107d661077e82856179c4565b61078890846179dd565b6020805460408051808201909152601981527f416c6963652062616c616e6365206e6f74206465626974656400000000000000928101929092526001600160a01b03163191909114906165b0565b6108055f84116040518060400160405280601581526020015f51602062017d1b5f395f51905f528152506165b0565b61083e60405180604001604052806017815260200176457374696d61746564207265717565737420707269636560481b8152508461663e565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561088e575f5ffd5b505af11580156108a0573d5f5f3e3d5ffd5b50506729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528793509091506001600160a01b038816906359608fda906109069085905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60408051808303815f875af1158015610921573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109459190617b46565b50602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015610991573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109b89190810190617cb9565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015610a03573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610a2a9190810190617f03565b9050610a618463ffffffff16826040015163ffffffff161460405180608001604052806048815260200162017be5604891396165b0565b610a89815f01515f1460405180606001604052806028815260200162017e23602891396165b0565b610ac15f8260200151118015610aa25750878260200151145b6040518060600160405280602f815260200162017a5b602f91396165b0565b610af38382606001516001600160401b03161460405180606001604052806040815260200162018108604091396165b0565b6040516348f50c0f60e01b8152620186a060048201525f51602062017abf5f395f51905f52906348f50c0f906024015f604051808303815f87803b158015610b39575f5ffd5b505af1158015610b4b573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610ba8575f5ffd5b505af1158015610bba573d5f5f3e3d5ffd5b505060405163248e63e160e11b8152600160048201819052602482018190525f604483015260648201525f51602062017abf5f395f51905f52925063491cc7c291506084015f604051808303815f87803b158015610c16575f5ffd5b505af1158015610c28573d5f5f3e3d5ffd5b505050507f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d84604051610c5d91815260200190565b60405180910390a1602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b039091169063f7cef80090610cc49087905f51602062017f495f395f51905f52905f51602062017adf5f395f51905f5290600401618035565b5f604051808303815f87803b158015610cdb575f5ffd5b505af1158015610ced573d5f5f3e3d5ffd5b505050505f5a90505f610d0082846179dd565b9050610d396040518060400160405280601981526020015f51602062017d9e5f395f51905f52815250856040015163ffffffff1661663e565b610d6a6040518060400160405280601981526020015f51602062017f295f395f51905f52815250856020015161663e565b610d986040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261663e565b610dcd604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a61663e565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b6020820152610e0b90610e063a84618069565b61663e565b602a5460405163b094728960e01b815260048101889052610e99916001600160a01b03169063b0947289906024015b602060405180830381865afa158015610e55573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e799190617990565b1560405180608001604052806043815260200162017ba2604391396165b0565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015610edf573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f069190810190617cb9565b9450610f2f8560c0015160405180608001604052806043815260200162017d5b604391396165b0565b610fcf60225f6729a2241af62c000081526020019081526020015f205f01548d6001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f8a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fae9190617951565b141560405180608001604052806041815260200162017c2d604191396165b0565b6110538c6001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561100d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110319190617951565b6001146040518060600160405280602c81526020016201806a602c91396165b0565b602b5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611099573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526110c09190810190617f03565b93506110ff60405180604001604052806017815260200176111a5c9958dd08199d5b991a5b99c8199959481c185a59604a1b815250856020015161663e565b61113560405180606001604052806025815260200162018148602591396111263a84618069565b8660200151610e0691906179dd565b602b54604080516318e3dd2760e01b815290516111cc926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111a29190618080565b6001600160601b03165f1460405180606001604052806036815260200162017aff603691396165b0565b602080850151602b5460408051633bc32c7560e01b81529051611266946001600160a01b0390931692633bc32c7592600480820193918290030181865afa158015611219573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061123d9190618080565b6001600160601b03161460405180606001604052806040815260200162017de3604091396165b0565b602b5460408051634cae59b760e11b815290516112af926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611303575f5ffd5b505af1158015611315573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b158015611368575f5ffd5b505af115801561137a573d5f5f3e3d5ffd5b5050506020860151601f546113c5925083916113a5916001600160a01b0361010090910416316179c4565b1160405180606001604052806035815260200162017a8a603591396165b0565b50505050505050505050505050565b6113dc616687565b6113e461668f565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054821693831693909317909255602a8054831693821693909317909255602980548216938316939093179092556028805490921692169190911790556207a12062061a80620f4240622dc6c0620c3500600a61138861146a87878787878787616d9d565b50505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156114c957602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116114ab575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015611606575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b828210156115ef578382905f5260205f20018054611564906179f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611590906179f0565b80156115db5780601f106115b2576101008083540402835291602001916115db565b820191905f5260205f20905b8154815290600101906020018083116115be57829003601f168201915b505050505081526020019060010190611547565b5050505081525050815260200190600101906114f6565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156114c957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116114ab575050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156114c957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116114ab575050505050905090565b602a54601f54604051632474521560e21b81527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b03908116602483015261176d9216906391d1485490604401602060405180830381865afa158015611744573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117689190617990565b616e9f565b6028546001600160a01b031661178557611785617968565b6029546001600160a01b031661179d5761179d617968565b602a546001600160a01b03166117b5576117b5617968565b602b546001600160a01b03166117cd576117cd617968565b602c546001600160a01b03166117e5576117e5617968565b602a546040805163e6b3ca7160e01b815290515f926001600160a01b03169163e6b3ca719160048083019260209291908290030181865afa15801561182c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185091906180a6565b6001600160a01b03160361186657611866617968565b60295460408051632fbe3a9160e11b815290516118da926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa1580156118ae573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118d591908101906180c1565b616ef5565b60295460408051632fbe3a9160e11b8152905161194e926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa158015611922573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261194991908101906180c1565b616f3b565b602b546040805163235296f760e01b81529051611996926001600160a01b03169163235296f7916004808301925f9291908290030181865afa158015611922573d5f5f3e3d5ffd5b602b5460408051631c613e8960e11b815290516119de926001600160a01b0316916338c27d12916004808301925f9291908290030181865afa158015611922573d5f5f3e3d5ffd5b602b54604080516339a87a2b60e11b81529051611a26926001600160a01b031691637350f456916004808301925f9291908290030181865afa158015611922573d5f5f3e3d5ffd5b602b54604080516367b276af60e01b81529051611a6e926001600160a01b0316916367b276af916004808301925f9291908290030181865afa158015611922573d5f5f3e3d5ffd5b565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015611606578382905f5260205f2090600202016040518060400160405290815f82018054611ac3906179f0565b80601f0160208091040260200160405190810160405280929190818152602001828054611aef906179f0565b8015611b3a5780601f10611b1157610100808354040283529160200191611b3a565b820191905f5260205f20905b815481529060010190602001808311611b1d57829003601f168201915b5050505050815260200160018201805480602002602001604051908101604052809291908181526020018280548015611bbc57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411611b7e5790505b50505050508152505081526020019060010190611a93565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c489190617951565b15611c5557611c55617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc89190617951565b15611cd557611cd5617968565b602b5460408051632bd4038560e11b81529051611d1e926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610498573d5f5f3e3d5ffd5b602b546040805163a608a1e160e01b81529051611d67926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610540573d5f5f3e3d5ffd5b602b54604051634b16093560e01b81525f600482018190529182916001600160a01b0390911690634b160935906024015b602060405180830381865afa158015611db3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dd79190617951565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611e2f575f5ffd5b505af1158015611e41573d5f5f3e3d5ffd5b5050602c54670de0b6b3a764000092506001600160a01b0316905063e64a66ea611e6b83866179c4565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015611e94575f5ffd5b505af1158015611ea6573d5f5f3e3d5ffd5b5050505050611f0a8184611eba91906179c4565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166312065fe06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561072d573d5f5f3e3d5ffd5b611f1761077e82856179c4565b611f465f84116040518060400160405280601581526020015f51602062017d1b5f395f51905f528152506165b0565b611f7f60405180604001604052806017815260200176457374696d61746564207265717565737420707269636560481b8152508461663e565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611fcf575f5ffd5b505af1158015611fe1573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528894509092506001600160a01b03909116906359608fda9061204b9085905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60408051808303815f875af1158015612066573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061208a9190617b46565b50602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156120d6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120fd9190810190617cb9565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612148573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261216f9190810190617f03565b90506121a68463ffffffff16826040015163ffffffff161460405180608001604052806048815260200162017be5604891396165b0565b6121ce815f01515f1460405180606001604052806028815260200162017e23602891396165b0565b6122055f8260200151118015610aa25750878260200151146040518060600160405280602f815260200162017a5b602f91396165b0565b6122378382606001516001600160401b03161460405180606001604052806040815260200162018108604091396165b0565b6040516348f50c0f60e01b8152620186a060048201525f51602062017abf5f395f51905f52906348f50c0f906024015f604051808303815f87803b15801561227d575f5ffd5b505af115801561228f573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156122ec575f5ffd5b505af11580156122fe573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506123619087905f51602062017f495f395f51905f52905f51602062017adf5f395f51905f5290600401618035565b5f604051808303815f87803b158015612378575f5ffd5b505af115801561238a573d5f5f3e3d5ffd5b505050505f5a90505f61239d82846179dd565b90506123d66040518060400160405280601981526020015f51602062017d9e5f395f51905f52815250856040015163ffffffff1661663e565b6124076040518060400160405280601981526020015f51602062017f295f395f51905f52815250856020015161663e565b6124356040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261663e565b61246a604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a61663e565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b60208201526124a390610e063a84618069565b602a5460405163b094728960e01b8152600481018890526124d6916001600160a01b03169063b094728990602401610e3a565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa15801561251c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125439190810190617cb9565b945061256c8560c0015160405180608001604052806043815260200162017d5b604391396165b0565b604080518082018252601a81527f706c61696e746578742061667465722064656372797074696f6e000000000000602080830191909152602c5483516397a9c28560e01b8152935161260c946001600160a01b03909216926397a9c28592600480820193918290030181865afa1580156125e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e069190617951565b6729a2241af62c00005f52602260209081527ffb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e1e54602c54604080516397a9c28560e01b815290516126cc946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015612687573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ab9190617951565b14156040518060600160405280603b815260200162018096603b91396165b0565b602c54604080516236b65760e11b81529051612713926001600160a01b031691626d6cae9160048083019260209291908290030181865afa15801561100d573d5f5f3e3d5ffd5b602b5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612759573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526127809190810190617f03565b93506127bf60405180604001604052806017815260200176111a5c9958dd08199d5b991a5b99c8199959481c185a59604a1b815250856020015161663e565b6127e660405180606001604052806025815260200162018148602591396111263a84618069565b602b54604080516318e3dd2760e01b8152905161282f926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b602080850151602b5460408051633bc32c7560e01b8152905161287c946001600160a01b0390931692633bc32c7592600480820193918290030181865afa158015611219573d5f5f3e3d5ffd5b602b5460408051634cae59b760e11b815290516128c5926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612919575f5ffd5b505af115801561292b573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b15801561297e575f5ffd5b505af1158015612990573d5f5f3e3d5ffd5b5050506020860151601f546129bb925083916113a5916001600160a01b0361010090910416316179c4565b505050505050505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a3d9190617951565b15612a4a57612a4a617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612abd9190617951565b15612aca57612aca617968565b602b5460408051632bd4038560e11b81529051612b13926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610498573d5f5f3e3d5ffd5b602b546040805163a608a1e160e01b81529051612b5c926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610540573d5f5f3e3d5ffd5b602b54604051634b16093560e01b81526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015612baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bce9190617951565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612c26575f5ffd5b505af1158015612c38573d5f5f3e3d5ffd5b5050602c54670de0b6b3a764000092506001600160a01b0316905063e64a66ea612c6283866179c4565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015612c8b575f5ffd5b505af1158015612c9d573d5f5f3e3d5ffd5b5050505050612cb18184611eba91906179c4565b612cbe61077e82856179c4565b612ced5f84116040518060400160405280601581526020015f51602062017d1b5f395f51905f528152506165b0565b612d2660405180604001604052806017815260200176457374696d61746564207265717565737420707269636560481b8152508461663e565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612d76575f5ffd5b505af1158015612d88573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528894509092506001600160a01b03909116906359608fda90612df29085905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60408051808303815f875af1158015612e0d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612e319190617b46565b50602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612e7d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612ea49190810190617cb9565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612eef573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f169190810190617f03565b9050612f4d8463ffffffff16826040015163ffffffff161460405180608001604052806048815260200162017be5604891396165b0565b612f75815f01515f1460405180606001604052806028815260200162017e23602891396165b0565b612fac5f8260200151118015610aa25750878260200151146040518060600160405280602f815260200162017a5b602f91396165b0565b612fde8382606001516001600160401b03161460405180606001604052806040815260200162018108604091396165b0565b6040516348f50c0f60e01b8152620186a060048201525f51602062017abf5f395f51905f52906348f50c0f906024015f604051808303815f87803b158015613024575f5ffd5b505af1158015613036573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613093575f5ffd5b505af11580156130a5573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506131089087905f51602062017f495f395f51905f52905f51602062017adf5f395f51905f5290600401618035565b5f604051808303815f87803b15801561311f575f5ffd5b505af1158015613131573d5f5f3e3d5ffd5b505050505f5a90505f61314482846179dd565b905061317d6040518060400160405280601981526020015f51602062017d9e5f395f51905f52815250856040015163ffffffff1661663e565b6131ae6040518060400160405280601981526020015f51602062017f295f395f51905f52815250856020015161663e565b6131dc6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261663e565b613211604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a61663e565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b602082015261324a90610e063a84618069565b602a5460405163b094728960e01b81526004810188905261327d916001600160a01b03169063b094728990602401610e3a565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156132c3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132ea9190810190617cb9565b94506133138560c0015160405180608001604052806043815260200162017d5b604391396165b0565b604080518082018252601a81527f706c61696e746578742061667465722064656372797074696f6e000000000000602080830191909152602c5483516397a9c28560e01b8152935161338f946001600160a01b03909216926397a9c28592600480820193918290030181865afa1580156125e8573d5f5f3e3d5ffd5b6729a2241af62c00005f52602260209081527ffb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e1e54602c54604080516397a9c28560e01b815290516126cc946001600160a01b03909316926397a9c28592600480820193918290030181865afa15801561340a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061342e9190617951565b146040518060600160405280602a815260200162017b58602a91396165b0565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa15801561349e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134c29190617951565b156134cf576134cf617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561351e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135429190617951565b1561354f5761354f617968565b602b5460408051632bd4038560e11b81529051613598926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610498573d5f5f3e3d5ffd5b602b546040805163a608a1e160e01b815290516135e1926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610540573d5f5f3e3d5ffd5b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401611d98565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015611606578382905f5260205f20018054613659906179f0565b80601f0160208091040260200160405190810160405280929190818152602001828054613685906179f0565b80156136d05780601f106136a7576101008083540402835291602001916136d0565b820191905f5260205f20905b8154815290600101906020018083116136b357829003601f168201915b50505050508152602001906001019061363c565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015611606575f8481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156137ad57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161376f5790505b50505050508152505081526020019060010190613707565b602b5460408051632bd4038560e11b8152905161380e926001600160a01b0316916357a8070a9160048083019260209291908290030181865afa158015610498573d5f5f3e3d5ffd5b602b546040805163a608a1e160e01b81529051613857926001600160a01b03169163a608a1e19160048083019260209291908290030181865afa158015610540573d5f5f3e3d5ffd5b602b54604051634b16093560e01b81526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa1580156138a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138c99190617951565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561391c575f5ffd5b505af115801561392e573d5f5f3e3d5ffd5b5050602b546729a2241af62c00005f9081526022602052604051637909dc7b60e01b81528694509092506001600160a01b0390911690637909dc7b90859061399a9086905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60206040518083038185885af11580156139b6573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906139db9190617951565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613a26573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613a4d9190810190617cb9565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613a98573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613abf9190810190617f03565b9050613af68463ffffffff16826040015163ffffffff161460405180608001604052806048815260200162017be5604891396165b0565b613b1e815f01515f1460405180606001604052806028815260200162017e23602891396165b0565b613b555f8260200151118015610aa25750858260200151146040518060600160405280602f815260200162017a5b602f91396165b0565b613b878382606001516001600160401b03161460405180606001604052806040815260200162018108604091396165b0565b6040516348f50c0f60e01b8152620186a060048201525f51602062017abf5f395f51905f52906348f50c0f906024015f604051808303815f87803b158015613bcd575f5ffd5b505af1158015613bdf573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613c3c575f5ffd5b505af1158015613c4e573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150613cb19087905f51602062017f495f395f51905f52905f51602062017adf5f395f51905f5290600401618035565b5f604051808303815f87803b158015613cc8575f5ffd5b505af1158015613cda573d5f5f3e3d5ffd5b505050505f5a90505f613ced82846179dd565b9050613d266040518060400160405280601981526020015f51602062017d9e5f395f51905f52815250856040015163ffffffff1661663e565b613d576040518060400160405280601981526020015f51602062017f295f395f51905f52815250856020015161663e565b613d856040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261663e565b613dba604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a61663e565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b6020820152613df390610e063a84618069565b602a5460405163b094728960e01b815260048101889052613e80916001600160a01b03169063b094728990602401602060405180830381865afa158015613e3c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e609190617990565b156040518060a001604052806071815260200162017e4b607191396165b0565b602a5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613ec6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613eed9190810190617cb9565b9450613f168560c0015160405180606001604052806025815260200162017c6e602591396165b0565b602b5460405163c58343ef60e01b8152600481018890526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613f5c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613f839190810190617f03565b9350613fb060028560e00151511160405180608001604052806045815260200162017a16604591396165b0565b613fed60405180604001604052806017815260200176111a5c9958dd08199d5b991a5b99c8199959481c185a59604a1b815250856020015161663e565b61401460405180606001604052806025815260200162018148602591396111263a84618069565b602b54604080516318e3dd2760e01b8152905161405d926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b602080850151602b5460408051633bc32c7560e01b815290516140aa946001600160a01b0390931692633bc32c7592600480820193918290030181865afa158015611219573d5f5f3e3d5ffd5b602b5460408051634cae59b760e11b815290516140f3926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614147575f5ffd5b505af1158015614159573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b1580156141ac575f5ffd5b505af11580156141be573d5f5f3e3d5ffd5b5050506020860151601f546141e9925083916113a5916001600160a01b0361010090910416316179c4565b50505050505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015614245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142699190617951565b1561427657614276617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142c5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142e99190617951565b156142f6576142f6617968565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015614344573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143689190617951565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156143c0575f5ffd5b505af11580156143d2573d5f5f3e3d5ffd5b5050602c54670de0b6b3a764000092506001600160a01b0316905063e64a66ea6143fc83866179c4565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015614425575f5ffd5b505af1158015614437573d5f5f3e3d5ffd5b505050505061444b8184611eba91906179c4565b61445861077e82856179c4565b6144875f84116040518060400160405280601581526020015f51602062017d1b5f395f51905f528152506165b0565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156144d7575f5ffd5b505af11580156144e9573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528894509092506001600160a01b03909116906359608fda906145539085905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60408051808303815f875af115801561456e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145929190617b46565b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156145ea575f5ffd5b505af11580156145fc573d5f5f3e3d5ffd5b505050505f51602062017abf5f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b158015614646575f5ffd5b505af1158015614658573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f526022602052604051632eca0c0160e11b81526001600160a01b039091169250635d94180291506146ac9084905f51602062017f495f395f51905f52906004016180fa565b5f604051808303815f87803b1580156146c3575f5ffd5b505af11580156146d5573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015614729573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061474d9190617951565b1561475a5761475a617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156147a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147cd9190617951565b6001146147dc576147dc617968565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015611606575f8481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156148ad57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161486f5790505b50505050508152505081526020019060010190614807565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015611606578382905f5260205f20018054614905906179f0565b80601f0160208091040260200160405190810160405280929190818152602001828054614931906179f0565b801561497c5780601f106149535761010080835404028352916020019161497c565b820191905f5260205f20905b81548152906001019060200180831161495f57829003601f168201915b5050505050815260200190600101906148e8565b6008545f9060ff16156149a7575060085460ff1690565b604051630667f9d760e41b81525f51602062017abf5f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa1580156149ff573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a239190617951565b1415905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015614a7a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a9e9190617951565b15614aab57614aab617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614afa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b1e9190617951565b15614b2b57614b2b617968565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015614b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614b9d9190617951565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614bf5575f5ffd5b505af1158015614c07573d5f5f3e3d5ffd5b5050602c54670de0b6b3a764000092506001600160a01b0316905063e64a66ea614c3183866179c4565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015614c5a575f5ffd5b505af1158015614c6c573d5f5f3e3d5ffd5b5050505050614c808184611eba91906179c4565b614c8d61077e82856179c4565b614cbc5f84116040518060400160405280601581526020015f51602062017d1b5f395f51905f528152506165b0565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614d0c575f5ffd5b505af1158015614d1e573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528894509092506001600160a01b03909116906359608fda90614d889085905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60408051808303815f875af1158015614da3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614dc79190617b46565b506040516348f50c0f60e01b8152620186a060048201529091505f51602062017abf5f395f51905f52906348f50c0f906024015f604051808303815f87803b158015614e11575f5ffd5b505af1158015614e23573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614e80575f5ffd5b505af1158015614e92573d5f5f3e3d5ffd5b505050505f60405180606001604052806040815260200162017ee96040913960405163f28dceb360e01b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201529091505f51602062017abf5f395f51905f529063f28dceb3906064015f604051808303815f87803b158015614f25575f5ffd5b505af1158015614f37573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150614f8c9086905f51602062017f495f395f51905f52908690600401618112565b5f604051808303815f87803b158015614fa3575f5ffd5b505af1158015614fb5573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015615009573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061502d9190617951565b1561503a5761503a617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015615089573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906150ad9190617951565b6001146150bc576150bc617968565b602a5460405163c58343ef60e01b8152600481018590525f916001600160a01b03169063c58343ef906024015f60405180830381865afa158015615102573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526151299190810190617cb9565b602b5460405163c58343ef60e01b8152600481018790529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015615174573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261519b9190810190617f03565b90505f5a90505f6151ac82876179dd565b90506151e56040518060400160405280601981526020015f51602062017d9e5f395f51905f52815250846040015163ffffffff1661663e565b6152166040518060400160405280601981526020015f51602062017f295f395f51905f52815250846020015161663e565b6152446040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261663e565b615279604051806040016040528060138152602001722a3c1023b0b990383934b1b290143bb2b4949d60691b8152503a61663e565b6040805180820190915260148152732a3c102a37ba30b61031b7b9ba10143bb2b4949d60611b60208201526152b290610e063a84618069565b602a5460405163b094728960e01b81526004810189905261533f916001600160a01b03169063b094728990602401602060405180830381865afa1580156152fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061531f9190617990565b1560405180608001604052806048815260200162017cd3604891396165b0565b6153678460c00151156040518060600160405280602d815260200162017ebc602d91396165b0565b6729a2241af62c00005f52602260209081527ffb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e1e54602c54604080516397a9c28560e01b81529051615427946001600160a01b03909316926397a9c28592600480820193918290030181865afa1580156153e2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906154069190617951565b14156040518060600160405280602a815260200162017b58602a91396165b0565b602c54604080516236b65760e11b8152905161546e926001600160a01b031691626d6cae9160048083019260209291908290030181865afa15801561100d573d5f5f3e3d5ffd5b61547b8360200151616f7e565b602b54604080516318e3dd2760e01b815290516154c4926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b602080840151602b5460408051633bc32c7560e01b815290516155e5946001600160a01b0390931692633bc32c7592600480820193918290030181865afa158015615511573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906155359190618080565b6001600160601b0316141580156155c65750602b5f9054906101000a90046001600160a01b03166001600160a01b0316633bc32c756040518163ffffffff1660e01b8152600401602060405180830381865afa158015615597573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906155bb9190618080565b6001600160601b0316155b60405180608001604052806044815260200162018026604491396165b0565b602b5460408051634cae59b760e11b8152905161562e926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa15801561117e573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015615682575f5ffd5b505af1158015615694573d5f5f3e3d5ffd5b50506040805160048082526024820183526020820180516001600160e01b0316631e9acf1760e31b179052915163f28dceb360e01b81525f51602062017abf5f395f51905f52945063f28dceb393506156ed920161813c565b5f604051808303815f87803b158015615704575f5ffd5b505af1158015615716573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b158015615769575f5ffd5b505af115801561577b573d5f5f3e3d5ffd5b505050506113c581601f60019054906101000a90046001600160a01b03166001600160a01b0316311460405180606001604052806038815260200162017fee603891396165b0565b606060158054806020026020016040519081016040528092919081815260200182805480156114c957602002820191905f5260205f209081546001600160a01b031681526001909101906020018083116114ab575050505050905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015615871573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906158959190617951565b156158a2576158a2617968565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156158f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906159159190617951565b1561592257615922617968565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015615970573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906159949190617951565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156159ec575f5ffd5b505af11580156159fe573d5f5f3e3d5ffd5b5050602c54670de0b6b3a764000092506001600160a01b0316905063e64a66ea615a2883866179c4565b6040518263ffffffff1660e01b81526004015f604051808303818588803b158015615a51575f5ffd5b505af1158015615a63573d5f5f3e3d5ffd5b5050505050615a778184611eba91906179c4565b615a8461077e82856179c4565b615ab35f84116040518060400160405280601581526020015f51602062017d1b5f395f51905f528152506165b0565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015615b03575f5ffd5b505af1158015615b15573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051632cb047ed60e11b81528894509092506001600160a01b03909116906359608fda90615b7f9085905f51602062017d3b5f395f51905f52905f51602062017b825f395f51905f5290600401617acf565b60408051808303815f875af1158015615b9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615bbe9190617b46565b5060405163f28dceb360e01b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201529091505f51602062017abf5f395f51905f529063f28dceb3906084015f604051808303815f87803b158015615c47575f5ffd5b505af1158015615c59573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015615cb1575f5ffd5b505af1158015615cc3573d5f5f3e3d5ffd5b5050602a546001600160a01b0316915063f7cef8009050615ce58360016179c4565b6729a2241af62c00005f5260226020526040516001600160e01b031960e084901b1681526146ac91905f51602062017f495f395f51905f52905f51602062017adf5f395f51905f5290600401618035565b60408051808201909152600581526410938c8d4d60da1b60208201525f615d5c82616fc3565b9050615d965f6001600160a01b0316826001600160a01b0316141560405180606001604052806025815260200162017dbe602591396165b0565b615dc5816001600160a01b03163b5f1460405180606001604052806023815260200162017b35602391396165b0565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015615e19575f5ffd5b505af1158015615e2b573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f51602062017abf5f395f51905f52925063f28dceb39150615e5e9060040161814e565b5f604051808303815f87803b158015615e75575f5ffd5b505af1158015615e87573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da9150615ebd9085908590600401618198565b5f604051808303815f87803b158015615ed4575f5ffd5b505af1158015615ee6573d5f5f3e3d5ffd5b50506029546040805160608101909152602d8082526001600160a01b039092169450615f21935084151592509062017fc160208301396165b0565b615f505f826001600160a01b03163b1160405180606001604052806023815260200162017f69602391396165b0565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015615fa4575f5ffd5b505af1158015615fb6573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da9150615fec9085908590600401618198565b5f604051808303815f87803b158015616003575f5ffd5b505af1158015616015573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b815261609f93506001600160a01b03858116935090911690635bb09cf89061605190879060040161813c565b602060405180830381865afa15801561606c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061609091906180a6565b6001600160a01b031614616e9f565b50602b54601f5460405163ca669fa760e01b81526001600160a01b03610100909204821660048201529116905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156160fb575f5ffd5b505af115801561610d573d5f5f3e3d5ffd5b505060405163f28dceb360e01b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201525f51602062017abf5f395f51905f52925063f28dceb391506084015f604051808303815f87803b15801561618c575f5ffd5b505af115801561619e573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506161d49085908590600401618198565b5f604051808303815f87803b1580156161eb575f5ffd5b505af11580156161fd573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b81526162a293506001600160a01b03858116935090911690635bb09cf89061623990879060040161813c565b602060405180830381865afa158015616254573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061627891906180a6565b6001600160a01b0316141560405180606001604052806035815260200162017f8c603591396165b0565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156162f6575f5ffd5b505af1158015616308573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f51602062017abf5f395f51905f52925063f28dceb3915061633b9060040161814e565b5f604051808303815f87803b158015616352575f5ffd5b505af1158015616364573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da915061639a9085905f90600401618198565b5f604051808303815f87803b1580156163b1575f5ffd5b505af11580156147dc573d5f5f3e3d5ffd5b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616413575f5ffd5b505af1158015616425573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b031660405161644b906175d9565b6001600160a01b039091168152602001604051809103905ff080158015616474573d5f5f3e3d5ffd5b50602c80546001600160a01b0319166001600160a01b0392831617905560205460405163ca669fa760e01b8152911660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156164d8575f5ffd5b505af11580156164ea573d5f5f3e3d5ffd5b505050505f51602062017abf5f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b158015616534575f5ffd5b505af1158015616546573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba75f6040518263ffffffff1660e01b81526004015f604051808303818588803b158015616597575f5ffd5b505af11580156165a9573d5f5f3e3d5ffd5b5050505050565b60405163a34edc0360e01b81525f51602062017abf5f395f51905f529063a34edc03906165e390859085906004016181c1565b5f6040518083038186803b1580156165f9575f5ffd5b505afa1580156147dc573d5f5f3e3d5ffd5b604051637ba0480960e01b81525f51602062017abf5f395f51905f5290637ba04809906165e390859085906004016181c1565b61668382826040516024016166549291906181db565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b179052616fd4565b5050565b611a6e616fdd565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f9081908190819081905f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156166ed575f5ffd5b505af11580156166ff573d5f5f3e3d5ffd5b505050505f604051616710906175e7565b604051809103905ff080158015616729573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616781575f5ffd5b505af1158015616793573d5f5f3e3d5ffd5b505050505f816040516167a5906175f5565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff0801580156167dc573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095508591505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616837575f5ffd5b505af1158015616849573d5f5f3e3d5ffd5b505050505f60405161685a90617603565b604051809103905ff080158015616873573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156168cb575f5ffd5b505af11580156168dd573d5f5f3e3d5ffd5b505050505f816040516168ef906175f5565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff080158015616926573d5f5f3e3d5ffd5b5060205460405163ca669fa760e01b81526001600160a01b0390911660048201529096508691505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561697d575f5ffd5b505af115801561698f573d5f5f3e3d5ffd5b50505050806040516169a0906175d9565b6001600160a01b039091168152602001604051809103905ff0801580156169c9573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616a21575f5ffd5b505af1158015616a33573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b0316604051616a5990617611565b6001600160a01b039091168152602001604051809103905ff080158015616a82573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529099505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616ada575f5ffd5b505af1158015616aec573d5f5f3e3d5ffd5b50506040516024925060269150616b029061761f565b616b0d9291906181fc565b604051809103905ff080158015616b26573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529098505f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616b7e575f5ffd5b505af1158015616b90573d5f5f3e3d5ffd5b5050604051635d5c33ed60e11b81526001600160a01b038c16925063bab867da9150616bc3906023908c90600401618217565b5f604051808303815f87803b158015616bda575f5ffd5b505af1158015616bec573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015616c44575f5ffd5b505af1158015616c56573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528c811660248301528a16925063485cc95591506044015f604051808303815f87803b158015616cab575f5ffd5b505af1158015616cbd573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015616d15575f5ffd5b505af1158015616d27573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528a811660248301528916925063485cc95591506044015f604051808303815f87803b158015616d7c575f5ffd5b505af1158015616d8e573d5f5f3e3d5ffd5b50505050505050509091929394565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f51602062017abf5f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616df1575f5ffd5b505af1158015616e03573d5f5f3e3d5ffd5b5050602b5460405163117e90d560e21b815263ffffffff808c166004830152808b166024830152808a1660448301528089166064830152808816608483015260ff871660a4830152851660c48201526001600160a01b0390911692506345fa4354915060e4015f604051808303815f87803b158015616e80575f5ffd5b505af1158015616e92573d5f5f3e3d5ffd5b5050505050505050505050565b604051630c9fd58160e01b815281151560048201525f51602062017abf5f395f51905f5290630c9fd581906024015f6040518083038186803b158015616ee3575f5ffd5b505afa1580156165a9573d5f5f3e3d5ffd5b616f3881604051602401616f09919061813c565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b179052616fd4565b50565b616f3881604051602401616f4f919061813c565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b179052616fd4565b616f3881604051602401616f9491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f82c50f160e01b179052616fd4565b5f616fcd82617216565b5092915050565b616f3881617318565b6170036040518060400160405280600581526020016430b236b4b760d91b815250616fc3565b601f60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555061704f60405180604001604052806005815260200164616c69636560d81b815250616fc3565b60205f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550617098604051806040016040528060038152602001623137b160e91b815250616fc3565b602180546001600160a01b0319166001600160a01b03928316179055601f5460405163c88a5e6d60e01b81526101009091049091166004820152678ac7230489e8000060248201525f51602062017abf5f395f51905f529063c88a5e6d906044015f604051808303815f87803b158015617110575f5ffd5b505af1158015617122573d5f5f3e3d5ffd5b505060205460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f51602062017abf5f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b158015617184575f5ffd5b505af1158015617196573d5f5f3e3d5ffd5b505060215460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f51602062017abf5f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b1580156171f8575f5ffd5b505af115801561720a573d5f5f3e3d5ffd5b50505050611a6e617337565b5f5f826040516020016172299190618229565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291505f51602062017abf5f395f51905f529063ffa1864990602401602060405180830381865afa15801561728c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906172b091906180a6565b6040516318caf8e360e31b81529092505f51602062017abf5f395f51905f529063c657c718906172e6908590879060040161823f565b5f604051808303815f87803b1580156172fd575f5ffd5b505af115801561730f573d5f5f3e3d5ffd5b50505050915091565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6040805160e0810182527f220c292a8d5482f0afc107989582021eb9d86fe3e75dbb7bcb749f30861c9f8f60a082019081527f14a3cdb4fec6d3ebb0ad2b5a943fdef4a458e6ac8bc6ff321afa898b4158ff5b60c08301526060808301918252835180850185527f269cdb66a4daaf03aeda655342cc38e431a83a914fcdf4daf73e4f6fde7729ac81527f2610ed6679d7a57287cf5d21045063efda28037e5b555d9103f60b83c5cee1ca6020828101919091526080850191909152918352835180850185528281527f54b744fa0514a42e8e8bf8a23a0c619e059fbc072d1774f5c4d389a218dce7f18184015282840152835180850185528281527fc0884030be948e1477202760f15f302c56fd9e22e39cb0afb21e9a2140d363d48184015283850152835190810184528381526729a2241af62c0000935f9262017c939083013990505f6040518060400160405280602081526020017f948918d64af8e911c98d62c282764bed2488a47797a31e711956a6e87846efa781525090506040518060a0016040528085815260200160126040516020016174f691906040808252600190820152602160f91b6060820152602081019190915260800190565b60408051601f19818403018152918152908252602082810187905282820186905260609092018490525f87815260228352208251815590820151600182019061753f90826182ab565b5060408201518051805160028085019291839161755d91839161762d565b506020820151617573906002808401919061762d565b5050506020820151600482019061758a90826182ab565b506040820151600582019061759f90826182ab565b505050606082015160088201906175b690826182ab565b506080820151600982019061146a90826182ab565b611674806200836683390190565b611ae480620099da83390190565b6132f3806200b4be83390190565b61042b806200e7b183390190565b615c73806200ebdc83390190565b6109e0806201484f83390190565b6127e7806201522f83390190565b826002810192821561765b579160200282015b8281111561765b578251825591602001919060010190617640565b5061766792915061766b565b5090565b5b80821115617667575f815560010161766c565b602080825282518282018190525f918401906040840190835b818110156176bf5783516001600160a01b0316835260209384019390920191600101617698565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177b557603f19878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b8181101561779b57605f198a85030183526177858486516176ca565b6020958601959094509290920191600101617769565b50919750505060209485019492909201915060010161771e565b50929695505050505050565b5f8151808452602084019350602083015f5b828110156177fb5781516001600160e01b0319168652602095860195909101906001016177d3565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177b557603f19878603018452815180516040875261785160408801826176ca565b905060208201519150868103602088015261786c81836177c1565b96505050602093840193919091019060010161782b565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177b557603f198786030184526178c58583516176ca565b945060209384019391909101906001016178a9565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b828110156177b557868503603f19018452815180516001600160a01b0316865260209081015160409187018290529061793b908701826177c1565b9550506020938401939190910190600101617900565b5f60208284031215617961575f5ffd5b5051919050565b634e487b7160e01b5f52600160045260245ffd5b8051801515811461798b575f5ffd5b919050565b5f602082840312156179a0575f5ffd5b6179a98261797c565b9392505050565b634e487b7160e01b5f52601160045260245ffd5b808201808211156179d7576179d76179b0565b92915050565b818103818111156179d7576179d76179b0565b600181811c90821680617a0457607f821691505b602082108103617a2257634e487b7160e01b5f52602260045260245ffd5b50919050565b5f8154617a34816179f0565b808552600182168015617a4e5760018114617a6a57617a9e565b60ff1983166020870152602082151560051b8701019350617a9e565b845f5260205f205f5b83811015617a955781546020828a010152600182019150602081019050617a73565b87016020019450505b50505092915050565b805f5b6002811015617ac9578154845260209093019260019182019101617aaa565b50505050565b63ffffffff84168152606060208201525f617aed6060830185617a28565b8281036040840152617aff8185617aa7565b617b0f6040820160028601617aa7565b60c06080820152617b2660c0820160048601617a28565b81810360a0830152617b3b8160058701617a28565b979650505050505050565b5f5f60408385031215617b57575f5ffd5b505080516020909101519092909150565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715617b9e57617b9e617b68565b60405290565b604080519081016001600160401b0381118282101715617b9e57617b9e617b68565b604051606081016001600160401b0381118282101715617b9e57617b9e617b68565b60405161012081016001600160401b0381118282101715617b9e57617b9e617b68565b5f82601f830112617c1a575f5ffd5b8151602083015f5f6001600160401b03841115617c3957617c39617b68565b50604051601f19601f85018116603f011681018181106001600160401b0382111715617c6757617c67617b68565b604052838152905080828401871015617c7e575f5ffd5b8383602083015e5f602085830101528094505050505092915050565b6001600160a01b0381168114616f38575f5ffd5b805161798b81617c9a565b5f60208284031215617cc9575f5ffd5b81516001600160401b03811115617cde575f5ffd5b820160e08185031215617cef575f5ffd5b617cf7617b7c565b81516001600160401b03811115617d0c575f5ffd5b617d1886828501617c0b565b82525060208201516001600160401b03811115617d33575f5ffd5b617d3f86828501617c0b565b60208301525060408201516001600160401b03811115617d5d575f5ffd5b617d6986828501617c0b565b60408301525060608201516001600160401b03811115617d87575f5ffd5b617d9386828501617c0b565b60608301525060808201516001600160401b03811115617db1575f5ffd5b617dbd86828501617c0b565b608083015250617dcf60a08301617cae565b60a0820152617de060c0830161797c565b60c0820152949350505050565b805163ffffffff8116811461798b575f5ffd5b80516001600160401b038116811461798b575f5ffd5b5f82601f830112617e25575f5ffd5b617e2d617ba4565b806040840185811115617e3e575f5ffd5b845b818110156176bf578051845260209384019301617e40565b5f81830360c0811215617e69575f5ffd5b617e71617bc6565b91506080811215617e80575f5ffd5b50617e89617ba4565b617e938484617e16565b8152617ea28460408501617e16565b6020820152815260808201516001600160401b03811115617ec1575f5ffd5b617ecd84828501617c0b565b60208301525060a08201516001600160401b03811115617eeb575f5ffd5b617ef784828501617c0b565b60408301525092915050565b5f60208284031215617f13575f5ffd5b81516001600160401b03811115617f28575f5ffd5b82016101208185031215617f3a575f5ffd5b617f42617be8565b8151815260208083015190820152617f5c60408301617ded565b6040820152617f6d60608301617e00565b606082015260808201516001600160401b03811115617f8a575f5ffd5b617f9686828501617c0b565b60808301525060a08201516001600160401b03811115617fb4575f5ffd5b617fc086828501617e58565b60a08301525060c08201516001600160401b03811115617fde575f5ffd5b617fea86828501617c0b565b60c08301525060e08201516001600160401b03811115618008575f5ffd5b61801486828501617c0b565b60e0830152506180276101008301617cae565b610100820152949350505050565b838152606060208201525f61804d6060830185617a28565b828103604084015261805f8185617a28565b9695505050505050565b80820281158282048414176179d7576179d76179b0565b5f60208284031215618090575f5ffd5b81516001600160601b03811681146179a9575f5ffd5b5f602082840312156180b6575f5ffd5b81516179a981617c9a565b5f602082840312156180d1575f5ffd5b81516001600160401b038111156180e6575f5ffd5b6180f284828501617c0b565b949350505050565b828152604060208201525f6180f26040830184617a28565b838152606060208201525f61812a6060830185617a28565b828103604084015261805f81856176ca565b602081525f6179a960208301846176ca565b6020808252602a908201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604082015269656d654164647265737360b01b606082015260800190565b604081525f6181aa60408301856176ca565b905060018060a01b03831660208301529392505050565b8215158152604060208201525f6180f260408301846176ca565b604081525f6181ed60408301856176ca565b90508260208301529392505050565b6080810161820a8285617aa7565b6179a96040830184617aa7565b604081525f6181aa6040830185617a28565b5f82518060208501845e5f920191825250919050565b6001600160a01b03831681526040602082018190525f906180f2908301846176ca565b601f8211156182a657805f5260205f20601f840160051c810160208510156182875750805b601f840160051c820191505b818110156165a9575f8155600101618293565b505050565b81516001600160401b038111156182c4576182c4617b68565b6182d8816182d284546179f0565b84618262565b6020601f82116001811461830a575f83156182f35750848201515b5f19600385901b1c1916600184901b1784556165a9565b5f84815260208120601f198516915b828110156183395787850151825560209485019460019092019101618319565b508482101561835657868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe608060405234801561000f575f5ffd5b5060405161167438038061167483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b6114b4806101c05f395ff3fe608060405260043610610112575f3560e01c806379ba50971161009d57806397a9c2851161006257806397a9c285146102f7578063b8ca8dd81461030c578063b96dbba71461032b578063e64a66ea14610333578063f2fde38b1461033b575f5ffd5b806379ba509714610252578063809800431461026657806386e560be146102855780638da5cb5b146102a857806393b9740a146102d8575f5ffd5b806336bfffed116100e357806336bfffed146101ae5780634d3de353146101cd5780634fa26d40146101e057806359608fda146101ff5780635d94180214610233575f5ffd5b80626d6cae1461015557806309c1ba2e1461017d57806312065fe0146101925780631d2b2afd146101a4575f5ffd5b3661015157604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b348015610160575f5ffd5b5061016a60045481565b6040519081526020015b60405180910390f35b348015610188575f5ffd5b5061016a60035481565b34801561019d575f5ffd5b504761016a565b6101ac61035a565b005b3480156101b9575f5ffd5b506101ac6101c8366004610e6d565b610401565b61016a6101db366004610f23565b6104fe565b3480156101eb575f5ffd5b506101ac6101fa366004610fc6565b610561565b34801561020a575f5ffd5b5061021e610219366004610f23565b6105eb565b60408051928352602083019190915201610174565b34801561023e575f5ffd5b506101ac61024d366004610fe6565b610656565b34801561025d575f5ffd5b506101ac6106b7565b348015610271575f5ffd5b506101ac61028036600461102e565b610760565b348015610290575f5ffd5b5061029961079a565b6040516101749392919061109b565b3480156102b3575f5ffd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610174565b3480156102e3575f5ffd5b506002546102c0906001600160a01b031681565b348015610302575f5ffd5b5061016a600b5481565b348015610317575f5ffd5b506101ac6103263660046110ea565b610926565b6101ac6109f9565b6101ac610a40565b348015610346575f5ffd5b506101ac610355366004610fc6565b610abf565b6003545f0361039e5760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b1580156103e8575f5ffd5b505af11580156103fa573d5f5f3e3d5ffd5b5050505050565b610409610ad3565b6003545f0361044a5760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b6044820152606401610395565b5f5b818110156104f9576002546003546001600160a01b039091169063bec4c08c9085858581811061047e5761047e611114565b90506020020160208101906104939190610fc6565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b1580156104d7575f5ffd5b505af11580156104e9573d5f5f3e3d5ffd5b50506001909201915061044c9050565b505050565b5f5f6105418686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b27915050565b6004819055905082600561055582826112b5565b50909695505050505050565b610569610ad3565b6001600160a01b0381166105c95760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b6064820152608401610395565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f6106308888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610ba5915050565b6004829055909250905084600561064782826112b5565b50919890975095505050505050565b6002546001600160a01b031633146106b05760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c6044820152606401610395565b6104f95f5ffd5b6001546001600160a01b0316331461070a5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610395565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610768610ad3565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107b757505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116107ed57505050505081525050908060040180546108199061117f565b80601f01602080910402602001604051908101604052809291908181526020018280546108459061117f565b80156108905780601f1061086757610100808354040283529160200191610890565b820191905f5260205f20905b81548152906001019060200180831161087357829003601f168201915b5050505050908060050180546108a59061117f565b80601f01602080910402602001604051908101604052809291908181526020018280546108d19061117f565b801561091c5780601f106108f35761010080835404028352916020019161091c565b820191905f5260205f20905b8154815290600101906020018083116108ff57829003601f168201915b5050505050905083565b61092e610ad3565b8147101561097e5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e747261637400006044820152606401610395565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109b1573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516109ed91815260200190565b60405180910390a25050565b610a01610ad3565b610a09610c9b565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103d1565b5f3411610a885760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b6044820152606401610395565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610ac7610ad3565b610ad081610dc5565b50565b5f546001600160a01b03163314610b255760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610395565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b5d918891889088906004016113f6565b6020604051808303815f875af1158015610b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9d9190611437565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610bf5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190611437565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c509089908990899060040161144e565b60206040518083038185885af1158015610c6c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c919190611437565b9150935093915050565b5f6003545f14610ced5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f0000000000006044820152606401610395565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190611437565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b158015610dac575f5ffd5b505af1158015610dbe573d5f5f3e3d5ffd5b5050505090565b336001600160a01b03821603610e1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610395565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f5f60208385031215610e7e575f5ffd5b823567ffffffffffffffff811115610e94575f5ffd5b8301601f81018513610ea4575f5ffd5b803567ffffffffffffffff811115610eba575f5ffd5b8560208260051b8401011115610ece575f5ffd5b6020919091019590945092505050565b5f5f83601f840112610eee575f5ffd5b50813567ffffffffffffffff811115610f05575f5ffd5b602083019150836020828501011115610f1c575f5ffd5b9250929050565b5f5f5f5f60608587031215610f36575f5ffd5b843563ffffffff81168114610f49575f5ffd5b9350602085013567ffffffffffffffff811115610f64575f5ffd5b610f7087828801610ede565b909450925050604085013567ffffffffffffffff811115610f8f575f5ffd5b850160c08188031215610fa0575f5ffd5b939692955090935050565b80356001600160a01b0381168114610fc1575f5ffd5b919050565b5f60208284031215610fd6575f5ffd5b610fdf82610fab565b9392505050565b5f5f5f60408486031215610ff8575f5ffd5b83359250602084013567ffffffffffffffff811115611015575f5ffd5b61102186828701610ede565b9497909650939450505050565b5f6020828403121561103e575f5ffd5b5035919050565b805f5b6002811015611067578151845260209384019390910190600101611048565b50505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6110a6818551611045565b5f60208501516110b96040840182611045565b5060c060808301526110ce60c083018561106d565b82810360a08401526110e0818561106d565b9695505050505050565b5f5f604083850312156110fb575f5ffd5b8235915061110b60208401610fab565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112611151575f5ffd5b83018035915067ffffffffffffffff82111561116b575f5ffd5b602001915036819003821315610f1c575f5ffd5b600181811c9082168061119357607f821691505b6020821081036111b157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104f957805f5260205f20601f840160051c810160208510156111dc5750805b601f840160051c820191505b818110156103fa575f81556001016111e8565b67ffffffffffffffff83111561121357611213611128565b61122783611221835461117f565b836111b7565b5f601f841160018114611258575f85156112415750838201355b5f19600387901b1c1916600186901b1783556103fa565b5f83815260208120601f198716915b828110156112875786850135825560209485019460019092019101611267565b50868210156112a3575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b60028110156112d5578135838201556020909101906001016112b8565b5050604082015f5b60028110156112fd578135838201600201556020909101906001016112dd565b505061130c608083018361113c565b61131a8183600486016111fb565b505061132960a083018361113c565b6110678183600586016111fb565b5f5f8335601e1984360301811261134c575f5ffd5b830160208101925035905067ffffffffffffffff81111561136b575f5ffd5b803603821315610f1c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f6113be6080830183611337565b60c060808601526113d360c086018284611379565b9150506113e360a0840184611337565b85830360a08701526110e0838284611379565b63ffffffff85168152836020820152608060408201525f61141a608083018561106d565b828103606084015261142c81856113a1565b979650505050505050565b5f60208284031215611447575f5ffd5b5051919050565b63ffffffff84168152606060208201525f61146c606083018561106d565b82810360408401526110e081856113a156fea26469706673582212201fe097e8426334c314f7a950394f6b0caa0adc48dfbeca6c71d97598f0df174764736f6c634300081c0033608060405234801561000f575f5ffd5b50604051611ae4380380611ae483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b611924806101c05f395ff3fe60806040526004361061011d575f3560e01c8063809800431161009d57806397a9c2851161006257806397a9c28514610321578063b8ca8dd814610336578063b96dbba714610355578063e64a66ea1461035d578063f2fde38b14610365575f5ffd5b8063809800431461027157806386e560be146102905780638da5cb5b146102b357806393b9740a146102e357806393d81d5814610302575f5ffd5b80634d3de353116100e35780634d3de353146101d85780634fa26d40146101eb57806359608fda1461020a5780635d9418021461023e57806379ba50971461025d575f5ffd5b80626d6cae1461016057806309c1ba2e1461018857806312065fe01461019d5780631d2b2afd146101af57806336bfffed146101b9575f5ffd5b3661015c57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b34801561016b575f5ffd5b5061017560045481565b6040519081526020015b60405180910390f35b348015610193575f5ffd5b5061017560035481565b3480156101a8575f5ffd5b5047610175565b6101b7610384565b005b3480156101c4575f5ffd5b506101b76101d33660046111c2565b61042b565b6101756101e6366004611278565b610528565b3480156101f6575f5ffd5b506101b761020536600461131b565b61058b565b348015610215575f5ffd5b50610229610224366004611278565b610615565b6040805192835260208301919091520161017f565b348015610249575f5ffd5b506101b761025836600461133b565b610680565b348015610268575f5ffd5b506101b76106e5565b34801561027c575f5ffd5b506101b761028b366004611383565b61078e565b34801561029b575f5ffd5b506102a46107c8565b60405161017f9392919061140d565b3480156102be575f5ffd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b3480156102ee575f5ffd5b506002546102cb906001600160a01b031681565b34801561030d575f5ffd5b506101b761031c36600461131b565b610954565b34801561032c575f5ffd5b50610175600b5481565b348015610341575f5ffd5b506101b7610350366004611448565b610968565b6101b7610a3b565b6101b7610a82565b348015610370575f5ffd5b506101b761037f36600461131b565b610b01565b6003545f036103c85760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b158015610412575f5ffd5b505af1158015610424573d5f5f3e3d5ffd5b5050505050565b610433610b12565b6003545f036104745760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b60448201526064016103bf565b5f5b81811015610523576002546003546001600160a01b039091169063bec4c08c908585858181106104a8576104a8611472565b90506020020160208101906104bd919061131b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b158015610501575f5ffd5b505af1158015610513573d5f5f3e3d5ffd5b5050600190920191506104769050565b505050565b5f5f61056b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b66915050565b6004819055905082600561057f8282611613565b50909695505050505050565b610593610b12565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b60648201526084016103bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f61065a8888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610be4915050565b600482905590925090508460056106718282611613565b50919890975095505050505050565b6002546001600160a01b031633146106da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c60448201526064016103bf565b610523838383610cda565b6001546001600160a01b031633146107385760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064016103bf565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610796610b12565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107e557505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161081b5750505050508152505090806004018054610847906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610873906114dd565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050908060050180546108d3906114dd565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff906114dd565b801561094a5780601f106109215761010080835404028352916020019161094a565b820191905f5260205f20905b81548152906001019060200180831161092d57829003601f168201915b5050505050905083565b61095c610b12565b61096581610ee2565b50565b610970610b12565b814710156109c05760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e7472616374000060448201526064016103bf565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109f3573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a2f91815260200190565b60405180910390a25050565b610a43610b12565b610a4b610f7a565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103fb565b5f3411610aca5760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b60448201526064016103bf565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610b09610b12565b610965816110a4565b5f546001600160a01b03163314610b645760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016103bf565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b9c91889188908890600401611754565b6020604051808303815f875af1158015610bb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc9190611795565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611795565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c8f908990899089906004016117ac565b60206040518083038185885af1158015610cab573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610cd09190611795565b9150935093915050565b8260045414610d215760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103932b8bab2b9ba1034b21760691b60448201526064016103bf565b6040805160e08101909152610ec79060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610d4a57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610d80575050505050815250508152602001600482018054610db0906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc906114dd565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b50505050508152602001600582018054610e40906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906114dd565b8015610eb75780601f10610e8e57610100808354040283529160200191610eb7565b820191905f5260205f20905b815481529060010190602001808311610e9a57829003601f168201915b505050505081525050838361114c565b806020019051810190610eda9190611795565b600b55505050565b6003545f03610f2c5760405162461bcd60e51b8152602060048201526016602482015275537562736372697074696f6e4964206973207a65726f60501b60448201526064016103bf565b600254600354604051622b825560e61b815260048101919091526001600160a01b03838116602483015290911690630ae09540906044015f604051808303815f87803b158015610412575f5ffd5b5f6003545f14610fcc5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f00000000000060448201526064016103bf565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561101d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110419190611795565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b15801561108b575f5ffd5b505af115801561109d573d5f5f3e3d5ffd5b5050505090565b336001600160a01b038216036110fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103bf565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c490611181908790879087906004016117dc565b5f60405180830381865afa15801561119b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdc919081019061183b565b5f5f602083850312156111d3575f5ffd5b823567ffffffffffffffff8111156111e9575f5ffd5b8301601f810185136111f9575f5ffd5b803567ffffffffffffffff81111561120f575f5ffd5b8560208260051b8401011115611223575f5ffd5b6020919091019590945092505050565b5f5f83601f840112611243575f5ffd5b50813567ffffffffffffffff81111561125a575f5ffd5b602083019150836020828501011115611271575f5ffd5b9250929050565b5f5f5f5f6060858703121561128b575f5ffd5b843563ffffffff8116811461129e575f5ffd5b9350602085013567ffffffffffffffff8111156112b9575f5ffd5b6112c587828801611233565b909450925050604085013567ffffffffffffffff8111156112e4575f5ffd5b850160c081880312156112f5575f5ffd5b939692955090935050565b80356001600160a01b0381168114611316575f5ffd5b919050565b5f6020828403121561132b575f5ffd5b61133482611300565b9392505050565b5f5f5f6040848603121561134d575f5ffd5b83359250602084013567ffffffffffffffff81111561136a575f5ffd5b61137686828701611233565b9497909650939450505050565b5f60208284031215611393575f5ffd5b5035919050565b805f5b60028110156113bc57815184526020938401939091019060010161139d565b50505050565b6113cd82825161139a565b6020810151610523604084018261139a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b61141781856113c2565b60c060808201525f61142c60c08301856113df565b82810360a084015261143e81856113df565b9695505050505050565b5f5f60408385031215611459575f5ffd5b8235915061146960208401611300565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e198436030181126114af575f5ffd5b83018035915067ffffffffffffffff8211156114c9575f5ffd5b602001915036819003821315611271575f5ffd5b600181811c908216806114f157607f821691505b60208210810361150f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561052357805f5260205f20601f840160051c8101602085101561153a5750805b601f840160051c820191505b81811015610424575f8155600101611546565b67ffffffffffffffff83111561157157611571611486565b6115858361157f83546114dd565b83611515565b5f601f8411600181146115b6575f851561159f5750838201355b5f19600387901b1c1916600186901b178355610424565b5f83815260208120601f198716915b828110156115e557868501358255602094850194600190920191016115c5565b5086821015611601575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b600281101561163357813583820155602090910190600101611616565b5050604082015f5b600281101561165b5781358382016002015560209091019060010161163b565b505061166a608083018361149a565b611678818360048601611559565b505061168760a083018361149a565b6113bc818360058601611559565b5f5f8335601e198436030181126116aa575f5ffd5b830160208101925035905067ffffffffffffffff8111156116c9575f5ffd5b803603821315611271575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61171c6080830183611695565b60c0608086015261173160c0860182846116d7565b91505061174160a0840184611695565b85830360a087015261143e8382846116d7565b63ffffffff85168152836020820152608060408201525f61177860808301856113df565b828103606084015261178a81856116ff565b979650505050505050565b5f602082840312156117a5575f5ffd5b5051919050565b63ffffffff84168152606060208201525f6117ca60608301856113df565b828103604084015261143e81856116ff565b604081526117ee6040820185516113c2565b5f602085015160c0808401526118086101008401826113df565b90506040860151603f198483030160e085015261182582826113df565b915050828103602084015261143e8185876116d7565b5f6020828403121561184b575f5ffd5b815167ffffffffffffffff811115611861575f5ffd5b8201601f81018413611871575f5ffd5b805167ffffffffffffffff81111561188b5761188b611486565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156118ba576118ba611486565b6040528181528282016020018610156118d1575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220c3b44a1906b2ea323c1b7dd1b7b303f120420afb0c338072e3b98639f89bc6d564736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131f26101015f395f8181611efb01528181611f24015261207101526131f25ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063c58343ef11610092578063e63b5d5811610062578063e63b5d581461054e578063e6b3ca7114610562578063f7cef80014610581578063f87f0e61146105a0575f5ffd5b8063c58343ef146104c5578063ca15c873146104f1578063cd802c9114610510578063d547741f1461052f575f5ffd5b8063a3246ad3116100cd578063a3246ad31461041e578063ac9650d81461044a578063ad3cb1cc14610476578063b0947289146104a6575f5ffd5b80639010d07c146103b557806391d14854146103ec578063a217fddf1461040b575f5ffd5b80634b96e16611610168578063571d708711610138578063571d70871461033b5780636f421ea91461034f57806375b238fc1461036357806381d12c5814610383575f5ffd5b80634b96e166146102bd5780634f1ef286146102de57806352d1902d146102f157806354fd4d5014610305575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461024b57806336568abe1461026a57806347c0318614610289578063485cc9551461029e575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461271f565b6105bf565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461275a565b6105e9565b005b348015610229575f5ffd5b5061023d610238366004612775565b610648565b6040519081526020016101f4565b348015610256575f5ffd5b5061021c61026536600461278c565b610668565b348015610275575f5ffd5b5061021c61028436600461278c565b61068a565b348015610294575f5ffd5b5061023d60015481565b3480156102a9575f5ffd5b5061021c6102b83660046127ba565b6106c2565b3480156102c8575f5ffd5b506102d1610882565b6040516101f491906127e6565b61021c6102ec366004612892565b610893565b3480156102fc575f5ffd5b5061023d6108b2565b348015610310575f5ffd5b50604080518082019091526005815264302e302e3160d81b60208201525b6040516101f4919061294c565b348015610346575f5ffd5b506102d16108cd565b34801561035a575f5ffd5b506102d16108d9565b34801561036e575f5ffd5b5061023d5f51602061319d5f395f51905f5281565b34801561038e575f5ffd5b506103a261039d366004612775565b6108e5565b6040516101f4979695949392919061295e565b3480156103c0575f5ffd5b506103d46103cf3660046129e3565b610bcc565b6040516001600160a01b0390911681526020016101f4565b3480156103f7575f5ffd5b506101e861040636600461278c565b610bf9565b348015610416575f5ffd5b5061023d5f81565b348015610429575f5ffd5b5061043d610438366004612775565b610c2f565b6040516101f49190612a03565b348015610455575f5ffd5b50610469610464366004612a43565b610c5f565b6040516101f49190612ab2565b348015610481575f5ffd5b5061032e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104b1575f5ffd5b506101e86104c0366004612775565b610d44565b3480156104d0575f5ffd5b506104e46104df366004612775565b610d50565b6040516101f49190612b15565b3480156104fc575f5ffd5b5061023d61050b366004612775565b6110ad565b34801561051b575f5ffd5b506101e861052a366004612775565b6110d1565b34801561053a575f5ffd5b5061021c61054936600461278c565b6110ee565b348015610559575f5ffd5b5061023d61110a565b34801561056d575f5ffd5b506003546103d4906001600160a01b031681565b34801561058c575f5ffd5b5061021c61059b366004612c1c565b611115565b3480156105ab575f5ffd5b5061023d6105ba366004612c93565b611883565b5f6001600160e01b03198216635a05180f60e01b14806105e357506105e382611df6565b92915050565b6105ff5f51602061319d5f395f51905f52611e2a565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f9081525f51602061317d5f395f51905f52602052604090206001015490565b61067182610648565b61067a81611e2a565b6106848383611e37565b50505050565b6001600160a01b03811633146106b35760405163334bd91960e11b815260040160405180910390fd5b6106bd8282611e79565b505050565b5f6106cb611eb2565b805490915060ff600160401b82041615906001600160401b03165f811580156106f15750825b90505f826001600160401b0316600114801561070c5750303b155b90508115801561071a575080155b156107385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845460ff60401b1916600160401b1785555b61076a611eda565b610772611eda565b6107895f51602061319d5f395f51905f5288611e37565b6107ce5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6107d85f88611e37565b6108185760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064016107c5565b600380546001600160a01b0319166001600160a01b038816179055831561087957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b606061088e6006611ee4565b905090565b61089b611ef0565b6108a482611f94565b6108ae8282611faa565b5050565b5f6108bb612066565b505f51602061315d5f395f51905f5290565b606061088e6004611ee4565b606061088e6008611ee4565b60026020525f90815260409020805481906108ff90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90612d2f565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b50505050509080600101805461098b90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b790612d2f565b8015610a025780601f106109d957610100808354040283529160200191610a02565b820191905f5260205f20905b8154815290600101906020018083116109e557829003601f168201915b505050505090806002018054610a1790612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390612d2f565b8015610a8e5780601f10610a6557610100808354040283529160200191610a8e565b820191905f5260205f20905b815481529060010190602001808311610a7157829003601f168201915b505050505090806003018054610aa390612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90612d2f565b8015610b1a5780601f10610af157610100808354040283529160200191610b1a565b820191905f5260205f20905b815481529060010190602001808311610afd57829003601f168201915b505050505090806004018054610b2f90612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612d2f565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b505050600590930154919250506001600160a01b0381169060ff600160a01b9091041687565b5f8281525f51602061313d5f395f51905f52602081905260408220610bf190846120af565b949350505050565b5f9182525f51602061317d5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f51602061313d5f395f51905f526020819052604090912060609190610c5890611ee4565b9392505050565b604080515f815260208101909152606090826001600160401b03811115610c8857610c88612828565b604051908082528060200260200182016040528015610cbb57816020015b6060815260200190600190039081610ca65790505b5091505f5b83811015610d3c57610d1730868684818110610cde57610cde612d8e565b9050602002810190610cf09190612da2565b85604051602001610d0393929190612dfb565b6040516020818303038152906040526120ba565b838281518110610d2957610d29612d8e565b6020908102919091010152600101610cc0565b505092915050565b5f6105e360088361212c565b610d996040518060e0016040528060608152602001606081526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f151581525090565b5f8281526002602052604090819020815160e08101909252805482908290610dc090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dec90612d2f565b8015610e375780601f10610e0e57610100808354040283529160200191610e37565b820191905f5260205f20905b815481529060010190602001808311610e1a57829003601f168201915b50505050508152602001600182018054610e5090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c90612d2f565b8015610ec75780601f10610e9e57610100808354040283529160200191610ec7565b820191905f5260205f20905b815481529060010190602001808311610eaa57829003601f168201915b50505050508152602001600282018054610ee090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c90612d2f565b8015610f575780601f10610f2e57610100808354040283529160200191610f57565b820191905f5260205f20905b815481529060010190602001808311610f3a57829003601f168201915b50505050508152602001600382018054610f7090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c90612d2f565b8015610fe75780601f10610fbe57610100808354040283529160200191610fe7565b820191905f5260205f20905b815481529060010190602001808311610fca57829003601f168201915b5050505050815260200160048201805461100090612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461102c90612d2f565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b5050509183525050600591909101546001600160a01b0381166020830152600160a01b900460ff16151560409091015292915050565b5f8181525f51602061313d5f395f51905f52602081905260408220610c5890612143565b5f6110dd60068361212c565b806105e357506105e360088361212c565b6110f782610648565b61110081611e2a565b6106848383611e79565b5f61088e6006612143565b61111d61214c565b611126856110d1565b6111865760405162461bcd60e51b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201526084016107c5565b5f85815260026020526040808220815160e081019092528054829082906111ac90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612d2f565b80156112235780601f106111fa57610100808354040283529160200191611223565b820191905f5260205f20905b81548152906001019060200180831161120657829003601f168201915b5050505050815260200160018201805461123c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461126890612d2f565b80156112b35780601f1061128a576101008083540402835291602001916112b3565b820191905f5260205f20905b81548152906001019060200180831161129657829003601f168201915b505050505081526020016002820180546112cc90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f890612d2f565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050815260200160038201805461135c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461138890612d2f565b80156113d35780601f106113aa576101008083540402835291602001916113d3565b820191905f5260205f20905b8154815290600101906020018083116113b657829003601f168201915b505050505081526020016004820180546113ec90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461141890612d2f565b80156114635780601f1061143a57610100808354040283529160200191611463565b820191905f5260205f20905b81548152906001019060200180831161144657829003601f168201915b5050509183525050600591909101546001600160a01b038082166020840152600160a01b90910460ff16151560409283015282516003549251630b76139f60e31b8152939450925f9290911690635bb09cf8906114c490859060040161294c565b602060405180830381865afa1580156114df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115039190612e1a565b90506001600160a01b03811661154c5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420736368656d6560901b60448201526064016107c5565b604080840151905163eae1e15b60e01b815282915f916001600160a01b0384169163eae1e15b91611580919060040161294c565b5f60405180830381865afa15801561159a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115c19190810190612e35565b9050816001600160a01b031663f6e548e9828989866001600160a01b031663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611610573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116379190810190612e35565b6040518563ffffffff1660e01b81526004016116569493929190612ed1565b602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190612f15565b6116e15760405162461bcd60e51b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107c5565b5f8560a001516001600160a01b0316635d3be00160e01b8c8c8c8c8c604051602401611711959493929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161174f9190612f6c565b5f604051808303815f865af19150503d805f8114611788576040519150601f19603f3d011682016040523d82523d5f602084013e61178d565b606091505b50505f8c8152600260205260409020600501805460ff60a01b1916600160a01b17905590506117bd60068c612174565b5080611807576117ce60088c61217f565b506040518b81527f3fed05c5d3a79e0e2f23ffd594267f0e29799ad1b4b6a7756138d5247baa4a7b9060200160405180910390a161186d565b6118108b610d44565b156118225761182060088c612174565b505b61182d60048c61217f565b508a7f0a1f5b3782d8f604353407c980dbfe6b55499c5b92cb8c39f089c73f348407e68b8b8b8b6040516118649493929190612f77565b60405180910390a25b50505050505061187c60015f55565b5050505050565b5f6001805f8282546118959190612f9d565b9091555050600354604051632fc9fa3360e01b81526001600160a01b0390911690632fc9fa33906118cc908a908a90600401612fb0565b602060405180830381865afa1580156118e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190b9190612f15565b6119575760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107c5565b61199e600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b6119f85760405162461bcd60e51b815260206004820152602560248201527f43697068657274657874206661696c6564206c656e67746820626f756e647320604482015264636865636b60d81b60648201526084016107c5565b611a3f600161100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b611a975760405162461bcd60e51b8152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e647320636044820152636865636b60e01b60648201526084016107c5565b611ad583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061221a92505050565b15611b2e5760405162461bcd60e51b815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a65604482015262726f7360e81b60648201526084016107c5565b600354604051630b76139f60e31b81525f916001600160a01b031690635bb09cf890611b60908b908b90600401612fb0565b602060405180830381865afa158015611b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9f9190612e1a565b90506001600160a01b038116611bf75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e617475726520736368656d65000000000000000060448201526064016107c5565b6040518060e0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8a01819004810282018101909252888152918101919089908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093855250506040805160208181018352848252808601919091528151808201835284815282860152336060860152608090940183905260015483526002909352502081518190611cf79082613007565b5060208201516001820190611d0c9082613007565b5060408201516002820190611d219082613007565b5060608201516003820190611d369082613007565b5060808201516004820190611d4b9082613007565b5060a08201516005909101805460c0909301511515600160a01b026001600160a81b03199093166001600160a01b0390921691909117919091179055600154611d969060069061217f565b50336001600160a01b03166001547f133b1acfa49920f88bc8c23faeb2ba43b75b3d6c453290a824f3c85e7733df138a8a88888c8c42604051611ddf97969594939291906130c1565b60405180910390a350506001549695505050505050565b5f6001600160e01b03198216637965db0b60e01b14806105e357506301ffc9a760e01b6001600160e01b03198316146105e3565b611e348133612265565b50565b5f5f51602061313d5f395f51905f5281611e51858561229e565b90508015610bf1575f858152602083905260409020611e70908561233f565b50949350505050565b5f5f51602061313d5f395f51905f5281611e938585612353565b90508015610bf1575f858152602083905260409020611e7090856123cc565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105e3565b611ee26123e0565b565b60605f610c5883612405565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f6a5f51602061315d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611ee25760405163703e46dd60e11b815260040160405180910390fd5b611e345f51602061319d5f395f51905f52611e2a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612004575060408051601f3d908101601f1916820190925261200191810190613111565b60015b61202c57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107c5565b5f51602061315d5f395f51905f52811461205c57604051632a87526960e21b8152600481018290526024016107c5565b6106bd838361245e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ee25760405163703e46dd60e11b815260040160405180910390fd5b5f610c5883836124b3565b60605f5f846001600160a01b0316846040516120d69190612f6c565b5f60405180830381855af49150503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b50915091506121238583836124d9565b95945050505050565b5f8181526001830160205260408120541515610c58565b5f6105e3825490565b60025f540361216e57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f610c588383612535565b5f610c58838361260f565b5f818311156122015760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107c5565b8351838110801590612123575091909111159392505050565b5f805b825181101561225c5782818151811061223857612238612d8e565b01602001516001600160f81b0319161561225457505f92915050565b60010161221d565b50600192915050565b61226f8282610bf9565b6108ae5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107c5565b5f5f51602061317d5f395f51905f526122b78484610bf9565b612336575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556122ec3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105e3565b5f9150506105e3565b5f610c58836001600160a01b03841661260f565b5f5f51602061317d5f395f51905f5261236c8484610bf9565b15612336575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105e3565b5f610c58836001600160a01b038416612535565b6123e861265b565b611ee257604051631afcd79f60e31b815260040160405180910390fd5b6060815f0180548060200260200160405190810160405280929190818152602001828054801561245257602002820191905f5260205f20905b81548152602001906001019080831161243e575b50505050509050919050565b61246782612674565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156124ab576106bd82826120ba565b6108ae6126d7565b5f825f0182815481106124c8576124c8612d8e565b905f5260205f200154905092915050565b6060826124ee576124e9826126f6565b610c58565b815115801561250557506001600160a01b0384163b155b1561252e57604051639996b31560e01b81526001600160a01b03851660048201526024016107c5565b5080610c58565b5f8181526001830160205260408120548015612336575f612557600183612d7b565b85549091505f9061256a90600190612d7b565b90508082146125c9575f865f01828154811061258857612588612d8e565b905f5260205f200154905080875f0184815481106125a8576125a8612d8e565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125da576125da613128565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105e3565b5f81815260018301602052604081205461265457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105e3565b505f6105e3565b5f612664611eb2565b54600160401b900460ff16919050565b806001600160a01b03163b5f036126a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107c5565b5f51602061315d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b3415611ee25760405163b398979f60e01b815260040160405180910390fd5b8051156127065780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561272f575f5ffd5b81356001600160e01b031981168114610c58575f5ffd5b6001600160a01b0381168114611e34575f5ffd5b5f6020828403121561276a575f5ffd5b8135610c5881612746565b5f60208284031215612785575f5ffd5b5035919050565b5f5f6040838503121561279d575f5ffd5b8235915060208301356127af81612746565b809150509250929050565b5f5f604083850312156127cb575f5ffd5b82356127d681612746565b915060208301356127af81612746565b602080825282518282018190525f918401906040840190835b8181101561281d5783518352602093840193909201916001016127ff565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561286457612864612828565b604052919050565b5f6001600160401b0382111561288457612884612828565b50601f01601f191660200190565b5f5f604083850312156128a3575f5ffd5b82356128ae81612746565b915060208301356001600160401b038111156128c8575f5ffd5b8301601f810185136128d8575f5ffd5b80356128eb6128e68261286c565b61283c565b8181528660208385010111156128ff575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c58602083018461291e565b60e081525f61297060e083018a61291e565b8281036020840152612982818a61291e565b90508281036040840152612996818961291e565b905082810360608401526129aa818861291e565b905082810360808401526129be818761291e565b6001600160a01b039590951660a0840152505090151560c09091015295945050505050565b5f5f604083850312156129f4575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561281d5783516001600160a01b0316835260209384019390920191600101612a1c565b5f5f60208385031215612a54575f5ffd5b82356001600160401b03811115612a69575f5ffd5b8301601f81018513612a79575f5ffd5b80356001600160401b03811115612a8e575f5ffd5b8560208260051b8401011115612aa2575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612b0957603f19878603018452612af485835161291e565b94506020938401939190910190600101612ad8565b50929695505050505050565b602081525f825160e06020840152612b3161010084018261291e565b90506020840151601f19848303016040850152612b4e828261291e565b9150506040840151601f19848303016060850152612b6c828261291e565b9150506060840151601f19848303016080850152612b8a828261291e565b9150506080840151601f198483030160a0850152612ba8828261291e565b91505060018060a01b0360a08501511660c084015260c0840151612bd060e085018215159052565b509392505050565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b602083019150836020828501011115612c15575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c30575f5ffd5b8535945060208601356001600160401b03811115612c4c575f5ffd5b612c5888828901612bd8565b90955093505060408601356001600160401b03811115612c76575f5ffd5b612c8288828901612bd8565b969995985093965092949392505050565b5f5f5f5f5f5f60608789031215612ca8575f5ffd5b86356001600160401b03811115612cbd575f5ffd5b612cc989828a01612bd8565b90975095505060208701356001600160401b03811115612ce7575f5ffd5b612cf389828a01612bd8565b90955093505060408701356001600160401b03811115612d11575f5ffd5b612d1d89828a01612bd8565b979a9699509497509295939492505050565b600181811c90821680612d4357607f821691505b602082108103612d6157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e3576105e3612d67565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612db7575f5ffd5b8301803591506001600160401b03821115612dd0575f5ffd5b602001915036819003821315612c15575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f8152612e108185612de4565b9695505050505050565b5f60208284031215612e2a575f5ffd5b8151610c5881612746565b5f60208284031215612e45575f5ffd5b81516001600160401b03811115612e5a575f5ffd5b8201601f81018413612e6a575f5ffd5b8051612e786128e68261286c565b818152856020838501011115612e8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612ee3606083018761291e565b8281036020840152612ef6818688612ea9565b90508281036040840152612f0a818561291e565b979650505050505050565b5f60208284031215612f25575f5ffd5b81518015158114610c58575f5ffd5b858152606060208201525f612f4d606083018688612ea9565b8281036040840152612f60818587612ea9565b98975050505050505050565b5f610c588284612de4565b604081525f612f8a604083018688612ea9565b8281036020840152612f0a818587612ea9565b808201808211156105e3576105e3612d67565b602081525f610bf1602083018486612ea9565b601f8211156106bd57805f5260205f20601f840160051c81016020851015612fe85750805b601f840160051c820191505b8181101561187c575f8155600101612ff4565b81516001600160401b0381111561302057613020612828565b6130348161302e8454612d2f565b84612fc3565b6020601f821160018114613066575f831561304f5750848201515b5f19600385901b1c1916600184901b17845561187c565b5f84815260208120601f198516915b828110156130955787850151825560209485019460019092019101613075565b50848210156130b257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608081525f6130d460808301898b612ea9565b82810360208401526130e781888a612ea9565b905082810360408401526130fc818688612ea9565b91505082606083015298975050505050505050565b5f60208284031215613121575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b9bf840b608447c267623fc79124450c15b070c6cf6f643c84d5b29677f23f5964736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c003360a060405230608052348015610013575f5ffd5b5060015f55610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b766100fd5f395f818161377c015281816137a501526138f20152615b765ff3fe608060405260043610610371575f3560e01c80637350f456116101c8578063aa433aff116100fd578063c58343ef1161009d578063cd802c911161006d578063cd802c9114610b18578063d547741f14610b37578063dac83d2914610b56578063dc311dd314610b75575f5ffd5b8063c58343ef14610a8f578063c9bc18c414610abb578063ca15c87314610ada578063cb63179714610af9575f5ffd5b8063b2a7cac5116100d8578063b2a7cac5146109d9578063bd18636b146109f8578063bec4c08c14610a17578063c3f909d414610a36575f5ffd5b8063aa433aff1461095e578063ad3cb1cc1461097d578063aefb212f146109ad575f5ffd5b8063995cb36e11610168578063a21a23e411610143578063a21a23e4146108ec578063a3246ad314610900578063a3907d711461092c578063a608a1e114610940575f5ffd5b8063995cb36e146108835780639d40a6fd146108a2578063a217fddf146108d9575f5ffd5b80638a1f165a116101a35780638a1f165a146107f45780639010d07c1461083257806391d148541461085157806395b55cfc14610870575f5ffd5b80637350f456146107ad57806375b238fc146107c15780637909dc7b146107e1575f5ffd5b806338c27d12116102a957806352d1902d116102495780635d3be001116102195780635d3be0011461071f5780635f7bda9f1461073e57806364d51a2a1461077257806367b276af14610799575f5ffd5b806352d1902d146106a657806354236fb3146106ba57806354fd4d50146106d957806357a8070a14610706575f5ffd5b806345fa43541161028457806345fa435414610636578063485cc955146106555780634b160935146106745780634f1ef28614610693575f5ffd5b806338c27d12146105dd5780633bc32c75146105f157806341af6c8714610617575f5ffd5b8063235296f7116103145780632f2ff15d116102ef5780632f2ff15d1461056e5780633255c4561461058d5780633408e470146105ac57806336568abe146105be575f5ffd5b8063235296f71461051a578063248a9ca31461053b5780632f2770db1461055a575f5ffd5b80630ae095401161034f5780630ae095401461046c578063133c40c71461048d57806318e3dd27146104c45780631e6ba15b146104fb575f5ffd5b806301ffc9a714610375578063062b1d90146103a9578063088070f5146103ca575b5f5ffd5b348015610380575f5ffd5b5061039461038f366004614a28565b610ba4565b60405190151581526020015b60405180910390f35b6103bc6103b7366004614b42565b610bce565b6040519081526020016103a0565b3480156103d5575f5ffd5b50600a546104259063ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b9091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e0016103a0565b348015610477575f5ffd5b5061048b610486366004614bd2565b610f43565b005b348015610498575f5ffd5b506001546104ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104cf575f5ffd5b506008546104e3906001600160601b031681565b6040516001600160601b0390911681526020016103a0565b348015610506575f5ffd5b5061048b610515366004614c00565b610f94565b348015610525575f5ffd5b5061052e610ff3565b6040516103a09190614c49565b348015610546575f5ffd5b506103bc610555366004614c5b565b61107f565b348015610565575f5ffd5b5061048b61109f565b348015610579575f5ffd5b5061048b610588366004614bd2565b6110ee565b348015610598575f5ffd5b506103bc6105a7366004614c72565b611110565b3480156105b7575f5ffd5b50466103bc565b3480156105c9575f5ffd5b5061048b6105d8366004614bd2565b611128565b3480156105e8575f5ffd5b5061052e61115b565b3480156105fc575f5ffd5b506008546104e390600160601b90046001600160601b031681565b348015610622575f5ffd5b50610394610631366004614c5b565b611168565b348015610641575f5ffd5b5061048b610650366004614c9a565b6111fd565b348015610660575f5ffd5b5061048b61066f366004614d22565b6113d9565b34801561067f575f5ffd5b506103bc61068e366004614d4e565b61166c565b61048b6106a1366004614d67565b61167d565b3480156106b1575f5ffd5b506103bc61169c565b3480156106c5575f5ffd5b5061048b6106d4366004614c00565b6116b8565b3480156106e4575f5ffd5b50604080518082019091526005815264302e302e3160d81b602082015261052e565b348015610711575f5ffd5b50600b546103949060ff1681565b34801561072a575f5ffd5b5061048b610739366004614df0565b61172c565b348015610749575f5ffd5b5061075d610758366004614c5b565b6117ff565b6040516103a099989796959493929190614edb565b34801561077d575f5ffd5b50610786606481565b60405161ffff90911681526020016103a0565b3480156107a4575f5ffd5b5061052e611b91565b3480156107b8575f5ffd5b5061052e611b9e565b3480156107cc575f5ffd5b506103bc5f516020615b215f395f51905f5281565b6103bc6107ef366004614f70565b611bab565b3480156107ff575f5ffd5b5061052e60405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b34801561083d575f5ffd5b506104ac61084c366004614fd0565b611c9b565b34801561085c575f5ffd5b5061039461086b366004614bd2565b611cc8565b61048b61087e366004614c5b565b611cfe565b34801561088e575f5ffd5b506009546104e3906001600160601b031681565b3480156108ad575f5ffd5b506005546108c1906001600160401b031681565b6040516001600160401b0390911681526020016103a0565b3480156108e4575f5ffd5b506103bc5f81565b3480156108f7575f5ffd5b506103bc611e09565b34801561090b575f5ffd5b5061091f61091a366004614c5b565b611fb3565b6040516103a09190615033565b348015610937575f5ffd5b5061048b611fdc565b34801561094b575f5ffd5b50600b5461039490610100900460ff1681565b348015610969575f5ffd5b5061048b610978366004614c5b565b612027565b348015610988575f5ffd5b5061052e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156109b8575f5ffd5b506109cc6109c7366004614fd0565b612067565b6040516103a09190615045565b3480156109e4575f5ffd5b5061048b6109f3366004614c5b565b61215c565b348015610a03575f5ffd5b5061048b610a12366004614c00565b612247565b348015610a22575f5ffd5b5061048b610a31366004614bd2565b6122e0565b348015610a41575f5ffd5b50600a5463ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b90910416610425565b348015610a9a575f5ffd5b50610aae610aa9366004614c5b565b6123d4565b6040516103a09190615087565b348015610ac6575f5ffd5b5061052e610ad536600461515e565b6127ef565b348015610ae5575f5ffd5b506103bc610af4366004614c5b565b612c0d565b348015610b04575f5ffd5b5061048b610b13366004614bd2565b612c31565b348015610b23575f5ffd5b50610394610b32366004614c5b565b612e1d565b348015610b42575f5ffd5b5061048b610b51366004614bd2565b612eb1565b348015610b61575f5ffd5b5061048b610b70366004614bd2565b612ecd565b348015610b80575f5ffd5b50610b94610b8f366004614c5b565b612f6a565b6040516103a094939291906151c5565b5f6001600160e01b03198216635a05180f60e01b1480610bc85750610bc882613029565b92915050565b600b545f9060ff16610c275760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610c765760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b83151580610c8357505f34115b610cf55760405162461bcd60e51b815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610c1e565b610cff858561305d565b5f610d5560405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525084604051602001610d4091906152c4565b60405160208183030381529060405286613287565b90506040518061012001604052808681526020013481526020018763ffffffff168152602001826001600160401b0316815260200185815260200184610d9a90615356565b815260408051602081810183525f808352818501929092528251808201845282815283850152336060948501526001600160401b0380871683526010825291839020855181559085015160018201559184015160028301805494860151909216600160201b026001600160601b031990941663ffffffff909116179290921790915560808201516003820190610e309082615467565b5060a0820151805180516004840191908290610e4f908290600261486b565b506020820151610e65906002808401919061486b565b50505060208201516004820190610e7c9082615467565b5060408201516005820190610e919082615467565b50505060c0820151600a820190610ea89082615467565b5060e0820151600b820190610ebd9082615467565b506101009190910151600c90910180546001600160a01b0319166001600160a01b0390921691909117905560405133906001600160401b038316907fa7cf57609b4abed689b408db0b0c3dc6309786b6c07d5efbbd1d5b150e6d2c0690610f2990889088904290615521565b60405180910390a36001600160401b031695945050505050565b81610f4d816132fb565b610f5561334f565b610f5e83611168565b15610f7c57604051631685ecdd60e31b815260040160405180910390fd5b610f868383613377565b610f8f60015f55565b505050565b610faa5f516020615b215f395f51905f526133e7565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f0dae1d002e96c238ebe140ca1799f77093ae09e0bde40f79bb29ed78d09e652d905f90a250565b600c8054611000906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461102c906153f1565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b5f9081525f516020615b015f395f51905f52602052604090206001015490565b6110b55f516020615b215f395f51905f526133e7565b600b805461ff0019166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b6110f78261107f565b611100816133e7565b61110a83836133f1565b50505050565b5f6111218363ffffffff1683613433565b9392505050565b6001600160a01b03811633146111515760405163334bd91960e11b815260040160405180910390fd5b610f8f828261353f565b600d8054611000906153f1565b5f8181526003602052604081206002018054825b818110156111f3575f60025f85848154811061119a5761119a615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208982529092529020546001600160401b03600160481b9091041611156111eb57506001949350505050565b60010161117c565b505f949350505050565b6112135f516020615b215f395f51905f526133e7565b60ff8216609b116112665760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610c1e565b6040805160e08101825263ffffffff89811680835289821660208401819052898316848601819052898416606086018190528985166080870181905260ff8a1660a0880181905295891660c0909701879052600a805467ffffffffffffffff1916909517600160201b909402939093176fffffffffffffffff00000000000000001916600160401b90920263ffffffff60601b191691909117600160601b9091021764ffffffffff60801b1916600160801b90910260ff60a01b191617600160a01b9092029190911763ffffffff60a81b1916600160a81b909202919091179055600b805460ff19166001179055517f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad5906113c890899089908990899089908990899063ffffffff97881681529587166020870152938616604086015291851660608501528416608084015260ff1660a083015290911660c082015260e00190565b60405180910390a150505050505050565b5f6113e2613578565b805490915060ff600160401b82041615906001600160401b03165f811580156114085750825b90505f826001600160401b031660011480156114235750303b155b905081158015611431575080155b1561144f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147957845460ff60401b1916600160401b1785555b6114816135a0565b6114896135a0565b6114a05f516020615b215f395f51905f52886133f1565b6114e05760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b6114ea5f886133f1565b61152a5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b600180546001600160a01b0319166001600160a01b03881617905561154e466135aa565b60405160200161155e9190615581565b604051602081830303815290604052600c908161157b9190615467565b50611585466135aa565b60405160200161159591906155d8565b604051602081830303815290604052600d90816115b29190615467565b506115bc466135aa565b6040516020016115cc9190615614565b604051602081830303815290604052600e90816115e99190615467565b506115f3466135aa565b6040516020016116039190615650565b604051602081830303815290604052600f90816116209190615467565b50831561166357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016113c8565b50505050505050565b5f610bc88263ffffffff163a613433565b611685613771565b61168e82613815565b611698828261382b565b5050565b5f6116a56138e7565b505f516020615ae15f395f51905f525b90565b6116c061334f565b6116d65f516020615b215f395f51905f526133e7565b600854600160601b90046001600160601b03166116f4811515613930565b600880546bffffffffffffffffffffffff60601b1916905561171f826001600160601b03831661394e565b5061172960015f55565b50565b6001546001600160a01b031633146117865760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792044656372797074696f6e53656e6465722063616e2063616c6c00006044820152606401610c1e565b6117f88585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506139be92505050565b5050505050565b60106020525f908152604090208054600182015460028301546003840180549394929363ffffffff831693600160201b9093046001600160401b0316929190611847906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611873906153f1565b80156118be5780601f10611895576101008083540402835291602001916118be565b820191905f5260205f20905b8154815290600101906020018083116118a157829003601f168201915b50506040805160e081019091529394939250506004830190508160608101828160a084018260028282826020028201915b8154815260200190600101908083116118ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311611925575050505050815250508152602001600482018054611955906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906153f1565b80156119cc5780601f106119a3576101008083540402835291602001916119cc565b820191905f5260205f20905b8154815290600101906020018083116119af57829003601f168201915b505050505081526020016005820180546119e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906153f1565b8015611a5c5780601f10611a3357610100808354040283529160200191611a5c565b820191905f5260205f20905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815250509080600a018054611a75906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa1906153f1565b8015611aec5780601f10611ac357610100808354040283529160200191611aec565b820191905f5260205f20905b815481529060010190602001808311611acf57829003601f168201915b50505050509080600b018054611b01906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d906153f1565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050600c90930154919250506001600160a01b031689565b600f8054611000906153f1565b600e8054611000906153f1565b600b545f9060ff16611bff5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610c1e565b600b54610100900460ff1615611c4e5760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b5f611c91865f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250610bce915050565b9695505050505050565b5f8281525f516020615ac15f395f51905f52602081905260408220611cc09084613b6f565b949350505050565b5f9182525f516020615b015f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d0661334f565b5f81815260036020526040902054611d26906001600160a01b0316613b7a565b5f81815260046020526040812080546001600160601b031691349190611d4c83856156a0565b92506101000a8154816001600160601b0302191690836001600160601b031602179055503460085f8282829054906101000a90046001600160601b0316611d9391906156a0565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611de691906156bf565b604080519283526020830191909152015b60405180910390a25061172960015f55565b5f611e1261334f565b6005546001600160401b031633611e2a6001436156d2565b6040516001600160601b0319606093841b81166020830152914060348201523090921b1660548201526001600160c01b031960c083901b16606882015260700160408051601f1981840301815291905280516020909101209150611e8f8160016156e5565b6005805467ffffffffffffffff19166001600160401b03928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516001600160601b039091166001600160a01b031992831617600160601b91909916029790971790558451918201855233825281810183815282860185815289855260038352959093208251815488166001600160a01b0391821617825593516001820180549098169416939093179095559251805192949192611f6292600285019201906148a9565b50611f7291506006905084613ba1565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250506116b560015f55565b5f8181525f516020615ac15f395f51905f52602081905260409091206060919061112190613bac565b611ff25f516020615b215f395f51905f526133e7565b600b805461ff00191690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b61203d5f516020615b215f395f51905f526133e7565b5f818152600360205260409020546001600160a01b031661205d81613b7a565b6116988282613377565b60605f6120746006613bb8565b905080841061209657604051631390f2a160e01b815260040160405180910390fd5b5f6120a184866156bf565b9050818111806120af575083155b6120b957806120bb565b815b90505f6120c886836156d2565b9050806001600160401b038111156120e2576120e2614a67565b60405190808252806020026020018201604052801561210b578160200160208202803683370190505b5093505f5b818110156121525761212d61212588836156bf565b600690613b6f565b85828151811061213f5761213f615556565b6020908102919091010152600101612110565b5050505092915050565b61216461334f565b5f818152600360205260409020546001600160a01b031661218481613b7a565b5f828152600360205260409020600101546001600160a01b031633146121db575f828152600360205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c1e565b5f828152600360209081526040918290208054336001600160a01b03199182168117835560019092018054909116905582516001600160a01b03851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611df7565b61224f61334f565b6122655f516020615b215f395f51905f526133e7565b6009546001600160601b031661227c811515613930565b600980546001600160601b0319169055600880548291905f906122a99084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061171f82826001600160601b031661394e565b816122ea816132fb565b6122f261334f565b6001600160a01b0382165f9081526002602090815260408083208684529091529020805460ff16156123245750610f86565b5f848152600360205260409020600201805460631901612357576040516305a48e0f60e01b815260040160405180910390fd5b8154600160ff1990911681178355815490810182555f82815260209081902090910180546001600160a01b0319166001600160a01b03871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610f8f60015f55565b6123dc6148fc565b5f82815260106020908152604080832081516101208101835281548152600182015493810193909352600281015463ffffffff811692840192909252600160201b9091046001600160401b03166060830152600381018054608084019190612443906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461246f906153f1565b80156124ba5780601f10612491576101008083540402835291602001916124ba565b820191905f5260205f20905b81548152906001019060200180831161249d57829003601f168201915b50505091835250506040805160e08101909152602090910190600483018160608101828160a084018260028282826020028201915b8154815260200190600101908083116124ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612525575050505050815250508152602001600482018054612555906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612581906153f1565b80156125cc5780601f106125a3576101008083540402835291602001916125cc565b820191905f5260205f20905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016005820180546125e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906153f1565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b5050505050815250508152602001600a82018054612679906153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546126a5906153f1565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600b82018054612709906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612735906153f1565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b5050509183525050600c91909101546001600160a01b031660209091015260608101519091506001600160401b0316610bc85760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c995c5d595cdd1251607a1b6044820152606401610c1e565b60606127fe6080850185615723565b9050610100036128505760405162461bcd60e51b815260206004820152601d60248201527f696e76616c69642064656372797074696f6e206b6579206c656e6774680000006044820152606401610c1e565b61010061286060a0860186615723565b9050106128af5760405162461bcd60e51b815260206004820152601d60248201527f6d657373616765206f6620756e737570706f72746564206c656e6774680000006044820152606401610c1e565b5f6128bd6080860186615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b838110156129515784848281811061290d5761290d615556565b9050013560f81c60f81b82828151811061292957612929615556565b0160200180516001600160f81b0319908116909218909116905f82901a9053506001016128f3565b505f61296060a0870187615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250600f80549596509094612a3e94509092506129aa91506153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906153f1565b8015612a215780601f106129f857610100808354040283529160200191612a21565b820191905f5260205f20905b815481529060010190602001808311612a0457829003601f168201915b505050505084898060a00190612a379190615723565b9050613bc1565b90505f5b612a4f60a0890189615723565b9050811015612aaf57818181518110612a6a57612a6a615556565b602001015160f81c60f81b838281518110612a8757612a87615556565b0160200180516001600160f81b0319908116909218909116905f82901a905350600101612a42565b505f612b64600e8054612ac1906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612aed906153f1565b8015612b385780601f10612b0f57610100808354040283529160200191612b38565b820191905f5260205f20905b815481529060010190602001808311612b1b57829003601f168201915b50505050508585604051602001612b50929190615765565b604051602081830303815290604052613d56565b90505f612b7082613db5565b90505f80612b8c83612b87368e90038e018e615779565b613e47565b909250905060018215158215151414612bfe5760405162461bcd60e51b815260206004820152602e60248201527f696e76616c69642064656372797074696f6e206b6579202f206369706865727460448201526d195e1d081c9959da5cdd195c995960921b6064820152608401610c1e565b50939998505050505050505050565b5f8181525f516020615ac15f395f51905f5260208190526040822061112190613bb8565b81612c3b816132fb565b612c4361334f565b612c4c83611168565b15612c6a57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b0382165f90815260026020908152604080832086845290915290205460ff16612cbf576040516379bfd40160e01b8152600481018490526001600160a01b0383166024820152604401610c1e565b5f838152600360205260408120600201805490915b81811015612dc257846001600160a01b0316838281548110612cf857612cf8615556565b5f918252602090912001546001600160a01b031603612dba5782612d1d6001846156d2565b81548110612d2d57612d2d615556565b905f5260205f20015f9054906101000a90046001600160a01b0316838281548110612d5a57612d5a615556565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082805480612d9557612d95615793565b5f8281526020902081015f1990810180546001600160a01b0319169055019055612dc2565b600101612cd4565b506001600160a01b0384165f818152600260209081526040808320898452825291829020805460ff19169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a791016123c1565b5f5f612e28836123d4565b606001516001600160401b03169050805f03612e4657505f92915050565b60015460405163cd802c9160e01b8152600481018390526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015612e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906157a7565b612eba8261107f565b612ec3816133e7565b61110a838361353f565b81612ed7816132fb565b612edf61334f565b5f83815260036020526040902060018101546001600160a01b03848116911614612f60576001810180546001600160a01b0319166001600160a01b03851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610f8f60015f55565b5f8181526003602052604081205481906001600160a01b03166060612f8e82613b7a565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526001600160601b03851694600160601b90046001600160401b031693879391839183018282801561301357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612ff5575b5050505050905093509350935093509193509193565b5f6001600160e01b03198216637965db0b60e01b1480610bc857506301ffc9a760e01b6001600160e01b0319831614610bc8565b600a5463ffffffff90811690831611156130b95760405162461bcd60e51b815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610c1e565b8015613236575f818152600360205260409020546001600160a01b03166130df81613b7a565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff811615158083526001600160401b036101008304811695840195909552600160481b909104909316918101919091529061318c5760405162461bcd60e51b815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c656044820152603960f91b6064820152608401610c1e565b80602001805161319b906157c6565b6001600160401b031690526040810180516131b5906157c6565b6001600160401b039081169091525f8581526020938452604090819020835181549585015192909401518316600160481b0270ffffffffffffffff00000000000000000019929093166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921791909116179055505050565b5f6132478363ffffffff163a613433565b905080341015610f8f5760405162461bcd60e51b815260206004820152600b60248201526a46656520746f6f206c6f7760a81b6044820152606401610c1e565b60015460405163f87f0e6160e01b81525f916001600160a01b03169063f87f0e61906132bb908790879087906004016157f0565b6020604051808303815f875af11580156132d7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc09190615828565b5f818152600360205260409020546001600160a01b031661331b81613b7a565b336001600160a01b0382161461169857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c1e565b60025f540361337157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f61338183613fb6565b905061339682826001600160601b031661394e565b604080516001600160a01b03841681526001600160601b038316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b6117298133614107565b5f5f516020615ac15f395f51905f528161340b8585614140565b90508015611cc0575f85815260208390526040902061342a90856141e1565b50949350505050565b6040805160e081018252600a5463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b81048316608083015260ff600160a01b82041660a0830152600160a81b900490911660c08201525f9081836134ba57816060015163ffffffff166134bc565b835b90505f6134c8866141f5565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6134f45f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161352f5761352f61583f565b04019a9950505050505050505050565b5f5f516020615ac15f395f51905f5281613559858561420c565b90508015611cc0575f85815260208390526040902061342a9085614285565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bc8565b6135a8614299565b565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f8151811061360a5761360a615556565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061363857613638615556565b60200101906001600160f81b03191690815f1a9053505f5b60208110156137695782600486836020811061366e5761366e615556565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061369457613694615556565b01602001516001600160f81b031916826136af836002615853565b6136ba9060026156bf565b815181106136ca576136ca615556565b60200101906001600160f81b03191690815f1a905350828582602081106136f3576136f3615556565b825191901a600f1690811061370a5761370a615556565b01602001516001600160f81b03191682613725836002615853565b6137309060026156bf565b61373b9060016156bf565b8151811061374b5761374b615556565b60200101906001600160f81b03191690815f1a905350600101613650565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806137f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166137eb5f516020615ae15f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156135a85760405163703e46dd60e11b815260040160405180910390fd5b6117295f516020615b215f395f51905f526133e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613885575060408051601f3d908101601f1916820190925261388291810190615828565b60015b6138ad57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c1e565b5f516020615ae15f395f51905f5281146138dd57604051632a87526960e21b815260048101829052602401610c1e565b610f8f83836142be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135a85760405163703e46dd60e11b815260040160405180910390fd5b8061172957604051631e9acf1760e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613997576040519150601f19603f3d011682016040523d82523d5f602084013e61399c565b606091505b5050905080610f8f5760405163950b247960e01b815260040160405180910390fd5b5f5a5f858152601060205260408120600281015492935091600160201b90046001600160401b03169003613a345760405162461bcd60e51b815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610c1e565b5f635d94180260e01b8686604051602401613a5092919061586a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600c8301546002840154600a549293505f92613ac09285926001600160a01b039091169163ffffffff91821691600160a81b90910481169061431316565b5090508015613b3157600b8301613ad78782615467565b50600a8301613ae68682615467565b50867f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f7846003018560040186600b01604051613b2493929190615923565b60405180910390a2613b65565b6040518781527f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d9060200160405180910390a15b611663878561434a565b5f6111218383614439565b6001600160a01b03811661172957604051630fb532db60e11b815260040160405180910390fd5b5f611121838361445f565b60605f611121836144ab565b5f610bc8825490565b825160609060ff811115613bea57846040516313727cdd60e11b8152600401610c1e9190614c49565b60408051608880825260c082019092525f916020820181803683370190505090505f81865f875f8b88604051602001613c299796959493929190615998565b60405160208183030381529060405290505f818051906020012090505f8160018a87604051602001613c5e9493929190615a02565b60408051601f19818403018152919052805160208201209091505f60ff89166001600160401b03811115613c9457613c94614a67565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f6005613cd2601f60ff8d166156bf565b901c905060015b81811015613d3857858418613cef8260016156bf565b8e8b604051602001613d049493929190615a02565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101613cd9565b505f1901602090810282010191909152955050505050509392505050565b5f5f613d6484846030613bc1565b601881015160308201519192506001600160c01b0391821691165f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478381600160c01b850908979650505050505050565b604080518082019091525f8082526020820152613dd0614957565b6001815260026020820152604081018390525f60608360808460076107d05a03fa905080613e405760405162461bcd60e51b815260206004820152601f60248201527f4731207363616c6172206d756c7469706c69636174696f6e206661696c6564006044820152606401610c1e565b5050919050565b5f5f5f604051806101800160405280865f01518152602001866020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020016001815260200160028152602001855f0151600160028110613f2557613f25615556565b60200201518152602001855f01515f60028110613f4457613f44615556565b602002015181526020018560200151600160028110613f6557613f65615556565b6020020151815260200185602001515f60028110613f8557613f85615556565b602002015190529050613f96614975565b6020816101808460086107d05a03fa9051151593509150505b9250929050565b5f8181526003602090815260408083206004909252822054600290910180546001600160601b03909216929091905b818110156140505760025f84838154811061400257614002615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208882529092529020805470ffffffffffffffffffffffffffffffffff19169055600101613fe5565b505f84815260036020526040812080546001600160a01b031990811682556001820180549091169055906140876002830182614993565b50505f84815260046020526040902080546001600160a01b03191690556140af600685614504565b506001600160601b03831615613e4057600880548491905f906140dc9084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050919050565b6141118282611cc8565b6116985760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c1e565b5f5f516020615b015f395f51905f526141598484611cc8565b6141d8575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561418e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610bc8565b5f915050610bc8565b5f611121836001600160a01b03841661445f565b5f614201603f83615a45565b610bc8906001615a78565b5f5f516020615b015f395f51905f526142258484611cc8565b156141d8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610bc8565b5f611121836001600160a01b03841661450b565b6142a16145e5565b6135a857604051631afcd79f60e31b815260040160405180910390fd5b6142c7826145fe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561430b57610f8f8282614661565b6116986146d3565b5f5f5a83811061434057839003604081048103851015614340575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614354836123d4565b8051909150156144285780515f9081526004602052604090208054600c9061438b90600160601b90046001600160401b03166157c6565b82546001600160401b0391821661010093840a90810290830219909116179092558201516001600160a01b03165f908152600260209081526040808320855184529091529020805490916009916143ea91600160481b90910416615a94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505f614419833a6146f2565b905061110a81835f0151614749565b610f8f8160200151825f0151614749565b5f825f01828154811061444e5761444e615556565b905f5260205f200154905092915050565b5f8181526001830160205260408120546144a457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b6060815f018054806020026020016040519081016040528092919081815260200182805480156144f857602002820191905f5260205f20905b8154815260200190600101908083116144e4575b50505050509050919050565b5f61112183835b5f81815260018301602052604081205480156141d8575f61452d6001836156d2565b85549091505f90614540906001906156d2565b905080821461459f575f865f01828154811061455e5761455e615556565b905f5260205f200154905080875f01848154811061457e5761457e615556565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145b0576145b0615793565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bc8565b5f6145ee613578565b54600160401b900460ff16919050565b806001600160a01b03163b5f0361463357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c1e565b5f516020615ae15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161467d9190615ab5565b5f60405180830381855af49150503d805f81146146b5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ba565b606091505b50915091506146ca8583836147e6565b95945050505050565b34156135a85760405163b398979f60e01b815260040160405180910390fd5b5f5f5a600a54600160201b900463ffffffff1685010390508281025f600a5460649190920160ff600160a01b8404168201020464e8d4a5100063ffffffff600160401b909304929092169190910201949350505050565b80156147af575f81815260046020526040902080546001600160601b0390811690614778908516821015613930565b81546001600160601b039185900382166001600160601b031991821617909255600980548083168601909216919092161790555050565b600880546001600160601b03600160601b80830482168601909116026bffffffffffffffffffffffff60601b199091161790555050565b6060826147fb576147f682614842565b611121565b815115801561481257506001600160a01b0384163b155b1561483b57604051639996b31560e01b81526001600160a01b0385166004820152602401610c1e565b5080611121565b8051156148525780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215614899579160200282015b8281111561489957825182559160200191906001019061487e565b506148a59291506149aa565b5090565b828054828255905f5260205f20908101928215614899579160200282015b8281111561489957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906148c7565b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f6001600160401b031681526020016060815260200161493e6149be565b8152606060208201819052604082018190525f91015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5080545f8255905f5260205f209081019061172991905b5b808211156148a5575f81556001016149ab565b60405180606001604052806149d16149e5565b815260200160608152602001606081525090565b60405180604001604052806149f8614a0a565b8152602001614a05614a0a565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215614a38575f5ffd5b81356001600160e01b031981168114611121575f5ffd5b803563ffffffff81168114614a62575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614a9d57614a9d614a67565b60405290565b5f82601f830112614ab2575f5ffd5b81356001600160401b03811115614acb57614acb614a67565b604051601f8201601f19908116603f011681016001600160401b0381118282101715614af957614af9614a67565b604052818152838201602001851015614b10575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60c08284031215614b3c575f5ffd5b50919050565b5f5f5f5f60808587031215614b55575f5ffd5b614b5e85614a4f565b93506020850135925060408501356001600160401b03811115614b7f575f5ffd5b614b8b87828801614aa3565b92505060608501356001600160401b03811115614ba6575f5ffd5b614bb287828801614b2c565b91505092959194509250565b6001600160a01b0381168114611729575f5ffd5b5f5f60408385031215614be3575f5ffd5b823591506020830135614bf581614bbe565b809150509250929050565b5f60208284031215614c10575f5ffd5b813561112181614bbe565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111216020830184614c1b565b5f60208284031215614c6b575f5ffd5b5035919050565b5f5f60408385031215614c83575f5ffd5b614c8c83614a4f565b946020939093013593505050565b5f5f5f5f5f5f5f60e0888a031215614cb0575f5ffd5b614cb988614a4f565b9650614cc760208901614a4f565b9550614cd560408901614a4f565b9450614ce360608901614a4f565b9350614cf160808901614a4f565b925060a088013560ff81168114614d06575f5ffd5b9150614d1460c08901614a4f565b905092959891949750929550565b5f5f60408385031215614d33575f5ffd5b8235614d3e81614bbe565b91506020830135614bf581614bbe565b5f60208284031215614d5e575f5ffd5b61112182614a4f565b5f5f60408385031215614d78575f5ffd5b8235614d8381614bbe565b915060208301356001600160401b03811115614d9d575f5ffd5b614da985828601614aa3565b9150509250929050565b5f5f83601f840112614dc3575f5ffd5b5081356001600160401b03811115614dd9575f5ffd5b602083019150836020828501011115613faf575f5ffd5b5f5f5f5f5f60608688031215614e04575f5ffd5b8535945060208601356001600160401b03811115614e20575f5ffd5b614e2c88828901614db3565b90955093505060408601356001600160401b03811115614e4a575f5ffd5b614e5688828901614db3565b969995985093965092949392505050565b805f5b600281101561110a578151845260209384019390910190600101614e6a565b5f8151614e97848251614e67565b60200151614ea86040850182614e67565b50602082015160c06080850152614ec260c0850182614c1b565b9050604083015184820360a08601526146ca8282614c1b565b89815288602082015263ffffffff881660408201526001600160401b038716606082015261012060808201525f614f16610120830188614c1b565b82810360a0840152614f288188614e89565b905082810360c0840152614f3c8187614c1b565b905082810360e0840152614f508186614c1b565b91505060018060a01b0383166101008301529a9950505050505050505050565b5f5f5f5f60608587031215614f83575f5ffd5b614f8c85614a4f565b935060208501356001600160401b03811115614fa6575f5ffd5b614fb287828801614db3565b90945092505060408501356001600160401b03811115614ba6575f5ffd5b5f5f60408385031215614fe1575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150295781516001600160a01b0316865260209586019590910190600101615002565b5093949350505050565b602081525f6111216020830184614ff0565b602080825282518282018190525f918401906040840190835b8181101561507c57835183526020938401939092019160010161505e565b509095945050505050565b6020815281516020820152602082015160408201525f60408301516150b4606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015161012060a08401526150e5610140840182614c1b565b905060a0840151601f198483030160c08501526151028282614e89565b91505060c0840151601f198483030160e08501526151208282614c1b565b91505060e0840151601f198483030161010085015261513f8282614c1b565b9150506101008401516137696101208501826001600160a01b03169052565b5f5f5f60408486031215615170575f5ffd5b83356001600160401b03811115615185575f5ffd5b61519186828701614b2c565b93505060208401356001600160401b038111156151ac575f5ffd5b6151b886828701614db3565b9497909650939450505050565b6001600160601b03851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190525f90611c9190830184614ff0565b5f5f8335601e1984360301811261521b575f5ffd5b83016020810192503590506001600160401b03811115615239575f5ffd5b803603821315613faf575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61528c6080830183615206565b60c060808601526152a160c086018284615247565b9150506152b160a0840184615206565b85830360a0870152611c91838284615247565b602081525f611121602083018461526f565b5f82601f8301126152e5575f5ffd5b6152ed614a7b565b8060408401858111156152fe575f5ffd5b845b8181101561507c578035845260209384019301615300565b5f60808284031215615328575f5ffd5b615330614a7b565b905061533c83836152d6565b815261534b83604084016152d6565b602082015292915050565b5f60c08236031215615366575f5ffd5b604051606081016001600160401b038111828210171561538857615388614a67565b6040526153953684615318565b815260808301356001600160401b038111156153af575f5ffd5b6153bb36828601614aa3565b60208301525060a08301356001600160401b038111156153d9575f5ffd5b6153e536828601614aa3565b60408301525092915050565b600181811c9082168061540557607f821691505b602082108103614b3c57634e487b7160e01b5f52602260045260245ffd5b601f821115610f8f57805f5260205f20601f840160051c810160208510156154485750805b601f840160051c820191505b818110156117f8575f8155600101615454565b81516001600160401b0381111561548057615480614a67565b6154948161548e84546153f1565b84615423565b6020601f8211600181146154c6575f83156154af5750848201515b5f19600385901b1c1916600184901b1784556117f8565b5f84815260208120601f198516915b828110156154f557878501518255602094850194600190920191016154d5565b508482101561551257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6155336060830186614c1b565b8281036020840152615545818661526f565b915050826040830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f6155c7602c83018461556a565b605f60f81b81526001019392505050565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261325f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261335f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261345f60f01b60208201525f6155c7602283018461556a565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b038181168382160190811115610bc857610bc861568c565b80820180821115610bc857610bc861568c565b81810381811115610bc857610bc861568c565b6001600160401b038181168382160190811115610bc857610bc861568c565b6001600160601b038281168282160390811115610bc857610bc861568c565b5f5f8335601e19843603018112615738575f5ffd5b8301803591506001600160401b03821115615751575f5ffd5b602001915036819003821315613faf575f5ffd5b5f611cc0615773838661556a565b8461556a565b5f60808284031215615789575f5ffd5b6111218383615318565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156157b7575f5ffd5b81518015158114611121575f5ffd5b5f6001600160401b0382166001600160401b0381036157e7576157e761568c565b60010192915050565b606081525f6158026060830186614c1b565b82810360208401526158148186614c1b565b90508281036040840152611c918185614c1b565b5f60208284031215615838575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b8082028115828204841417610bc857610bc861568c565b828152604060208201525f611cc06040830184614c1b565b5f815461588e816153f1565b8085526001821680156158a857600181146158c4576158f8565b60ff1983166020870152602082151560051b87010193506158f8565b845f5260205f205f5b838110156158ef5781546020828a0101526001820191506020810190506158cd565b87016020019450505b50505092915050565b805f5b600281101561110a578154845260209093019260019182019101615904565b606081525f6159356060830186615882565b82810360208401526159478186615901565b6159576040820160028701615901565b60c0608082015261596e60c0820160048701615882565b81810360a08301526159838160058801615882565b9150508281036040840152611c918185615882565b5f6159ac6159a6838b61556a565b8961556a565b6001600160f81b031960f889811b8216835288811b8216600184015287901b1660028201526159de600382018661556a565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f615a27602183018561556a565b60f89390931b6001600160f81b031916835250506001019392505050565b5f63ffffffff831680615a6657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610bc857610bc861568c565b5f6001600160401b03821680615aac57615aac61568c565b5f190192915050565b5f611121828461556a56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220380d1acfd2c11b36009bf449c1b9c1894bfe02a4fb8d8c35e32e1b449239fa8364736f6c634300081c0033608060405234801561000f575f5ffd5b506040516109e03803806109e083398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6107ff806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80635bb09cf81161006e5780635bb09cf81461013d57806375b238fc1461016857806391d148541461018f578063a217fddf146101a2578063bab867da146101a9578063d547741f146101bc575f5ffd5b806301ffc9a7146100aa578063248a9ca3146100d25780632f2ff15d146101025780632fc9fa331461011757806336568abe1461012a575b5f5ffd5b6100bd6100b836600461065c565b6101cf565b60405190151581526020015b60405180910390f35b6100f46100e036600461068a565b5f9081526020819052604090206001015490565b6040519081526020016100c9565b6101156101103660046106bc565b610205565b005b6100bd61012536600461072b565b61022f565b6101156101383660046106bc565b61026f565b61015061014b36600461072b565b6102a7565b6040516001600160a01b0390911681526020016100c9565b6100f47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100bd61019d3660046106bc565b6102db565b6100f45f81565b6101156101b736600461076a565b610303565b6101156101ca3660046106bc565b6104f6565b5f6001600160e01b03198216637965db0b60e01b14806101ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461021f8161051a565b6102298383610527565b50505050565b5f5f6001600160a01b03166001848460405161024c9291906107ba565b908152604051908190036020019020546001600160a01b03161415905092915050565b6001600160a01b03811633146102985760405163334bd91960e11b815260040160405180910390fd5b6102a282826105b6565b505050565b5f600183836040516102ba9291906107ba565b908152604051908190036020019020546001600160a01b0316905092915050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561051a565b6001600160a01b0381161580159061034d57505f816001600160a01b03163b115b6103b15760405162461bcd60e51b815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604482015269656d654164647265737360b01b60648201526084015b60405180910390fd5b5f6001600160a01b0316600184846040516103cd9291906107ba565b908152604051908190036020019020546001600160a01b03161461043d5760405162461bcd60e51b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201526084016103a8565b80600184846040516104509291906107ba565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b03199093169290921790915560019061049090859085906107ba565b908152604051908190036020018120546001600160a01b0316906104b790859085906107ba565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105108161051a565b61022983836105b6565b610524813361061f565b50565b5f61053283836102db565b6105af575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ff565b505f6101ff565b5f6105c183836102db565b156105af575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ff565b61062982826102db565b6106585760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016103a8565b5050565b5f6020828403121561066c575f5ffd5b81356001600160e01b031981168114610683575f5ffd5b9392505050565b5f6020828403121561069a575f5ffd5b5035919050565b80356001600160a01b03811681146106b7575f5ffd5b919050565b5f5f604083850312156106cd575f5ffd5b823591506106dd602084016106a1565b90509250929050565b5f5f83601f8401126106f6575f5ffd5b50813567ffffffffffffffff81111561070d575f5ffd5b602083019150836020828501011115610724575f5ffd5b9250929050565b5f5f6020838503121561073c575f5ffd5b823567ffffffffffffffff811115610752575f5ffd5b61075e858286016106e6565b90969095509350505050565b5f5f5f6040848603121561077c575f5ffd5b833567ffffffffffffffff811115610792575f5ffd5b61079e868287016106e6565b90945092506107b19050602085016106a1565b90509250925092565b818382375f910190815291905056fea2646970667358221220e5144df0d342a74d5f0128ec7e3d4f61ebce0b76c178b4747512db764315a6cd64736f6c634300081c00335f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b506040516127e73803806127e78339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104b3565b5050506105c5565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661056d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461056d565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61056d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061056d565b01602001516001600160f81b0319168261020b836002610595565b6102169060026105b2565b815181106102265761022661056d565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61056d565b825191901a600f169081106102665761026661056d565b01602001516001600160f81b03191682610281836002610595565b61028c9060026105b2565b6102979060016105b2565b815181106102a7576102a761056d565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f82518060208501602c85015e605f60f81b602c939091019283015250602d01919050565b600181811c9082168061044357607f821691505b60208210810361046157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104ae57805f5260205f20601f840160051c8101602085101561048c5750805b601f840160051c820191505b818110156104ab575f8155600101610498565b50505b505050565b81516001600160401b038111156104cc576104cc61031f565b6104e0816104da845461042f565b84610467565b6020601f821160018114610512575f83156104fb5750848201515b5f19600385901b1c1916600184901b1784556104ab565b5f84815260208120601f198516915b828110156105415787850151825560209485019460019092019101610521565b508482101561055e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105ac576105ac610581565b92915050565b808201808211156105ac576105ac610581565b612215806105d25f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee14610125578063eae1e15b1461012d578063f6e548e914610140575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b610091610163565b60405161009f929190611e88565b60405180910390f35b6100bb6100b6366004611ee8565b6101dc565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102bc565b60405161009f9190611f55565b6100e660405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b6100e6610348565b6100e661013b366004611ee8565b6103c7565b61015361014e366004611f67565b610401565b604051901515815260200161009f565b61016b611de1565b610173611de1565b60408051808201918290525f91600291908390839082845b81548152602001906001019080831161018b575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101ba5750505050509050915091509091565b5f5f5f6102a6600480546101ef90612006565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90612006565b80156102665780601f1061023d57610100808354040283529160200191610266565b820191905f5260205f20905b81548152906001019060200180831161024957829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e192505050565b80516020909101519093509150505b9250929050565b600480546102c990612006565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590612006565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081565b60408051608081018083526060926103c292915f91839190820190839060029082845b81548152602001906001019080831161036b57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103a1575050505050815250506105ad565b905090565b60605f5f6103d585856101dc565b915091506103f6604051806040016040528084815260200183815250610609565b925050505b92915050565b5f5f61044188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f61048287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f6104c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c592505050565b90505f6104d1838386610766565b509b9a5050505050505050505050565b604080518082019091525f80825260208201525f6104ff84846108d9565b90505f61051282825b602002015161098e565b90505f610520836001610508565b905061052a611dff565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105855781604051630251c7e160e31b815260040161057c9190612052565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106a65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161057c565b5060208181015160409283015183518085019094529083529082015290565b6106cd611e1d565b815160801461071e5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161057c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108495761084961203e565b60200201518152602001865f01515f600281106108685761086861203e565b6020020151815260200186602001516001600281106108895761088961203e565b6020020151815260200186602001515f600281106108a9576108a961203e565b6020020151905290506108ba611e42565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108e1611de1565b5f6108ec8484610c6f565b90505f5f5f5f601885016001600160c01b0381511693506030860190506001600160c01b0381511694505f5160206121a05f395f51905f52855f5160206121a05f395f51905f52600160c01b870908604887015160608801516001600160c01b03908116975016945092505f5160206121a05f395f51905f5290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b610996611de1565b5f5160206121a05f395f51905f5282106109c65760405163d53e941560e01b81526004810183905260240161057c565b5f5f5160206121a05f395f51905f5260045f5160206121a05f395f51905f528586090990505f5f5160206121a05f395f51905f528260010890505f5160206121a05f395f51905f52610a25835f5160206121a05f395f51905f52612096565b60010891505f610a445f5160206121a05f395f51905f52838509610dc6565b90505f5f5160206121a05f395f51905f5278016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa5f5160206121a05f395f51905f52845f5160206121a05f395f51905f52888b09090990505f5f5160206121a05f395f51905f52610ab9835f5160206121a05f395f51905f52612096565b5f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f52835f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f5286870990505f5f5160206121a05f395f51905f5286830990505f5f5160206121a05f395f51905f52805f5160206121a05f395f51905f528485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610b6e610b6988610dd0565b610e09565b5f0b600103610bbe57868c52610b8387610dd0565b9050610b8e81610e6e565b60208e0191909152915081610bb95760405163396ec77160e01b81526004810182905260240161057c565b610c21565b610bca610b6987610dd0565b5f0b600103610bdf57858c52610b8386610dd0565b828c52610beb83610dd0565b9050610bf681610e6e565b60208e0191909152915081610c215760405163396ec77160e01b81526004810182905260240161057c565b60208c0151610c2f90610e95565b610c388e610e95565b14610c5f5760208c0151610c59905f5160206121a05f395f51905f52612096565b60208d01525b5050505050505050505050919050565b815160609060ff811115610c9857836040516313727cdd60e11b815260040161057c9190611f55565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610cd897969594939291906120c0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610d0d949392919061212a565b60408051808303601f1901815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610da957858418610d6082600161216d565b8d8b604051602001610d75949392919061212a565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101610d4a565b505f19016020908102820101919091529550505050505092915050565b5f6103fb82610ea1565b5f5f5160206121a05f395f51905f5260035f5160206121a05f395f51905f52845f5160206121a05f395f51905f52868709090892915050565b5f5f610e14836115e6565b9050610e2e60015f5160206121a05f395f51905f52612096565b8103610e3d57505f1992915050565b8015801590610e4d575080600114155b156103fb5760405163396ec77160e01b81526004810184905260240161057c565b5f5f610e79836116ae565b9150825f5160206121a05f395f51905f52838409149050915091565b5f6103fb600283612180565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690525f5160206121c05f395f51905f5260a08401525f5160206121a05f395f51905f5260c0808501919091529293505f92839160055afa90505f519250806116a75760405163c6daf7ab60e01b8152600481018590525f5160206121c05f395f51905f5260248201525f5160206121a05f395f51905f52604482015260640161057c565b5050919050565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e30611de1565b8152602001611e3d611de1565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b6002811015611e82578151845260209384019390910190600101611e63565b50505050565b60808101611e968285611e60565b611ea36040830184611e60565b9392505050565b5f5f83601f840112611eba575f5ffd5b50813567ffffffffffffffff811115611ed1575f5ffd5b6020830191508360208285010111156102b5575f5ffd5b5f5f60208385031215611ef9575f5ffd5b823567ffffffffffffffff811115611f0f575f5ffd5b611f1b85828601611eaa565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ea36020830184611f27565b5f5f5f5f5f5f60608789031215611f7c575f5ffd5b863567ffffffffffffffff811115611f92575f5ffd5b611f9e89828a01611eaa565b909750955050602087013567ffffffffffffffff811115611fbd575f5ffd5b611fc989828a01611eaa565b909550935050604087013567ffffffffffffffff811115611fe8575f5ffd5b611ff489828a01611eaa565b979a9699509497509295939492505050565b600181811c9082168061201a57607f821691505b60208210810361203857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6080810181835f5b600481101561207957815183526020928301929091019060010161205a565b50505092915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156103fb576103fb612082565b5f81518060208401855e5f93019283525090919050565b5f6120d46120ce838b6120a9565b896120a9565b6001600160f81b031960f889811b8216835288811b8216600184015287901b16600282015261210660038201866120a9565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f61214f60218301856120a9565b60f89390931b6001600160f81b031916835250506001019392505050565b808201808211156103fb576103fb612082565b5f8261219a57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3a26469706673582212205caa4b51dcb44fb7ffd37136b7d8f1021f0fe438a1383457afcecdb09fc9411664736f6c634300081c003344656372797074696f6e206b65792073686f756c642062652072656769737465726564206f6e2d636861696e2061667465722066756c66696c6c696e672072657175657374496e76616c69642070726963652070616964206279207573657220636f6e747261637420666f72207265717565737441646d696e2062616c616e63652073686f756c6420626520686967686572206166746572207769746864726177696e6720666565730000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dfb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e26576520646f6e27742065787065637420616e792066756e64656420737562736372697074696f6e73206174207468697320706f696e74736368656d65416464722073686f756c64206e6f74206861766520616e7920636f6465506c61696e746578742076616c756573206d69736d617463682061667465722064656372797074696f6efb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e205061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742073686f756c64206e6f74206661696c53746f7265642063616c6c6261636b4761734c696d697420646f6573206e6f74206d617463682063616c6c6261634761734c696d69742066726f6d20757365722072657175657374506c61696e746578742076616c756573206d69736d617463682061667465722072657665727420696e2063616c6c6261636b20636f6e7472616374206c6f676963526571756573742073686f756c64206265206d61726b65642061732066756c66696c6c656406b799aacebcbc3bd533cbd16bf42740be3402a20aec013e252553280df8774428e4c425fbe4c6803c0f58045e9a8dbd875d6c9a3d9b80c584c3481922927fd65061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742073686f756c64206e6f742062652063616c6c6564496e76616c696420726571756573742070726963650000000000000000000000fb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e1f44656372797074696f6e206b6579206e6f742070726f766964656420696e2064656372797074696f6e2073656e646572206279206f6666636861696e206f7261636c65526571756573742043616c6c6261636b4761734c696d69743a00000000000000736368656d65416464722073686f756c64206e6f74206265207a65726f20616464726573735265717565737420707269636520706169642073686f756c6420626520776974686472617761626c652062792061646d696e206174207468697320706f696e744469726563742066756e64696e6720726571756573742069642073686f756c64206265207a65726f43616c6c6261636b2073686f756c64206e6f74206661696c2069662063616c6c696e672061646472657373206973206e6f7420696d706c656d656e74696e67207468652049426c6f636b6c6f636b52656365697665722e72656365697665426c6f636b6c6f636b20696e7465726661636544656372797074696f6e206c6f6769632073686f756c64206e6f742068617665206265656e207265616368656402a3b2fa2c402d59e22a2f141e32a092603862a06a695cbfb574c440372a72cd0636ba8092f304e7701ae9abe910cb474edf0408d9dd78ea7f6f97b7f2464711526571756573742043616c6c6261636b47617350726963653a00000000000000fb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e27736368656d654164647220616464726573732073686f756c64206861766520636f6465536368656d6520636f6e747261637420616464726573732073686f756c64206e6f742068617665206265656e207265706c61636564736368656d654164647220616464726573732073686f756c64206e6f74206265207a65726f206164647265737341646d696e2062616c616e63652073686f756c64206e6f74206368616e676520776974686f7574207769746864726177696e6720666565735265717565737420707269636520706169642073686f756c64206e6f7420626520776974686472617761626c652062792061646d696e206174207468697320706f696e745265717565737420696420696e20726563656976657220636f6e747261637420697320696e636f727265637444656372797074696f6e206661696c732077697468206c6f772063616c6c6261636b20676173206c696d69742073657420696e2072657175657374496e636f72726563742065746865722062616c616e636520666f7220626c6f636b6c6f636b20726563656976657220636f6e747261637452657175657374206964206d69736d61746368206265747765656e20626c6f636b6c6f636b53656e64657220616e642064656372797074696f6e53656e646572526576656e75652061667465722061637475616c2063616c6c6261636b20747820636f7374a2646970667358221220736769b1fff3d87780f492ca51c226869e208aaeaf6cb297d907b573f739173f64736f6c634300081c0033\";\n\ntype DirectFundingTestConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DirectFundingTestConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DirectFundingTest__factory extends ContractFactory {\n  constructor(...args: DirectFundingTestConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DirectFundingTest & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): DirectFundingTest__factory {\n    return super.connect(runner) as DirectFundingTest__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DirectFundingTestInterface {\n    return new Interface(_abi) as DirectFundingTestInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DirectFundingTest {\n    return new Contract(address, _abi, runner) as unknown as DirectFundingTest;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type { StdError, StdErrorInterface } from \"../../StdError.sol/StdError\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"arithmeticError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"assertionError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"divisionError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"encodeStorageError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"enumConversionError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"indexOOBError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"memOverflowError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"popError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"zeroVarError\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x610233610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061009b575f3560e01c8063986c5f681161006e578063986c5f68146100d5578063b22dc54d146100dd578063b67689da146100e5578063d160e4de146100ed578063fa784a44146100f5575f5ffd5b806305ee86121461009f57806310332977146100bd5780631de45560146100c55780638995290f146100cd575b5f5ffd5b6100a76100fd565b6040516100b491906101c8565b60405180910390f35b6100a7610138565b6100a761014a565b6100a761015c565b6100a761016e565b6100a7610180565b6100a7610192565b6100a76101a4565b6100a76101b6565b604051603260248201526044015b60408051601f198184030181529190526020810180516001600160e01b0316634e487b7160e01b17905281565b6040516001602482015260440161010b565b6040516021602482015260440161010b565b6040516011602482015260440161010b565b6040516041602482015260440161010b565b6040516031602482015260440161010b565b6040516051602482015260440161010b565b6040516022602482015260440161010b565b6040516012602482015260440161010b565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea2646970667358221220a0ca78a9966f7dcd34a552053deddeaa7557646ae9b4ffe44c3076868148856a64736f6c634300081c0033\";\n\ntype StdErrorConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: StdErrorConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class StdError__factory extends ContractFactory {\n  constructor(...args: StdErrorConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      StdError & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): StdError__factory {\n    return super.connect(runner) as StdError__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): StdErrorInterface {\n    return new Interface(_abi) as StdErrorInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): StdError {\n    return new Contract(address, _abi, runner) as unknown as StdError;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  StdStorageSafe,\n  StdStorageSafeInterface,\n} from \"../../StdStorage.sol/StdStorageSafe\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"SlotFound\",\n    inputs: [\n      {\n        name: \"who\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"fsig\",\n        type: \"bytes4\",\n        indexed: false,\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"keysHash\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"slot\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"WARNING_UninitedSlot\",\n    inputs: [\n      {\n        name: \"who\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212204aa9b4f820d772edfca3879e845bb56d5d26a39356d04fb84ed8f010fb8da0f664736f6c634300081c0033\";\n\ntype StdStorageSafeConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: StdStorageSafeConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class StdStorageSafe__factory extends ContractFactory {\n  constructor(...args: StdStorageSafeConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      StdStorageSafe & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): StdStorageSafe__factory {\n    return super.connect(runner) as StdStorageSafe__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): StdStorageSafeInterface {\n    return new Interface(_abi) as StdStorageSafeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): StdStorageSafe {\n    return new Contract(address, _abi, runner) as unknown as StdStorageSafe;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../../common\";\nimport type {\n  SubscriptionFundingTest,\n  SubscriptionFundingTestInterface,\n} from \"../../SubscriptionFunding.t.sol/SubscriptionFundingTest\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"consumersToAddToSubscription\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setUp\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Callback_For_SubscriptionWithIncorrectDecryptionKey_Reverts\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Callback_For_SubscriptionWithZeroBalance_Reverts\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_CallsToBlocklockSender_ShouldRevert_IfBlocklockSenderAddressIsIncorrect\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_CancelSubscription\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_CancellingSubscription_WithPendingRequest_NotAllowed\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Deployment_Configurations\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklockRequest_For_AdditionalSubscriberAddress\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_SubscriptionRequest_Successfully\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_SubscriptionRequest_WithRevertingReceiver\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_SubscriptionRequest_With_Low_CallbackGasLimit\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_SubscriptionRequest_With_OnlyRequestPriceBalance\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_FulfillBlocklock_SubscriptionRequest_With_Zero_CallbackGasLimit\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_InvalidSignature_For_SubscriptionRequest_Reverts\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_No_Charge_AtRequestTime_For_BlocklockSubscriptionRequest\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"test_Update_SignatureScheme\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"BlocklockCallbackFailed\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BlocklockCallbackSuccess\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        indexed: false,\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x600c8054600160ff199182168117909255601f8054909116909117905560c0604052601360809081527f424e3235342d424c532d424c4f434b4c4f434b0000000000000000000000000060a0526023906100599082610234565b50604080516080810182527f2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca8183019081527f2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf6060830152815281518083019092527f193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c82527f11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba6020838101919091528101919091528051602490610120908290600261014a565b506020820151610136906002808401919061014a565b505050348015610144575f5ffd5b506102ee565b8260028101928215610178579160200282015b8281111561017857825182559160200191906001019061015d565b50610184929150610188565b5090565b5b80821115610184575f8155600101610189565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806101c457607f821691505b6020821081036101e257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561022f57805f5260205f20601f840160051c8101602085101561020d5750805b601f840160051c820191505b8181101561022c575f8155600101610219565b50505b505050565b81516001600160401b0381111561024d5761024d61019c565b6102618161025b84546101b0565b846101e8565b6020601f821160018114610293575f831561027c5750848201515b5f19600385901b1c1916600184901b17845561022c565b5f84815260208120601f198516915b828110156102c257878501518255602094850194600190920191016102a2565b50848210156102df57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6201caed80620002fd5f395ff3fe608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c806385226c81116100fe578063c8c4a8d21161009e578063edf06c381161006e578063edf06c3814610351578063f01310f314610359578063fa7626d414610361578063fcf6760e1461036e575f5ffd5b8063c8c4a8d214610331578063d015210e14610339578063d6014c9114610341578063e20c9f7114610349575f5ffd5b8063a723b18a116100d9578063a723b18a14610301578063b0464fdc14610309578063b5508aa914610311578063ba414fa614610319575f5ffd5b806385226c81146102cf578063916a17c6146102e45780639c7ee4b7146102f9575f5ffd5b80633e5e3c231161017457806358ec323a1161014457806358ec323a14610275578063658e17261461027d57806366d9a9a01461028557806375b238fc1461029a575f5ffd5b80633e5e3c23146102325780633f7286f41461023a578063426304f6146102425780634aa646b01461024a575f5ffd5b80630d3884b0116101af5780630d3884b0146101ef5780631ed7831c146101f757806326551b46146102155780632ade38801461021d575f5ffd5b80630a8de5af146101d55780630a9254e4146101df5780630af53117146101e7575b5f5ffd5b6101dd610376565b005b6101dd611633565b6101dd6116d2565b6101dd612992565b6101ff613601565b60405161020c919061b82f565b60405180910390f35b6101dd613661565b610225613e41565b60405161020c919061b8a8565b6101ff613f7d565b6101ff613fdb565b6101dd614039565b61025d61025836600461b971565b614c86565b6040516001600160a01b03909116815260200161020c565b6101dd614cae565b6101dd614de9565b61028d61518e565b60405161020c919061b9cc565b6102c17fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b60405190815260200161020c565b6102d76152f2565b60405161020c919061ba4a565b6102ec6153bd565b60405161020c919061baa1565b6101dd61549e565b6101dd616002565b6102ec616cfd565b6102d7616dde565b610321616ea9565b604051901515815260200161020c565b6101dd616f43565b6101dd6182b4565b6101dd6188da565b6101ff6193fa565b6101dd619458565b6101dd619ae5565b601f546103219060ff1681565b6101dd61a40d565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156103c6575f5ffd5b505af11580156103d8573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015610431575f5ffd5b505af1158015610443573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610499573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104bd919061bb18565b602b54604051634b16093560e01b81526207a12060048201819052929350674563918244f4000092915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610518573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061053c919061bb18565b90506105616040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156105b1575f5ffd5b505af11580156105c3573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de3539061062d9085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015610649573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061066d919061bb18565b6040516348f50c0f60e01b8152620186a060048201529091505f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156106b6575f5ffd5b505af11580156106c8573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015610720575f5ffd5b505af1158015610732573d5f5f3e3d5ffd5b505050505f5a602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81529192506001600160a01b03169063f7cef800906107989085905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b1580156107af575f5ffd5b505af11580156107c1573d5f5f3e3d5ffd5b505050505f5a6107d1908361bcd5565b60215460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015610824575f5ffd5b505af1158015610836573d5f5f3e3d5ffd5b5050602b546040515f93506001600160a01b0390911691506108579061b77b565b6001600160a01b039091168152602001604051809103905ff080158015610880573d5f5f3e3d5ffd5b50602d80546001810182555f919091527f4a2cc91ee622da3bc833a54c37ffcb6f3ec23b7793efc5eaf5e71b7b406c5c060180546001600160a01b0319166001600160a01b038381169190911790915560205460405163ca669fa760e01b8152911660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561091a575f5ffd5b505af115801561092c573d5f5f3e3d5ffd5b5050602c546040516336bfffed60e01b81526001600160a01b0390911692506336bfffed915061096190602d9060040161bcee565b5f604051808303815f87803b158015610978575f5ffd5b505af115801561098a573d5f5f3e3d5ffd5b505060215460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b1580156109de575f5ffd5b505af11580156109f0573d5f5f3e3d5ffd5b5050604051638098004360e01b8152600481018c90526001600160a01b0384169250638098004391506024015f604051808303815f87803b158015610a33575f5ffd5b505af1158015610a45573d5f5f3e3d5ffd5b505060215460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015610a99575f5ffd5b505af1158015610aab573d5f5f3e3d5ffd5b50506729a2241af62c00005f9081526022602052604051634d3de35360e01b81529092506001600160a01b0384169150634d3de35390610b0f9089905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015610b2b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b4f919061bb18565b6040516348f50c0f60e01b8152620186a060048201529091505f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015610b98575f5ffd5b505af1158015610baa573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015610c02575f5ffd5b505af1158015610c14573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f5160206201be565f395f51905f52925063f28dceb39150610c479060040161bd31565b5f604051808303815f87803b158015610c5e575f5ffd5b505af1158015610c70573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150610cd39088905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b158015610cea575f5ffd5b505af1158015610cfc573d5f5f3e3d5ffd5b50506040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f5292506348f50c0f91506024015f604051808303815f87803b158015610d46575f5ffd5b505af1158015610d58573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b158015610db0575f5ffd5b505af1158015610dc2573d5f5f3e3d5ffd5b505060405163248e63e160e11b8152600160048201819052602482018190525f604483015260648201525f5160206201be565f395f51905f52925063491cc7c291506084015f604051808303815f87803b158015610e1e575f5ffd5b505af1158015610e30573d5f5f3e3d5ffd5b50506729a2241af62c00005f525050602260205260405181907f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f790610ea4905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f52905f5160206201c62f5f395f51905f529061bd7c565b60405180910390a25a602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81529195506001600160a01b03169063f7cef80090610f0d9084905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b158015610f24575f5ffd5b505af1158015610f36573d5f5f3e3d5ffd5b505050505f5a610f46908661bcd5565b602b5460405163dc311dd360e01b8152600481018e90529192505f9182916001600160a01b03169063dc311dd3906024015f60405180830381865afa158015610f91573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fb8919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168d610fdd919061bcd5565b905061100b6040518060600160405280603281526020016201c89a60329139846001600160601b031661a5fa565b61102e6040518060600160405280602d81526020016201c1ca602d91398261a5fa565b6110516040518060600160405280603b81526020016201c1f7603b91398e61a5fa565b61108a6040518060600160405280602281526020016201c91a60229139611078898761bfbd565b61108590620186a061bfd0565b61a5fa565b6110ba816110998d600261bfd0565b10156040518060800160405280604381526020016201c64f6043913961a63f565b6110f16110d06001600160601b0385168361bfbd565b8e146040518060600160405280602581526020016201c57d6025913961a63f565b611117826002146040518060600160405280603c81526020016201c99c603c913961a63f565b602a5460405163c58343ef60e01b8152600481018790525f916001600160a01b03169063c58343ef906024015f60405180830381865afa15801561115d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611184919081019061c067565b90506111ad8160c001516040518060800160405280604381526020016201c34b6043913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254604080516397a9c28560e01b81529051611256936001600160a01b038c16926397a9c28592600480830193928290030181865afa158015611212573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611236919061bb18565b146040518060600160405280602a81526020016201bf39602a913961a63f565b602c54604080516236b65760e11b8152905161134d926001600160a01b031691626d6cae9160048083019260209291908290030181865afa15801561129d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112c1919061bb18565b600114801561132e5750876001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611306573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061132a919061bb18565b6002145b6040518060600160405280602c81526020016201c86e602c913961a63f565b602b5460408051633bc32c7560e01b815290516113e4926001600160a01b031691633bc32c759160048083019260209291908290030181865afa158015611396573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ba919061c19b565b6001600160601b03165f146040518060800160405280604a81526020016201c533604a913961a63f565b61148582602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061145c919061c19b565b6001600160601b0316146040518060600160405280604081526020016201c4356040913961a63f565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156114d9575f5ffd5b505af11580156114eb573d5f5f3e3d5ffd5b5050601f54602b5460405163bd18636b60e01b81526101009092046001600160a01b039081166004840181905231945016915063bd18636b906024015f604051808303815f87803b15801561153e575f5ffd5b505af1158015611550573d5f5f3e3d5ffd5b5050601f54611597925083915061157790869061010090046001600160a01b03163161bfbd565b116040518060600160405280603581526020016201be216035913961a63f565b602b54604080516318e3dd2760e01b815290516001600160601b038816926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156115e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160b919061c19b565b6001600160601b0316146116215761162161c1bb565b50505050505050505050505050505050565b61163b61a69a565b61164361a6a2565b602c80546001600160a01b03199081166001600160a01b0393841617909155602b8054821693831693909317909255602a8054831693821693909317909255602980548216938316939093179092556028805490921692169190911790556207a12062061a80620f4240622dc6c0620c3500600a6113886116c98787878787878761adb0565b50505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611722573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611746919061bb18565b156117535761175361c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156117a3575f5ffd5b505af11580156117b5573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b15801561180e575f5ffd5b505af1158015611820573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611876573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061189a919061bb18565b9050805f036118ab576118ab61c1bb565b6118d86040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561192c575f5ffd5b505af115801561193e573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd670de0b6b3a76400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015611997575f5ffd5b505af11580156119a9573d5f5f3e3d5ffd5b5050602b54604051634b16093560e01b815261c350600482018190526753444835ec580000955093505f92506001600160a01b0390911690634b16093590602401602060405180830381865afa158015611a05573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a29919061bb18565b9050611a4e6040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611a9e575f5ffd5b505af1158015611ab0573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de35390611b1a9085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015611b36573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b5a919061bb18565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611ba5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bcc919081019061c067565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015611c17573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c3e919081019061c2cf565b9050611c758463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b611c9e815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b611cc781602001515f146040518060800160405280604881526020016201ca706048913961a63f565b611cf98382606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b815262061a8060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015611d3f575f5ffd5b505af1158015611d51573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015611dae575f5ffd5b505af1158015611dc0573d5f5f3e3d5ffd5b505060405163248e63e160e11b8152600160048201525f602482018190526044820181905260648201525f5160206201be565f395f51905f52925063491cc7c291506084015f604051808303815f87803b158015611e1c575f5ffd5b505af1158015611e2e573d5f5f3e3d5ffd5b505050507f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d84604051611e6391815260200190565b60405180910390a1602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b039091169063f7cef80090611eba9087905f5160206201be765f395f51905f529060040161c401565b5f604051808303815f87803b158015611ed1575f5ffd5b505af1158015611ee3573d5f5f3e3d5ffd5b505050505f5a90505f611ef6828461bcd5565b9050611f2f6040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b611f606040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b611f8e6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b611fbb6040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f526020820152611feb906110853a8461bfd0565b602a5460405163b094728960e01b815260048101889052612078916001600160a01b03169063b094728990602401602060405180830381865afa158015612034573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612058919061c42d565b156040518060a00160405280607e81526020016201c7aa607e913961a63f565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa1580156120c2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120e9919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168d61210e919061bcd5565b905061213c6040518060600160405280602c81526020016201c037602c9139846001600160601b031661a5fa565b61215f6040518060600160405280602781526020016201c0fa602791398261a5fa565b6121738d846001600160601b03168361aea5565b6121985f82116040518060600160405280602181526020016201c2986021913961a63f565b6121cf6121ae6001600160601b0385168361bfbd565b8e146040518060600160405280602981526020016201c00e6029913961a63f565b6121fd816121dd3a8761bfd0565b106040518060600160405280603381526020016201ca3d6033913961a63f565b612223826001146040518060600160405280602981526020016201c7176029913961a63f565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612269573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612290919081019061c067565b97506122b98860c001516040518060a00160405280606581526020016201c9d86065913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254602c54604080516397a9c28560e01b81529051612367946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015612322573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612346919061bb18565b14156040518060600160405280602681526020016201c50d6026913961a63f565b602c54604080516236b65760e11b815290516123f4926001600160a01b031691626d6cae9160048083019260209291908290030181865afa1580156123ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d2919061bb18565b6001146040518060600160405280602c81526020016201c86e602c913961a63f565b602b5460408051633bc32c7560e01b8152905161243d926001600160a01b031691633bc32c759160048083019260209291908290030181865afa158015611396573d5f5f3e3d5ffd5b61249181602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156124e5575f5ffd5b505af11580156124f7573d5f5f3e3d5ffd5b5050601f54602b5460405163bd18636b60e01b81526101009092046001600160a01b039081166004840181905231945016915063bd18636b906024015f604051808303815f87803b15801561254a575f5ffd5b505af115801561255c573d5f5f3e3d5ffd5b505050506125a481601f60019054906101000a90046001600160a01b03166001600160a01b031631116040518060600160405280603b81526020016201c095603b913961a63f565b602b54604080516318e3dd2760e01b815290516001600160601b038716926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156125f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612618919061c19b565b6001600160601b03161461262e5761262e61c1bb565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015612674575f5ffd5b505af1158015612686573d5f5f3e3d5ffd5b505050505a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529097505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156126e2575f5ffd5b505af11580156126f4573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f5160206201be565f395f51905f52925063f28dceb391506127279060040161bd31565b5f604051808303815f87803b15801561273e575f5ffd5b505af1158015612750573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506127b3908d905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b1580156127ca575f5ffd5b505af11580156127dc573d5f5f3e3d5ffd5b505050505a95506127ed868861bcd5565b94506128266040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250896040015163ffffffff1661a5fa565b6128576040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250896020015161a5fa565b6128856040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508661a5fa565b6128b26040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f5260208201526128e2906110853a8861bfd0565b6129816040518060600160405280602e81526020016201c8ec602e9139602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612973919061c19b565b6001600160601b031661a5fa565b505050505050505050505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a06919061bb18565b15612a1357612a1361c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612a63575f5ffd5b505af1158015612a75573d5f5f3e3d5ffd5b5050602b546040515f93506001600160a01b039091169150612a969061b789565b6001600160a01b039091168152602001604051809103905ff080158015612abf573d5f5f3e3d5ffd5b5060205460405163ca669fa760e01b81526001600160a01b0390911660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612b13575f5ffd5b505af1158015612b25573d5f5f3e3d5ffd5b50505050806001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015612b6a575f5ffd5b505af1158015612b7c573d5f5f3e3d5ffd5b50505050505f816001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bbe573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612be2919061bb18565b9050805f03612bf357612bf361c1bb565b612c206040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b602b54604051634b16093560e01b8152620186a060048201819052674563918244f400009290915f916001600160a01b031690634b16093590602401602060405180830381865afa158015612c77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c9b919061bb18565b9050612cc06040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612d10575f5ffd5b505af1158015612d22573d5f5f3e3d5ffd5b50506729a2241af62c00005f9081526022602052604051634d3de35360e01b81528593509091506001600160a01b03881690634d3de35390612d889085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015612da4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612dc8919061bb18565b602b5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015612e13573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612e3a919081019061c2cf565b9050612e718363ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b612e9a815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b612ec381602001515f146040518060800160405280604881526020016201ca706048913961a63f565b612ef58282606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015612f3b575f5ffd5b505af1158015612f4d573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015612faa575f5ffd5b505af1158015612fbc573d5f5f3e3d5ffd5b505060405163248e63e160e11b8152600160048201819052602482018190525f604483015260648201525f5160206201be565f395f51905f52925063491cc7c291506084015f604051808303815f87803b158015613018575f5ffd5b505af115801561302a573d5f5f3e3d5ffd5b505050507f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d8360405161305f91815260200190565b60405180910390a1602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b039091169063f7cef800906130c69086905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b1580156130dd575f5ffd5b505af11580156130ef573d5f5f3e3d5ffd5b505050505f5a90505f613102828461bcd5565b905061313b6040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b61316c6040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b61319a6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b6131c76040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f5260208201526131f7906110853a8461bfd0565b602a5460405163b094728960e01b815260048101879052613285916001600160a01b03169063b0947289906024015b602060405180830381865afa158015613241573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613265919061c42d565b156040518060800160405280605881526020016201bdc96058913961a63f565b602b5460405163dc311dd360e01b8152600481018c90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa1580156132cf573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132f6919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168c61331b919061bcd5565b90506133496040518060600160405280602c81526020016201c037602c9139846001600160601b031661a5fa565b61336c6040518060600160405280602781526020016201c0fa602791398261a5fa565b6133808c846001600160601b03168361aea5565b6133a6818b10156040518060800160405280604381526020016201c64f6043913961a63f565b6133dd6133bc6001600160601b0385168361bfbd565b8d146040518060600160405280602581526020016201c57d6025913961a63f565b61340b816133eb3a8761bfd0565b106040518060600160405280602481526020016201bda56024913961a63f565b613431826001146040518060600160405280602981526020016201c7176029913961a63f565b61348581602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156134d9575f5ffd5b505af11580156134eb573d5f5f3e3d5ffd5b5050601f54602b5460405163bd18636b60e01b81526101009092046001600160a01b039081166004840181905231945016915063bd18636b906024015f604051808303815f87803b15801561353e575f5ffd5b505af1158015613550573d5f5f3e3d5ffd5b5050601f54613577925083915061157790859061010090046001600160a01b03163161bfbd565b602b54604080516318e3dd2760e01b815290516001600160601b038716926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa1580156135c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135eb919061c19b565b6001600160601b0316146129815761298161c1bb565b6060601680548060200260200160405190810160405280929190818152602001828054801561365757602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613639575b5050505050905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136b1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136d5919061bb18565b156136e2576136e261c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613732575f5ffd5b505af1158015613744573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b15801561379d575f5ffd5b505af11580156137af573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613805573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613829919061bb18565b9050805f0361383a5761383a61c1bb565b6138676040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156138bb575f5ffd5b505af11580156138cd573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd670de0b6b3a76400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015613926575f5ffd5b505af1158015613938573d5f5f3e3d5ffd5b5050602b5460405163dc311dd360e01b8152600481018690526753444835ec58000094505f9350839250829182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015613995573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526139bc919081019061bed7565b935093509350935084846001600160601b0316146139dc576139dc61c1bb565b6001600160401b038316156139f3576139f361c1bb565b602c546001600160a01b03838116911614613a1057613a1061c1bb565b8051600114613a2157613a2161c1bb565b602c5481516001600160a01b039091169082905f90613a4257613a4261c446565b60200260200101516001600160a01b031614613a6057613a6061c1bb565b602c546001600160a01b03163115613a7a57613a7a61c1bb565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015613ac8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613aec919061bb18565b9050613b275f821160405180604001604052806015815260200174496e76616c6964207265717565737420707269636560581b81525061a63f565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015613b77575f5ffd5b505af1158015613b89573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de35390613bf39085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015613c0f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c33919061bb18565b602b5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015613c7e573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ca5919081019061c2cf565b9050613cdc8363ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b613d05815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b613d2e81602001515f146040518060800160405280604881526020016201ca706048913961a63f565b613d608282606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b602b5460405163dc311dd360e01b8152600481018d90526001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015613da6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613dcd919081019061bed7565b905050809950819a505050613e068a8a6001600160601b0316146040518060600160405280602981526020016201c00e6029913961a63f565b613e34886001600160401b03165f146040518060600160405280602a81526020016201c0d0602a913961a63f565b5050505050505050505050565b6060601e805480602002602001604051908101604052809291908181526020015f905b82821015613f74575f84815260208082206040805180820182526002870290920180546001600160a01b03168352600181018054835181870281018701909452808452939591948681019491929084015b82821015613f5d578382905f5260205f20018054613ed29061bb2f565b80601f0160208091040260200160405190810160405280929190818152602001828054613efe9061bb2f565b8015613f495780601f10613f2057610100808354040283529160200191613f49565b820191905f5260205f20905b815481529060010190602001808311613f2c57829003601f168201915b505050505081526020019060010190613eb5565b505050508152505081526020019060010190613e64565b50505050905090565b6060601880548060200260200160405190810160405280929190818152602001828054801561365757602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311613639575050505050905090565b6060601780548060200260200160405190810160405280929190818152602001828054801561365757602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311613639575050505050905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614089573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140ad919061bb18565b156140ba576140ba61c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561410a575f5ffd5b505af115801561411c573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015614175575f5ffd5b505af1158015614187573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141dd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614201919061bb18565b9050805f036142125761421261c1bb565b61423f6040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614293575f5ffd5b505af11580156142a5573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd670de0b6b3a76400006040518263ffffffff1660e01b81526004015f604051808303818588803b1580156142fe575f5ffd5b505af1158015614310573d5f5f3e3d5ffd5b5050602b54604051634b16093560e01b81525f600482018190526753444835ec580000955093508392506001600160a01b0390911690634b16093590602401602060405180830381865afa15801561436a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061438e919061bb18565b90506143b36040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614403575f5ffd5b505af1158015614415573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de3539061447f9085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af115801561449b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906144bf919061bb18565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa15801561450a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052614531919081019061c067565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa15801561457c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526145a3919081019061c2cf565b90506145da8463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b614603815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b61462c81602001515f146040518060800160405280604881526020016201ca706048913961a63f565b61465e8382606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156146a4575f5ffd5b505af11580156146b6573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614713575f5ffd5b505af1158015614725573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506147889087905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b15801561479f575f5ffd5b505af11580156147b1573d5f5f3e3d5ffd5b505050505f5a90505f6147c4828461bcd5565b90506147fd6040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b61482e6040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b61485c6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b6148896040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f5260208201526148b9906110853a8461bfd0565b602a5460405163b094728960e01b815260048101889052614947916001600160a01b03169063b0947289906024015b602060405180830381865afa158015614903573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614927919061c42d565b156040518060800160405280604381526020016201bf836043913961a63f565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015614991573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526149b8919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168d6149dd919061bcd5565b9050614a0b6040518060600160405280602c81526020016201c037602c9139846001600160601b031661a5fa565b614a2e6040518060600160405280602781526020016201c0fa602791398261a5fa565b614a428d846001600160601b03168361aea5565b614a68818c10156040518060800160405280604381526020016201c64f6043913961a63f565b614a7e6110d06001600160601b0385168361bfbd565b614a8c816133eb3a8761bfd0565b614ab2826001146040518060600160405280602981526020016201c7176029913961a63f565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015614af8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052614b1f919081019061c067565b9750614b488860c001516040518060800160405280604381526020016201c34b6043913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254602c54604080516397a9c28560e01b81529051614bf6946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015614bb1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614bd5919061bb18565b14156040518060a00160405280606681526020016201c2326066913961a63f565b602c54604080516236b65760e11b81529051614c3d926001600160a01b031691626d6cae9160048083019260209291908290030181865afa1580156123ae573d5f5f3e3d5ffd5b602b5460408051633bc32c7560e01b81529051613431926001600160a01b031691633bc32c759160048083019260209291908290030181865afa158015611396573d5f5f3e3d5ffd5b602d8181548110614c95575f80fd5b5f918252602090912001546001600160a01b0316905081565b602054602b54614cd3916001600160a01b039081169116674563918244f4000061aef8565b602c80546001600160a01b0319166001600160a01b0392831617905560205460405163ca669fa760e01b815291166004820181905231905f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015614d3a575f5ffd5b505af1158015614d4c573d5f5f3e3d5ffd5b5050602c5460205460405163127b03ab60e31b81526001600160a01b039182166004820152911692506393d81d5891506024015f604051808303815f87803b158015614d96575f5ffd5b505af1158015614da8573d5f5f3e3d5ffd5b505060208054604080516060810190915260388082526001600160a01b03909216319450614de59350858511929091906201c4759083013961a63f565b5050565b602a54601f54604051632474521560e21b81527fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177560048201526101009091046001600160a01b039081166024830152614e8b9216906391d1485490604401602060405180830381865afa158015614e62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614e86919061c42d565b61b04f565b6028546001600160a01b0316614ea357614ea361c1bb565b6029546001600160a01b0316614ebb57614ebb61c1bb565b602a546001600160a01b0316614ed357614ed361c1bb565b602b546001600160a01b0316614eeb57614eeb61c1bb565b602c546001600160a01b0316614f0357614f0361c1bb565b602a546040805163e6b3ca7160e01b815290515f926001600160a01b03169163e6b3ca719160048083019260209291908290030181865afa158015614f4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614f6e919061c45a565b6001600160a01b031603614f8457614f8461c1bb565b60295460408051632fbe3a9160e11b81529051614ff8926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa158015614fcc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052614ff3919081019061c475565b61b0a5565b60295460408051632fbe3a9160e11b8152905161506c926001600160a01b031691635f7c7522916004808301925f9291908290030181865afa158015615040573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052615067919081019061c475565b61b0eb565b602b546040805163235296f760e01b815290516150b4926001600160a01b03169163235296f7916004808301925f9291908290030181865afa158015615040573d5f5f3e3d5ffd5b602b5460408051631c613e8960e11b815290516150fc926001600160a01b0316916338c27d12916004808301925f9291908290030181865afa158015615040573d5f5f3e3d5ffd5b602b54604080516339a87a2b60e11b81529051615144926001600160a01b031691637350f456916004808301925f9291908290030181865afa158015615040573d5f5f3e3d5ffd5b602b54604080516367b276af60e01b8152905161518c926001600160a01b0316916367b276af916004808301925f9291908290030181865afa158015615040573d5f5f3e3d5ffd5b565b6060601b805480602002602001604051908101604052809291908181526020015f905b82821015613f74578382905f5260205f2090600202016040518060400160405290815f820180546151e19061bb2f565b80601f016020809104026020016040519081016040528092919081815260200182805461520d9061bb2f565b80156152585780601f1061522f57610100808354040283529160200191615258565b820191905f5260205f20905b81548152906001019060200180831161523b57829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156152da57602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b0319168152602001906004019060208260030104928301926001038202915080841161529c5790505b505050505081525050815260200190600101906151b1565b6060601a805480602002602001604051908101604052809291908181526020015f905b82821015613f74578382905f5260205f200180546153329061bb2f565b80601f016020809104026020016040519081016040528092919081815260200182805461535e9061bb2f565b80156153a95780601f10615380576101008083540402835291602001916153a9565b820191905f5260205f20905b81548152906001019060200180831161538c57829003601f168201915b505050505081526020019060010190615315565b6060601d805480602002602001604051908101604052809291908181526020015f905b82821015613f74575f8481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561548657602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b031916815260200190600401906020826003010492830192600103820291508084116154485790505b505050505081525050815260200190600101906153e0565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156154ee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615512919061bb18565b1561551f5761551f61c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561556f575f5ffd5b505af1158015615581573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b1580156155da575f5ffd5b505af11580156155ec573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015615642573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615666919061bb18565b9050805f036156775761567761c1bb565b6156a46040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156156f8575f5ffd5b505af115801561570a573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd670de0b6b3a76400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015615763575f5ffd5b505af1158015615775573d5f5f3e3d5ffd5b5050602b54604051634b16093560e01b8152614e20600482018190526753444835ec580000955093505f92506001600160a01b0390911690634b16093590602401602060405180830381865afa1580156157d1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906157f5919061bb18565b905061581a6040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561586a575f5ffd5b505af115801561587c573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de353906158e69085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015615902573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615926919061bb18565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015615971573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052615998919081019061c067565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156159e3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052615a0a919081019061c2cf565b9050615a418463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b615a6a815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b615a9381602001515f146040518060800160405280604881526020016201ca706048913961a63f565b615ac58382606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015615b0b575f5ffd5b505af1158015615b1d573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015615b7a575f5ffd5b505af1158015615b8c573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150615bef9087905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b158015615c06575f5ffd5b505af1158015615c18573d5f5f3e3d5ffd5b505050505f5a90505f615c2b828461bcd5565b9050615c646040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b615c956040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b615cc36040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b615cf06040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f526020820152615d20906110853a8461bfd0565b602a5460405163b094728960e01b815260048101889052615d53916001600160a01b03169063b0947289906024016148e8565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa158015615d9d573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052615dc4919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168d615de9919061bcd5565b9050615e176040518060600160405280602c81526020016201c037602c9139846001600160601b031661a5fa565b615e3a6040518060600160405280602781526020016201c0fa602791398261a5fa565b615e4e8d846001600160601b03168361aea5565b615e74818c10156040518060800160405280604381526020016201c64f6043913961a63f565b615e8a6110d06001600160601b0385168361bfbd565b615e98816133eb3a8761bfd0565b615ebe826001146040518060600160405280602981526020016201c7176029913961a63f565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015615f04573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052615f2b919081019061c067565b9750615f548860c001516040518060800160405280604381526020016201c34b6043913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254602c54604080516397a9c28560e01b81529051614bf6946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015615fbd573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190615fe1919061bb18565b14156040518060a00160405280606281526020016201c38e6062913961a63f565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa158015616052573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616076919061bb18565b156160835761608361c1bb565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156160d2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906160f6919061bb18565b156161035761610361c1bb565b602b54604051634b16093560e01b8152620186a060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015616151573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616175919061bb18565b60205460405163ca669fa760e01b81526001600160a01b03909116600482018190529192509031905f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156161cd575f5ffd5b505af11580156161df573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7836040518263ffffffff1660e01b81526004015f604051808303818588803b158015616230575f5ffd5b505af1158015616242573d5f5f3e3d5ffd5b50505050506162a48282616256919061bcd5565b6020805460408051808201909152601981527f416c6963652062616c616e6365206e6f74206465626974656400000000000000928101929092526001600160a01b031631919091149061a63f565b6162dd5f831160405180604001604052806015815260200174496e76616c6964207265717565737420707269636560581b81525061a63f565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561632d575f5ffd5b505af115801561633f573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b8152620186a094509092506001600160a01b0390911690634d3de353906163ac9085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af11580156163c8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906163ec919061bb18565b6040516348f50c0f60e01b8152620186a060048201529091505f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015616435575f5ffd5b505af1158015616447573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156164a4575f5ffd5b505af11580156164b6573d5f5f3e3d5ffd5b505050505f6040518060600160405280604081526020016201c5cf6040913960405163f28dceb360e01b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201529091505f5160206201be565f395f51905f529063f28dceb3906064015f604051808303815f87803b158015616549575f5ffd5b505af115801561655b573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506165b09086905f5160206201c62f5f395f51905f5290869060040161c4a6565b5f604051808303815f87803b1580156165c7575f5ffd5b505af11580156165d9573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b03166397a9c2856040518163ffffffff1660e01b8152600401602060405180830381865afa15801561662d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616651919061bb18565b1561665e5761665e61c1bb565b602c5f9054906101000a90046001600160a01b03166001600160a01b0316626d6cae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156166ad573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906166d1919061bb18565b6001146166e0576166e061c1bb565b602a5460405163c58343ef60e01b8152600481018590525f916001600160a01b03169063c58343ef906024015f60405180830381865afa158015616726573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261674d919081019061c067565b602b5460405163c58343ef60e01b8152600481018790529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015616798573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526167bf919081019061c2cf565b90505f5a90505f6167d0828761bcd5565b90506168096040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250846040015163ffffffff1661a5fa565b61683a6040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250846020015161a5fa565b6168686040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b6168956040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f5260208201526168c5906110853a8461bfd0565b602a5460405163b094728960e01b8152600481018990526168f8916001600160a01b03169063b094728990602401613226565b6169208460c00151156040518060600160405280602d81526020016201c5a2602d913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254602c54604080516397a9c28560e01b815290516169ce946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015616989573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906169ad919061bb18565b14156040518060600160405280602a81526020016201bf39602a913961a63f565b602c54604080516236b65760e11b81529051616a15926001600160a01b031691626d6cae9160048083019260209291908290030181865afa1580156123ae573d5f5f3e3d5ffd5b616a22836020015161b12e565b616ac38a602b5f9054906101000a90046001600160a01b03166001600160a01b03166318e3dd276040518163ffffffff1660e01b8152600401602060405180830381865afa158015616a76573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616a9a919061c19b565b6001600160601b0316146040518060600160405280603681526020016201be966036913961a63f565b602b5460408051634cae59b760e11b81529051616b5a926001600160a01b03169163995cb36e9160048083019260209291908290030181865afa158015616b0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616b30919061c19b565b6001600160601b03165f146040518060600160405280603681526020016201be966036913961a63f565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015616bae575f5ffd5b505af1158015616bc0573d5f5f3e3d5ffd5b50506040805160048082526024820183526020820180516001600160e01b0316631e9acf1760e31b179052915163f28dceb360e01b81525f5160206201be565f395f51905f52945063f28dceb39350616c19920161c4d0565b5f604051808303815f87803b158015616c30575f5ffd5b505af1158015616c42573d5f5f3e3d5ffd5b5050601f54602b546040516354236fb360e01b81526101009092046001600160a01b03908116600484018190523194501691506354236fb3906024015f604051808303815f87803b158015616c95575f5ffd5b505af1158015616ca7573d5f5f3e3d5ffd5b50505050616cef81601f60019054906101000a90046001600160a01b03166001600160a01b031631146040518060600160405280603881526020016201c7406038913961a63f565b505050505050505050505050565b6060601c805480602002602001604051908101604052809291908181526020015f905b82821015613f74575f8481526020908190206040805180820182526002860290920180546001600160a01b03168352600181018054835181870281018701909452808452939491938583019392830182828015616dc657602002820191905f5260205f20905f905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411616d885790505b50505050508152505081526020019060010190616d20565b60606019805480602002602001604051908101604052809291908181526020015f905b82821015613f74578382905f5260205f20018054616e1e9061bb2f565b80601f0160208091040260200160405190810160405280929190818152602001828054616e4a9061bb2f565b8015616e955780601f10616e6c57610100808354040283529160200191616e95565b820191905f5260205f20905b815481529060010190602001808311616e7857829003601f168201915b505050505081526020019060010190616e01565b6008545f9060ff1615616ec0575060085460ff1690565b604051630667f9d760e41b81525f5160206201be565f395f51905f52600482018190526519985a5b195960d21b60248301525f9163667f9d7090604401602060405180830381865afa158015616f18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616f3c919061bb18565b1415905090565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015616f93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190616fb7919061bb18565b15616fc457616fc461c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015617014575f5ffd5b505af1158015617026573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba75f6040518263ffffffff1660e01b81526004015f604051808303818588803b158015617077575f5ffd5b505af1158015617089573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156170df573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190617103919061bb18565b9050805f036171145761711461c1bb565b6171416040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b602b54604051634b16093560e01b8152620186a0600482018190525f92909183916001600160a01b031690634b16093590602401602060405180830381865afa158015617190573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906171b4919061bb18565b90506171d96040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015617229575f5ffd5b505af115801561723b573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de353906172a59085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af11580156172c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906172e5919061bb18565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015617330573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052617357919081019061c067565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156173a2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526173c9919081019061c2cf565b90506174008463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b617429815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b61745281602001515f146040518060800160405280604881526020016201ca706048913961a63f565b6174848382606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b1580156174ca575f5ffd5b505af11580156174dc573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015617539575f5ffd5b505af115801561754b573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef80091506175ae9087905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b1580156175c5575f5ffd5b505af11580156175d7573d5f5f3e3d5ffd5b505050505f5a90505f6175ea828461bcd5565b90506176236040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b6176546040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b6176826040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b6176af6040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f5260208201526176df906110853a8461bfd0565b602a5460405163b094728960e01b81526004810188905261776b916001600160a01b03169063b094728990602401602060405180830381865afa158015617728573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061774c919061c42d565b6040518060800160405280604681526020016201c8286046913961a63f565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa1580156177b5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526177dc919081019061bed7565b50506001600160401b0316915091506178176040518060600160405280602c81526020016201c037602c9139836001600160601b031661a5fa565b5f61782b6001600160601b0384168e61bcd5565b90506178506040518060600160405280602781526020016201c0fa602791398261a5fa565b617887617866826001600160601b03861661bfbd565b8e146040518060600160405280602981526020016201c1a16029913961a63f565b80156178955761789561c1bb565b6178ba825f146040518060600160405280602a81526020016201c0d0602a913961a63f565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015617900573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052617927919081019061c067565b97506179508860c001516040518060800160405280604381526020016201c34b6043913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254602c54604080516397a9c28560e01b815290516179b9946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015612322573d5f5f3e3d5ffd5b602c54604080516236b65760e11b81529051617a00926001600160a01b031691626d6cae9160048083019260209291908290030181865afa1580156123ae573d5f5f3e3d5ffd5b602b5460408051633bc32c7560e01b81529051617a49926001600160a01b031691633bc32c759160048083019260209291908290030181865afa158015611396573d5f5f3e3d5ffd5b617a9d81602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611438573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015617af1575f5ffd5b505af1158015617b03573d5f5f3e3d5ffd5b5050601f54604080516004808252602482018352602082018051631e9acf1760e31b6001600160e01b03909116179052915163f28dceb360e01b81526101009093046001600160a01b03163194505f5160206201be565f395f51905f52935063f28dceb392617b72920161c4d0565b5f604051808303815f87803b158015617b89575f5ffd5b505af1158015617b9b573d5f5f3e3d5ffd5b5050602b54601f5460405163bd18636b60e01b81526001600160a01b03610100909204821660048201529116925063bd18636b91506024015f604051808303815f87803b158015617bea575f5ffd5b505af1158015617bfc573d5f5f3e3d5ffd5b5050601f54617c439250839150617c2390859061010090046001600160a01b03163161bfbd565b146040518060600160405280603c81526020016201c2b9603c913961a63f565b602b54604080516318e3dd2760e01b815290516001600160601b038716926001600160a01b0316916318e3dd279160048083019260209291908290030181865afa158015617c93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190617cb7919061c19b565b6001600160601b031614617ccd57617ccd61c1bb565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015617d21575f5ffd5b505af1158015617d33573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd671bc16d674ec800006040518263ffffffff1660e01b81526004015f604051808303818588803b158015617d8c575f5ffd5b505af1158015617d9e573d5f5f3e3d5ffd5b50506040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f5293506348f50c0f925060240190505f604051808303815f87803b158015617dea575f5ffd5b505af1158015617dfc573d5f5f3e3d5ffd5b505050505a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529097505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015617e58575f5ffd5b505af1158015617e6a573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef8009150617ecd908d905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b158015617ee4575f5ffd5b505af1158015617ef6573d5f5f3e3d5ffd5b505050505a9550617f07868861bcd5565b9450617f406040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250896040015163ffffffff1661a5fa565b617f716040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250896020015161a5fa565b617f9f6040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508661a5fa565b617fcc6040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f526020820152617ffc906110853a8861bfd0565b6180696040518060600160405280602e81526020016201c8ec602e9139602b5f9054906101000a90046001600160a01b03166001600160a01b031663995cb36e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561294f573d5f5f3e3d5ffd5b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156180bd575f5ffd5b505af11580156180cf573d5f5f3e3d5ffd5b5050601f54602b5460405163bd18636b60e01b81526101009092046001600160a01b039081166004840181905231955016925063bd18636b91506024015f604051808303815f87803b158015618123575f5ffd5b505af1158015618135573d5f5f3e3d5ffd5b5050505061817d81601f60019054906101000a90046001600160a01b03166001600160a01b031631116040518060600160405280603681526020016201c3156036913961a63f565b618227846001600160601b0316602b5f9054906101000a90046001600160a01b03166001600160a01b03166318e3dd276040518163ffffffff1660e01b8152600401602060405180830381865afa1580156181da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906181fe919061c19b565b6001600160601b0316116040518060800160405280604a81526020016201beef604a913961a63f565b602a5460405163b094728960e01b8152600481018c9052612981916001600160a01b03169063b094728990602401602060405180830381865afa158015618270573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190618294919061c42d565b156040518060800160405280606081526020016201c4ad6060913961a63f565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015618304573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190618328919061bb18565b156183355761833561c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015618385575f5ffd5b505af1158015618397573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b1580156183f0575f5ffd5b505af1158015618402573d5f5f3e3d5ffd5b5050602b54604051634b16093560e01b81525f60048201819052674563918244f40000955093508392506001600160a01b0390911690634b16093590602401602060405180830381865afa15801561845c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190618480919061bb18565b90506184a56040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156184f5575f5ffd5b505af1158015618507573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de353906185719085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af115801561858d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906185b1919061bb18565b602b5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa1580156185fc573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052618623919081019061c2cf565b905061865a8363ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b618683815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b6186ac81602001515f146040518060800160405280604881526020016201ca706048913961a63f565b6186de8282606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561872e575f5ffd5b505af1158015618740573d5f5f3e3d5ffd5b50506040805160048082526024820183526020820180516001600160e01b0316631685ecdd60e31b179052915163f28dceb360e01b81525f5160206201be565f395f51905f52945063f28dceb39350618799920161c4d0565b5f604051808303815f87803b1580156187b0575f5ffd5b505af11580156187c2573d5f5f3e3d5ffd5b5050602c5460205460405163127b03ab60e31b81526001600160a01b039182166004820152911692506393d81d5891506024015f604051808303815f87803b15801561880c575f5ffd5b505af115801561881e573d5f5f3e3d5ffd5b505050506188d286602b5f9054906101000a90046001600160a01b03166001600160a01b03166318e3dd276040518163ffffffff1660e01b8152600401602060405180830381865afa158015618876573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061889a919061c19b565b6001600160601b0316146040518060400160405280601081526020016f155cd95c881b9bdd0818da185c99d95960821b81525061a63f565b505050505050565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561892a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061894e919061bb18565b1561895b5761895b61c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156189ab575f5ffd5b505af11580156189bd573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7674563918244f400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015618a16575f5ffd5b505af1158015618a28573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015618a7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190618aa2919061bb18565b9050805f03618ab357618ab361c1bb565b618ae06040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015618b34575f5ffd5b505af1158015618b46573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b0316631d2b2afd670de0b6b3a76400006040518263ffffffff1660e01b81526004015f604051808303818588803b158015618b9f575f5ffd5b505af1158015618bb1573d5f5f3e3d5ffd5b5050602b54604051634b16093560e01b8152620493e0600482018190526753444835ec580000955093505f92506001600160a01b0390911690634b16093590602401602060405180830381865afa158015618c0e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190618c32919061bb18565b9050618c576040518060600160405280603281526020016201c778603291398261a5fa565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015618ca7575f5ffd5b505af1158015618cb9573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528694509092506001600160a01b0390911690634d3de35390618d239085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015618d3f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190618d63919061bb18565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015618dae573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052618dd5919081019061c067565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015618e20573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052618e47919081019061c2cf565b9050618e7e8463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b618ea7815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b618ed081602001515f146040518060800160405280604881526020016201ca706048913961a63f565b618f028382606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b158015618f48575f5ffd5b505af1158015618f5a573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015618fb7575f5ffd5b505af1158015618fc9573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef800915061902c9087905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b158015619043575f5ffd5b505af1158015619055573d5f5f3e3d5ffd5b505050505f5a90505f619068828461bcd5565b90506190a16040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b6190d26040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b6191006040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b61912d6040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f52602082015261915d906110853a8461bfd0565b602a5460405163b094728960e01b815260048101889052619190916001600160a01b03169063b0947289906024016148e8565b602b5460405163dc311dd360e01b8152600481018d90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa1580156191da573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052619201919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168d619226919061bcd5565b90506192546040518060600160405280602c81526020016201c037602c9139846001600160601b031661a5fa565b6192776040518060600160405280602781526020016201c0fa602791398261a5fa565b61928b8d846001600160601b03168361aea5565b6192b1818c10156040518060800160405280604381526020016201c64f6043913961a63f565b6192c76110d06001600160601b0385168361bfbd565b6192d5816133eb3a8761bfd0565b6192fb826001146040518060600160405280602981526020016201c7176029913961a63f565b602a5460405163c58343ef60e01b8152600481018b90526001600160a01b039091169063c58343ef906024015f60405180830381865afa158015619341573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052619368919081019061c067565b97506193918860c001516040518060800160405280604381526020016201c34b6043913961a63f565b6729a2241af62c00005f52602260209081525f5160206201c97c5f395f51905f5254602c54604080516397a9c28560e01b81529051614bf6946001600160a01b03909316926397a9c28592600480820193918290030181865afa158015611212573d5f5f3e3d5ffd5b6060601580548060200260200160405190810160405280929190818152602001828054801561365757602002820191905f5260205f209081546001600160a01b03168152600190910190602001808311613639575050505050905090565b60408051808201909152600581526410938c8d4d60da1b60208201525f61947e8261b173565b90506194b85f6001600160a01b0316826001600160a01b031614156040518060600160405280602581526020016201c4106025913961a63f565b6194e7816001600160a01b03163b5f146040518060600160405280602381526020016201becc6023913961a63f565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561953b575f5ffd5b505af115801561954d573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f5160206201be565f395f51905f52925063f28dceb391506195809060040161c4e2565b5f604051808303815f87803b158015619597575f5ffd5b505af11580156195a9573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506195df908590859060040161c52c565b5f604051808303815f87803b1580156195f6575f5ffd5b505af1158015619608573d5f5f3e3d5ffd5b50506029546040805160608101909152602d8082526001600160a01b03909216945061964393508415159250906201c6ea602083013961a63f565b6196725f826001600160a01b03163b116040518060600160405280602381526020016201c6926023913961a63f565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b1580156196c6575f5ffd5b505af11580156196d8573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da915061970e908590859060040161c52c565b5f604051808303815f87803b158015619725575f5ffd5b505af1158015619737573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b81526197c193506001600160a01b03858116935090911690635bb09cf89061977390879060040161c4d0565b602060405180830381865afa15801561978e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906197b2919061c45a565b6001600160a01b03161461b04f565b50602b54601f5460405163ca669fa760e01b81526001600160a01b03610100909204821660048201529116905f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561981d575f5ffd5b505af115801561982f573d5f5f3e3d5ffd5b505060405163f28dceb360e01b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201525f5160206201be565f395f51905f52925063f28dceb391506084015f604051808303815f87803b1580156198ae575f5ffd5b505af11580156198c0573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da91506198f6908590859060040161c52c565b5f604051808303815f87803b15801561990d575f5ffd5b505af115801561991f573d5f5f3e3d5ffd5b5050602854604051630b76139f60e31b81526199c493506001600160a01b03858116935090911690635bb09cf89061995b90879060040161c4d0565b602060405180830381865afa158015619976573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061999a919061c45a565b6001600160a01b031614156040518060600160405280603581526020016201c6b56035913961a63f565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015619a18575f5ffd5b505af1158015619a2a573d5f5f3e3d5ffd5b505060405163f28dceb360e01b81525f5160206201be565f395f51905f52925063f28dceb39150619a5d9060040161c4e2565b5f604051808303815f87803b158015619a74575f5ffd5b505af1158015619a86573d5f5f3e3d5ffd5b5050602854604051635d5c33ed60e11b81526001600160a01b03909116925063bab867da9150619abc9085905f9060040161c52c565b5f604051808303815f87803b158015619ad3575f5ffd5b505af11580156188d2573d5f5f3e3d5ffd5b602b54604051634b16093560e01b81526207a12060048201819052915f916001600160a01b0390911690634b16093590602401602060405180830381865afa158015619b33573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190619b57919061bb18565b9050619b7c6040518060600160405280603281526020016201c778603291398261a5fa565b602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015619bcc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190619bf0919061bb18565b15619bfd57619bfd61c1bb565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015619c4d575f5ffd5b505af1158015619c5f573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba7826040518263ffffffff1660e01b81526004015f604051808303818588803b158015619cb0575f5ffd5b505af1158015619cc2573d5f5f3e3d5ffd5b50505050505f602c5f9054906101000a90046001600160a01b03166001600160a01b03166309c1ba2e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015619d18573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190619d3c919061bb18565b9050805f03619d4d57619d4d61c1bb565b619d7a6040518060400160405280601281526020015f5160206201c8cc5f395f51905f528152508261a5fa565b60205460405163ca669fa760e01b81526001600160a01b03909116600482015282905f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b158015619dcc575f5ffd5b505af1158015619dde573d5f5f3e3d5ffd5b5050602c546729a2241af62c00005f9081526022602052604051634d3de35360e01b81528894509092506001600160a01b0390911690634d3de35390619e489085905f5160206201c2f55f395f51905f52905f5160206201bf635f395f51905f529060040161bc5d565b6020604051808303815f875af1158015619e64573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190619e88919061bb18565b602a5460405163c58343ef60e01b8152600481018390529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015619ed3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052619efa919081019061c067565b602b5460405163c58343ef60e01b8152600481018590529192505f916001600160a01b039091169063c58343ef906024015f60405180830381865afa158015619f45573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052619f6c919081019061c2cf565b9050619fa38463ffffffff16826040015163ffffffff16146040518060800160405280604881526020016201bfc66048913961a63f565b619fcc815f01515f14156040518060600160405280603281526020016201c0636032913961a63f565b619ff581602001515f146040518060800160405280604881526020016201ca706048913961a63f565b61a0278382606001516001600160401b0316146040518060600160405280604081526020016201c93c6040913961a63f565b6040516348f50c0f60e01b8152620186a060048201525f5160206201be565f395f51905f52906348f50c0f906024015f604051808303815f87803b15801561a06d575f5ffd5b505af115801561a07f573d5f5f3e3d5ffd5b505050505f5a601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a0dc575f5ffd5b505af115801561a0ee573d5f5f3e3d5ffd5b5050602a546729a2241af62c00005f526022602052604051621ef9df60eb1b81526001600160a01b03909116925063f7cef800915061a1519087905f5160206201c62f5f395f51905f52905f5160206201be765f395f51905f529060040161bc97565b5f604051808303815f87803b15801561a168575f5ffd5b505af115801561a17a573d5f5f3e3d5ffd5b505050505f5a90505f61a18d828461bcd5565b905061a1c66040518060400160405280601981526020015f5160206201c3f05f395f51905f52815250856040015163ffffffff1661a5fa565b61a1f76040518060400160405280601981526020015f5160206201c60f5f395f51905f52815250856020015161a5fa565b61a2256040518060400160405280600c81526020016b2a3c1023b0b9903ab9b2b21d60a11b8152508261a5fa565b61a2526040518060400160405280601381526020015f5160206201c1815f395f51905f528152503a61a5fa565b60408051808201909152601481525f5160206201c1215f395f51905f52602082015261a282906110853a8461bfd0565b602a5460405163b094728960e01b81526004810188905261a2b5916001600160a01b03169063b094728990602401613226565b602b5460405163dc311dd360e01b8152600481018b90525f9182916001600160a01b039091169063dc311dd3906024015f60405180830381865afa15801561a2ff573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261a326919081019061bed7565b50506001600160401b0316915091505f826001600160601b03168b61a34b919061bcd5565b905061a3796040518060600160405280602c81526020016201c037602c9139846001600160601b031661a5fa565b61a39c6040518060600160405280602781526020016201c0fa602791398261a5fa565b61a3b08b846001600160601b03168361aea5565b61a3d6818e10156040518060800160405280604381526020016201c64f6043913961a63f565b6192c761a3ec6001600160601b0385168361bfbd565b8c146040518060600160405280602581526020016201c57d6025913961a63f565b60205460405163ca669fa760e01b81526001600160a01b0390911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a45d575f5ffd5b505af115801561a46f573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b031660405161a4959061b77b565b6001600160a01b039091168152602001604051809103905ff08015801561a4be573d5f5f3e3d5ffd5b50602c80546001600160a01b0319166001600160a01b0392831617905560205460405163ca669fa760e01b8152911660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a522575f5ffd5b505af115801561a534573d5f5f3e3d5ffd5b505050505f5160206201be565f395f51905f526001600160a01b031663f48448146040518163ffffffff1660e01b81526004015f604051808303815f87803b15801561a57e575f5ffd5b505af115801561a590573d5f5f3e3d5ffd5b50505050602c5f9054906101000a90046001600160a01b03166001600160a01b031663b96dbba75f6040518263ffffffff1660e01b81526004015f604051808303818588803b15801561a5e1575f5ffd5b505af115801561a5f3573d5f5f3e3d5ffd5b5050505050565b614de5828260405160240161a61092919061c555565b60408051601f198184030181529190526020810180516001600160e01b0316632d839cb360e21b17905261b184565b60405163a34edc0360e01b81525f5160206201be565f395f51905f529063a34edc039061a672908590859060040161c576565b5f6040518083038186803b15801561a688575f5ffd5b505afa1580156188d2573d5f5f3e3d5ffd5b61518c61b18d565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f9081908190819081905f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a700575f5ffd5b505af115801561a712573d5f5f3e3d5ffd5b505050505f60405161a7239061b797565b604051809103905ff08015801561a73c573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a794575f5ffd5b505af115801561a7a6573d5f5f3e3d5ffd5b505050505f8160405161a7b89061b7a5565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff08015801561a7ef573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095508591505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a84a575f5ffd5b505af115801561a85c573d5f5f3e3d5ffd5b505050505f60405161a86d9061b7b3565b604051809103905ff08015801561a886573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a8de575f5ffd5b505af115801561a8f0573d5f5f3e3d5ffd5b505050505f8160405161a9029061b7a5565b6001600160a01b0390911681526040602082018190525f90820152606001604051809103905ff08015801561a939573d5f5f3e3d5ffd5b5060205460405163ca669fa760e01b81526001600160a01b0390911660048201529096508691505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561a990575f5ffd5b505af115801561a9a2573d5f5f3e3d5ffd5b505050508060405161a9b39061b77b565b6001600160a01b039091168152602001604051809103905ff08015801561a9dc573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529095505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561aa34575f5ffd5b505af115801561aa46573d5f5f3e3d5ffd5b50505050601f60019054906101000a90046001600160a01b031660405161aa6c9061b7c1565b6001600160a01b039091168152602001604051809103905ff08015801561aa95573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529099505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561aaed575f5ffd5b505af115801561aaff573d5f5f3e3d5ffd5b5050604051602492506026915061ab159061b7cf565b61ab2092919061c590565b604051809103905ff08015801561ab39573d5f5f3e3d5ffd5b50601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201529098505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561ab91575f5ffd5b505af115801561aba3573d5f5f3e3d5ffd5b5050604051635d5c33ed60e11b81526001600160a01b038c16925063bab867da915061abd6906023908c9060040161c5ab565b5f604051808303815f87803b15801561abed575f5ffd5b505af115801561abff573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b15801561ac57575f5ffd5b505af115801561ac69573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528c811660248301528a16925063485cc95591506044015f604051808303815f87803b15801561acbe575f5ffd5b505af115801561acd0573d5f5f3e3d5ffd5b5050601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f52925063ca669fa791506024015f604051808303815f87803b15801561ad28575f5ffd5b505af115801561ad3a573d5f5f3e3d5ffd5b5050601f5460405163485cc95560e01b81526101009091046001600160a01b0390811660048301528a811660248301528916925063485cc95591506044015f604051808303815f87803b15801561ad8f575f5ffd5b505af115801561ada1573d5f5f3e3d5ffd5b50505050505050509091929394565b601f5460405163ca669fa760e01b81526101009091046001600160a01b031660048201525f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561ae04575f5ffd5b505af115801561ae16573d5f5f3e3d5ffd5b5050602b5460405163117e90d560e21b815263ffffffff808c166004830152808b166024830152808a1660448301528089166064830152808816608483015260ff871660a4830152851660c48201526001600160a01b0390911692506345fa4354915060e4015f604051808303815f87803b15801561ae93575f5ffd5b505af1158015613e34573d5f5f3e3d5ffd5b60405160248101849052604481018390526064810182905261aef39060840160408051601f198184030181529190526020810180516001600160e01b031663347b5e8f60e21b17905261b184565b505050565b60405163ca669fa760e01b81526001600160a01b03841660048201525f905f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561af46575f5ffd5b505af115801561af58573d5f5f3e3d5ffd5b505050508260405161af699061b77b565b6001600160a01b039091168152602001604051809103905ff08015801561af92573d5f5f3e3d5ffd5b5060405163ca669fa760e01b81526001600160a01b03861660048201529091505f5160206201be565f395f51905f529063ca669fa7906024015f604051808303815f87803b15801561afe2575f5ffd5b505af115801561aff4573d5f5f3e3d5ffd5b50505050806001600160a01b031663b96dbba7836040518263ffffffff1660e01b81526004015f604051808303818588803b15801561b031575f5ffd5b505af115801561b043573d5f5f3e3d5ffd5b50505050509392505050565b604051630c9fd58160e01b815281151560048201525f5160206201be565f395f51905f5290630c9fd581906024015f6040518083038186803b15801561b093575f5ffd5b505afa15801561a5f3573d5f5f3e3d5ffd5b61b0e88160405160240161b0b9919061c4d0565b60408051601f198184030181529190526020810180516001600160e01b03166305f3bfab60e11b17905261b184565b50565b61b0e88160405160240161b0ff919061c4d0565b60408051601f198184030181529190526020810180516001600160e01b031663104c13eb60e21b17905261b184565b61b0e88160405160240161b14491815260200190565b60408051601f198184030181529190526020810180516001600160e01b031663f82c50f160e01b17905261b184565b5f61b17d8261b3c6565b5092915050565b61b0e88161b4c8565b61b1b36040518060400160405280600581526020016430b236b4b760d91b81525061b173565b601f60016101000a8154816001600160a01b0302191690836001600160a01b0316021790555061b1ff60405180604001604052806005815260200164616c69636560d81b81525061b173565b60205f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555061b248604051806040016040528060038152602001623137b160e91b81525061b173565b602180546001600160a01b0319166001600160a01b03928316179055601f5460405163c88a5e6d60e01b81526101009091049091166004820152678ac7230489e8000060248201525f5160206201be565f395f51905f529063c88a5e6d906044015f604051808303815f87803b15801561b2c0575f5ffd5b505af115801561b2d2573d5f5f3e3d5ffd5b505060205460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f5160206201be565f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b15801561b334575f5ffd5b505af115801561b346573d5f5f3e3d5ffd5b505060215460405163c88a5e6d60e01b81526001600160a01b039091166004820152678ac7230489e8000060248201525f5160206201be565f395f51905f52925063c88a5e6d91506044015f604051808303815f87803b15801561b3a8575f5ffd5b505af115801561b3ba573d5f5f3e3d5ffd5b5050505061518c61b4e7565b5f5f8260405160200161b3d9919061c5bd565b60408051808303601f190181529082905280516020909101206001625e79b760e01b031982526004820181905291505f5160206201be565f395f51905f529063ffa1864990602401602060405180830381865afa15801561b43c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061b460919061c45a565b6040516318caf8e360e31b81529092505f5160206201be565f395f51905f529063c657c7189061b496908590879060040161c5d3565b5f604051808303815f87803b15801561b4ad575f5ffd5b505af115801561b4bf573d5f5f3e3d5ffd5b50505050915091565b5f6a636f6e736f6c652e6c6f6790505f5f835160208501845afa505050565b6040805160e0810182527f220c292a8d5482f0afc107989582021eb9d86fe3e75dbb7bcb749f30861c9f8f60a082019081527f14a3cdb4fec6d3ebb0ad2b5a943fdef4a458e6ac8bc6ff321afa898b4158ff5b60c08301526060808301918252835180850185527f269cdb66a4daaf03aeda655342cc38e431a83a914fcdf4daf73e4f6fde7729ac81527f2610ed6679d7a57287cf5d21045063efda28037e5b555d9103f60b83c5cee1ca6020828101919091526080850191909152918352835180850185528281527f54b744fa0514a42e8e8bf8a23a0c619e059fbc072d1774f5c4d389a218dce7f18184015282840152835180850185528281527fc0884030be948e1477202760f15f302c56fd9e22e39cb0afb21e9a2140d363d48184015283850152835190810184528381526729a2241af62c0000935f926201c1419083013990505f6040518060400160405280602081526020017f948918d64af8e911c98d62c282764bed2488a47797a31e711956a6e87846efa781525090506040518060a00160405280858152602001601260405160200161b6a691906040808252600190820152602160f91b6060820152602081019190915260800190565b60408051601f19818403018152918152908252602082810187905282820186905260609092018490525f87815260228352208251815590820151600182019061b6ef908261c63a565b5060408201518051805160028085019291839161b70d91839161b7dd565b50602082015161b723906002808401919061b7dd565b5050506020820151600482019061b73a908261c63a565b506040820151600582019061b74f908261c63a565b5050506060820151600882019061b766908261c63a565b50608082015160098201906116c9908261c63a565b611ae4806200c6f583390190565b611674806200e1d983390190565b6132f3806200f84d83390190565b61042b8062012b4083390190565b615c738062012f6b83390190565b6109e08062018bde83390190565b6127e780620195be83390190565b826002810192821561b80b579160200282015b8281111561b80b57825182559160200191906001019061b7f0565b5061b81792915061b81b565b5090565b5b8082111561b817575f815560010161b81c565b602080825282518282018190525f918401906040840190835b8181101561b86f5783516001600160a01b031683526020938401939092019160010161b848565b509095945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561b96557603f19878603018452815180516001600160a01b03168652602090810151604082880181905281519088018190529101906060600582901b8801810191908801905f5b8181101561b94b57605f198a850301835261b93584865161b87a565b602095860195909450929092019160010161b919565b50919750505060209485019492909201915060010161b8ce565b50929695505050505050565b5f6020828403121561b981575f5ffd5b5035919050565b5f8151808452602084019350602083015f5b8281101561b9c25781516001600160e01b03191686526020958601959091019060010161b99a565b5093949350505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561b96557603f19878603018452815180516040875261ba18604088018261b87a565b905060208201519150868103602088015261ba33818361b988565b96505050602093840193919091019060010161b9f2565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561b96557603f1987860301845261ba8c85835161b87a565b9450602093840193919091019060010161ba70565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561b96557868503603f19018452815180516001600160a01b0316865260209081015160409187018290529061bb029087018261b988565b955050602093840193919091019060010161bac7565b5f6020828403121561bb28575f5ffd5b5051919050565b600181811c9082168061bb4357607f821691505b60208210810361bb6157634e487b7160e01b5f52602260045260245ffd5b50919050565b5f815461bb738161bb2f565b80855260018216801561bb8d576001811461bba95761bbdd565b60ff1983166020870152602082151560051b870101935061bbdd565b845f5260205f205f5b8381101561bbd45781546020828a01015260018201915060208101905061bbb2565b87016020019450505b50505092915050565b805f5b600281101561bc0857815484526020909301926001918201910161bbe9565b50505050565b61bc18828261bbe6565b61bc28604083016002830161bbe6565b60c060808301525f61bc4060c084016004840161bb67565b83810360a085015261bc55816005850161bb67565b949350505050565b63ffffffff84168152606060208201525f61bc7b606083018561bb67565b828103604084015261bc8d818561bc0e565b9695505050505050565b838152606060208201525f61bcaf606083018561bb67565b828103604084015261bc8d818561bb67565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561bce85761bce861bcc1565b92915050565b602080825282548282018190525f848152918220906040840190835b8181101561b86f5783546001600160a01b031683526001938401936020909301920161bd0a565b6020808252602b908201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560408201526a19081c995c5d595cdd125160aa1b606082015260800190565b606081525f61bd8e606083018661bb67565b828103602084015261bda0818661bc0e565b9050828103604084015261bc8d818561bb67565b80516001600160601b038116811461bdca575f5ffd5b919050565b80516001600160401b038116811461bdca575f5ffd5b6001600160a01b038116811461b0e8575f5ffd5b805161bdca8161bde5565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b038111828210171561be3a5761be3a61be04565b60405290565b604080519081016001600160401b038111828210171561be3a5761be3a61be04565b604051606081016001600160401b038111828210171561be3a5761be3a61be04565b60405161012081016001600160401b038111828210171561be3a5761be3a61be04565b604051601f8201601f191681016001600160401b038111828210171561becf5761becf61be04565b604052919050565b5f5f5f5f6080858703121561beea575f5ffd5b61bef38561bdb4565b935061bf016020860161bdcf565b9250604085015161bf118161bde5565b60608601519092506001600160401b0381111561bf2c575f5ffd5b8501601f8101871361bf3c575f5ffd5b80516001600160401b0381111561bf555761bf5561be04565b8060051b61bf656020820161bea7565b9182526020818401810192908101908a84111561bf80575f5ffd5b6020850194505b8385101561bfae578451925061bf9c8361bde5565b8282526020948501949091019061bf87565b979a9699509497505050505050565b8082018082111561bce85761bce861bcc1565b808202811582820484141761bce85761bce861bcc1565b5f82601f83011261bff6575f5ffd5b8151602083015f5f6001600160401b0384111561c0155761c01561be04565b50601f8301601f191660200161c02a8161bea7565b91505082815285838301111561c03e575f5ffd5b8282602083015e5f92810160200192909252509392505050565b8051801515811461bdca575f5ffd5b5f6020828403121561c077575f5ffd5b81516001600160401b0381111561c08c575f5ffd5b820160e0818503121561c09d575f5ffd5b61c0a561be18565b81516001600160401b0381111561c0ba575f5ffd5b61c0c68682850161bfe7565b82525060208201516001600160401b0381111561c0e1575f5ffd5b61c0ed8682850161bfe7565b60208301525060408201516001600160401b0381111561c10b575f5ffd5b61c1178682850161bfe7565b60408301525060608201516001600160401b0381111561c135575f5ffd5b61c1418682850161bfe7565b60608301525060808201516001600160401b0381111561c15f575f5ffd5b61c16b8682850161bfe7565b60808301525061c17d60a0830161bdf9565b60a082015261c18e60c0830161c058565b60c0820152949350505050565b5f6020828403121561c1ab575f5ffd5b61c1b48261bdb4565b9392505050565b634e487b7160e01b5f52600160045260245ffd5b805163ffffffff8116811461bdca575f5ffd5b5f82601f83011261c1f1575f5ffd5b61c1f961be40565b80604084018581111561c20a575f5ffd5b845b8181101561b86f57805184526020938401930161c20c565b5f81830360c081121561c235575f5ffd5b61c23d61be62565b9150608081121561c24c575f5ffd5b5061c25561be40565b61c25f848461c1e2565b815261c26e846040850161c1e2565b6020820152815260808201516001600160401b0381111561c28d575f5ffd5b61c2998482850161bfe7565b60208301525060a08201516001600160401b0381111561c2b7575f5ffd5b61c2c38482850161bfe7565b60408301525092915050565b5f6020828403121561c2df575f5ffd5b81516001600160401b0381111561c2f4575f5ffd5b8201610120818503121561c306575f5ffd5b61c30e61be84565b815181526020808301519082015261c3286040830161c1cf565b604082015261c3396060830161bdcf565b606082015260808201516001600160401b0381111561c356575f5ffd5b61c3628682850161bfe7565b60808301525060a08201516001600160401b0381111561c380575f5ffd5b61c38c8682850161c224565b60a08301525060c08201516001600160401b0381111561c3aa575f5ffd5b61c3b68682850161bfe7565b60c08301525060e08201516001600160401b0381111561c3d4575f5ffd5b61c3e08682850161bfe7565b60e08301525061c3f3610100830161bdf9565b610100820152949350505050565b82815260606020820152600160608201525f608082015260a060408201525f61bc5560a083018461bb67565b5f6020828403121561c43d575f5ffd5b61c1b48261c058565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561c46a575f5ffd5b815161c1b48161bde5565b5f6020828403121561c485575f5ffd5b81516001600160401b0381111561c49a575f5ffd5b61bc558482850161bfe7565b838152606060208201525f61c4be606083018561bb67565b828103604084015261bc8d818561b87a565b602081525f61c1b4602083018461b87a565b6020808252602a908201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604082015269656d654164647265737360b01b606082015260800190565b604081525f61c53e604083018561b87a565b905060018060a01b03831660208301529392505050565b604081525f61c567604083018561b87a565b90508260208301529392505050565b8215158152604060208201525f61bc55604083018461b87a565b6080810161c59e828561bbe6565b61c1b4604083018461bbe6565b604081525f61c53e604083018561bb67565b5f82518060208501845e5f920191825250919050565b6001600160a01b03831681526040602082018190525f9061bc559083018461b87a565b601f82111561aef357805f5260205f20601f840160051c8101602085101561c61b5750805b601f840160051c820191505b8181101561a5f3575f815560010161c627565b81516001600160401b0381111561c6535761c65361be04565b61c6678161c661845461bb2f565b8461c5f6565b6020601f82116001811461c699575f831561c6825750848201515b5f19600385901b1c1916600184901b17845561a5f3565b5f84815260208120601f198516915b8281101561c6c8578785015182556020948501946001909201910161c6a8565b508482101561c6e557868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fe608060405234801561000f575f5ffd5b50604051611ae4380380611ae483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b611924806101c05f395ff3fe60806040526004361061011d575f3560e01c8063809800431161009d57806397a9c2851161006257806397a9c28514610321578063b8ca8dd814610336578063b96dbba714610355578063e64a66ea1461035d578063f2fde38b14610365575f5ffd5b8063809800431461027157806386e560be146102905780638da5cb5b146102b357806393b9740a146102e357806393d81d5814610302575f5ffd5b80634d3de353116100e35780634d3de353146101d85780634fa26d40146101eb57806359608fda1461020a5780635d9418021461023e57806379ba50971461025d575f5ffd5b80626d6cae1461016057806309c1ba2e1461018857806312065fe01461019d5780631d2b2afd146101af57806336bfffed146101b9575f5ffd5b3661015c57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b34801561016b575f5ffd5b5061017560045481565b6040519081526020015b60405180910390f35b348015610193575f5ffd5b5061017560035481565b3480156101a8575f5ffd5b5047610175565b6101b7610384565b005b3480156101c4575f5ffd5b506101b76101d33660046111c2565b61042b565b6101756101e6366004611278565b610528565b3480156101f6575f5ffd5b506101b761020536600461131b565b61058b565b348015610215575f5ffd5b50610229610224366004611278565b610615565b6040805192835260208301919091520161017f565b348015610249575f5ffd5b506101b761025836600461133b565b610680565b348015610268575f5ffd5b506101b76106e5565b34801561027c575f5ffd5b506101b761028b366004611383565b61078e565b34801561029b575f5ffd5b506102a46107c8565b60405161017f9392919061140d565b3480156102be575f5ffd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b3480156102ee575f5ffd5b506002546102cb906001600160a01b031681565b34801561030d575f5ffd5b506101b761031c36600461131b565b610954565b34801561032c575f5ffd5b50610175600b5481565b348015610341575f5ffd5b506101b7610350366004611448565b610968565b6101b7610a3b565b6101b7610a82565b348015610370575f5ffd5b506101b761037f36600461131b565b610b01565b6003545f036103c85760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b158015610412575f5ffd5b505af1158015610424573d5f5f3e3d5ffd5b5050505050565b610433610b12565b6003545f036104745760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b60448201526064016103bf565b5f5b81811015610523576002546003546001600160a01b039091169063bec4c08c908585858181106104a8576104a8611472565b90506020020160208101906104bd919061131b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b158015610501575f5ffd5b505af1158015610513573d5f5f3e3d5ffd5b5050600190920191506104769050565b505050565b5f5f61056b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b66915050565b6004819055905082600561057f8282611613565b50909695505050505050565b610593610b12565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b60648201526084016103bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f61065a8888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610be4915050565b600482905590925090508460056106718282611613565b50919890975095505050505050565b6002546001600160a01b031633146106da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c60448201526064016103bf565b610523838383610cda565b6001546001600160a01b031633146107385760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064016103bf565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610796610b12565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107e557505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161081b5750505050508152505090806004018054610847906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610873906114dd565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050908060050180546108d3906114dd565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff906114dd565b801561094a5780601f106109215761010080835404028352916020019161094a565b820191905f5260205f20905b81548152906001019060200180831161092d57829003601f168201915b5050505050905083565b61095c610b12565b61096581610ee2565b50565b610970610b12565b814710156109c05760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e7472616374000060448201526064016103bf565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109f3573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a2f91815260200190565b60405180910390a25050565b610a43610b12565b610a4b610f7a565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103fb565b5f3411610aca5760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b60448201526064016103bf565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610b09610b12565b610965816110a4565b5f546001600160a01b03163314610b645760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016103bf565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b9c91889188908890600401611754565b6020604051808303815f875af1158015610bb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc9190611795565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611795565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c8f908990899089906004016117ac565b60206040518083038185885af1158015610cab573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610cd09190611795565b9150935093915050565b8260045414610d215760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103932b8bab2b9ba1034b21760691b60448201526064016103bf565b6040805160e08101909152610ec79060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610d4a57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610d80575050505050815250508152602001600482018054610db0906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc906114dd565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b50505050508152602001600582018054610e40906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906114dd565b8015610eb75780601f10610e8e57610100808354040283529160200191610eb7565b820191905f5260205f20905b815481529060010190602001808311610e9a57829003601f168201915b505050505081525050838361114c565b806020019051810190610eda9190611795565b600b55505050565b6003545f03610f2c5760405162461bcd60e51b8152602060048201526016602482015275537562736372697074696f6e4964206973207a65726f60501b60448201526064016103bf565b600254600354604051622b825560e61b815260048101919091526001600160a01b03838116602483015290911690630ae09540906044015f604051808303815f87803b158015610412575f5ffd5b5f6003545f14610fcc5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f00000000000060448201526064016103bf565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561101d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110419190611795565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b15801561108b575f5ffd5b505af115801561109d573d5f5f3e3d5ffd5b5050505090565b336001600160a01b038216036110fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103bf565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c490611181908790879087906004016117dc565b5f60405180830381865afa15801561119b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdc919081019061183b565b5f5f602083850312156111d3575f5ffd5b823567ffffffffffffffff8111156111e9575f5ffd5b8301601f810185136111f9575f5ffd5b803567ffffffffffffffff81111561120f575f5ffd5b8560208260051b8401011115611223575f5ffd5b6020919091019590945092505050565b5f5f83601f840112611243575f5ffd5b50813567ffffffffffffffff81111561125a575f5ffd5b602083019150836020828501011115611271575f5ffd5b9250929050565b5f5f5f5f6060858703121561128b575f5ffd5b843563ffffffff8116811461129e575f5ffd5b9350602085013567ffffffffffffffff8111156112b9575f5ffd5b6112c587828801611233565b909450925050604085013567ffffffffffffffff8111156112e4575f5ffd5b850160c081880312156112f5575f5ffd5b939692955090935050565b80356001600160a01b0381168114611316575f5ffd5b919050565b5f6020828403121561132b575f5ffd5b61133482611300565b9392505050565b5f5f5f6040848603121561134d575f5ffd5b83359250602084013567ffffffffffffffff81111561136a575f5ffd5b61137686828701611233565b9497909650939450505050565b5f60208284031215611393575f5ffd5b5035919050565b805f5b60028110156113bc57815184526020938401939091019060010161139d565b50505050565b6113cd82825161139a565b6020810151610523604084018261139a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b61141781856113c2565b60c060808201525f61142c60c08301856113df565b82810360a084015261143e81856113df565b9695505050505050565b5f5f60408385031215611459575f5ffd5b8235915061146960208401611300565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e198436030181126114af575f5ffd5b83018035915067ffffffffffffffff8211156114c9575f5ffd5b602001915036819003821315611271575f5ffd5b600181811c908216806114f157607f821691505b60208210810361150f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561052357805f5260205f20601f840160051c8101602085101561153a5750805b601f840160051c820191505b81811015610424575f8155600101611546565b67ffffffffffffffff83111561157157611571611486565b6115858361157f83546114dd565b83611515565b5f601f8411600181146115b6575f851561159f5750838201355b5f19600387901b1c1916600186901b178355610424565b5f83815260208120601f198716915b828110156115e557868501358255602094850194600190920191016115c5565b5086821015611601575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b600281101561163357813583820155602090910190600101611616565b5050604082015f5b600281101561165b5781358382016002015560209091019060010161163b565b505061166a608083018361149a565b611678818360048601611559565b505061168760a083018361149a565b6113bc818360058601611559565b5f5f8335601e198436030181126116aa575f5ffd5b830160208101925035905067ffffffffffffffff8111156116c9575f5ffd5b803603821315611271575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61171c6080830183611695565b60c0608086015261173160c0860182846116d7565b91505061174160a0840184611695565b85830360a087015261143e8382846116d7565b63ffffffff85168152836020820152608060408201525f61177860808301856113df565b828103606084015261178a81856116ff565b979650505050505050565b5f602082840312156117a5575f5ffd5b5051919050565b63ffffffff84168152606060208201525f6117ca60608301856113df565b828103604084015261143e81856116ff565b604081526117ee6040820185516113c2565b5f602085015160c0808401526118086101008401826113df565b90506040860151603f198483030160e085015261182582826113df565b915050828103602084015261143e8185876116d7565b5f6020828403121561184b575f5ffd5b815167ffffffffffffffff811115611861575f5ffd5b8201601f81018413611871575f5ffd5b805167ffffffffffffffff81111561188b5761188b611486565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156118ba576118ba611486565b6040528181528282016020018610156118d1575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220c3b44a1906b2ea323c1b7dd1b7b303f120420afb0c338072e3b98639f89bc6d564736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161167438038061167483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b6114b4806101c05f395ff3fe608060405260043610610112575f3560e01c806379ba50971161009d57806397a9c2851161006257806397a9c285146102f7578063b8ca8dd81461030c578063b96dbba71461032b578063e64a66ea14610333578063f2fde38b1461033b575f5ffd5b806379ba509714610252578063809800431461026657806386e560be146102855780638da5cb5b146102a857806393b9740a146102d8575f5ffd5b806336bfffed116100e357806336bfffed146101ae5780634d3de353146101cd5780634fa26d40146101e057806359608fda146101ff5780635d94180214610233575f5ffd5b80626d6cae1461015557806309c1ba2e1461017d57806312065fe0146101925780631d2b2afd146101a4575f5ffd5b3661015157604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b348015610160575f5ffd5b5061016a60045481565b6040519081526020015b60405180910390f35b348015610188575f5ffd5b5061016a60035481565b34801561019d575f5ffd5b504761016a565b6101ac61035a565b005b3480156101b9575f5ffd5b506101ac6101c8366004610e6d565b610401565b61016a6101db366004610f23565b6104fe565b3480156101eb575f5ffd5b506101ac6101fa366004610fc6565b610561565b34801561020a575f5ffd5b5061021e610219366004610f23565b6105eb565b60408051928352602083019190915201610174565b34801561023e575f5ffd5b506101ac61024d366004610fe6565b610656565b34801561025d575f5ffd5b506101ac6106b7565b348015610271575f5ffd5b506101ac61028036600461102e565b610760565b348015610290575f5ffd5b5061029961079a565b6040516101749392919061109b565b3480156102b3575f5ffd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610174565b3480156102e3575f5ffd5b506002546102c0906001600160a01b031681565b348015610302575f5ffd5b5061016a600b5481565b348015610317575f5ffd5b506101ac6103263660046110ea565b610926565b6101ac6109f9565b6101ac610a40565b348015610346575f5ffd5b506101ac610355366004610fc6565b610abf565b6003545f0361039e5760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b1580156103e8575f5ffd5b505af11580156103fa573d5f5f3e3d5ffd5b5050505050565b610409610ad3565b6003545f0361044a5760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b6044820152606401610395565b5f5b818110156104f9576002546003546001600160a01b039091169063bec4c08c9085858581811061047e5761047e611114565b90506020020160208101906104939190610fc6565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b1580156104d7575f5ffd5b505af11580156104e9573d5f5f3e3d5ffd5b50506001909201915061044c9050565b505050565b5f5f6105418686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b27915050565b6004819055905082600561055582826112b5565b50909695505050505050565b610569610ad3565b6001600160a01b0381166105c95760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b6064820152608401610395565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f6106308888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610ba5915050565b6004829055909250905084600561064782826112b5565b50919890975095505050505050565b6002546001600160a01b031633146106b05760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c6044820152606401610395565b6104f95f5ffd5b6001546001600160a01b0316331461070a5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610395565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610768610ad3565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107b757505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116107ed57505050505081525050908060040180546108199061117f565b80601f01602080910402602001604051908101604052809291908181526020018280546108459061117f565b80156108905780601f1061086757610100808354040283529160200191610890565b820191905f5260205f20905b81548152906001019060200180831161087357829003601f168201915b5050505050908060050180546108a59061117f565b80601f01602080910402602001604051908101604052809291908181526020018280546108d19061117f565b801561091c5780601f106108f35761010080835404028352916020019161091c565b820191905f5260205f20905b8154815290600101906020018083116108ff57829003601f168201915b5050505050905083565b61092e610ad3565b8147101561097e5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e747261637400006044820152606401610395565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109b1573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516109ed91815260200190565b60405180910390a25050565b610a01610ad3565b610a09610c9b565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103d1565b5f3411610a885760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b6044820152606401610395565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610ac7610ad3565b610ad081610dc5565b50565b5f546001600160a01b03163314610b255760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610395565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b5d918891889088906004016113f6565b6020604051808303815f875af1158015610b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9d9190611437565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610bf5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190611437565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c509089908990899060040161144e565b60206040518083038185885af1158015610c6c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c919190611437565b9150935093915050565b5f6003545f14610ced5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f0000000000006044820152606401610395565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190611437565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b158015610dac575f5ffd5b505af1158015610dbe573d5f5f3e3d5ffd5b5050505090565b336001600160a01b03821603610e1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610395565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f5f60208385031215610e7e575f5ffd5b823567ffffffffffffffff811115610e94575f5ffd5b8301601f81018513610ea4575f5ffd5b803567ffffffffffffffff811115610eba575f5ffd5b8560208260051b8401011115610ece575f5ffd5b6020919091019590945092505050565b5f5f83601f840112610eee575f5ffd5b50813567ffffffffffffffff811115610f05575f5ffd5b602083019150836020828501011115610f1c575f5ffd5b9250929050565b5f5f5f5f60608587031215610f36575f5ffd5b843563ffffffff81168114610f49575f5ffd5b9350602085013567ffffffffffffffff811115610f64575f5ffd5b610f7087828801610ede565b909450925050604085013567ffffffffffffffff811115610f8f575f5ffd5b850160c08188031215610fa0575f5ffd5b939692955090935050565b80356001600160a01b0381168114610fc1575f5ffd5b919050565b5f60208284031215610fd6575f5ffd5b610fdf82610fab565b9392505050565b5f5f5f60408486031215610ff8575f5ffd5b83359250602084013567ffffffffffffffff811115611015575f5ffd5b61102186828701610ede565b9497909650939450505050565b5f6020828403121561103e575f5ffd5b5035919050565b805f5b6002811015611067578151845260209384019390910190600101611048565b50505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6110a6818551611045565b5f60208501516110b96040840182611045565b5060c060808301526110ce60c083018561106d565b82810360a08401526110e0818561106d565b9695505050505050565b5f5f604083850312156110fb575f5ffd5b8235915061110b60208401610fab565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112611151575f5ffd5b83018035915067ffffffffffffffff82111561116b575f5ffd5b602001915036819003821315610f1c575f5ffd5b600181811c9082168061119357607f821691505b6020821081036111b157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104f957805f5260205f20601f840160051c810160208510156111dc5750805b601f840160051c820191505b818110156103fa575f81556001016111e8565b67ffffffffffffffff83111561121357611213611128565b61122783611221835461117f565b836111b7565b5f601f841160018114611258575f85156112415750838201355b5f19600387901b1c1916600186901b1783556103fa565b5f83815260208120601f198716915b828110156112875786850135825560209485019460019092019101611267565b50868210156112a3575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b60028110156112d5578135838201556020909101906001016112b8565b5050604082015f5b60028110156112fd578135838201600201556020909101906001016112dd565b505061130c608083018361113c565b61131a8183600486016111fb565b505061132960a083018361113c565b6110678183600586016111fb565b5f5f8335601e1984360301811261134c575f5ffd5b830160208101925035905067ffffffffffffffff81111561136b575f5ffd5b803603821315610f1c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f6113be6080830183611337565b60c060808601526113d360c086018284611379565b9150506113e360a0840184611337565b85830360a08701526110e0838284611379565b63ffffffff85168152836020820152608060408201525f61141a608083018561106d565b828103606084015261142c81856113a1565b979650505050505050565b5f60208284031215611447575f5ffd5b5051919050565b63ffffffff84168152606060208201525f61146c606083018561106d565b82810360408401526110e081856113a156fea26469706673582212201fe097e8426334c314f7a950394f6b0caa0adc48dfbeca6c71d97598f0df174764736f6c634300081c003360a0604052306080525f600155348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131f26101015f395f8181611efb01528181611f24015261207101526131f25ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063c58343ef11610092578063e63b5d5811610062578063e63b5d581461054e578063e6b3ca7114610562578063f7cef80014610581578063f87f0e61146105a0575f5ffd5b8063c58343ef146104c5578063ca15c873146104f1578063cd802c9114610510578063d547741f1461052f575f5ffd5b8063a3246ad3116100cd578063a3246ad31461041e578063ac9650d81461044a578063ad3cb1cc14610476578063b0947289146104a6575f5ffd5b80639010d07c146103b557806391d14854146103ec578063a217fddf1461040b575f5ffd5b80634b96e16611610168578063571d708711610138578063571d70871461033b5780636f421ea91461034f57806375b238fc1461036357806381d12c5814610383575f5ffd5b80634b96e166146102bd5780634f1ef286146102de57806352d1902d146102f157806354fd4d5014610305575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461024b57806336568abe1461026a57806347c0318614610289578063485cc9551461029e575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461271f565b6105bf565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461275a565b6105e9565b005b348015610229575f5ffd5b5061023d610238366004612775565b610648565b6040519081526020016101f4565b348015610256575f5ffd5b5061021c61026536600461278c565b610668565b348015610275575f5ffd5b5061021c61028436600461278c565b61068a565b348015610294575f5ffd5b5061023d60015481565b3480156102a9575f5ffd5b5061021c6102b83660046127ba565b6106c2565b3480156102c8575f5ffd5b506102d1610882565b6040516101f491906127e6565b61021c6102ec366004612892565b610893565b3480156102fc575f5ffd5b5061023d6108b2565b348015610310575f5ffd5b50604080518082019091526005815264302e302e3160d81b60208201525b6040516101f4919061294c565b348015610346575f5ffd5b506102d16108cd565b34801561035a575f5ffd5b506102d16108d9565b34801561036e575f5ffd5b5061023d5f51602061319d5f395f51905f5281565b34801561038e575f5ffd5b506103a261039d366004612775565b6108e5565b6040516101f4979695949392919061295e565b3480156103c0575f5ffd5b506103d46103cf3660046129e3565b610bcc565b6040516001600160a01b0390911681526020016101f4565b3480156103f7575f5ffd5b506101e861040636600461278c565b610bf9565b348015610416575f5ffd5b5061023d5f81565b348015610429575f5ffd5b5061043d610438366004612775565b610c2f565b6040516101f49190612a03565b348015610455575f5ffd5b50610469610464366004612a43565b610c5f565b6040516101f49190612ab2565b348015610481575f5ffd5b5061032e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104b1575f5ffd5b506101e86104c0366004612775565b610d44565b3480156104d0575f5ffd5b506104e46104df366004612775565b610d50565b6040516101f49190612b15565b3480156104fc575f5ffd5b5061023d61050b366004612775565b6110ad565b34801561051b575f5ffd5b506101e861052a366004612775565b6110d1565b34801561053a575f5ffd5b5061021c61054936600461278c565b6110ee565b348015610559575f5ffd5b5061023d61110a565b34801561056d575f5ffd5b506003546103d4906001600160a01b031681565b34801561058c575f5ffd5b5061021c61059b366004612c1c565b611115565b3480156105ab575f5ffd5b5061023d6105ba366004612c93565b611883565b5f6001600160e01b03198216635a05180f60e01b14806105e357506105e382611df6565b92915050565b6105ff5f51602061319d5f395f51905f52611e2a565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f9081525f51602061317d5f395f51905f52602052604090206001015490565b61067182610648565b61067a81611e2a565b6106848383611e37565b50505050565b6001600160a01b03811633146106b35760405163334bd91960e11b815260040160405180910390fd5b6106bd8282611e79565b505050565b5f6106cb611eb2565b805490915060ff600160401b82041615906001600160401b03165f811580156106f15750825b90505f826001600160401b0316600114801561070c5750303b155b90508115801561071a575080155b156107385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845460ff60401b1916600160401b1785555b61076a611eda565b610772611eda565b6107895f51602061319d5f395f51905f5288611e37565b6107ce5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6107d85f88611e37565b6108185760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064016107c5565b600380546001600160a01b0319166001600160a01b038816179055831561087957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b606061088e6006611ee4565b905090565b61089b611ef0565b6108a482611f94565b6108ae8282611faa565b5050565b5f6108bb612066565b505f51602061315d5f395f51905f5290565b606061088e6004611ee4565b606061088e6008611ee4565b60026020525f90815260409020805481906108ff90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90612d2f565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b50505050509080600101805461098b90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b790612d2f565b8015610a025780601f106109d957610100808354040283529160200191610a02565b820191905f5260205f20905b8154815290600101906020018083116109e557829003601f168201915b505050505090806002018054610a1790612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390612d2f565b8015610a8e5780601f10610a6557610100808354040283529160200191610a8e565b820191905f5260205f20905b815481529060010190602001808311610a7157829003601f168201915b505050505090806003018054610aa390612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90612d2f565b8015610b1a5780601f10610af157610100808354040283529160200191610b1a565b820191905f5260205f20905b815481529060010190602001808311610afd57829003601f168201915b505050505090806004018054610b2f90612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612d2f565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b505050600590930154919250506001600160a01b0381169060ff600160a01b9091041687565b5f8281525f51602061313d5f395f51905f52602081905260408220610bf190846120af565b949350505050565b5f9182525f51602061317d5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f51602061313d5f395f51905f526020819052604090912060609190610c5890611ee4565b9392505050565b604080515f815260208101909152606090826001600160401b03811115610c8857610c88612828565b604051908082528060200260200182016040528015610cbb57816020015b6060815260200190600190039081610ca65790505b5091505f5b83811015610d3c57610d1730868684818110610cde57610cde612d8e565b9050602002810190610cf09190612da2565b85604051602001610d0393929190612dfb565b6040516020818303038152906040526120ba565b838281518110610d2957610d29612d8e565b6020908102919091010152600101610cc0565b505092915050565b5f6105e360088361212c565b610d996040518060e0016040528060608152602001606081526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f151581525090565b5f8281526002602052604090819020815160e08101909252805482908290610dc090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dec90612d2f565b8015610e375780601f10610e0e57610100808354040283529160200191610e37565b820191905f5260205f20905b815481529060010190602001808311610e1a57829003601f168201915b50505050508152602001600182018054610e5090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c90612d2f565b8015610ec75780601f10610e9e57610100808354040283529160200191610ec7565b820191905f5260205f20905b815481529060010190602001808311610eaa57829003601f168201915b50505050508152602001600282018054610ee090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c90612d2f565b8015610f575780601f10610f2e57610100808354040283529160200191610f57565b820191905f5260205f20905b815481529060010190602001808311610f3a57829003601f168201915b50505050508152602001600382018054610f7090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c90612d2f565b8015610fe75780601f10610fbe57610100808354040283529160200191610fe7565b820191905f5260205f20905b815481529060010190602001808311610fca57829003601f168201915b5050505050815260200160048201805461100090612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461102c90612d2f565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b5050509183525050600591909101546001600160a01b0381166020830152600160a01b900460ff16151560409091015292915050565b5f8181525f51602061313d5f395f51905f52602081905260408220610c5890612143565b5f6110dd60068361212c565b806105e357506105e360088361212c565b6110f782610648565b61110081611e2a565b6106848383611e79565b5f61088e6006612143565b61111d61214c565b611126856110d1565b6111865760405162461bcd60e51b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201526084016107c5565b5f85815260026020526040808220815160e081019092528054829082906111ac90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612d2f565b80156112235780601f106111fa57610100808354040283529160200191611223565b820191905f5260205f20905b81548152906001019060200180831161120657829003601f168201915b5050505050815260200160018201805461123c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461126890612d2f565b80156112b35780601f1061128a576101008083540402835291602001916112b3565b820191905f5260205f20905b81548152906001019060200180831161129657829003601f168201915b505050505081526020016002820180546112cc90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f890612d2f565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050815260200160038201805461135c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461138890612d2f565b80156113d35780601f106113aa576101008083540402835291602001916113d3565b820191905f5260205f20905b8154815290600101906020018083116113b657829003601f168201915b505050505081526020016004820180546113ec90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461141890612d2f565b80156114635780601f1061143a57610100808354040283529160200191611463565b820191905f5260205f20905b81548152906001019060200180831161144657829003601f168201915b5050509183525050600591909101546001600160a01b038082166020840152600160a01b90910460ff16151560409283015282516003549251630b76139f60e31b8152939450925f9290911690635bb09cf8906114c490859060040161294c565b602060405180830381865afa1580156114df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115039190612e1a565b90506001600160a01b03811661154c5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420736368656d6560901b60448201526064016107c5565b604080840151905163eae1e15b60e01b815282915f916001600160a01b0384169163eae1e15b91611580919060040161294c565b5f60405180830381865afa15801561159a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115c19190810190612e35565b9050816001600160a01b031663f6e548e9828989866001600160a01b031663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611610573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116379190810190612e35565b6040518563ffffffff1660e01b81526004016116569493929190612ed1565b602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190612f15565b6116e15760405162461bcd60e51b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107c5565b5f8560a001516001600160a01b0316635d3be00160e01b8c8c8c8c8c604051602401611711959493929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161174f9190612f6c565b5f604051808303815f865af19150503d805f8114611788576040519150601f19603f3d011682016040523d82523d5f602084013e61178d565b606091505b50505f8c8152600260205260409020600501805460ff60a01b1916600160a01b17905590506117bd60068c612174565b5080611807576117ce60088c61217f565b506040518b81527f3fed05c5d3a79e0e2f23ffd594267f0e29799ad1b4b6a7756138d5247baa4a7b9060200160405180910390a161186d565b6118108b610d44565b156118225761182060088c612174565b505b61182d60048c61217f565b508a7f0a1f5b3782d8f604353407c980dbfe6b55499c5b92cb8c39f089c73f348407e68b8b8b8b6040516118649493929190612f77565b60405180910390a25b50505050505061187c60015f55565b5050505050565b5f6001805f8282546118959190612f9d565b9091555050600354604051632fc9fa3360e01b81526001600160a01b0390911690632fc9fa33906118cc908a908a90600401612fb0565b602060405180830381865afa1580156118e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190b9190612f15565b6119575760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107c5565b61199e600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b6119f85760405162461bcd60e51b815260206004820152602560248201527f43697068657274657874206661696c6564206c656e67746820626f756e647320604482015264636865636b60d81b60648201526084016107c5565b611a3f600161100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b611a975760405162461bcd60e51b8152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e647320636044820152636865636b60e01b60648201526084016107c5565b611ad583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061221a92505050565b15611b2e5760405162461bcd60e51b815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a65604482015262726f7360e81b60648201526084016107c5565b600354604051630b76139f60e31b81525f916001600160a01b031690635bb09cf890611b60908b908b90600401612fb0565b602060405180830381865afa158015611b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9f9190612e1a565b90506001600160a01b038116611bf75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e617475726520736368656d65000000000000000060448201526064016107c5565b6040518060e0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8a01819004810282018101909252888152918101919089908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093855250506040805160208181018352848252808601919091528151808201835284815282860152336060860152608090940183905260015483526002909352502081518190611cf79082613007565b5060208201516001820190611d0c9082613007565b5060408201516002820190611d219082613007565b5060608201516003820190611d369082613007565b5060808201516004820190611d4b9082613007565b5060a08201516005909101805460c0909301511515600160a01b026001600160a81b03199093166001600160a01b0390921691909117919091179055600154611d969060069061217f565b50336001600160a01b03166001547f133b1acfa49920f88bc8c23faeb2ba43b75b3d6c453290a824f3c85e7733df138a8a88888c8c42604051611ddf97969594939291906130c1565b60405180910390a350506001549695505050505050565b5f6001600160e01b03198216637965db0b60e01b14806105e357506301ffc9a760e01b6001600160e01b03198316146105e3565b611e348133612265565b50565b5f5f51602061313d5f395f51905f5281611e51858561229e565b90508015610bf1575f858152602083905260409020611e70908561233f565b50949350505050565b5f5f51602061313d5f395f51905f5281611e938585612353565b90508015610bf1575f858152602083905260409020611e7090856123cc565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105e3565b611ee26123e0565b565b60605f610c5883612405565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f6a5f51602061315d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611ee25760405163703e46dd60e11b815260040160405180910390fd5b611e345f51602061319d5f395f51905f52611e2a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612004575060408051601f3d908101601f1916820190925261200191810190613111565b60015b61202c57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107c5565b5f51602061315d5f395f51905f52811461205c57604051632a87526960e21b8152600481018290526024016107c5565b6106bd838361245e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ee25760405163703e46dd60e11b815260040160405180910390fd5b5f610c5883836124b3565b60605f5f846001600160a01b0316846040516120d69190612f6c565b5f60405180830381855af49150503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b50915091506121238583836124d9565b95945050505050565b5f8181526001830160205260408120541515610c58565b5f6105e3825490565b60025f540361216e57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f610c588383612535565b5f610c58838361260f565b5f818311156122015760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107c5565b8351838110801590612123575091909111159392505050565b5f805b825181101561225c5782818151811061223857612238612d8e565b01602001516001600160f81b0319161561225457505f92915050565b60010161221d565b50600192915050565b61226f8282610bf9565b6108ae5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107c5565b5f5f51602061317d5f395f51905f526122b78484610bf9565b612336575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556122ec3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105e3565b5f9150506105e3565b5f610c58836001600160a01b03841661260f565b5f5f51602061317d5f395f51905f5261236c8484610bf9565b15612336575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105e3565b5f610c58836001600160a01b038416612535565b6123e861265b565b611ee257604051631afcd79f60e31b815260040160405180910390fd5b6060815f0180548060200260200160405190810160405280929190818152602001828054801561245257602002820191905f5260205f20905b81548152602001906001019080831161243e575b50505050509050919050565b61246782612674565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156124ab576106bd82826120ba565b6108ae6126d7565b5f825f0182815481106124c8576124c8612d8e565b905f5260205f200154905092915050565b6060826124ee576124e9826126f6565b610c58565b815115801561250557506001600160a01b0384163b155b1561252e57604051639996b31560e01b81526001600160a01b03851660048201526024016107c5565b5080610c58565b5f8181526001830160205260408120548015612336575f612557600183612d7b565b85549091505f9061256a90600190612d7b565b90508082146125c9575f865f01828154811061258857612588612d8e565b905f5260205f200154905080875f0184815481106125a8576125a8612d8e565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125da576125da613128565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105e3565b5f81815260018301602052604081205461265457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105e3565b505f6105e3565b5f612664611eb2565b54600160401b900460ff16919050565b806001600160a01b03163b5f036126a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107c5565b5f51602061315d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b3415611ee25760405163b398979f60e01b815260040160405180910390fd5b8051156127065780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561272f575f5ffd5b81356001600160e01b031981168114610c58575f5ffd5b6001600160a01b0381168114611e34575f5ffd5b5f6020828403121561276a575f5ffd5b8135610c5881612746565b5f60208284031215612785575f5ffd5b5035919050565b5f5f6040838503121561279d575f5ffd5b8235915060208301356127af81612746565b809150509250929050565b5f5f604083850312156127cb575f5ffd5b82356127d681612746565b915060208301356127af81612746565b602080825282518282018190525f918401906040840190835b8181101561281d5783518352602093840193909201916001016127ff565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561286457612864612828565b604052919050565b5f6001600160401b0382111561288457612884612828565b50601f01601f191660200190565b5f5f604083850312156128a3575f5ffd5b82356128ae81612746565b915060208301356001600160401b038111156128c8575f5ffd5b8301601f810185136128d8575f5ffd5b80356128eb6128e68261286c565b61283c565b8181528660208385010111156128ff575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c58602083018461291e565b60e081525f61297060e083018a61291e565b8281036020840152612982818a61291e565b90508281036040840152612996818961291e565b905082810360608401526129aa818861291e565b905082810360808401526129be818761291e565b6001600160a01b039590951660a0840152505090151560c09091015295945050505050565b5f5f604083850312156129f4575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561281d5783516001600160a01b0316835260209384019390920191600101612a1c565b5f5f60208385031215612a54575f5ffd5b82356001600160401b03811115612a69575f5ffd5b8301601f81018513612a79575f5ffd5b80356001600160401b03811115612a8e575f5ffd5b8560208260051b8401011115612aa2575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612b0957603f19878603018452612af485835161291e565b94506020938401939190910190600101612ad8565b50929695505050505050565b602081525f825160e06020840152612b3161010084018261291e565b90506020840151601f19848303016040850152612b4e828261291e565b9150506040840151601f19848303016060850152612b6c828261291e565b9150506060840151601f19848303016080850152612b8a828261291e565b9150506080840151601f198483030160a0850152612ba8828261291e565b91505060018060a01b0360a08501511660c084015260c0840151612bd060e085018215159052565b509392505050565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b602083019150836020828501011115612c15575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c30575f5ffd5b8535945060208601356001600160401b03811115612c4c575f5ffd5b612c5888828901612bd8565b90955093505060408601356001600160401b03811115612c76575f5ffd5b612c8288828901612bd8565b969995985093965092949392505050565b5f5f5f5f5f5f60608789031215612ca8575f5ffd5b86356001600160401b03811115612cbd575f5ffd5b612cc989828a01612bd8565b90975095505060208701356001600160401b03811115612ce7575f5ffd5b612cf389828a01612bd8565b90955093505060408701356001600160401b03811115612d11575f5ffd5b612d1d89828a01612bd8565b979a9699509497509295939492505050565b600181811c90821680612d4357607f821691505b602082108103612d6157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e3576105e3612d67565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612db7575f5ffd5b8301803591506001600160401b03821115612dd0575f5ffd5b602001915036819003821315612c15575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f8152612e108185612de4565b9695505050505050565b5f60208284031215612e2a575f5ffd5b8151610c5881612746565b5f60208284031215612e45575f5ffd5b81516001600160401b03811115612e5a575f5ffd5b8201601f81018413612e6a575f5ffd5b8051612e786128e68261286c565b818152856020838501011115612e8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612ee3606083018761291e565b8281036020840152612ef6818688612ea9565b90508281036040840152612f0a818561291e565b979650505050505050565b5f60208284031215612f25575f5ffd5b81518015158114610c58575f5ffd5b858152606060208201525f612f4d606083018688612ea9565b8281036040840152612f60818587612ea9565b98975050505050505050565b5f610c588284612de4565b604081525f612f8a604083018688612ea9565b8281036020840152612f0a818587612ea9565b808201808211156105e3576105e3612d67565b602081525f610bf1602083018486612ea9565b601f8211156106bd57805f5260205f20601f840160051c81016020851015612fe85750805b601f840160051c820191505b8181101561187c575f8155600101612ff4565b81516001600160401b0381111561302057613020612828565b6130348161302e8454612d2f565b84612fc3565b6020601f821160018114613066575f831561304f5750848201515b5f19600385901b1c1916600184901b17845561187c565b5f84815260208120601f198516915b828110156130955787850151825560209485019460019092019101613075565b50848210156130b257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608081525f6130d460808301898b612ea9565b82810360208401526130e781888a612ea9565b905082810360408401526130fc818688612ea9565b91505082606083015298975050505050505050565b5f60208284031215613121575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b9bf840b608447c267623fc79124450c15b070c6cf6f643c84d5b29677f23f5964736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c003360a060405230608052348015610013575f5ffd5b5060015f55610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b766100fd5f395f818161377c015281816137a501526138f20152615b765ff3fe608060405260043610610371575f3560e01c80637350f456116101c8578063aa433aff116100fd578063c58343ef1161009d578063cd802c911161006d578063cd802c9114610b18578063d547741f14610b37578063dac83d2914610b56578063dc311dd314610b75575f5ffd5b8063c58343ef14610a8f578063c9bc18c414610abb578063ca15c87314610ada578063cb63179714610af9575f5ffd5b8063b2a7cac5116100d8578063b2a7cac5146109d9578063bd18636b146109f8578063bec4c08c14610a17578063c3f909d414610a36575f5ffd5b8063aa433aff1461095e578063ad3cb1cc1461097d578063aefb212f146109ad575f5ffd5b8063995cb36e11610168578063a21a23e411610143578063a21a23e4146108ec578063a3246ad314610900578063a3907d711461092c578063a608a1e114610940575f5ffd5b8063995cb36e146108835780639d40a6fd146108a2578063a217fddf146108d9575f5ffd5b80638a1f165a116101a35780638a1f165a146107f45780639010d07c1461083257806391d148541461085157806395b55cfc14610870575f5ffd5b80637350f456146107ad57806375b238fc146107c15780637909dc7b146107e1575f5ffd5b806338c27d12116102a957806352d1902d116102495780635d3be001116102195780635d3be0011461071f5780635f7bda9f1461073e57806364d51a2a1461077257806367b276af14610799575f5ffd5b806352d1902d146106a657806354236fb3146106ba57806354fd4d50146106d957806357a8070a14610706575f5ffd5b806345fa43541161028457806345fa435414610636578063485cc955146106555780634b160935146106745780634f1ef28614610693575f5ffd5b806338c27d12146105dd5780633bc32c75146105f157806341af6c8714610617575f5ffd5b8063235296f7116103145780632f2ff15d116102ef5780632f2ff15d1461056e5780633255c4561461058d5780633408e470146105ac57806336568abe146105be575f5ffd5b8063235296f71461051a578063248a9ca31461053b5780632f2770db1461055a575f5ffd5b80630ae095401161034f5780630ae095401461046c578063133c40c71461048d57806318e3dd27146104c45780631e6ba15b146104fb575f5ffd5b806301ffc9a714610375578063062b1d90146103a9578063088070f5146103ca575b5f5ffd5b348015610380575f5ffd5b5061039461038f366004614a28565b610ba4565b60405190151581526020015b60405180910390f35b6103bc6103b7366004614b42565b610bce565b6040519081526020016103a0565b3480156103d5575f5ffd5b50600a546104259063ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b9091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e0016103a0565b348015610477575f5ffd5b5061048b610486366004614bd2565b610f43565b005b348015610498575f5ffd5b506001546104ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104cf575f5ffd5b506008546104e3906001600160601b031681565b6040516001600160601b0390911681526020016103a0565b348015610506575f5ffd5b5061048b610515366004614c00565b610f94565b348015610525575f5ffd5b5061052e610ff3565b6040516103a09190614c49565b348015610546575f5ffd5b506103bc610555366004614c5b565b61107f565b348015610565575f5ffd5b5061048b61109f565b348015610579575f5ffd5b5061048b610588366004614bd2565b6110ee565b348015610598575f5ffd5b506103bc6105a7366004614c72565b611110565b3480156105b7575f5ffd5b50466103bc565b3480156105c9575f5ffd5b5061048b6105d8366004614bd2565b611128565b3480156105e8575f5ffd5b5061052e61115b565b3480156105fc575f5ffd5b506008546104e390600160601b90046001600160601b031681565b348015610622575f5ffd5b50610394610631366004614c5b565b611168565b348015610641575f5ffd5b5061048b610650366004614c9a565b6111fd565b348015610660575f5ffd5b5061048b61066f366004614d22565b6113d9565b34801561067f575f5ffd5b506103bc61068e366004614d4e565b61166c565b61048b6106a1366004614d67565b61167d565b3480156106b1575f5ffd5b506103bc61169c565b3480156106c5575f5ffd5b5061048b6106d4366004614c00565b6116b8565b3480156106e4575f5ffd5b50604080518082019091526005815264302e302e3160d81b602082015261052e565b348015610711575f5ffd5b50600b546103949060ff1681565b34801561072a575f5ffd5b5061048b610739366004614df0565b61172c565b348015610749575f5ffd5b5061075d610758366004614c5b565b6117ff565b6040516103a099989796959493929190614edb565b34801561077d575f5ffd5b50610786606481565b60405161ffff90911681526020016103a0565b3480156107a4575f5ffd5b5061052e611b91565b3480156107b8575f5ffd5b5061052e611b9e565b3480156107cc575f5ffd5b506103bc5f516020615b215f395f51905f5281565b6103bc6107ef366004614f70565b611bab565b3480156107ff575f5ffd5b5061052e60405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b34801561083d575f5ffd5b506104ac61084c366004614fd0565b611c9b565b34801561085c575f5ffd5b5061039461086b366004614bd2565b611cc8565b61048b61087e366004614c5b565b611cfe565b34801561088e575f5ffd5b506009546104e3906001600160601b031681565b3480156108ad575f5ffd5b506005546108c1906001600160401b031681565b6040516001600160401b0390911681526020016103a0565b3480156108e4575f5ffd5b506103bc5f81565b3480156108f7575f5ffd5b506103bc611e09565b34801561090b575f5ffd5b5061091f61091a366004614c5b565b611fb3565b6040516103a09190615033565b348015610937575f5ffd5b5061048b611fdc565b34801561094b575f5ffd5b50600b5461039490610100900460ff1681565b348015610969575f5ffd5b5061048b610978366004614c5b565b612027565b348015610988575f5ffd5b5061052e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156109b8575f5ffd5b506109cc6109c7366004614fd0565b612067565b6040516103a09190615045565b3480156109e4575f5ffd5b5061048b6109f3366004614c5b565b61215c565b348015610a03575f5ffd5b5061048b610a12366004614c00565b612247565b348015610a22575f5ffd5b5061048b610a31366004614bd2565b6122e0565b348015610a41575f5ffd5b50600a5463ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b90910416610425565b348015610a9a575f5ffd5b50610aae610aa9366004614c5b565b6123d4565b6040516103a09190615087565b348015610ac6575f5ffd5b5061052e610ad536600461515e565b6127ef565b348015610ae5575f5ffd5b506103bc610af4366004614c5b565b612c0d565b348015610b04575f5ffd5b5061048b610b13366004614bd2565b612c31565b348015610b23575f5ffd5b50610394610b32366004614c5b565b612e1d565b348015610b42575f5ffd5b5061048b610b51366004614bd2565b612eb1565b348015610b61575f5ffd5b5061048b610b70366004614bd2565b612ecd565b348015610b80575f5ffd5b50610b94610b8f366004614c5b565b612f6a565b6040516103a094939291906151c5565b5f6001600160e01b03198216635a05180f60e01b1480610bc85750610bc882613029565b92915050565b600b545f9060ff16610c275760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610c765760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b83151580610c8357505f34115b610cf55760405162461bcd60e51b815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610c1e565b610cff858561305d565b5f610d5560405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525084604051602001610d4091906152c4565b60405160208183030381529060405286613287565b90506040518061012001604052808681526020013481526020018763ffffffff168152602001826001600160401b0316815260200185815260200184610d9a90615356565b815260408051602081810183525f808352818501929092528251808201845282815283850152336060948501526001600160401b0380871683526010825291839020855181559085015160018201559184015160028301805494860151909216600160201b026001600160601b031990941663ffffffff909116179290921790915560808201516003820190610e309082615467565b5060a0820151805180516004840191908290610e4f908290600261486b565b506020820151610e65906002808401919061486b565b50505060208201516004820190610e7c9082615467565b5060408201516005820190610e919082615467565b50505060c0820151600a820190610ea89082615467565b5060e0820151600b820190610ebd9082615467565b506101009190910151600c90910180546001600160a01b0319166001600160a01b0390921691909117905560405133906001600160401b038316907fa7cf57609b4abed689b408db0b0c3dc6309786b6c07d5efbbd1d5b150e6d2c0690610f2990889088904290615521565b60405180910390a36001600160401b031695945050505050565b81610f4d816132fb565b610f5561334f565b610f5e83611168565b15610f7c57604051631685ecdd60e31b815260040160405180910390fd5b610f868383613377565b610f8f60015f55565b505050565b610faa5f516020615b215f395f51905f526133e7565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f0dae1d002e96c238ebe140ca1799f77093ae09e0bde40f79bb29ed78d09e652d905f90a250565b600c8054611000906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461102c906153f1565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b5f9081525f516020615b015f395f51905f52602052604090206001015490565b6110b55f516020615b215f395f51905f526133e7565b600b805461ff0019166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b6110f78261107f565b611100816133e7565b61110a83836133f1565b50505050565b5f6111218363ffffffff1683613433565b9392505050565b6001600160a01b03811633146111515760405163334bd91960e11b815260040160405180910390fd5b610f8f828261353f565b600d8054611000906153f1565b5f8181526003602052604081206002018054825b818110156111f3575f60025f85848154811061119a5761119a615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208982529092529020546001600160401b03600160481b9091041611156111eb57506001949350505050565b60010161117c565b505f949350505050565b6112135f516020615b215f395f51905f526133e7565b60ff8216609b116112665760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610c1e565b6040805160e08101825263ffffffff89811680835289821660208401819052898316848601819052898416606086018190528985166080870181905260ff8a1660a0880181905295891660c0909701879052600a805467ffffffffffffffff1916909517600160201b909402939093176fffffffffffffffff00000000000000001916600160401b90920263ffffffff60601b191691909117600160601b9091021764ffffffffff60801b1916600160801b90910260ff60a01b191617600160a01b9092029190911763ffffffff60a81b1916600160a81b909202919091179055600b805460ff19166001179055517f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad5906113c890899089908990899089908990899063ffffffff97881681529587166020870152938616604086015291851660608501528416608084015260ff1660a083015290911660c082015260e00190565b60405180910390a150505050505050565b5f6113e2613578565b805490915060ff600160401b82041615906001600160401b03165f811580156114085750825b90505f826001600160401b031660011480156114235750303b155b905081158015611431575080155b1561144f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147957845460ff60401b1916600160401b1785555b6114816135a0565b6114896135a0565b6114a05f516020615b215f395f51905f52886133f1565b6114e05760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b6114ea5f886133f1565b61152a5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b600180546001600160a01b0319166001600160a01b03881617905561154e466135aa565b60405160200161155e9190615581565b604051602081830303815290604052600c908161157b9190615467565b50611585466135aa565b60405160200161159591906155d8565b604051602081830303815290604052600d90816115b29190615467565b506115bc466135aa565b6040516020016115cc9190615614565b604051602081830303815290604052600e90816115e99190615467565b506115f3466135aa565b6040516020016116039190615650565b604051602081830303815290604052600f90816116209190615467565b50831561166357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016113c8565b50505050505050565b5f610bc88263ffffffff163a613433565b611685613771565b61168e82613815565b611698828261382b565b5050565b5f6116a56138e7565b505f516020615ae15f395f51905f525b90565b6116c061334f565b6116d65f516020615b215f395f51905f526133e7565b600854600160601b90046001600160601b03166116f4811515613930565b600880546bffffffffffffffffffffffff60601b1916905561171f826001600160601b03831661394e565b5061172960015f55565b50565b6001546001600160a01b031633146117865760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792044656372797074696f6e53656e6465722063616e2063616c6c00006044820152606401610c1e565b6117f88585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506139be92505050565b5050505050565b60106020525f908152604090208054600182015460028301546003840180549394929363ffffffff831693600160201b9093046001600160401b0316929190611847906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611873906153f1565b80156118be5780601f10611895576101008083540402835291602001916118be565b820191905f5260205f20905b8154815290600101906020018083116118a157829003601f168201915b50506040805160e081019091529394939250506004830190508160608101828160a084018260028282826020028201915b8154815260200190600101908083116118ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311611925575050505050815250508152602001600482018054611955906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906153f1565b80156119cc5780601f106119a3576101008083540402835291602001916119cc565b820191905f5260205f20905b8154815290600101906020018083116119af57829003601f168201915b505050505081526020016005820180546119e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906153f1565b8015611a5c5780601f10611a3357610100808354040283529160200191611a5c565b820191905f5260205f20905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815250509080600a018054611a75906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa1906153f1565b8015611aec5780601f10611ac357610100808354040283529160200191611aec565b820191905f5260205f20905b815481529060010190602001808311611acf57829003601f168201915b50505050509080600b018054611b01906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d906153f1565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050600c90930154919250506001600160a01b031689565b600f8054611000906153f1565b600e8054611000906153f1565b600b545f9060ff16611bff5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610c1e565b600b54610100900460ff1615611c4e5760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b5f611c91865f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250610bce915050565b9695505050505050565b5f8281525f516020615ac15f395f51905f52602081905260408220611cc09084613b6f565b949350505050565b5f9182525f516020615b015f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d0661334f565b5f81815260036020526040902054611d26906001600160a01b0316613b7a565b5f81815260046020526040812080546001600160601b031691349190611d4c83856156a0565b92506101000a8154816001600160601b0302191690836001600160601b031602179055503460085f8282829054906101000a90046001600160601b0316611d9391906156a0565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611de691906156bf565b604080519283526020830191909152015b60405180910390a25061172960015f55565b5f611e1261334f565b6005546001600160401b031633611e2a6001436156d2565b6040516001600160601b0319606093841b81166020830152914060348201523090921b1660548201526001600160c01b031960c083901b16606882015260700160408051601f1981840301815291905280516020909101209150611e8f8160016156e5565b6005805467ffffffffffffffff19166001600160401b03928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516001600160601b039091166001600160a01b031992831617600160601b91909916029790971790558451918201855233825281810183815282860185815289855260038352959093208251815488166001600160a01b0391821617825593516001820180549098169416939093179095559251805192949192611f6292600285019201906148a9565b50611f7291506006905084613ba1565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250506116b560015f55565b5f8181525f516020615ac15f395f51905f52602081905260409091206060919061112190613bac565b611ff25f516020615b215f395f51905f526133e7565b600b805461ff00191690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b61203d5f516020615b215f395f51905f526133e7565b5f818152600360205260409020546001600160a01b031661205d81613b7a565b6116988282613377565b60605f6120746006613bb8565b905080841061209657604051631390f2a160e01b815260040160405180910390fd5b5f6120a184866156bf565b9050818111806120af575083155b6120b957806120bb565b815b90505f6120c886836156d2565b9050806001600160401b038111156120e2576120e2614a67565b60405190808252806020026020018201604052801561210b578160200160208202803683370190505b5093505f5b818110156121525761212d61212588836156bf565b600690613b6f565b85828151811061213f5761213f615556565b6020908102919091010152600101612110565b5050505092915050565b61216461334f565b5f818152600360205260409020546001600160a01b031661218481613b7a565b5f828152600360205260409020600101546001600160a01b031633146121db575f828152600360205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c1e565b5f828152600360209081526040918290208054336001600160a01b03199182168117835560019092018054909116905582516001600160a01b03851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611df7565b61224f61334f565b6122655f516020615b215f395f51905f526133e7565b6009546001600160601b031661227c811515613930565b600980546001600160601b0319169055600880548291905f906122a99084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061171f82826001600160601b031661394e565b816122ea816132fb565b6122f261334f565b6001600160a01b0382165f9081526002602090815260408083208684529091529020805460ff16156123245750610f86565b5f848152600360205260409020600201805460631901612357576040516305a48e0f60e01b815260040160405180910390fd5b8154600160ff1990911681178355815490810182555f82815260209081902090910180546001600160a01b0319166001600160a01b03871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610f8f60015f55565b6123dc6148fc565b5f82815260106020908152604080832081516101208101835281548152600182015493810193909352600281015463ffffffff811692840192909252600160201b9091046001600160401b03166060830152600381018054608084019190612443906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461246f906153f1565b80156124ba5780601f10612491576101008083540402835291602001916124ba565b820191905f5260205f20905b81548152906001019060200180831161249d57829003601f168201915b50505091835250506040805160e08101909152602090910190600483018160608101828160a084018260028282826020028201915b8154815260200190600101908083116124ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612525575050505050815250508152602001600482018054612555906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612581906153f1565b80156125cc5780601f106125a3576101008083540402835291602001916125cc565b820191905f5260205f20905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016005820180546125e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906153f1565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b5050505050815250508152602001600a82018054612679906153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546126a5906153f1565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600b82018054612709906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612735906153f1565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b5050509183525050600c91909101546001600160a01b031660209091015260608101519091506001600160401b0316610bc85760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c995c5d595cdd1251607a1b6044820152606401610c1e565b60606127fe6080850185615723565b9050610100036128505760405162461bcd60e51b815260206004820152601d60248201527f696e76616c69642064656372797074696f6e206b6579206c656e6774680000006044820152606401610c1e565b61010061286060a0860186615723565b9050106128af5760405162461bcd60e51b815260206004820152601d60248201527f6d657373616765206f6620756e737570706f72746564206c656e6774680000006044820152606401610c1e565b5f6128bd6080860186615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b838110156129515784848281811061290d5761290d615556565b9050013560f81c60f81b82828151811061292957612929615556565b0160200180516001600160f81b0319908116909218909116905f82901a9053506001016128f3565b505f61296060a0870187615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250600f80549596509094612a3e94509092506129aa91506153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906153f1565b8015612a215780601f106129f857610100808354040283529160200191612a21565b820191905f5260205f20905b815481529060010190602001808311612a0457829003601f168201915b505050505084898060a00190612a379190615723565b9050613bc1565b90505f5b612a4f60a0890189615723565b9050811015612aaf57818181518110612a6a57612a6a615556565b602001015160f81c60f81b838281518110612a8757612a87615556565b0160200180516001600160f81b0319908116909218909116905f82901a905350600101612a42565b505f612b64600e8054612ac1906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612aed906153f1565b8015612b385780601f10612b0f57610100808354040283529160200191612b38565b820191905f5260205f20905b815481529060010190602001808311612b1b57829003601f168201915b50505050508585604051602001612b50929190615765565b604051602081830303815290604052613d56565b90505f612b7082613db5565b90505f80612b8c83612b87368e90038e018e615779565b613e47565b909250905060018215158215151414612bfe5760405162461bcd60e51b815260206004820152602e60248201527f696e76616c69642064656372797074696f6e206b6579202f206369706865727460448201526d195e1d081c9959da5cdd195c995960921b6064820152608401610c1e565b50939998505050505050505050565b5f8181525f516020615ac15f395f51905f5260208190526040822061112190613bb8565b81612c3b816132fb565b612c4361334f565b612c4c83611168565b15612c6a57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b0382165f90815260026020908152604080832086845290915290205460ff16612cbf576040516379bfd40160e01b8152600481018490526001600160a01b0383166024820152604401610c1e565b5f838152600360205260408120600201805490915b81811015612dc257846001600160a01b0316838281548110612cf857612cf8615556565b5f918252602090912001546001600160a01b031603612dba5782612d1d6001846156d2565b81548110612d2d57612d2d615556565b905f5260205f20015f9054906101000a90046001600160a01b0316838281548110612d5a57612d5a615556565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082805480612d9557612d95615793565b5f8281526020902081015f1990810180546001600160a01b0319169055019055612dc2565b600101612cd4565b506001600160a01b0384165f818152600260209081526040808320898452825291829020805460ff19169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a791016123c1565b5f5f612e28836123d4565b606001516001600160401b03169050805f03612e4657505f92915050565b60015460405163cd802c9160e01b8152600481018390526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015612e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906157a7565b612eba8261107f565b612ec3816133e7565b61110a838361353f565b81612ed7816132fb565b612edf61334f565b5f83815260036020526040902060018101546001600160a01b03848116911614612f60576001810180546001600160a01b0319166001600160a01b03851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610f8f60015f55565b5f8181526003602052604081205481906001600160a01b03166060612f8e82613b7a565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526001600160601b03851694600160601b90046001600160401b031693879391839183018282801561301357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612ff5575b5050505050905093509350935093509193509193565b5f6001600160e01b03198216637965db0b60e01b1480610bc857506301ffc9a760e01b6001600160e01b0319831614610bc8565b600a5463ffffffff90811690831611156130b95760405162461bcd60e51b815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610c1e565b8015613236575f818152600360205260409020546001600160a01b03166130df81613b7a565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff811615158083526001600160401b036101008304811695840195909552600160481b909104909316918101919091529061318c5760405162461bcd60e51b815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c656044820152603960f91b6064820152608401610c1e565b80602001805161319b906157c6565b6001600160401b031690526040810180516131b5906157c6565b6001600160401b039081169091525f8581526020938452604090819020835181549585015192909401518316600160481b0270ffffffffffffffff00000000000000000019929093166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921791909116179055505050565b5f6132478363ffffffff163a613433565b905080341015610f8f5760405162461bcd60e51b815260206004820152600b60248201526a46656520746f6f206c6f7760a81b6044820152606401610c1e565b60015460405163f87f0e6160e01b81525f916001600160a01b03169063f87f0e61906132bb908790879087906004016157f0565b6020604051808303815f875af11580156132d7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc09190615828565b5f818152600360205260409020546001600160a01b031661331b81613b7a565b336001600160a01b0382161461169857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c1e565b60025f540361337157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f61338183613fb6565b905061339682826001600160601b031661394e565b604080516001600160a01b03841681526001600160601b038316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b6117298133614107565b5f5f516020615ac15f395f51905f528161340b8585614140565b90508015611cc0575f85815260208390526040902061342a90856141e1565b50949350505050565b6040805160e081018252600a5463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b81048316608083015260ff600160a01b82041660a0830152600160a81b900490911660c08201525f9081836134ba57816060015163ffffffff166134bc565b835b90505f6134c8866141f5565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6134f45f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161352f5761352f61583f565b04019a9950505050505050505050565b5f5f516020615ac15f395f51905f5281613559858561420c565b90508015611cc0575f85815260208390526040902061342a9085614285565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bc8565b6135a8614299565b565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f8151811061360a5761360a615556565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061363857613638615556565b60200101906001600160f81b03191690815f1a9053505f5b60208110156137695782600486836020811061366e5761366e615556565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061369457613694615556565b01602001516001600160f81b031916826136af836002615853565b6136ba9060026156bf565b815181106136ca576136ca615556565b60200101906001600160f81b03191690815f1a905350828582602081106136f3576136f3615556565b825191901a600f1690811061370a5761370a615556565b01602001516001600160f81b03191682613725836002615853565b6137309060026156bf565b61373b9060016156bf565b8151811061374b5761374b615556565b60200101906001600160f81b03191690815f1a905350600101613650565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806137f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166137eb5f516020615ae15f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156135a85760405163703e46dd60e11b815260040160405180910390fd5b6117295f516020615b215f395f51905f526133e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613885575060408051601f3d908101601f1916820190925261388291810190615828565b60015b6138ad57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c1e565b5f516020615ae15f395f51905f5281146138dd57604051632a87526960e21b815260048101829052602401610c1e565b610f8f83836142be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135a85760405163703e46dd60e11b815260040160405180910390fd5b8061172957604051631e9acf1760e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613997576040519150601f19603f3d011682016040523d82523d5f602084013e61399c565b606091505b5050905080610f8f5760405163950b247960e01b815260040160405180910390fd5b5f5a5f858152601060205260408120600281015492935091600160201b90046001600160401b03169003613a345760405162461bcd60e51b815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610c1e565b5f635d94180260e01b8686604051602401613a5092919061586a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600c8301546002840154600a549293505f92613ac09285926001600160a01b039091169163ffffffff91821691600160a81b90910481169061431316565b5090508015613b3157600b8301613ad78782615467565b50600a8301613ae68682615467565b50867f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f7846003018560040186600b01604051613b2493929190615923565b60405180910390a2613b65565b6040518781527f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d9060200160405180910390a15b611663878561434a565b5f6111218383614439565b6001600160a01b03811661172957604051630fb532db60e11b815260040160405180910390fd5b5f611121838361445f565b60605f611121836144ab565b5f610bc8825490565b825160609060ff811115613bea57846040516313727cdd60e11b8152600401610c1e9190614c49565b60408051608880825260c082019092525f916020820181803683370190505090505f81865f875f8b88604051602001613c299796959493929190615998565b60405160208183030381529060405290505f818051906020012090505f8160018a87604051602001613c5e9493929190615a02565b60408051601f19818403018152919052805160208201209091505f60ff89166001600160401b03811115613c9457613c94614a67565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f6005613cd2601f60ff8d166156bf565b901c905060015b81811015613d3857858418613cef8260016156bf565b8e8b604051602001613d049493929190615a02565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101613cd9565b505f1901602090810282010191909152955050505050509392505050565b5f5f613d6484846030613bc1565b601881015160308201519192506001600160c01b0391821691165f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478381600160c01b850908979650505050505050565b604080518082019091525f8082526020820152613dd0614957565b6001815260026020820152604081018390525f60608360808460076107d05a03fa905080613e405760405162461bcd60e51b815260206004820152601f60248201527f4731207363616c6172206d756c7469706c69636174696f6e206661696c6564006044820152606401610c1e565b5050919050565b5f5f5f604051806101800160405280865f01518152602001866020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020016001815260200160028152602001855f0151600160028110613f2557613f25615556565b60200201518152602001855f01515f60028110613f4457613f44615556565b602002015181526020018560200151600160028110613f6557613f65615556565b6020020151815260200185602001515f60028110613f8557613f85615556565b602002015190529050613f96614975565b6020816101808460086107d05a03fa9051151593509150505b9250929050565b5f8181526003602090815260408083206004909252822054600290910180546001600160601b03909216929091905b818110156140505760025f84838154811061400257614002615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208882529092529020805470ffffffffffffffffffffffffffffffffff19169055600101613fe5565b505f84815260036020526040812080546001600160a01b031990811682556001820180549091169055906140876002830182614993565b50505f84815260046020526040902080546001600160a01b03191690556140af600685614504565b506001600160601b03831615613e4057600880548491905f906140dc9084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050919050565b6141118282611cc8565b6116985760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c1e565b5f5f516020615b015f395f51905f526141598484611cc8565b6141d8575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561418e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610bc8565b5f915050610bc8565b5f611121836001600160a01b03841661445f565b5f614201603f83615a45565b610bc8906001615a78565b5f5f516020615b015f395f51905f526142258484611cc8565b156141d8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610bc8565b5f611121836001600160a01b03841661450b565b6142a16145e5565b6135a857604051631afcd79f60e31b815260040160405180910390fd5b6142c7826145fe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561430b57610f8f8282614661565b6116986146d3565b5f5f5a83811061434057839003604081048103851015614340575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614354836123d4565b8051909150156144285780515f9081526004602052604090208054600c9061438b90600160601b90046001600160401b03166157c6565b82546001600160401b0391821661010093840a90810290830219909116179092558201516001600160a01b03165f908152600260209081526040808320855184529091529020805490916009916143ea91600160481b90910416615a94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505f614419833a6146f2565b905061110a81835f0151614749565b610f8f8160200151825f0151614749565b5f825f01828154811061444e5761444e615556565b905f5260205f200154905092915050565b5f8181526001830160205260408120546144a457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b6060815f018054806020026020016040519081016040528092919081815260200182805480156144f857602002820191905f5260205f20905b8154815260200190600101908083116144e4575b50505050509050919050565b5f61112183835b5f81815260018301602052604081205480156141d8575f61452d6001836156d2565b85549091505f90614540906001906156d2565b905080821461459f575f865f01828154811061455e5761455e615556565b905f5260205f200154905080875f01848154811061457e5761457e615556565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145b0576145b0615793565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bc8565b5f6145ee613578565b54600160401b900460ff16919050565b806001600160a01b03163b5f0361463357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c1e565b5f516020615ae15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161467d9190615ab5565b5f60405180830381855af49150503d805f81146146b5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ba565b606091505b50915091506146ca8583836147e6565b95945050505050565b34156135a85760405163b398979f60e01b815260040160405180910390fd5b5f5f5a600a54600160201b900463ffffffff1685010390508281025f600a5460649190920160ff600160a01b8404168201020464e8d4a5100063ffffffff600160401b909304929092169190910201949350505050565b80156147af575f81815260046020526040902080546001600160601b0390811690614778908516821015613930565b81546001600160601b039185900382166001600160601b031991821617909255600980548083168601909216919092161790555050565b600880546001600160601b03600160601b80830482168601909116026bffffffffffffffffffffffff60601b199091161790555050565b6060826147fb576147f682614842565b611121565b815115801561481257506001600160a01b0384163b155b1561483b57604051639996b31560e01b81526001600160a01b0385166004820152602401610c1e565b5080611121565b8051156148525780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215614899579160200282015b8281111561489957825182559160200191906001019061487e565b506148a59291506149aa565b5090565b828054828255905f5260205f20908101928215614899579160200282015b8281111561489957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906148c7565b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f6001600160401b031681526020016060815260200161493e6149be565b8152606060208201819052604082018190525f91015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5080545f8255905f5260205f209081019061172991905b5b808211156148a5575f81556001016149ab565b60405180606001604052806149d16149e5565b815260200160608152602001606081525090565b60405180604001604052806149f8614a0a565b8152602001614a05614a0a565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215614a38575f5ffd5b81356001600160e01b031981168114611121575f5ffd5b803563ffffffff81168114614a62575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614a9d57614a9d614a67565b60405290565b5f82601f830112614ab2575f5ffd5b81356001600160401b03811115614acb57614acb614a67565b604051601f8201601f19908116603f011681016001600160401b0381118282101715614af957614af9614a67565b604052818152838201602001851015614b10575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60c08284031215614b3c575f5ffd5b50919050565b5f5f5f5f60808587031215614b55575f5ffd5b614b5e85614a4f565b93506020850135925060408501356001600160401b03811115614b7f575f5ffd5b614b8b87828801614aa3565b92505060608501356001600160401b03811115614ba6575f5ffd5b614bb287828801614b2c565b91505092959194509250565b6001600160a01b0381168114611729575f5ffd5b5f5f60408385031215614be3575f5ffd5b823591506020830135614bf581614bbe565b809150509250929050565b5f60208284031215614c10575f5ffd5b813561112181614bbe565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111216020830184614c1b565b5f60208284031215614c6b575f5ffd5b5035919050565b5f5f60408385031215614c83575f5ffd5b614c8c83614a4f565b946020939093013593505050565b5f5f5f5f5f5f5f60e0888a031215614cb0575f5ffd5b614cb988614a4f565b9650614cc760208901614a4f565b9550614cd560408901614a4f565b9450614ce360608901614a4f565b9350614cf160808901614a4f565b925060a088013560ff81168114614d06575f5ffd5b9150614d1460c08901614a4f565b905092959891949750929550565b5f5f60408385031215614d33575f5ffd5b8235614d3e81614bbe565b91506020830135614bf581614bbe565b5f60208284031215614d5e575f5ffd5b61112182614a4f565b5f5f60408385031215614d78575f5ffd5b8235614d8381614bbe565b915060208301356001600160401b03811115614d9d575f5ffd5b614da985828601614aa3565b9150509250929050565b5f5f83601f840112614dc3575f5ffd5b5081356001600160401b03811115614dd9575f5ffd5b602083019150836020828501011115613faf575f5ffd5b5f5f5f5f5f60608688031215614e04575f5ffd5b8535945060208601356001600160401b03811115614e20575f5ffd5b614e2c88828901614db3565b90955093505060408601356001600160401b03811115614e4a575f5ffd5b614e5688828901614db3565b969995985093965092949392505050565b805f5b600281101561110a578151845260209384019390910190600101614e6a565b5f8151614e97848251614e67565b60200151614ea86040850182614e67565b50602082015160c06080850152614ec260c0850182614c1b565b9050604083015184820360a08601526146ca8282614c1b565b89815288602082015263ffffffff881660408201526001600160401b038716606082015261012060808201525f614f16610120830188614c1b565b82810360a0840152614f288188614e89565b905082810360c0840152614f3c8187614c1b565b905082810360e0840152614f508186614c1b565b91505060018060a01b0383166101008301529a9950505050505050505050565b5f5f5f5f60608587031215614f83575f5ffd5b614f8c85614a4f565b935060208501356001600160401b03811115614fa6575f5ffd5b614fb287828801614db3565b90945092505060408501356001600160401b03811115614ba6575f5ffd5b5f5f60408385031215614fe1575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150295781516001600160a01b0316865260209586019590910190600101615002565b5093949350505050565b602081525f6111216020830184614ff0565b602080825282518282018190525f918401906040840190835b8181101561507c57835183526020938401939092019160010161505e565b509095945050505050565b6020815281516020820152602082015160408201525f60408301516150b4606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015161012060a08401526150e5610140840182614c1b565b905060a0840151601f198483030160c08501526151028282614e89565b91505060c0840151601f198483030160e08501526151208282614c1b565b91505060e0840151601f198483030161010085015261513f8282614c1b565b9150506101008401516137696101208501826001600160a01b03169052565b5f5f5f60408486031215615170575f5ffd5b83356001600160401b03811115615185575f5ffd5b61519186828701614b2c565b93505060208401356001600160401b038111156151ac575f5ffd5b6151b886828701614db3565b9497909650939450505050565b6001600160601b03851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190525f90611c9190830184614ff0565b5f5f8335601e1984360301811261521b575f5ffd5b83016020810192503590506001600160401b03811115615239575f5ffd5b803603821315613faf575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61528c6080830183615206565b60c060808601526152a160c086018284615247565b9150506152b160a0840184615206565b85830360a0870152611c91838284615247565b602081525f611121602083018461526f565b5f82601f8301126152e5575f5ffd5b6152ed614a7b565b8060408401858111156152fe575f5ffd5b845b8181101561507c578035845260209384019301615300565b5f60808284031215615328575f5ffd5b615330614a7b565b905061533c83836152d6565b815261534b83604084016152d6565b602082015292915050565b5f60c08236031215615366575f5ffd5b604051606081016001600160401b038111828210171561538857615388614a67565b6040526153953684615318565b815260808301356001600160401b038111156153af575f5ffd5b6153bb36828601614aa3565b60208301525060a08301356001600160401b038111156153d9575f5ffd5b6153e536828601614aa3565b60408301525092915050565b600181811c9082168061540557607f821691505b602082108103614b3c57634e487b7160e01b5f52602260045260245ffd5b601f821115610f8f57805f5260205f20601f840160051c810160208510156154485750805b601f840160051c820191505b818110156117f8575f8155600101615454565b81516001600160401b0381111561548057615480614a67565b6154948161548e84546153f1565b84615423565b6020601f8211600181146154c6575f83156154af5750848201515b5f19600385901b1c1916600184901b1784556117f8565b5f84815260208120601f198516915b828110156154f557878501518255602094850194600190920191016154d5565b508482101561551257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6155336060830186614c1b565b8281036020840152615545818661526f565b915050826040830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f6155c7602c83018461556a565b605f60f81b81526001019392505050565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261325f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261335f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261345f60f01b60208201525f6155c7602283018461556a565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b038181168382160190811115610bc857610bc861568c565b80820180821115610bc857610bc861568c565b81810381811115610bc857610bc861568c565b6001600160401b038181168382160190811115610bc857610bc861568c565b6001600160601b038281168282160390811115610bc857610bc861568c565b5f5f8335601e19843603018112615738575f5ffd5b8301803591506001600160401b03821115615751575f5ffd5b602001915036819003821315613faf575f5ffd5b5f611cc0615773838661556a565b8461556a565b5f60808284031215615789575f5ffd5b6111218383615318565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156157b7575f5ffd5b81518015158114611121575f5ffd5b5f6001600160401b0382166001600160401b0381036157e7576157e761568c565b60010192915050565b606081525f6158026060830186614c1b565b82810360208401526158148186614c1b565b90508281036040840152611c918185614c1b565b5f60208284031215615838575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b8082028115828204841417610bc857610bc861568c565b828152604060208201525f611cc06040830184614c1b565b5f815461588e816153f1565b8085526001821680156158a857600181146158c4576158f8565b60ff1983166020870152602082151560051b87010193506158f8565b845f5260205f205f5b838110156158ef5781546020828a0101526001820191506020810190506158cd565b87016020019450505b50505092915050565b805f5b600281101561110a578154845260209093019260019182019101615904565b606081525f6159356060830186615882565b82810360208401526159478186615901565b6159576040820160028701615901565b60c0608082015261596e60c0820160048701615882565b81810360a08301526159838160058801615882565b9150508281036040840152611c918185615882565b5f6159ac6159a6838b61556a565b8961556a565b6001600160f81b031960f889811b8216835288811b8216600184015287901b1660028201526159de600382018661556a565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f615a27602183018561556a565b60f89390931b6001600160f81b031916835250506001019392505050565b5f63ffffffff831680615a6657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610bc857610bc861568c565b5f6001600160401b03821680615aac57615aac61568c565b5f190192915050565b5f611121828461556a56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220380d1acfd2c11b36009bf449c1b9c1894bfe02a4fb8d8c35e32e1b449239fa8364736f6c634300081c0033608060405234801561000f575f5ffd5b506040516109e03803806109e083398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6107ff806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80635bb09cf81161006e5780635bb09cf81461013d57806375b238fc1461016857806391d148541461018f578063a217fddf146101a2578063bab867da146101a9578063d547741f146101bc575f5ffd5b806301ffc9a7146100aa578063248a9ca3146100d25780632f2ff15d146101025780632fc9fa331461011757806336568abe1461012a575b5f5ffd5b6100bd6100b836600461065c565b6101cf565b60405190151581526020015b60405180910390f35b6100f46100e036600461068a565b5f9081526020819052604090206001015490565b6040519081526020016100c9565b6101156101103660046106bc565b610205565b005b6100bd61012536600461072b565b61022f565b6101156101383660046106bc565b61026f565b61015061014b36600461072b565b6102a7565b6040516001600160a01b0390911681526020016100c9565b6100f47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100bd61019d3660046106bc565b6102db565b6100f45f81565b6101156101b736600461076a565b610303565b6101156101ca3660046106bc565b6104f6565b5f6001600160e01b03198216637965db0b60e01b14806101ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461021f8161051a565b6102298383610527565b50505050565b5f5f6001600160a01b03166001848460405161024c9291906107ba565b908152604051908190036020019020546001600160a01b03161415905092915050565b6001600160a01b03811633146102985760405163334bd91960e11b815260040160405180910390fd5b6102a282826105b6565b505050565b5f600183836040516102ba9291906107ba565b908152604051908190036020019020546001600160a01b0316905092915050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561051a565b6001600160a01b0381161580159061034d57505f816001600160a01b03163b115b6103b15760405162461bcd60e51b815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604482015269656d654164647265737360b01b60648201526084015b60405180910390fd5b5f6001600160a01b0316600184846040516103cd9291906107ba565b908152604051908190036020019020546001600160a01b03161461043d5760405162461bcd60e51b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201526084016103a8565b80600184846040516104509291906107ba565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b03199093169290921790915560019061049090859085906107ba565b908152604051908190036020018120546001600160a01b0316906104b790859085906107ba565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105108161051a565b61022983836105b6565b610524813361061f565b50565b5f61053283836102db565b6105af575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ff565b505f6101ff565b5f6105c183836102db565b156105af575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ff565b61062982826102db565b6106585760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016103a8565b5050565b5f6020828403121561066c575f5ffd5b81356001600160e01b031981168114610683575f5ffd5b9392505050565b5f6020828403121561069a575f5ffd5b5035919050565b80356001600160a01b03811681146106b7575f5ffd5b919050565b5f5f604083850312156106cd575f5ffd5b823591506106dd602084016106a1565b90509250929050565b5f5f83601f8401126106f6575f5ffd5b50813567ffffffffffffffff81111561070d575f5ffd5b602083019150836020828501011115610724575f5ffd5b9250929050565b5f5f6020838503121561073c575f5ffd5b823567ffffffffffffffff811115610752575f5ffd5b61075e858286016106e6565b90969095509350505050565b5f5f5f6040848603121561077c575f5ffd5b833567ffffffffffffffff811115610792575f5ffd5b61079e868287016106e6565b90945092506107b19050602085016106a1565b90509250925092565b818382375f910190815291905056fea2646970667358221220e5144df0d342a74d5f0128ec7e3d4f61ebce0b76c178b4747512db764315a6cd64736f6c634300081c00335f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b506040516127e73803806127e78339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104b3565b5050506105c5565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661056d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461056d565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61056d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061056d565b01602001516001600160f81b0319168261020b836002610595565b6102169060026105b2565b815181106102265761022661056d565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61056d565b825191901a600f169081106102665761026661056d565b01602001516001600160f81b03191682610281836002610595565b61028c9060026105b2565b6102979060016105b2565b815181106102a7576102a761056d565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f82518060208501602c85015e605f60f81b602c939091019283015250602d01919050565b600181811c9082168061044357607f821691505b60208210810361046157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104ae57805f5260205f20601f840160051c8101602085101561048c5750805b601f840160051c820191505b818110156104ab575f8155600101610498565b50505b505050565b81516001600160401b038111156104cc576104cc61031f565b6104e0816104da845461042f565b84610467565b6020601f821160018114610512575f83156104fb5750848201515b5f19600385901b1c1916600184901b1784556104ab565b5f84815260208120601f198516915b828110156105415787850151825560209485019460019092019101610521565b508482101561055e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105ac576105ac610581565b92915050565b808201808211156105ac576105ac610581565b612215806105d25f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee14610125578063eae1e15b1461012d578063f6e548e914610140575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b610091610163565b60405161009f929190611e88565b60405180910390f35b6100bb6100b6366004611ee8565b6101dc565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102bc565b60405161009f9190611f55565b6100e660405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b6100e6610348565b6100e661013b366004611ee8565b6103c7565b61015361014e366004611f67565b610401565b604051901515815260200161009f565b61016b611de1565b610173611de1565b60408051808201918290525f91600291908390839082845b81548152602001906001019080831161018b575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101ba5750505050509050915091509091565b5f5f5f6102a6600480546101ef90612006565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90612006565b80156102665780601f1061023d57610100808354040283529160200191610266565b820191905f5260205f20905b81548152906001019060200180831161024957829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e192505050565b80516020909101519093509150505b9250929050565b600480546102c990612006565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590612006565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081565b60408051608081018083526060926103c292915f91839190820190839060029082845b81548152602001906001019080831161036b57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103a1575050505050815250506105ad565b905090565b60605f5f6103d585856101dc565b915091506103f6604051806040016040528084815260200183815250610609565b925050505b92915050565b5f5f61044188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f61048287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f6104c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c592505050565b90505f6104d1838386610766565b509b9a5050505050505050505050565b604080518082019091525f80825260208201525f6104ff84846108d9565b90505f61051282825b602002015161098e565b90505f610520836001610508565b905061052a611dff565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105855781604051630251c7e160e31b815260040161057c9190612052565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106a65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161057c565b5060208181015160409283015183518085019094529083529082015290565b6106cd611e1d565b815160801461071e5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161057c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108495761084961203e565b60200201518152602001865f01515f600281106108685761086861203e565b6020020151815260200186602001516001600281106108895761088961203e565b6020020151815260200186602001515f600281106108a9576108a961203e565b6020020151905290506108ba611e42565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108e1611de1565b5f6108ec8484610c6f565b90505f5f5f5f601885016001600160c01b0381511693506030860190506001600160c01b0381511694505f5160206121a05f395f51905f52855f5160206121a05f395f51905f52600160c01b870908604887015160608801516001600160c01b03908116975016945092505f5160206121a05f395f51905f5290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b610996611de1565b5f5160206121a05f395f51905f5282106109c65760405163d53e941560e01b81526004810183905260240161057c565b5f5f5160206121a05f395f51905f5260045f5160206121a05f395f51905f528586090990505f5f5160206121a05f395f51905f528260010890505f5160206121a05f395f51905f52610a25835f5160206121a05f395f51905f52612096565b60010891505f610a445f5160206121a05f395f51905f52838509610dc6565b90505f5f5160206121a05f395f51905f5278016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa5f5160206121a05f395f51905f52845f5160206121a05f395f51905f52888b09090990505f5f5160206121a05f395f51905f52610ab9835f5160206121a05f395f51905f52612096565b5f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f52835f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f5286870990505f5f5160206121a05f395f51905f5286830990505f5f5160206121a05f395f51905f52805f5160206121a05f395f51905f528485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610b6e610b6988610dd0565b610e09565b5f0b600103610bbe57868c52610b8387610dd0565b9050610b8e81610e6e565b60208e0191909152915081610bb95760405163396ec77160e01b81526004810182905260240161057c565b610c21565b610bca610b6987610dd0565b5f0b600103610bdf57858c52610b8386610dd0565b828c52610beb83610dd0565b9050610bf681610e6e565b60208e0191909152915081610c215760405163396ec77160e01b81526004810182905260240161057c565b60208c0151610c2f90610e95565b610c388e610e95565b14610c5f5760208c0151610c59905f5160206121a05f395f51905f52612096565b60208d01525b5050505050505050505050919050565b815160609060ff811115610c9857836040516313727cdd60e11b815260040161057c9190611f55565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610cd897969594939291906120c0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610d0d949392919061212a565b60408051808303601f1901815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610da957858418610d6082600161216d565b8d8b604051602001610d75949392919061212a565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101610d4a565b505f19016020908102820101919091529550505050505092915050565b5f6103fb82610ea1565b5f5f5160206121a05f395f51905f5260035f5160206121a05f395f51905f52845f5160206121a05f395f51905f52868709090892915050565b5f5f610e14836115e6565b9050610e2e60015f5160206121a05f395f51905f52612096565b8103610e3d57505f1992915050565b8015801590610e4d575080600114155b156103fb5760405163396ec77160e01b81526004810184905260240161057c565b5f5f610e79836116ae565b9150825f5160206121a05f395f51905f52838409149050915091565b5f6103fb600283612180565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690525f5160206121c05f395f51905f5260a08401525f5160206121a05f395f51905f5260c0808501919091529293505f92839160055afa90505f519250806116a75760405163c6daf7ab60e01b8152600481018590525f5160206121c05f395f51905f5260248201525f5160206121a05f395f51905f52604482015260640161057c565b5050919050565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e30611de1565b8152602001611e3d611de1565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b6002811015611e82578151845260209384019390910190600101611e63565b50505050565b60808101611e968285611e60565b611ea36040830184611e60565b9392505050565b5f5f83601f840112611eba575f5ffd5b50813567ffffffffffffffff811115611ed1575f5ffd5b6020830191508360208285010111156102b5575f5ffd5b5f5f60208385031215611ef9575f5ffd5b823567ffffffffffffffff811115611f0f575f5ffd5b611f1b85828601611eaa565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ea36020830184611f27565b5f5f5f5f5f5f60608789031215611f7c575f5ffd5b863567ffffffffffffffff811115611f92575f5ffd5b611f9e89828a01611eaa565b909750955050602087013567ffffffffffffffff811115611fbd575f5ffd5b611fc989828a01611eaa565b909550935050604087013567ffffffffffffffff811115611fe8575f5ffd5b611ff489828a01611eaa565b979a9699509497509295939492505050565b600181811c9082168061201a57607f821691505b60208210810361203857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6080810181835f5b600481101561207957815183526020928301929091019060010161205a565b50505092915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156103fb576103fb612082565b5f81518060208401855e5f93019283525090919050565b5f6120d46120ce838b6120a9565b896120a9565b6001600160f81b031960f889811b8216835288811b8216600184015287901b16600282015261210660038201866120a9565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f61214f60218301856120a9565b60f89390931b6001600160f81b031916835250506001019392505050565b808201808211156103fb576103fb612082565b5f8261219a57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3a26469706673582212205caa4b51dcb44fb7ffd37136b7d8f1021f0fe438a1383457afcecdb09fc9411664736f6c634300081c003373756249642073686f756c64206265206368617267656420666f72206f766572686561645061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742073686f756c64206e6f74206661696c2064756520746f206c61636b206f662066756e647341646d696e2062616c616e63652073686f756c6420626520686967686572206166746572207769746864726177696e6720666565730000000000000000000000007109709ecfa91a80626ff3989d68f67f5b1dd12dfb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e26576520646f6e27742065787065637420616e792066756e64656420737562736372697074696f6e73206174207468697320706f696e74736368656d65416464722073686f756c64206e6f74206861766520616e7920636f64654e61746976652062616c616e636520746f2077697468647261772073686f756c642062652067726561746572207468616e206f6c6420737562736372697074696f6e2062616c616e6365506c61696e746578742076616c756573206d69736d617463682061667465722064656372797074696f6efb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e205061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742073686f756c64206e6f74206661696c53746f7265642063616c6c6261636b4761734c696d697420646f6573206e6f74206d617463682063616c6c6261634761734c696d69742066726f6d2075736572207265717565737473756249642073686f756c64206e6f742062652063686172676564206174207468697320706f696e74537562736372697074696f6e206e61746976652062616c616e63652061667465722072657175657374203d20537562736372697074696f6e2066756e64696e6720726571756573742069642073686f756c64206e6f74206265207a65726f41646d696e2062616c616e63652073686f756c64206e6f7420696e637265617365206166746572207a65726f2066656520636f6c6c656374696f6e496e636f7272656374207265717565737420636f756e742c2069742073686f756c64206265207a65726f537562736372697074696f6e20666565206368617267656420666f722072657175657374203d20547820546f74616c20636f73742028776569293a00000000000000000000000006b799aacebcbc3bd533cbd16bf42740be3402a20aec013e252553280df8774428e4c425fbe4c6803c0f58045e9a8dbd875d6c9a3d9b80c584c3481922927fd65478204761732070726963652028776569293a0000000000000000000000000073756249642073686f756c64204e4f542062652063686172676564206174207468697320706f696e74537562736372697074696f6e20666565206368617267656420666f7220626f7468207265717565737473203d20537562736372697074696f6e20666565206e61746976652062616c616e6365206265666f726520666f7220626f7468207265717565737473203d20506c61696e7465787420646f6573206e6f74206d6174636820776974686f75742064656372797074696f6e2064756520746f206c6f772063616c6c6261636b20676173206c696d6974206e6f7420636f766572696e672063616c6c20746f206465637279707445786163742066656520706169642073686f756c64206e6f74206265207a65726f41646d696e2062616c616e63652073686f756c642072656d61696e207468652073616d6520696620657861637446656550616964206973207a65726ffb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e1f41646d696e2062616c616e63652073686f756c6420696e637265617365206166746572207061796d656e74207769746864726177616c44656372797074696f6e206b6579206e6f742070726f766964656420696e2064656372797074696f6e2073656e646572206279206f6666636861696e206f7261636c65506c61696e746578742073686f756c64206d69736d6174636820776974686f75742064656372797074696f6e2064756520746f206c6f772063616c6c6261636b20676173206c696d6974206e6f7420636f657672696e672064656372797074696f6e526571756573742043616c6c6261636b4761734c696d69743a00000000000000736368656d65416464722073686f756c64206e6f74206265207a65726f20616464726573735265717565737420707269636520706169642073686f756c6420626520776974686472617761626c652062792061646d696e206174207468697320706f696e7442616c616e636520646964206e6f7420696e63726561736520616674657220737562736372697074696f6e2063616e63656c6c6174696f6e5061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742073686f756c64206e6f206c6f6e676572206661696c206166746572207375636365737366756c207265747279436970686572746578742073686f756c64206e6f742062652064656372797074656420796574576520646f6e27742065787065637420616e79206469726563742066756e64696e67207061796d656e74732066726f6d207468697320737562736372697074696f6e207265717565737473756249642073686f756c642062652063686172676564206174207468697320706f696e7444656372797074696f6e206c6f6769632073686f756c64206e6f742068617665206265656e207265616368656402a3b2fa2c402d59e22a2f141e32a092603862a06a695cbfb574c440372a72cd0636ba8092f304e7701ae9abe910cb474edf0408d9dd78ea7f6f97b7f2464711526571756573742043616c6c6261636b47617350726963653a00000000000000fb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e275265717565737420707269636520657374696d6174696f6e2073686f756c6420636f76657220657861637420666565206368617267656420666f722072657175657374736368656d654164647220616464726573732073686f756c64206861766520636f6465536368656d6520636f6e747261637420616464726573732073686f756c64206e6f742068617665206265656e207265706c61636564736368656d654164647220616464726573732073686f756c64206e6f74206265207a65726f2061646472657373496e636f7272656374207265717565737420636f756e742c2069742073686f756c64206265206f6e6541646d696e2062616c616e63652073686f756c64206e6f74206368616e676520776974686f7574207769746864726177696e6720666565735265717565737420707269636520666f72206f6666636861696e206f7261636c652063616c6c6261636b4761734c696d69745061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742077696c6c206265206578656375746564206275742064656372797074696f6e2077696c6c206661696c20696620757365722064656372797074732077697468696e2063616c6c6261636b5061796d656e7420636f6c6c656374696f6e20696e2063616c6c6261636b20746f20726563656976657220636f6e74726163742073686f756c642068617665206661696c65645265717565737420696420696e20726563656976657220636f6e747261637420697320696e636f7272656374537562736372697074696f6e206e61746976652062616c616e636520616674657220626f7468207265717565737473203d20537562736372697074696f6e206964203d200000000000000000000000000000546f74616c20776974686472617761626c6520737562736372697074696f6e2062616c616e63652028776569293a45786163742067617320636f737420666f7220626f74682066756c66696c6c20747852657175657374206964206d69736d61746368206265747765656e20626c6f636b6c6f636b53656e64657220616e642064656372797074696f6e53656e646572fb0786f792fc22b7967c88e64d01f6ee30f36de4f495ee7669eae1acf94f2e1e496e636f7272656374207265717565737420636f756e742c2069742073686f756c642062652074776f20666f7220626f746820636f6e73756d65727344656372797074696f6e206b65792077617320696e636f727265637420616e6420696e7465726e616c2063616c6c6261636b2072657665727465642062757420726571756573742073686f756c64206265206d61726b65642061732066756c66696c6c656441637475616c206761732070726963652073686f756c64206265206c657373207468616e2065786163742066656520706169645573657220636f6e74726163742073686f756c64206e6f74206265206368617267656420696d6d6564696174656c7920666f7220737562736372697074696f6e2072657175657374a26469706673582212209222db8d62c0dc8bca7ac2f571127fbf11a35425c6ba2b40f3c36ee5709efbfc64736f6c634300081c0033\";\n\ntype SubscriptionFundingTestConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SubscriptionFundingTestConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SubscriptionFundingTest__factory extends ContractFactory {\n  constructor(...args: SubscriptionFundingTestConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SubscriptionFundingTest & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): SubscriptionFundingTest__factory {\n    return super.connect(runner) as SubscriptionFundingTest__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SubscriptionFundingTestInterface {\n    return new Interface(_abi) as SubscriptionFundingTestInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SubscriptionFundingTest {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as SubscriptionFundingTest;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Vm, VmInterface } from \"../../Vm.sol/Vm\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"accessList\",\n    inputs: [\n      {\n        name: \"access\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.AccessListItem[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"storageKeys\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"accesses\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"readSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"writeSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"activeFork\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"addr\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"allowCheatcodes\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assume\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialReverts\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.PotentialRevert[]\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialRevert\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.PotentialRevert\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"attachBlob\",\n    inputs: [\n      {\n        name: \"blob\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"attachDelegation\",\n    inputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blobBaseFee\",\n    inputs: [\n      {\n        name: \"newBlobBaseFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blobhashes\",\n    inputs: [\n      {\n        name: \"hashes\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcastRawTransaction\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"chainId\",\n    inputs: [\n      {\n        name: \"newChainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"clearMockedCalls\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"cloneAccount\",\n    inputs: [\n      {\n        name: \"source\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"closeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"coinbase\",\n    inputs: [\n      {\n        name: \"newCoinbase\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreateAddress\",\n    inputs: [\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"contains\",\n    inputs: [\n      {\n        name: \"subject\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"search\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"cool\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"coolSlot\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyFile\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"copied\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyStorage\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSelectFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSelectFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSelectFork\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deal\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteSnapshot\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteSnapshots\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteStateSnapshot\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deleteStateSnapshots\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"difficulty\",\n    inputs: [\n      {\n        name: \"newDifficulty\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"dumpState\",\n    inputs: [\n      {\n        name: \"pathToStateJson\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ensNamehash\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envExists\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"etch\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newRuntimeBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"eth_getLogs\",\n    inputs: [\n      {\n        name: \"fromBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"toBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"topics\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.EthGetLogs[]\",\n        components: [\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"blockHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"transactionHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"transactionIndex\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"logIndex\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"removed\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"exists\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"gas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCallMinGas\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minGas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCallMinGas\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"minGas\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCreate\",\n    inputs: [\n      {\n        name: \"bytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectCreate2\",\n    inputs: [\n      {\n        name: \"bytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmit\",\n    inputs: [\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [\n      {\n        name: \"checkTopic0\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"emitter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectEmitAnonymous\",\n    inputs: [\n      {\n        name: \"checkTopic0\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic1\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic2\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkTopic3\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"checkData\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectPartialRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectPartialRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"reverter\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"count\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectRevert\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectSafeMemory\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"max\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"expectSafeMemoryCall\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"max\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"fee\",\n    inputs: [\n      {\n        name: \"newBasefee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ffi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"foundryVersionAtLeast\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"foundryVersionCmp\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fsMetadata\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"metadata\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FsMetadata\",\n        components: [\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"length\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"readOnly\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"modified\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"accessed\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"created\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByCode\",\n    inputs: [\n      {\n        name: \"code\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByDeployedCode\",\n    inputs: [\n      {\n        name: \"deployedCode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlobBaseFee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blobBaseFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlobhashes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"hashes\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockNumber\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"height\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockTimestamp\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"timestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcast\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.BroadcastTxSummary\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChain\",\n    inputs: [\n      {\n        name: \"chainAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"chain\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Chain\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"chainId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"chainAlias\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"rpcUrl\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChain\",\n    inputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"chain\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Chain\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"chainId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"chainAlias\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"rpcUrl\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"creationBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployedCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"runtimeBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployments\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddresses\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getFoundryVersion\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getLabel\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"currentLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingKeyAndParentOf\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"elementSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"found\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"key\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"parent\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingLength\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"length\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingSlotAt\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"idx\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getRecordedLogs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Log[]\",\n        components: [\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiffJson\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getWallets\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"wallets\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"indexOf\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"interceptInitcode\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"isContext\",\n    inputs: [\n      {\n        name: \"context\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.ForgeContext\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isPersistent\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"persistent\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExists\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"label\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"lastCallGas\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gas\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Gas\",\n        components: [\n          {\n            name: \"gasLimit\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasTotalUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasMemoryUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasRefunded\",\n            type: \"int64\",\n            internalType: \"int64\",\n          },\n          {\n            name: \"gasRemaining\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"load\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"loadAllocs\",\n    inputs: [\n      {\n        name: \"pathToAllocsJson\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"accounts\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"account0\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"account1\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"makePersistent\",\n    inputs: [\n      {\n        name: \"account0\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"account1\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"account2\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCall\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCallRevert\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"revertData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCalls\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"msgValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockCalls\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"mockFunction\",\n    inputs: [\n      {\n        name: \"callee\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"noAccessList\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"parseAddress\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBool\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes32\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseInt\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddress\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddressArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBool\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBoolArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32Array\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytesArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonInt\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonIntArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonKeys\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonString\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonStringArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonTypeArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUint\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUintArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddress\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddressArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBool\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBoolArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32Array\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytesArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlInt\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlIntArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlKeys\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlString\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlStringArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlTypeArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUint\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUintArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseUint\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prevrandao\",\n    inputs: [\n      {\n        name: \"newPrevrandao\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"prevrandao\",\n    inputs: [\n      {\n        name: \"newPrevrandao\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"projectRoot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"prompt\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptAddress\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecret\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecretUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"publicKeyP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"publicKeyX\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"publicKeyY\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"randomAddress\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBool\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes\",\n    inputs: [\n      {\n        name: \"len\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes4\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes8\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes8\",\n        internalType: \"bytes8\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"max\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"readCallers\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"callerMode\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.CallerMode\",\n      },\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"followLinks\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"line\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLink\",\n    inputs: [\n      {\n        name: \"linkPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"targetPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"record\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"recordLogs\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKey\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"replace\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"resetGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resetNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"revertTo\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revertToAndDelete\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revertToState\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revertToStateAndDelete\",\n    inputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"success\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokePersistent\",\n    inputs: [\n      {\n        name: \"accounts\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokePersistent\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"roll\",\n    inputs: [\n      {\n        name: \"newHeight\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rollFork\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrl\",\n    inputs: [\n      {\n        name: \"rpcAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrlStructs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Rpc[]\",\n        components: [\n          {\n            name: \"key\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"url\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrls\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"string[2][]\",\n        internalType: \"string[2][]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"selectFork\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJson\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUintToHex\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setArbitraryStorage\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"overwrite\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setArbitraryStorage\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setBlockhash\",\n    inputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setEnv\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newNonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setNonceUnsafe\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newNonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"shuffle\",\n    inputs: [\n      {\n        name: \"array\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signAndAttachDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signAndAttachDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"skip\",\n    inputs: [\n      {\n        name: \"skipTest\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"reason\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"skip\",\n    inputs: [\n      {\n        name: \"skipTest\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sleep\",\n    inputs: [\n      {\n        name: \"duration\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotGasLastCall\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotGasLastCall\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotState\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"snapshotId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotValue\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"snapshotValue\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sort\",\n    inputs: [\n      {\n        name: \"array\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"split\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delimiter\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"outputs\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startDebugTraceRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startPrank\",\n    inputs: [\n      {\n        name: \"msgSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"txOrigin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"delegateCall\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startSnapshotGas\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startSnapshotGas\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startStateDiffRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnDebugTraceRecording\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"step\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DebugStep[]\",\n        components: [\n          {\n            name: \"stack\",\n            type: \"uint256[]\",\n            internalType: \"uint256[]\",\n          },\n          {\n            name: \"memoryInput\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"opcode\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isOutOfGas\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"contractAddr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"accountAccesses\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.AccountAccess[]\",\n        components: [\n          {\n            name: \"chainInfo\",\n            type: \"tuple\",\n            internalType: \"struct VmSafe.ChainInfo\",\n            components: [\n              {\n                name: \"forkId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"chainId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n            ],\n          },\n          {\n            name: \"kind\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.AccountAccessKind\",\n          },\n          {\n            name: \"account\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"accessor\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"initialized\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"oldBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"newBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deployedCode\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"value\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"reverted\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"storageAccesses\",\n            type: \"tuple[]\",\n            internalType: \"struct VmSafe.StorageAccess[]\",\n            components: [\n              {\n                name: \"account\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"slot\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"isWrite\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n              {\n                name: \"previousValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"newValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"reverted\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n            ],\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopExpectSafeMemory\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopPrank\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopSnapshotGas\",\n    inputs: [\n      {\n        name: \"group\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopSnapshotGas\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopSnapshotGas\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gasUsed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"store\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toLowercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toUppercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"transact\",\n    inputs: [\n      {\n        name: \"forkId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"transact\",\n    inputs: [\n      {\n        name: \"txHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"trim\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"tryFfi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FfiResult\",\n        components: [\n          {\n            name: \"exitCode\",\n            type: \"int32\",\n            internalType: \"int32\",\n          },\n          {\n            name: \"stdout\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"stderr\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"txGasPrice\",\n    inputs: [\n      {\n        name: \"newGasPrice\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"unixTime\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"milliseconds\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"warmSlot\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"warp\",\n    inputs: [\n      {\n        name: \"newTimestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class Vm__factory {\n  static readonly abi = _abi;\n  static createInterface(): VmInterface {\n    return new Interface(_abi) as VmInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Vm {\n    return new Contract(address, _abi, runner) as unknown as Vm;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { VmSafe, VmSafeInterface } from \"../../Vm.sol/VmSafe\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"accesses\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"readSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"writeSlots\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addr\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbs\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqAbsDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRel\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertApproxEqRelDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"maxPercentDelta\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertFalse\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertGtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLe\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLeDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLt\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertLtDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"right\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"right\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"right\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"right\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n      {\n        name: \"right\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"right\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n      {\n        name: \"right\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEq\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"right\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertNotEqDecimal\",\n    inputs: [\n      {\n        name: \"left\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"right\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assertTrue\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"error\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assume\",\n    inputs: [\n      {\n        name: \"condition\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialReverts\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.PotentialRevert[]\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"assumeNoRevert\",\n    inputs: [\n      {\n        name: \"potentialRevert\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.PotentialRevert\",\n        components: [\n          {\n            name: \"reverter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"partialMatch\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"revertData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"attachBlob\",\n    inputs: [\n      {\n        name: \"blob\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"attachDelegation\",\n    inputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"breakpoint\",\n    inputs: [\n      {\n        name: \"char\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"broadcastRawTransaction\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"closeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreate2Address\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"initCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"computeCreateAddress\",\n    inputs: [\n      {\n        name: \"deployer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"contains\",\n    inputs: [\n      {\n        name: \"subject\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"search\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyFile\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"copied\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"copyStorage\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createWallet\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"walletLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deployCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"constructorArgs\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"deriveKey\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"index\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"ensNamehash\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envAddress\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBool\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envBytes32\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envExists\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envInt\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envOr\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"defaultValue\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envString\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"envUint\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delim\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"eth_getLogs\",\n    inputs: [\n      {\n        name: \"fromBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"toBlock\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"topics\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.EthGetLogs[]\",\n        components: [\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"blockHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"transactionHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"transactionIndex\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"logIndex\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"removed\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"exists\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"ffi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"foundryVersionAtLeast\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"foundryVersionCmp\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fsMetadata\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"metadata\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FsMetadata\",\n        components: [\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"length\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"readOnly\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"modified\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"accessed\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"created\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByCode\",\n    inputs: [\n      {\n        name: \"code\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getArtifactPathByDeployedCode\",\n    inputs: [\n      {\n        name: \"deployedCode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlobBaseFee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blobBaseFee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockNumber\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"height\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockTimestamp\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"timestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcast\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.BroadcastTxSummary\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBroadcasts\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"txType\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.BroadcastTxType\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.BroadcastTxSummary[]\",\n        components: [\n          {\n            name: \"txHash\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"txType\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.BroadcastTxType\",\n          },\n          {\n            name: \"contractAddress\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"blockNumber\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChain\",\n    inputs: [\n      {\n        name: \"chainAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"chain\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Chain\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"chainId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"chainAlias\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"rpcUrl\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChain\",\n    inputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"chain\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Chain\",\n        components: [\n          {\n            name: \"name\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"chainId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"chainAlias\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"rpcUrl\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"creationBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployedCode\",\n    inputs: [\n      {\n        name: \"artifactPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"runtimeBytecode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployment\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getDeployments\",\n    inputs: [\n      {\n        name: \"contractName\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"chainId\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"deployedAddresses\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getFoundryVersion\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"version\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getLabel\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"currentLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingKeyAndParentOf\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"elementSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"found\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"key\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"parent\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingLength\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"length\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getMappingSlotAt\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"mappingSlot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"idx\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getNonce\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getRecordedLogs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"logs\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Log[]\",\n        components: [\n          {\n            name: \"topics\",\n            type: \"bytes32[]\",\n            internalType: \"bytes32[]\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"emitter\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getStateDiffJson\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"diff\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getWallets\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"wallets\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"indexOf\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"isContext\",\n    inputs: [\n      {\n        name: \"context\",\n        type: \"uint8\",\n        internalType: \"enum VmSafe.ForgeContext\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExists\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"keyExistsToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"label\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"newLabel\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"lastCallGas\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gas\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Gas\",\n        components: [\n          {\n            name: \"gasLimit\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasTotalUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasMemoryUsed\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"gasRefunded\",\n            type: \"int64\",\n            internalType: \"int64\",\n          },\n          {\n            name: \"gasRemaining\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"load\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"parseAddress\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBool\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseBytes32\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseInt\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddress\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonAddressArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBool\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBoolArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytes32Array\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonBytesArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonInt\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonIntArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonKeys\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonString\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonStringArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonType\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonTypeArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUint\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseJsonUintArray\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseToml\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"abiEncodedData\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddress\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlAddressArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBool\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBoolArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytes32Array\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlBytesArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlInt\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlIntArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlKeys\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keys\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlString\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlStringArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlType\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlTypeArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUint\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseTomlUintArray\",\n    inputs: [\n      {\n        name: \"toml\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"key\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"parseUint\",\n    inputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"parsedValue\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"pauseTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"projectRoot\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"prompt\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptAddress\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecret\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptSecretUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"promptUint\",\n    inputs: [\n      {\n        name: \"promptText\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"publicKeyP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"publicKeyX\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"publicKeyY\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"randomAddress\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBool\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes\",\n    inputs: [\n      {\n        name: \"len\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes4\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomBytes8\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes8\",\n        internalType: \"bytes8\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomInt\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"randomUint\",\n    inputs: [\n      {\n        name: \"min\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"max\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"maxDepth\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"followLinks\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"entries\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DirEntry[]\",\n        components: [\n          {\n            name: \"errorMessage\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"path\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isDir\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"isSymlink\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"line\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"readLink\",\n    inputs: [\n      {\n        name: \"linkPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"targetPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"record\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"recordLogs\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKey\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rememberKeys\",\n    inputs: [\n      {\n        name: \"mnemonic\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"derivationPath\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"language\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"count\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"keyAddrs\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeDir\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"recursive\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"replace\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"from\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"to\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"resetGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeGasMetering\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"resumeTracing\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"urlOrAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpc\",\n    inputs: [\n      {\n        name: \"method\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"params\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrl\",\n    inputs: [\n      {\n        name: \"rpcAlias\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrlStructs\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.Rpc[]\",\n        components: [\n          {\n            name: \"key\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"url\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"rpcUrls\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"urls\",\n        type: \"string[2][]\",\n        internalType: \"string[2][]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeAddress\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bool[]\",\n        internalType: \"bool[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBool\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"bytes32[]\",\n        internalType: \"bytes32[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeBytes32\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeInt\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"int256[]\",\n        internalType: \"int256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJson\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeJsonType\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"typeDescription\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeString\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUint\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"values\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"serializeUintToHex\",\n    inputs: [\n      {\n        name: \"objectKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setArbitraryStorage\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"overwrite\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setArbitraryStorage\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setEnv\",\n    inputs: [\n      {\n        name: \"name\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"value\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"shuffle\",\n    inputs: [\n      {\n        name: \"array\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sign\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"v\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signAndAttachDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signAndAttachDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"wallet\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.Wallet\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"publicKeyX\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"publicKeyY\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"privateKey\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n        ],\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signCompact\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"vs\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"signDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signDelegation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"nonce\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"signedDelegation\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.SignedDelegation\",\n        components: [\n          {\n            name: \"v\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"r\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"s\",\n            type: \"bytes32\",\n            internalType: \"bytes32\",\n          },\n          {\n            name: \"nonce\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"implementation\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signP256\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"digest\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"r\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"s\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"sleep\",\n    inputs: [\n      {\n        name: \"duration\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"sort\",\n    inputs: [\n      {\n        name: \"array\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"split\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"delimiter\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"outputs\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"signer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startBroadcast\",\n    inputs: [\n      {\n        name: \"privateKey\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startDebugTraceRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"startStateDiffRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnDebugTraceRecording\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"step\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.DebugStep[]\",\n        components: [\n          {\n            name: \"stack\",\n            type: \"uint256[]\",\n            internalType: \"uint256[]\",\n          },\n          {\n            name: \"memoryInput\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"opcode\",\n            type: \"uint8\",\n            internalType: \"uint8\",\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"isOutOfGas\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"contractAddr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopAndReturnStateDiff\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"accountAccesses\",\n        type: \"tuple[]\",\n        internalType: \"struct VmSafe.AccountAccess[]\",\n        components: [\n          {\n            name: \"chainInfo\",\n            type: \"tuple\",\n            internalType: \"struct VmSafe.ChainInfo\",\n            components: [\n              {\n                name: \"forkId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n              {\n                name: \"chainId\",\n                type: \"uint256\",\n                internalType: \"uint256\",\n              },\n            ],\n          },\n          {\n            name: \"kind\",\n            type: \"uint8\",\n            internalType: \"enum VmSafe.AccountAccessKind\",\n          },\n          {\n            name: \"account\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"accessor\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"initialized\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"oldBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"newBalance\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"deployedCode\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"value\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"data\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"reverted\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"storageAccesses\",\n            type: \"tuple[]\",\n            internalType: \"struct VmSafe.StorageAccess[]\",\n            components: [\n              {\n                name: \"account\",\n                type: \"address\",\n                internalType: \"address\",\n              },\n              {\n                name: \"slot\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"isWrite\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n              {\n                name: \"previousValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"newValue\",\n                type: \"bytes32\",\n                internalType: \"bytes32\",\n              },\n              {\n                name: \"reverted\",\n                type: \"bool\",\n                internalType: \"bool\",\n              },\n            ],\n          },\n          {\n            name: \"depth\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopBroadcast\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"stopMappingRecording\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toBase64URL\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toLowercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toString\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"stringifiedValue\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"toUppercase\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"trim\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"output\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"tryFfi\",\n    inputs: [\n      {\n        name: \"commandInput\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"result\",\n        type: \"tuple\",\n        internalType: \"struct VmSafe.FfiResult\",\n        components: [\n          {\n            name: \"exitCode\",\n            type: \"int32\",\n            internalType: \"int32\",\n          },\n          {\n            name: \"stdout\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"stderr\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"unixTime\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"milliseconds\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFile\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeFileBinary\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeJson\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeLine\",\n    inputs: [\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"data\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"valueKey\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"writeToml\",\n    inputs: [\n      {\n        name: \"json\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"path\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class VmSafe__factory {\n  static readonly abi = _abi;\n  static createInterface(): VmSafeInterface {\n    return new Interface(_abi) as VmSafeInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): VmSafe {\n    return new Contract(address, _abi, runner) as unknown as VmSafe;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IERC1822Proxiable,\n  IERC1822ProxiableInterface,\n} from \"../../draft-IERC1822.sol/IERC1822Proxiable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class IERC1822Proxiable__factory {\n  static readonly abi = _abi;\n  static createInterface(): IERC1822ProxiableInterface {\n    return new Interface(_abi) as IERC1822ProxiableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IERC1822Proxiable {\n    return new Contract(address, _abi, runner) as unknown as IERC1822Proxiable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  AbstractBlocklockReceiver,\n  AbstractBlocklockReceiverInterface,\n} from \"../AbstractBlocklockReceiver\";\n\nconst _abi = [\n  {\n    type: \"receive\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blocklock\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IBlocklockSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscriptionAndFundNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"fundContractNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveBlocklock\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setBlocklock\",\n    inputs: [\n      {\n        name: \"_blocklock\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSubId\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"subscriptionId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"topUpSubscriptionNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSubscription\",\n    inputs: [\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawNative\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"Funded\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"NewSubscriptionId\",\n    inputs: [\n      {\n        name: \"subscriptionId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferRequested\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Received\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Withdrawn\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class AbstractBlocklockReceiver__factory {\n  static readonly abi = _abi;\n  static createInterface(): AbstractBlocklockReceiverInterface {\n    return new Interface(_abi) as AbstractBlocklockReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AbstractBlocklockReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as AbstractBlocklockReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { AccessControl, AccessControlInterface } from \"../AccessControl\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class AccessControl__factory {\n  static readonly abi = _abi;\n  static createInterface(): AccessControlInterface {\n    return new Interface(_abi) as AccessControlInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AccessControl {\n    return new Contract(address, _abi, runner) as unknown as AccessControl;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  AccessControlEnumerableUpgradeable,\n  AccessControlEnumerableUpgradeableInterface,\n} from \"../AccessControlEnumerableUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMembers\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class AccessControlEnumerableUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): AccessControlEnumerableUpgradeableInterface {\n    return new Interface(_abi) as AccessControlEnumerableUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AccessControlEnumerableUpgradeable {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as AccessControlEnumerableUpgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  AccessControlUpgradeable,\n  AccessControlUpgradeableInterface,\n} from \"../AccessControlUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class AccessControlUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): AccessControlUpgradeableInterface {\n    return new Interface(_abi) as AccessControlUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): AccessControlUpgradeable {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as AccessControlUpgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Address, AddressInterface } from \"../Address\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea264697066735822122005f9a6a885d05ac7e71f75876ba5d5cd0f7e3d9d8497cbb0c92c24851b8c579164736f6c634300081c0033\";\n\ntype AddressConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: AddressConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Address__factory extends ContractFactory {\n  constructor(...args: AddressConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Address & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Address__factory {\n    return super.connect(runner) as Address__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): AddressInterface {\n    return new Interface(_abi) as AddressInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Address {\n    return new Contract(address, _abi, runner) as unknown as Address;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { BLS, BLSInterface } from \"../BLS\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"BNAddFailed\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFieldElement\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MapToPointFailed\",\n    inputs: [\n      {\n        name: \"noSqrt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ModExpFailed\",\n    inputs: [\n      {\n        name: \"base\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"exponent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"modulus\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212200879dec9b95bfb78ebbcd8d052f21ae33bbfd6c6323d135c5264b144a48e886164736f6c634300081c0033\";\n\ntype BLSConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BLSConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BLS__factory extends ContractFactory {\n  constructor(...args: BLSConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BLS & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): BLS__factory {\n    return super.connect(runner) as BLS__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BLSInterface {\n    return new Interface(_abi) as BLSInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): BLS {\n    return new Contract(address, _abi, runner) as unknown as BLS;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  BlocklockFeeCollector,\n  BlocklockFeeCollectorInterface,\n} from \"../BlocklockFeeCollector\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"MAX_CONSUMERS\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"calculateRequestPriceNative\",\n    inputs: [\n      {\n        name: \"_callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscription\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"disable\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"enable\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"estimateRequestPriceNative\",\n    inputs: [\n      {\n        name: \"_callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"_requestGasPriceWei\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fundSubscriptionWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getActiveSubscriptionIds\",\n    inputs: [\n      {\n        name: \"startIndex\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"ids\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nativeBalance\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n      {\n        name: \"reqCount\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"subOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"ownerCancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingRequestExists\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"removeConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"s_config\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_configured\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_currentSubNonce\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_disabled\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_totalNativeBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_withdrawableDirectFundingFeeNative\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_withdrawableSubscriptionFeeNative\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setConfig\",\n    inputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawDirectFundingFeesNative\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address payable\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawSubscriptionFeesNative\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address payable\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"ConfigSet\",\n    inputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Disabled\",\n    inputs: [],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Enabled\",\n    inputs: [],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"L1GasFee\",\n    inputs: [\n      {\n        name: \"fee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionCanceled\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountNative\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionConsumerAdded\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionConsumerRemoved\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionCreated\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionFundedWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"oldNativeBalance\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newNativeBalance\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionOwnerTransferRequested\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionOwnerTransferred\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"BalanceInvariantViolated\",\n    inputs: [\n      {\n        name: \"internalBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"externalBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedToSendNative\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"IndexOutOfRange\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientBalance\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidCalldata\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidSubscription\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MustBeRequestedOwner\",\n    inputs: [\n      {\n        name: \"proposedOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MustBeSubOwner\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PendingRequestExists\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"TooManyConsumers\",\n    inputs: [],\n  },\n] as const;\n\nexport class BlocklockFeeCollector__factory {\n  static readonly abi = _abi;\n  static createInterface(): BlocklockFeeCollectorInterface {\n    return new Interface(_abi) as BlocklockFeeCollectorInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): BlocklockFeeCollector {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as BlocklockFeeCollector;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  BlocklockSender,\n  BlocklockSenderInterface,\n} from \"../BlocklockSender\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DST_H1_G1\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DST_H2\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DST_H3\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DST_H4\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"MAX_CONSUMERS\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blocklockRequestsWithDecryptionKey\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"directFundingFeePaid\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"decryptionRequestID\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"callback\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"calculateRequestPriceNative\",\n    inputs: [\n      {\n        name: \"_callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscription\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"decrypt\",\n    inputs: [\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"decryptionSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IDecryptionSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"disable\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"enable\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"estimateRequestPriceNative\",\n    inputs: [\n      {\n        name: \"_callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"_requestGasPriceWei\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fundSubscriptionWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getActiveSubscriptionIds\",\n    inputs: [\n      {\n        name: \"startIndex\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"ids\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getConfig\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.BlocklockRequest\",\n        components: [\n          {\n            name: \"subId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"directFundingFeePaid\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callbackGasLimit\",\n            type: \"uint32\",\n            internalType: \"uint32\",\n          },\n          {\n            name: \"decryptionRequestID\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"condition\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"ciphertext\",\n            type: \"tuple\",\n            internalType: \"struct TypesLib.Ciphertext\",\n            components: [\n              {\n                name: \"u\",\n                type: \"tuple\",\n                internalType: \"struct BLS.PointG2\",\n                components: [\n                  {\n                    name: \"x\",\n                    type: \"uint256[2]\",\n                    internalType: \"uint256[2]\",\n                  },\n                  {\n                    name: \"y\",\n                    type: \"uint256[2]\",\n                    internalType: \"uint256[2]\",\n                  },\n                ],\n              },\n              {\n                name: \"v\",\n                type: \"bytes\",\n                internalType: \"bytes\",\n              },\n              {\n                name: \"w\",\n                type: \"bytes\",\n                internalType: \"bytes\",\n              },\n            ],\n          },\n          {\n            name: \"signature\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"decryptionKey\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMembers\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nativeBalance\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n      {\n        name: \"reqCount\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"subOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initialize\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_decryptionSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"isInFlight\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"ownerCancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingRequestExists\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveDecryptionData\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"removeConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestBlocklock\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestBlocklockWithSubscription\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"s_config\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_configured\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_currentSubNonce\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_disabled\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_totalNativeBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_withdrawableDirectFundingFeeNative\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_withdrawableSubscriptionFeeNative\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setConfig\",\n    inputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setDecryptionSender\",\n    inputs: [\n      {\n        name: \"newDecryptionSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"upgradeToAndCall\",\n    inputs: [\n      {\n        name: \"newImplementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawDirectFundingFeesNative\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address payable\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawSubscriptionFeesNative\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address payable\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"BlocklockCallbackFailed\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BlocklockCallbackSuccess\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        indexed: false,\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BlocklockRequested\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        indexed: false,\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n      {\n        name: \"requester\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"requestedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"ConfigSet\",\n    inputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        indexed: false,\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        indexed: false,\n        internalType: \"uint32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DecryptionSenderUpdated\",\n    inputs: [\n      {\n        name: \"decryptionSender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Disabled\",\n    inputs: [],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Enabled\",\n    inputs: [],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"L1GasFee\",\n    inputs: [\n      {\n        name: \"fee\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionCanceled\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountNative\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionConsumerAdded\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionConsumerRemoved\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionCreated\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionFundedWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"oldNativeBalance\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newNativeBalance\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionOwnerTransferRequested\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionOwnerTransferred\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"BalanceInvariantViolated\",\n    inputs: [\n      {\n        name: \"internalBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"externalBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedToSendNative\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"IndexOutOfRange\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientBalance\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidCalldata\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidSubscription\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MustBeRequestedOwner\",\n    inputs: [\n      {\n        name: \"proposedOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MustBeSubOwner\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"PendingRequestExists\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"TooManyConsumers\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnauthorizedCallContext\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnsupportedProxiableUUID\",\n    inputs: [\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60a060405230608052348015610013575f5ffd5b5060015f55610020610025565b6100d7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100755760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d45780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b766100fd5f395f818161377c015281816137a501526138f20152615b765ff3fe608060405260043610610371575f3560e01c80637350f456116101c8578063aa433aff116100fd578063c58343ef1161009d578063cd802c911161006d578063cd802c9114610b18578063d547741f14610b37578063dac83d2914610b56578063dc311dd314610b75575f5ffd5b8063c58343ef14610a8f578063c9bc18c414610abb578063ca15c87314610ada578063cb63179714610af9575f5ffd5b8063b2a7cac5116100d8578063b2a7cac5146109d9578063bd18636b146109f8578063bec4c08c14610a17578063c3f909d414610a36575f5ffd5b8063aa433aff1461095e578063ad3cb1cc1461097d578063aefb212f146109ad575f5ffd5b8063995cb36e11610168578063a21a23e411610143578063a21a23e4146108ec578063a3246ad314610900578063a3907d711461092c578063a608a1e114610940575f5ffd5b8063995cb36e146108835780639d40a6fd146108a2578063a217fddf146108d9575f5ffd5b80638a1f165a116101a35780638a1f165a146107f45780639010d07c1461083257806391d148541461085157806395b55cfc14610870575f5ffd5b80637350f456146107ad57806375b238fc146107c15780637909dc7b146107e1575f5ffd5b806338c27d12116102a957806352d1902d116102495780635d3be001116102195780635d3be0011461071f5780635f7bda9f1461073e57806364d51a2a1461077257806367b276af14610799575f5ffd5b806352d1902d146106a657806354236fb3146106ba57806354fd4d50146106d957806357a8070a14610706575f5ffd5b806345fa43541161028457806345fa435414610636578063485cc955146106555780634b160935146106745780634f1ef28614610693575f5ffd5b806338c27d12146105dd5780633bc32c75146105f157806341af6c8714610617575f5ffd5b8063235296f7116103145780632f2ff15d116102ef5780632f2ff15d1461056e5780633255c4561461058d5780633408e470146105ac57806336568abe146105be575f5ffd5b8063235296f71461051a578063248a9ca31461053b5780632f2770db1461055a575f5ffd5b80630ae095401161034f5780630ae095401461046c578063133c40c71461048d57806318e3dd27146104c45780631e6ba15b146104fb575f5ffd5b806301ffc9a714610375578063062b1d90146103a9578063088070f5146103ca575b5f5ffd5b348015610380575f5ffd5b5061039461038f366004614a28565b610ba4565b60405190151581526020015b60405180910390f35b6103bc6103b7366004614b42565b610bce565b6040519081526020016103a0565b3480156103d5575f5ffd5b50600a546104259063ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b9091041687565b6040805163ffffffff988916815296881660208801529487169486019490945291851660608501528416608084015260ff1660a083015290911660c082015260e0016103a0565b348015610477575f5ffd5b5061048b610486366004614bd2565b610f43565b005b348015610498575f5ffd5b506001546104ac906001600160a01b031681565b6040516001600160a01b0390911681526020016103a0565b3480156104cf575f5ffd5b506008546104e3906001600160601b031681565b6040516001600160601b0390911681526020016103a0565b348015610506575f5ffd5b5061048b610515366004614c00565b610f94565b348015610525575f5ffd5b5061052e610ff3565b6040516103a09190614c49565b348015610546575f5ffd5b506103bc610555366004614c5b565b61107f565b348015610565575f5ffd5b5061048b61109f565b348015610579575f5ffd5b5061048b610588366004614bd2565b6110ee565b348015610598575f5ffd5b506103bc6105a7366004614c72565b611110565b3480156105b7575f5ffd5b50466103bc565b3480156105c9575f5ffd5b5061048b6105d8366004614bd2565b611128565b3480156105e8575f5ffd5b5061052e61115b565b3480156105fc575f5ffd5b506008546104e390600160601b90046001600160601b031681565b348015610622575f5ffd5b50610394610631366004614c5b565b611168565b348015610641575f5ffd5b5061048b610650366004614c9a565b6111fd565b348015610660575f5ffd5b5061048b61066f366004614d22565b6113d9565b34801561067f575f5ffd5b506103bc61068e366004614d4e565b61166c565b61048b6106a1366004614d67565b61167d565b3480156106b1575f5ffd5b506103bc61169c565b3480156106c5575f5ffd5b5061048b6106d4366004614c00565b6116b8565b3480156106e4575f5ffd5b50604080518082019091526005815264302e302e3160d81b602082015261052e565b348015610711575f5ffd5b50600b546103949060ff1681565b34801561072a575f5ffd5b5061048b610739366004614df0565b61172c565b348015610749575f5ffd5b5061075d610758366004614c5b565b6117ff565b6040516103a099989796959493929190614edb565b34801561077d575f5ffd5b50610786606481565b60405161ffff90911681526020016103a0565b3480156107a4575f5ffd5b5061052e611b91565b3480156107b8575f5ffd5b5061052e611b9e565b3480156107cc575f5ffd5b506103bc5f516020615b215f395f51905f5281565b6103bc6107ef366004614f70565b611bab565b3480156107ff575f5ffd5b5061052e60405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b34801561083d575f5ffd5b506104ac61084c366004614fd0565b611c9b565b34801561085c575f5ffd5b5061039461086b366004614bd2565b611cc8565b61048b61087e366004614c5b565b611cfe565b34801561088e575f5ffd5b506009546104e3906001600160601b031681565b3480156108ad575f5ffd5b506005546108c1906001600160401b031681565b6040516001600160401b0390911681526020016103a0565b3480156108e4575f5ffd5b506103bc5f81565b3480156108f7575f5ffd5b506103bc611e09565b34801561090b575f5ffd5b5061091f61091a366004614c5b565b611fb3565b6040516103a09190615033565b348015610937575f5ffd5b5061048b611fdc565b34801561094b575f5ffd5b50600b5461039490610100900460ff1681565b348015610969575f5ffd5b5061048b610978366004614c5b565b612027565b348015610988575f5ffd5b5061052e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156109b8575f5ffd5b506109cc6109c7366004614fd0565b612067565b6040516103a09190615045565b3480156109e4575f5ffd5b5061048b6109f3366004614c5b565b61215c565b348015610a03575f5ffd5b5061048b610a12366004614c00565b612247565b348015610a22575f5ffd5b5061048b610a31366004614bd2565b6122e0565b348015610a41575f5ffd5b50600a5463ffffffff80821691600160201b8104821691600160401b8204811691600160601b8104821691600160801b820481169160ff600160a01b82041691600160a81b90910416610425565b348015610a9a575f5ffd5b50610aae610aa9366004614c5b565b6123d4565b6040516103a09190615087565b348015610ac6575f5ffd5b5061052e610ad536600461515e565b6127ef565b348015610ae5575f5ffd5b506103bc610af4366004614c5b565b612c0d565b348015610b04575f5ffd5b5061048b610b13366004614bd2565b612c31565b348015610b23575f5ffd5b50610394610b32366004614c5b565b612e1d565b348015610b42575f5ffd5b5061048b610b51366004614bd2565b612eb1565b348015610b61575f5ffd5b5061048b610b70366004614bd2565b612ecd565b348015610b80575f5ffd5b50610b94610b8f366004614c5b565b612f6a565b6040516103a094939291906151c5565b5f6001600160e01b03198216635a05180f60e01b1480610bc85750610bc882613029565b92915050565b600b545f9060ff16610c275760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e6669677572656400000000000060448201526064015b60405180910390fd5b600b54610100900460ff1615610c765760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b83151580610c8357505f34115b610cf55760405162461bcd60e51b815260206004820152603860248201527f4469726563742066756e64696e6720726571756972656420666f72207265717560448201527f6573742066756c66696c6c6d656e742063616c6c6261636b00000000000000006064820152608401610c1e565b610cff858561305d565b5f610d5560405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525084604051602001610d4091906152c4565b60405160208183030381529060405286613287565b90506040518061012001604052808681526020013481526020018763ffffffff168152602001826001600160401b0316815260200185815260200184610d9a90615356565b815260408051602081810183525f808352818501929092528251808201845282815283850152336060948501526001600160401b0380871683526010825291839020855181559085015160018201559184015160028301805494860151909216600160201b026001600160601b031990941663ffffffff909116179290921790915560808201516003820190610e309082615467565b5060a0820151805180516004840191908290610e4f908290600261486b565b506020820151610e65906002808401919061486b565b50505060208201516004820190610e7c9082615467565b5060408201516005820190610e919082615467565b50505060c0820151600a820190610ea89082615467565b5060e0820151600b820190610ebd9082615467565b506101009190910151600c90910180546001600160a01b0319166001600160a01b0390921691909117905560405133906001600160401b038316907fa7cf57609b4abed689b408db0b0c3dc6309786b6c07d5efbbd1d5b150e6d2c0690610f2990889088904290615521565b60405180910390a36001600160401b031695945050505050565b81610f4d816132fb565b610f5561334f565b610f5e83611168565b15610f7c57604051631685ecdd60e31b815260040160405180910390fd5b610f868383613377565b610f8f60015f55565b505050565b610faa5f516020615b215f395f51905f526133e7565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f0dae1d002e96c238ebe140ca1799f77093ae09e0bde40f79bb29ed78d09e652d905f90a250565b600c8054611000906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461102c906153f1565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b505050505081565b5f9081525f516020615b015f395f51905f52602052604090206001015490565b6110b55f516020615b215f395f51905f526133e7565b600b805461ff0019166101001790556040517f75884cdadc4a89e8b545db800057f06ec7f5338a08183c7ba515f2bfdd9fe1e1905f90a1565b6110f78261107f565b611100816133e7565b61110a83836133f1565b50505050565b5f6111218363ffffffff1683613433565b9392505050565b6001600160a01b03811633146111515760405163334bd91960e11b815260040160405180910390fd5b610f8f828261353f565b600d8054611000906153f1565b5f8181526003602052604081206002018054825b818110156111f3575f60025f85848154811061119a5761119a615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208982529092529020546001600160401b03600160481b9091041611156111eb57506001949350505050565b60010161117c565b505f949350505050565b6112135f516020615b215f395f51905f526133e7565b60ff8216609b116112665760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964205072656d69756d2050657263656e746167650000000000006044820152606401610c1e565b6040805160e08101825263ffffffff89811680835289821660208401819052898316848601819052898416606086018190528985166080870181905260ff8a1660a0880181905295891660c0909701879052600a805467ffffffffffffffff1916909517600160201b909402939093176fffffffffffffffff00000000000000001916600160401b90920263ffffffff60601b191691909117600160601b9091021764ffffffffff60801b1916600160801b90910260ff60a01b191617600160a01b9092029190911763ffffffff60a81b1916600160a81b909202919091179055600b805460ff19166001179055517f55a28fde295f482c9f32d670c116103bca15724bcef4f18b35542e0553c35ad5906113c890899089908990899089908990899063ffffffff97881681529587166020870152938616604086015291851660608501528416608084015260ff1660a083015290911660c082015260e00190565b60405180910390a150505050505050565b5f6113e2613578565b805490915060ff600160401b82041615906001600160401b03165f811580156114085750825b90505f826001600160401b031660011480156114235750303b155b905081158015611431575080155b1561144f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561147957845460ff60401b1916600160401b1785555b6114816135a0565b6114896135a0565b6114a05f516020615b215f395f51905f52886133f1565b6114e05760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b6114ea5f886133f1565b61152a5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610c1e565b600180546001600160a01b0319166001600160a01b03881617905561154e466135aa565b60405160200161155e9190615581565b604051602081830303815290604052600c908161157b9190615467565b50611585466135aa565b60405160200161159591906155d8565b604051602081830303815290604052600d90816115b29190615467565b506115bc466135aa565b6040516020016115cc9190615614565b604051602081830303815290604052600e90816115e99190615467565b506115f3466135aa565b6040516020016116039190615650565b604051602081830303815290604052600f90816116209190615467565b50831561166357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016113c8565b50505050505050565b5f610bc88263ffffffff163a613433565b611685613771565b61168e82613815565b611698828261382b565b5050565b5f6116a56138e7565b505f516020615ae15f395f51905f525b90565b6116c061334f565b6116d65f516020615b215f395f51905f526133e7565b600854600160601b90046001600160601b03166116f4811515613930565b600880546bffffffffffffffffffffffff60601b1916905561171f826001600160601b03831661394e565b5061172960015f55565b50565b6001546001600160a01b031633146117865760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792044656372797074696f6e53656e6465722063616e2063616c6c00006044820152606401610c1e565b6117f88585858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050604080516020601f890181900481028201810190925287815292508791508690819084018382808284375f920191909152506139be92505050565b5050505050565b60106020525f908152604090208054600182015460028301546003840180549394929363ffffffff831693600160201b9093046001600160401b0316929190611847906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611873906153f1565b80156118be5780601f10611895576101008083540402835291602001916118be565b820191905f5260205f20905b8154815290600101906020018083116118a157829003601f168201915b50506040805160e081019091529394939250506004830190508160608101828160a084018260028282826020028201915b8154815260200190600101908083116118ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311611925575050505050815250508152602001600482018054611955906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611981906153f1565b80156119cc5780601f106119a3576101008083540402835291602001916119cc565b820191905f5260205f20905b8154815290600101906020018083116119af57829003601f168201915b505050505081526020016005820180546119e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611a11906153f1565b8015611a5c5780601f10611a3357610100808354040283529160200191611a5c565b820191905f5260205f20905b815481529060010190602001808311611a3f57829003601f168201915b5050505050815250509080600a018054611a75906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611aa1906153f1565b8015611aec5780601f10611ac357610100808354040283529160200191611aec565b820191905f5260205f20905b815481529060010190602001808311611acf57829003601f168201915b50505050509080600b018054611b01906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2d906153f1565b8015611b785780601f10611b4f57610100808354040283529160200191611b78565b820191905f5260205f20905b815481529060010190602001808311611b5b57829003601f168201915b505050600c90930154919250506001600160a01b031689565b600f8054611000906153f1565b600e8054611000906153f1565b600b545f9060ff16611bff5760405162461bcd60e51b815260206004820152601a60248201527f436f6e7472616374206973206e6f7420636f6e666967757265640000000000006044820152606401610c1e565b600b54610100900460ff1615611c4e5760405162461bcd60e51b815260206004820152601460248201527310dbdb9d1c9858dd081a5cc8191a5cd8589b195960621b6044820152606401610c1e565b5f611c91865f87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250610bce915050565b9695505050505050565b5f8281525f516020615ac15f395f51905f52602081905260408220611cc09084613b6f565b949350505050565b5f9182525f516020615b015f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611d0661334f565b5f81815260036020526040902054611d26906001600160a01b0316613b7a565b5f81815260046020526040812080546001600160601b031691349190611d4c83856156a0565b92506101000a8154816001600160601b0302191690836001600160601b031602179055503460085f8282829054906101000a90046001600160601b0316611d9391906156a0565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f7603b205d03651ee812f803fccde89f1012e545a9c99f0abfea9cedd0fd8e902823484611de691906156bf565b604080519283526020830191909152015b60405180910390a25061172960015f55565b5f611e1261334f565b6005546001600160401b031633611e2a6001436156d2565b6040516001600160601b0319606093841b81166020830152914060348201523090921b1660548201526001600160c01b031960c083901b16606882015260700160408051601f1981840301815291905280516020909101209150611e8f8160016156e5565b6005805467ffffffffffffffff19166001600160401b03928316179055604080515f808252606080830184526020808401838152848601848152898552600483528685209151825491516001600160601b039091166001600160a01b031992831617600160601b91909916029790971790558451918201855233825281810183815282860185815289855260038352959093208251815488166001600160a01b0391821617825593516001820180549098169416939093179095559251805192949192611f6292600285019201906148a9565b50611f7291506006905084613ba1565b5060405133815283907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250506116b560015f55565b5f8181525f516020615ac15f395f51905f52602081905260409091206060919061112190613bac565b611ff25f516020615b215f395f51905f526133e7565b600b805461ff00191690556040517fc0f961051f97b04c496472d11cb6170d844e4b2c9dfd3b602a4fa0139712d484905f90a1565b61203d5f516020615b215f395f51905f526133e7565b5f818152600360205260409020546001600160a01b031661205d81613b7a565b6116988282613377565b60605f6120746006613bb8565b905080841061209657604051631390f2a160e01b815260040160405180910390fd5b5f6120a184866156bf565b9050818111806120af575083155b6120b957806120bb565b815b90505f6120c886836156d2565b9050806001600160401b038111156120e2576120e2614a67565b60405190808252806020026020018201604052801561210b578160200160208202803683370190505b5093505f5b818110156121525761212d61212588836156bf565b600690613b6f565b85828151811061213f5761213f615556565b6020908102919091010152600101612110565b5050505092915050565b61216461334f565b5f818152600360205260409020546001600160a01b031661218481613b7a565b5f828152600360205260409020600101546001600160a01b031633146121db575f828152600360205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c1e565b5f828152600360209081526040918290208054336001600160a01b03199182168117835560019092018054909116905582516001600160a01b03851681529182015283917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c93869101611df7565b61224f61334f565b6122655f516020615b215f395f51905f526133e7565b6009546001600160601b031661227c811515613930565b600980546001600160601b0319169055600880548291905f906122a99084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555061171f82826001600160601b031661394e565b816122ea816132fb565b6122f261334f565b6001600160a01b0382165f9081526002602090815260408083208684529091529020805460ff16156123245750610f86565b5f848152600360205260409020600201805460631901612357576040516305a48e0f60e01b815260040160405180910390fd5b8154600160ff1990911681178355815490810182555f82815260209081902090910180546001600160a01b0319166001600160a01b03871690811790915560405190815286917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a25050610f8f60015f55565b6123dc6148fc565b5f82815260106020908152604080832081516101208101835281548152600182015493810193909352600281015463ffffffff811692840192909252600160201b9091046001600160401b03166060830152600381018054608084019190612443906153f1565b80601f016020809104026020016040519081016040528092919081815260200182805461246f906153f1565b80156124ba5780601f10612491576101008083540402835291602001916124ba565b820191905f5260205f20905b81548152906001019060200180831161249d57829003601f168201915b50505091835250506040805160e08101909152602090910190600483018160608101828160a084018260028282826020028201915b8154815260200190600101908083116124ef57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311612525575050505050815250508152602001600482018054612555906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612581906153f1565b80156125cc5780601f106125a3576101008083540402835291602001916125cc565b820191905f5260205f20905b8154815290600101906020018083116125af57829003601f168201915b505050505081526020016005820180546125e5906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612611906153f1565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b5050505050815250508152602001600a82018054612679906153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546126a5906153f1565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600b82018054612709906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612735906153f1565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b5050509183525050600c91909101546001600160a01b031660209091015260608101519091506001600160401b0316610bc85760405162461bcd60e51b81526020600482015260116024820152701a5b9d985b1a59081c995c5d595cdd1251607a1b6044820152606401610c1e565b60606127fe6080850185615723565b9050610100036128505760405162461bcd60e51b815260206004820152601d60248201527f696e76616c69642064656372797074696f6e206b6579206c656e6774680000006044820152606401610c1e565b61010061286060a0860186615723565b9050106128af5760405162461bcd60e51b815260206004820152601d60248201527f6d657373616765206f6620756e737570706f72746564206c656e6774680000006044820152606401610c1e565b5f6128bd6080860186615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509394505050505b838110156129515784848281811061290d5761290d615556565b9050013560f81c60f81b82828151811061292957612929615556565b0160200180516001600160f81b0319908116909218909116905f82901a9053506001016128f3565b505f61296060a0870187615723565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250600f80549596509094612a3e94509092506129aa91506153f1565b80601f01602080910402602001604051908101604052809291908181526020018280546129d6906153f1565b8015612a215780601f106129f857610100808354040283529160200191612a21565b820191905f5260205f20905b815481529060010190602001808311612a0457829003601f168201915b505050505084898060a00190612a379190615723565b9050613bc1565b90505f5b612a4f60a0890189615723565b9050811015612aaf57818181518110612a6a57612a6a615556565b602001015160f81c60f81b838281518110612a8757612a87615556565b0160200180516001600160f81b0319908116909218909116905f82901a905350600101612a42565b505f612b64600e8054612ac1906153f1565b80601f0160208091040260200160405190810160405280929190818152602001828054612aed906153f1565b8015612b385780601f10612b0f57610100808354040283529160200191612b38565b820191905f5260205f20905b815481529060010190602001808311612b1b57829003601f168201915b50505050508585604051602001612b50929190615765565b604051602081830303815290604052613d56565b90505f612b7082613db5565b90505f80612b8c83612b87368e90038e018e615779565b613e47565b909250905060018215158215151414612bfe5760405162461bcd60e51b815260206004820152602e60248201527f696e76616c69642064656372797074696f6e206b6579202f206369706865727460448201526d195e1d081c9959da5cdd195c995960921b6064820152608401610c1e565b50939998505050505050505050565b5f8181525f516020615ac15f395f51905f5260208190526040822061112190613bb8565b81612c3b816132fb565b612c4361334f565b612c4c83611168565b15612c6a57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b0382165f90815260026020908152604080832086845290915290205460ff16612cbf576040516379bfd40160e01b8152600481018490526001600160a01b0383166024820152604401610c1e565b5f838152600360205260408120600201805490915b81811015612dc257846001600160a01b0316838281548110612cf857612cf8615556565b5f918252602090912001546001600160a01b031603612dba5782612d1d6001846156d2565b81548110612d2d57612d2d615556565b905f5260205f20015f9054906101000a90046001600160a01b0316838281548110612d5a57612d5a615556565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555082805480612d9557612d95615793565b5f8281526020902081015f1990810180546001600160a01b0319169055019055612dc2565b600101612cd4565b506001600160a01b0384165f818152600260209081526040808320898452825291829020805460ff19169055905191825286917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a791016123c1565b5f5f612e28836123d4565b606001516001600160401b03169050805f03612e4657505f92915050565b60015460405163cd802c9160e01b8152600481018390526001600160a01b039091169063cd802c9190602401602060405180830381865afa158015612e8d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112191906157a7565b612eba8261107f565b612ec3816133e7565b61110a838361353f565b81612ed7816132fb565b612edf61334f565b5f83815260036020526040902060018101546001600160a01b03848116911614612f60576001810180546001600160a01b0319166001600160a01b03851690811790915560408051338152602081019290925285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a1910160405180910390a25b50610f8f60015f55565b5f8181526003602052604081205481906001600160a01b03166060612f8e82613b7a565b5f85815260046020908152604080832054600383529281902060020180548251818502810185019093528083526001600160601b03851694600160601b90046001600160401b031693879391839183018282801561301357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311612ff5575b5050505050905093509350935093509193509193565b5f6001600160e01b03198216637965db0b60e01b1480610bc857506301ffc9a760e01b6001600160e01b0319831614610bc8565b600a5463ffffffff90811690831611156130b95760405162461bcd60e51b815260206004820152601a60248201527f43616c6c6261636b206761734c696d697420746f6f20686967680000000000006044820152606401610c1e565b8015613236575f818152600360205260409020546001600160a01b03166130df81613b7a565b335f908152600260209081526040808320858452808352928190208151606081018352905460ff811615158083526001600160401b036101008304811695840195909552600160481b909104909316918101919091529061318c5760405162461bcd60e51b815260206004820152602160248201527f4e6f2061637469766520737562736372697074696f6e20666f722063616c6c656044820152603960f91b6064820152608401610c1e565b80602001805161319b906157c6565b6001600160401b031690526040810180516131b5906157c6565b6001600160401b039081169091525f8581526020938452604090819020835181549585015192909401518316600160481b0270ffffffffffffffff00000000000000000019929093166101000268ffffffffffffffff00199415159490941668ffffffffffffffffff19909516949094179290921791909116179055505050565b5f6132478363ffffffff163a613433565b905080341015610f8f5760405162461bcd60e51b815260206004820152600b60248201526a46656520746f6f206c6f7760a81b6044820152606401610c1e565b60015460405163f87f0e6160e01b81525f916001600160a01b03169063f87f0e61906132bb908790879087906004016157f0565b6020604051808303815f875af11580156132d7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cc09190615828565b5f818152600360205260409020546001600160a01b031661331b81613b7a565b336001600160a01b0382161461169857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c1e565b60025f540361337157604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f61338183613fb6565b905061339682826001600160601b031661394e565b604080516001600160a01b03841681526001600160601b038316602082015284917f3784f77e8e883de95b5d47cd713ced01229fa74d118c0a462224bcb0516d43f1910160405180910390a2505050565b6117298133614107565b5f5f516020615ac15f395f51905f528161340b8585614140565b90508015611cc0575f85815260208390526040902061342a90856141e1565b50949350505050565b6040805160e081018252600a5463ffffffff8082168352600160201b820481166020840152600160401b8204811693830193909352600160601b810483166060830152600160801b81048316608083015260ff600160a01b82041660a0830152600160a81b900490911660c08201525f9081836134ba57816060015163ffffffff166134bc565b835b90505f6134c8866141f5565b63ffffffff16836080015163ffffffff1687856020015163ffffffff16010101820290505f6134f45f90565b90505f8460a0015160640160ff1690505f856040015163ffffffff1664e8d4a510000290505f81606484878701028161352f5761352f61583f565b04019a9950505050505050505050565b5f5f516020615ac15f395f51905f5281613559858561420c565b90508015611cc0575f85815260208390526040902061342a9085614285565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610bc8565b6135a8614299565b565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f8151811061360a5761360a615556565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061363857613638615556565b60200101906001600160f81b03191690815f1a9053505f5b60208110156137695782600486836020811061366e5761366e615556565b1a60f81b6001600160f81b031916901c60f81c60ff168151811061369457613694615556565b01602001516001600160f81b031916826136af836002615853565b6136ba9060026156bf565b815181106136ca576136ca615556565b60200101906001600160f81b03191690815f1a905350828582602081106136f3576136f3615556565b825191901a600f1690811061370a5761370a615556565b01602001516001600160f81b03191682613725836002615853565b6137309060026156bf565b61373b9060016156bf565b8151811061374b5761374b615556565b60200101906001600160f81b03191690815f1a905350600101613650565b509392505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806137f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166137eb5f516020615ae15f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156135a85760405163703e46dd60e11b815260040160405180910390fd5b6117295f516020615b215f395f51905f526133e7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613885575060408051601f3d908101601f1916820190925261388291810190615828565b60015b6138ad57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610c1e565b5f516020615ae15f395f51905f5281146138dd57604051632a87526960e21b815260048101829052602401610c1e565b610f8f83836142be565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146135a85760405163703e46dd60e11b815260040160405180910390fd5b8061172957604051631e9acf1760e31b815260040160405180910390fd5b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613997576040519150601f19603f3d011682016040523d82523d5f602084013e61399c565b606091505b5050905080610f8f5760405163950b247960e01b815260040160405180910390fd5b5f5a5f858152601060205260408120600281015492935091600160201b90046001600160401b03169003613a345760405162461bcd60e51b815260206004820152601960248201527f4e6f207265717565737420666f722072657175657374206964000000000000006044820152606401610c1e565b5f635d94180260e01b8686604051602401613a5092919061586a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600c8301546002840154600a549293505f92613ac09285926001600160a01b039091169163ffffffff91821691600160a81b90910481169061431316565b5090508015613b3157600b8301613ad78782615467565b50600a8301613ae68682615467565b50867f99fd15974cbf00f0f208baae5a2825fa736397eac7e2ba3003c827438ca093f7846003018560040186600b01604051613b2493929190615923565b60405180910390a2613b65565b6040518781527f15083536507666802cbd84fcc1e37ed89879bad2345aaa38d48d91a5071d0f5d9060200160405180910390a15b611663878561434a565b5f6111218383614439565b6001600160a01b03811661172957604051630fb532db60e11b815260040160405180910390fd5b5f611121838361445f565b60605f611121836144ab565b5f610bc8825490565b825160609060ff811115613bea57846040516313727cdd60e11b8152600401610c1e9190614c49565b60408051608880825260c082019092525f916020820181803683370190505090505f81865f875f8b88604051602001613c299796959493929190615998565b60405160208183030381529060405290505f818051906020012090505f8160018a87604051602001613c5e9493929190615a02565b60408051601f19818403018152919052805160208201209091505f60ff89166001600160401b03811115613c9457613c94614a67565b6040519080825280601f01601f191660200182016040528015613cbe576020820181803683370190505b5090505f6005613cd2601f60ff8d166156bf565b901c905060015b81811015613d3857858418613cef8260016156bf565b8e8b604051602001613d049493929190615a02565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101613cd9565b505f1901602090810282010191909152955050505050509392505050565b5f5f613d6484846030613bc1565b601881015160308201519192506001600160c01b0391821691165f7f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd478381600160c01b850908979650505050505050565b604080518082019091525f8082526020820152613dd0614957565b6001815260026020820152604081018390525f60608360808460076107d05a03fa905080613e405760405162461bcd60e51b815260206004820152601f60248201527f4731207363616c6172206d756c7469706c69636174696f6e206661696c6564006044820152606401610c1e565b5050919050565b5f5f5f604051806101800160405280865f01518152602001866020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d81526020016001815260200160028152602001855f0151600160028110613f2557613f25615556565b60200201518152602001855f01515f60028110613f4457613f44615556565b602002015181526020018560200151600160028110613f6557613f65615556565b6020020151815260200185602001515f60028110613f8557613f85615556565b602002015190529050613f96614975565b6020816101808460086107d05a03fa9051151593509150505b9250929050565b5f8181526003602090815260408083206004909252822054600290910180546001600160601b03909216929091905b818110156140505760025f84838154811061400257614002615556565b5f9182526020808320909101546001600160a01b0316835282810193909352604091820181208882529092529020805470ffffffffffffffffffffffffffffffffff19169055600101613fe5565b505f84815260036020526040812080546001600160a01b031990811682556001820180549091169055906140876002830182614993565b50505f84815260046020526040902080546001600160a01b03191690556140af600685614504565b506001600160601b03831615613e4057600880548491905f906140dc9084906001600160601b0316615704565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050919050565b6141118282611cc8565b6116985760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c1e565b5f5f516020615b015f395f51905f526141598484611cc8565b6141d8575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561418e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610bc8565b5f915050610bc8565b5f611121836001600160a01b03841661445f565b5f614201603f83615a45565b610bc8906001615a78565b5f5f516020615b015f395f51905f526142258484611cc8565b156141d8575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610bc8565b5f611121836001600160a01b03841661450b565b6142a16145e5565b6135a857604051631afcd79f60e31b815260040160405180910390fd5b6142c7826145fe565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561430b57610f8f8282614661565b6116986146d3565b5f5f5a83811061434057839003604081048103851015614340575f5f885160208a015f8a8af19250600191505b5094509492505050565b5f614354836123d4565b8051909150156144285780515f9081526004602052604090208054600c9061438b90600160601b90046001600160401b03166157c6565b82546001600160401b0391821661010093840a90810290830219909116179092558201516001600160a01b03165f908152600260209081526040808320855184529091529020805490916009916143ea91600160481b90910416615a94565b91906101000a8154816001600160401b0302191690836001600160401b031602179055505f614419833a6146f2565b905061110a81835f0151614749565b610f8f8160200151825f0151614749565b5f825f01828154811061444e5761444e615556565b905f5260205f200154905092915050565b5f8181526001830160205260408120546144a457508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610bc8565b505f610bc8565b6060815f018054806020026020016040519081016040528092919081815260200182805480156144f857602002820191905f5260205f20905b8154815260200190600101908083116144e4575b50505050509050919050565b5f61112183835b5f81815260018301602052604081205480156141d8575f61452d6001836156d2565b85549091505f90614540906001906156d2565b905080821461459f575f865f01828154811061455e5761455e615556565b905f5260205f200154905080875f01848154811061457e5761457e615556565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145b0576145b0615793565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610bc8565b5f6145ee613578565b54600160401b900460ff16919050565b806001600160a01b03163b5f0361463357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610c1e565b5f516020615ae15f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161467d9190615ab5565b5f60405180830381855af49150503d805f81146146b5576040519150601f19603f3d011682016040523d82523d5f602084013e6146ba565b606091505b50915091506146ca8583836147e6565b95945050505050565b34156135a85760405163b398979f60e01b815260040160405180910390fd5b5f5f5a600a54600160201b900463ffffffff1685010390508281025f600a5460649190920160ff600160a01b8404168201020464e8d4a5100063ffffffff600160401b909304929092169190910201949350505050565b80156147af575f81815260046020526040902080546001600160601b0390811690614778908516821015613930565b81546001600160601b039185900382166001600160601b031991821617909255600980548083168601909216919092161790555050565b600880546001600160601b03600160601b80830482168601909116026bffffffffffffffffffffffff60601b199091161790555050565b6060826147fb576147f682614842565b611121565b815115801561481257506001600160a01b0384163b155b1561483b57604051639996b31560e01b81526001600160a01b0385166004820152602401610c1e565b5080611121565b8051156148525780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b8260028101928215614899579160200282015b8281111561489957825182559160200191906001019061487e565b506148a59291506149aa565b5090565b828054828255905f5260205f20908101928215614899579160200282015b8281111561489957825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906148c7565b6040518061012001604052805f81526020015f81526020015f63ffffffff1681526020015f6001600160401b031681526020016060815260200161493e6149be565b8152606060208201819052604082018190525f91015290565b60405180606001604052806003906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5080545f8255905f5260205f209081019061172991905b5b808211156148a5575f81556001016149ab565b60405180606001604052806149d16149e5565b815260200160608152602001606081525090565b60405180604001604052806149f8614a0a565b8152602001614a05614a0a565b905290565b60405180604001604052806002906020820280368337509192915050565b5f60208284031215614a38575f5ffd5b81356001600160e01b031981168114611121575f5ffd5b803563ffffffff81168114614a62575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715614a9d57614a9d614a67565b60405290565b5f82601f830112614ab2575f5ffd5b81356001600160401b03811115614acb57614acb614a67565b604051601f8201601f19908116603f011681016001600160401b0381118282101715614af957614af9614a67565b604052818152838201602001851015614b10575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60c08284031215614b3c575f5ffd5b50919050565b5f5f5f5f60808587031215614b55575f5ffd5b614b5e85614a4f565b93506020850135925060408501356001600160401b03811115614b7f575f5ffd5b614b8b87828801614aa3565b92505060608501356001600160401b03811115614ba6575f5ffd5b614bb287828801614b2c565b91505092959194509250565b6001600160a01b0381168114611729575f5ffd5b5f5f60408385031215614be3575f5ffd5b823591506020830135614bf581614bbe565b809150509250929050565b5f60208284031215614c10575f5ffd5b813561112181614bbe565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111216020830184614c1b565b5f60208284031215614c6b575f5ffd5b5035919050565b5f5f60408385031215614c83575f5ffd5b614c8c83614a4f565b946020939093013593505050565b5f5f5f5f5f5f5f60e0888a031215614cb0575f5ffd5b614cb988614a4f565b9650614cc760208901614a4f565b9550614cd560408901614a4f565b9450614ce360608901614a4f565b9350614cf160808901614a4f565b925060a088013560ff81168114614d06575f5ffd5b9150614d1460c08901614a4f565b905092959891949750929550565b5f5f60408385031215614d33575f5ffd5b8235614d3e81614bbe565b91506020830135614bf581614bbe565b5f60208284031215614d5e575f5ffd5b61112182614a4f565b5f5f60408385031215614d78575f5ffd5b8235614d8381614bbe565b915060208301356001600160401b03811115614d9d575f5ffd5b614da985828601614aa3565b9150509250929050565b5f5f83601f840112614dc3575f5ffd5b5081356001600160401b03811115614dd9575f5ffd5b602083019150836020828501011115613faf575f5ffd5b5f5f5f5f5f60608688031215614e04575f5ffd5b8535945060208601356001600160401b03811115614e20575f5ffd5b614e2c88828901614db3565b90955093505060408601356001600160401b03811115614e4a575f5ffd5b614e5688828901614db3565b969995985093965092949392505050565b805f5b600281101561110a578151845260209384019390910190600101614e6a565b5f8151614e97848251614e67565b60200151614ea86040850182614e67565b50602082015160c06080850152614ec260c0850182614c1b565b9050604083015184820360a08601526146ca8282614c1b565b89815288602082015263ffffffff881660408201526001600160401b038716606082015261012060808201525f614f16610120830188614c1b565b82810360a0840152614f288188614e89565b905082810360c0840152614f3c8187614c1b565b905082810360e0840152614f508186614c1b565b91505060018060a01b0383166101008301529a9950505050505050505050565b5f5f5f5f60608587031215614f83575f5ffd5b614f8c85614a4f565b935060208501356001600160401b03811115614fa6575f5ffd5b614fb287828801614db3565b90945092505060408501356001600160401b03811115614ba6575f5ffd5b5f5f60408385031215614fe1575f5ffd5b50508035926020909101359150565b5f8151808452602084019350602083015f5b828110156150295781516001600160a01b0316865260209586019590910190600101615002565b5093949350505050565b602081525f6111216020830184614ff0565b602080825282518282018190525f918401906040840190835b8181101561507c57835183526020938401939092019160010161505e565b509095945050505050565b6020815281516020820152602082015160408201525f60408301516150b4606084018263ffffffff169052565b5060608301516001600160401b038116608084015250608083015161012060a08401526150e5610140840182614c1b565b905060a0840151601f198483030160c08501526151028282614e89565b91505060c0840151601f198483030160e08501526151208282614c1b565b91505060e0840151601f198483030161010085015261513f8282614c1b565b9150506101008401516137696101208501826001600160a01b03169052565b5f5f5f60408486031215615170575f5ffd5b83356001600160401b03811115615185575f5ffd5b61519186828701614b2c565b93505060208401356001600160401b038111156151ac575f5ffd5b6151b886828701614db3565b9497909650939450505050565b6001600160601b03851681526001600160401b03841660208201526001600160a01b03831660408201526080606082018190525f90611c9190830184614ff0565b5f5f8335601e1984360301811261521b575f5ffd5b83016020810192503590506001600160401b03811115615239575f5ffd5b803603821315613faf575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61528c6080830183615206565b60c060808601526152a160c086018284615247565b9150506152b160a0840184615206565b85830360a0870152611c91838284615247565b602081525f611121602083018461526f565b5f82601f8301126152e5575f5ffd5b6152ed614a7b565b8060408401858111156152fe575f5ffd5b845b8181101561507c578035845260209384019301615300565b5f60808284031215615328575f5ffd5b615330614a7b565b905061533c83836152d6565b815261534b83604084016152d6565b602082015292915050565b5f60c08236031215615366575f5ffd5b604051606081016001600160401b038111828210171561538857615388614a67565b6040526153953684615318565b815260808301356001600160401b038111156153af575f5ffd5b6153bb36828601614aa3565b60208301525060a08301356001600160401b038111156153d9575f5ffd5b6153e536828601614aa3565b60408301525092915050565b600181811c9082168061540557607f821691505b602082108103614b3c57634e487b7160e01b5f52602260045260245ffd5b601f821115610f8f57805f5260205f20601f840160051c810160208510156154485750805b601f840160051c820191505b818110156117f8575f8155600101615454565b81516001600160401b0381111561548057615480614a67565b6154948161548e84546153f1565b84615423565b6020601f8211600181146154c6575f83156154af5750848201515b5f19600385901b1c1916600184901b1784556117f8565b5f84815260208120601f198516915b828110156154f557878501518255602094850194600190920191016154d5565b508482101561551257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b606081525f6155336060830186614c1b565b8281036020840152615545818661526f565b915050826040830152949350505050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f6155c7602c83018461556a565b605f60f81b81526001019392505050565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261325f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261335f60f01b60208201525f6155c7602283018461556a565b7f424c4f434b4c4f434b5f424e3235345f584d443a4b454343414b2d3235365f48815261345f60f01b60208201525f6155c7602283018461556a565b634e487b7160e01b5f52601160045260245ffd5b6001600160601b038181168382160190811115610bc857610bc861568c565b80820180821115610bc857610bc861568c565b81810381811115610bc857610bc861568c565b6001600160401b038181168382160190811115610bc857610bc861568c565b6001600160601b038281168282160390811115610bc857610bc861568c565b5f5f8335601e19843603018112615738575f5ffd5b8301803591506001600160401b03821115615751575f5ffd5b602001915036819003821315613faf575f5ffd5b5f611cc0615773838661556a565b8461556a565b5f60808284031215615789575f5ffd5b6111218383615318565b634e487b7160e01b5f52603160045260245ffd5b5f602082840312156157b7575f5ffd5b81518015158114611121575f5ffd5b5f6001600160401b0382166001600160401b0381036157e7576157e761568c565b60010192915050565b606081525f6158026060830186614c1b565b82810360208401526158148186614c1b565b90508281036040840152611c918185614c1b565b5f60208284031215615838575f5ffd5b5051919050565b634e487b7160e01b5f52601260045260245ffd5b8082028115828204841417610bc857610bc861568c565b828152604060208201525f611cc06040830184614c1b565b5f815461588e816153f1565b8085526001821680156158a857600181146158c4576158f8565b60ff1983166020870152602082151560051b87010193506158f8565b845f5260205f205f5b838110156158ef5781546020828a0101526001820191506020810190506158cd565b87016020019450505b50505092915050565b805f5b600281101561110a578154845260209093019260019182019101615904565b606081525f6159356060830186615882565b82810360208401526159478186615901565b6159576040820160028701615901565b60c0608082015261596e60c0820160048701615882565b81810360a08301526159838160058801615882565b9150508281036040840152611c918185615882565b5f6159ac6159a6838b61556a565b8961556a565b6001600160f81b031960f889811b8216835288811b8216600184015287901b1660028201526159de600382018661556a565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f615a27602183018561556a565b60f89390931b6001600160f81b031916835250506001019392505050565b5f63ffffffff831680615a6657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160491505092915050565b63ffffffff8181168382160190811115610bc857610bc861568c565b5f6001600160401b03821680615aac57615aac61568c565b5f190192915050565b5f611121828461556a56fec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220380d1acfd2c11b36009bf449c1b9c1894bfe02a4fb8d8c35e32e1b449239fa8364736f6c634300081c0033\";\n\ntype BlocklockSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BlocklockSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BlocklockSender__factory extends ContractFactory {\n  constructor(...args: BlocklockSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      BlocklockSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): BlocklockSender__factory {\n    return super.connect(runner) as BlocklockSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BlocklockSenderInterface {\n    return new Interface(_abi) as BlocklockSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): BlocklockSender {\n    return new Contract(address, _abi, runner) as unknown as BlocklockSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  BigNumberish,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  BlocklockSignatureScheme,\n  BlocklockSignatureSchemeInterface,\n} from \"../BlocklockSignatureScheme\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"y\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"DST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKey\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKeyBytes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToBytes\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToPoint\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"verifySignature\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"publicKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"error\",\n    name: \"BNAddFailed\",\n    inputs: [\n      {\n        name: \"input\",\n        type: \"uint256[4]\",\n        internalType: \"uint256[4]\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidDSTLength\",\n    inputs: [\n      {\n        name: \"dst\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidFieldElement\",\n    inputs: [\n      {\n        name: \"x\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MapToPointFailed\",\n    inputs: [\n      {\n        name: \"noSqrt\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ModExpFailed\",\n    inputs: [\n      {\n        name: \"base\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"exponent\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"modulus\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x5f60c081815260e0829052608081815261014060405261010083815261012084905260a052919061003390829060026102cd565b50602082015161004990600280840191906102cd565b505050348015610057575f5ffd5b506040516127e73803806127e78339810160408190526100769161039f565b6040805180820190915282815260208101829052829082905f61009b818560026102cd565b5060208201516100b190600280840191906102cd565b5090505050506100cd6100c861010260201b60201c565b610106565b6040516020016100dd91906103d2565b604051602081830303815290604052600490816100fa91906104b3565b5050506105c5565b4690565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b602082015281516042808252608082019093526060925f9190602082018180368337019050509050600360fc1b815f815181106101665761016661056d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106101945761019461056d565b60200101906001600160f81b03191690815f1a9053505f5b60208110156102c5578260048683602081106101ca576101ca61056d565b1a60f81b6001600160f81b031916901c60f81c60ff16815181106101f0576101f061056d565b01602001516001600160f81b0319168261020b836002610595565b6102169060026105b2565b815181106102265761022661056d565b60200101906001600160f81b03191690815f1a9053508285826020811061024f5761024f61056d565b825191901a600f169081106102665761026661056d565b01602001516001600160f81b03191682610281836002610595565b61028c9060026105b2565b6102979060016105b2565b815181106102a7576102a761056d565b60200101906001600160f81b03191690815f1a9053506001016101ac565b509392505050565b82600281019282156102fb579160200282015b828111156102fb5782518255916020019190600101906102e0565b5061030792915061030b565b5090565b5b80821115610307575f815560010161030c565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112610342575f5ffd5b604080519081016001600160401b03811182821017156103645761036461031f565b806040525080604084018581111561037a575f5ffd5b845b8181101561039457805183526020928301920161037c565b509195945050505050565b5f5f608083850312156103b0575f5ffd5b6103ba8484610333565b91506103c98460408501610333565b90509250929050565b7f424c4f434b4c4f434b5f424e32353447315f584d443a4b454343414b2d32353681526b5f535644575f524f5f48315f60a01b60208201525f82518060208501602c85015e605f60f81b602c939091019283015250602d01919050565b600181811c9082168061044357607f821691505b60208210810361046157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104ae57805f5260205f20601f840160051c8101602085101561048c5750805b601f840160051c820191505b818110156104ab575f8155600101610498565b50505b505050565b81516001600160401b038111156104cc576104cc61031f565b6104e0816104da845461042f565b84610467565b6020601f821160018114610512575f83156104fb5750848201515b5f19600385901b1c1916600184901b1784556104ab565b5f84815260208120601f198516915b828110156105415787850151825560209485019460019092019101610521565b508482101561055e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176105ac576105ac610581565b92915050565b808201808211156105ac576105ac610581565b612215806105d25f395ff3fe608060405234801561000f575f5ffd5b5060043610610085575f3560e01c80638a1f165a116100585780638a1f165a146100f3578063acae9fee14610125578063eae1e15b1461012d578063f6e548e914610140575f5ffd5b80632e334452146100895780633033cc51146100a85780633408e470146100d05780635f7c7522146100de575b5f5ffd5b610091610163565b60405161009f929190611e88565b60405180910390f35b6100bb6100b6366004611ee8565b6101dc565b6040805192835260208301919091520161009f565b60405146815260200161009f565b6100e66102bc565b60405161009f9190611f55565b6100e660405180604001604052806013815260200172424e3235342d424c532d424c4f434b4c4f434b60681b81525081565b6100e6610348565b6100e661013b366004611ee8565b6103c7565b61015361014e366004611f67565b610401565b604051901515815260200161009f565b61016b611de1565b610173611de1565b60408051808201918290525f91600291908390839082845b81548152602001906001019080831161018b575050604080518082019182905294965085935060029250905082845b8154815260200190600101908083116101ba5750505050509050915091509091565b5f5f5f6102a6600480546101ef90612006565b80601f016020809104026020016040519081016040528092919081815260200182805461021b90612006565b80156102665780601f1061023d57610100808354040283529160200191610266565b820191905f5260205f20905b81548152906001019060200180831161024957829003601f168201915b505050505086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506104e192505050565b80516020909101519093509150505b9250929050565b600480546102c990612006565b80601f01602080910402602001604051908101604052809291908181526020018280546102f590612006565b80156103405780601f1061031757610100808354040283529160200191610340565b820191905f5260205f20905b81548152906001019060200180831161032357829003601f168201915b505050505081565b60408051608081018083526060926103c292915f91839190820190839060029082845b81548152602001906001019080831161036b57505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116103a1575050505050815250506105ad565b905090565b60605f5f6103d585856101dc565b915091506103f6604051806040016040528084815260200183815250610609565b925050505b92915050565b5f5f61044188888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f61048287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061064292505050565b90505f6104c386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506106c592505050565b90505f6104d1838386610766565b509b9a5050505050505050505050565b604080518082019091525f80825260208201525f6104ff84846108d9565b90505f61051282825b602002015161098e565b90505f610520836001610508565b905061052a611dff565b825181526020808401518282015282516040808401919091529083015160608301525f908460808460066107d05a03fa9050806105855781604051630251c7e160e31b815260040161057c9190612052565b60405180910390fd5b6040805180820190915284518152602081018560016020020151905298975050505050505050565b60408051608080825260a082019092526060915f91906020820181803683375050845180516020918201519682015180519083015192850191909152604084019690965260608301959095525060808101939093525090919050565b6040805181815260608181018352915f919060208201818036833750508451602095860151958301525060408101939093525090919050565b604080518082019091525f808252602082015281516040146106a65760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204731206279746573206c656e677468000000000000000000604482015260640161057c565b5060208181015160409283015183518085019094529083529082015290565b6106cd611e1d565b815160801461071e5760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964204732206279746573206c656e677468000000000000000000604482015260640161057c565b50602081810151604080840151606080860151608096870151845197880185528785019586529187019290925292855281518083019092528152808301919091529082015290565b5f5f5f604051806101800160405280875f01518152602001876020015181526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec81526020017f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d8152602001855f0151815260200185602001518152602001865f01516001600281106108495761084961203e565b60200201518152602001865f01515f600281106108685761086861203e565b6020020151815260200186602001516001600281106108895761088961203e565b6020020151815260200186602001515f600281106108a9576108a961203e565b6020020151905290506108ba611e42565b6020816101808460086107d05a03fa9051151597909650945050505050565b6108e1611de1565b5f6108ec8484610c6f565b90505f5f5f5f601885016001600160c01b0381511693506030860190506001600160c01b0381511694505f5160206121a05f395f51905f52855f5160206121a05f395f51905f52600160c01b870908604887015160608801516001600160c01b03908116975016945092505f5160206121a05f395f51905f5290508481600160c01b860908604080518082019091529283526020830152509695505050505050565b610996611de1565b5f5160206121a05f395f51905f5282106109c65760405163d53e941560e01b81526004810183905260240161057c565b5f5f5160206121a05f395f51905f5260045f5160206121a05f395f51905f528586090990505f5f5160206121a05f395f51905f528260010890505f5160206121a05f395f51905f52610a25835f5160206121a05f395f51905f52612096565b60010891505f610a445f5160206121a05f395f51905f52838509610dc6565b90505f5f5160206121a05f395f51905f5278016789af3a83522eb353c98fc6b36d713d5d8d1cc5dffffffa5f5160206121a05f395f51905f52845f5160206121a05f395f51905f52888b09090990505f5f5160206121a05f395f51905f52610ab9835f5160206121a05f395f51905f52612096565b5f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f52835f5160206121c05f395f51905f520890505f5f5160206121a05f395f51905f5286870990505f5f5160206121a05f395f51905f5286830990505f5f5160206121a05f395f51905f52805f5160206121a05f395f51905f528485097f10216f7ba065e00de81ac1e7808072c9dd2b2385cd7b438469602eb24829a9bd0960010890505f5f610b6e610b6988610dd0565b610e09565b5f0b600103610bbe57868c52610b8387610dd0565b9050610b8e81610e6e565b60208e0191909152915081610bb95760405163396ec77160e01b81526004810182905260240161057c565b610c21565b610bca610b6987610dd0565b5f0b600103610bdf57858c52610b8386610dd0565b828c52610beb83610dd0565b9050610bf681610e6e565b60208e0191909152915081610c215760405163396ec77160e01b81526004810182905260240161057c565b60208c0151610c2f90610e95565b610c388e610e95565b14610c5f5760208c0151610c59905f5160206121a05f395f51905f52612096565b60208d01525b5050505050505050505050919050565b815160609060ff811115610c9857836040516313727cdd60e11b815260040161057c9190611f55565b60408051608880825260c082019092525f916020820181803683370190505090505f81855f60605f8a88604051602001610cd897969594939291906120c0565b60405160208183030381529060405290505f818051906020012090505f8160018987604051602001610d0d949392919061212a565b60408051808303601f1901815282825280516020820120606080855260808501909352909350915f91602082018180368337019050509050600360015b81811015610da957858418610d6082600161216d565b8d8b604051602001610d75949392919061212a565b60408051808303601f1901815291905260205f19830181028501810195909552805194810194909420939450600101610d4a565b505f19016020908102820101919091529550505050505092915050565b5f6103fb82610ea1565b5f5f5160206121a05f395f51905f5260035f5160206121a05f395f51905f52845f5160206121a05f395f51905f52868709090892915050565b5f5f610e14836115e6565b9050610e2e60015f5160206121a05f395f51905f52612096565b8103610e3d57505f1992915050565b8015801590610e4d575080600114155b156103fb5760405163396ec77160e01b81526004810184905260240161057c565b5f5f610e79836116ae565b9150825f5160206121a05f395f51905f52838409149050915091565b5f6103fb600283612180565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996505050838586099450838586099450838586099450838586099450838186099450508284850993508284850993508284850993508281850993508284850993508284850993508285850993508284850993508284850993508284850993508284850993508284850993508284850993508281850995945050505050565b6040805160c080825260e082019092525f918291906020820181803683370190505060208082018181526040830182905260608301829052608083018690525f5160206121c05f395f51905f5260a08401525f5160206121a05f395f51905f5260c0808501919091529293505f92839160055afa90505f519250806116a75760405163c6daf7ab60e01b8152600481018590525f5160206121c05f395f51905f5260248201525f5160206121a05f395f51905f52604482015260640161057c565b5050919050565b5f5f5160206121a05f395f51905f528083840991508083830981838209828283098385830984848309858484098684850997508684840987858409945087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087878a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a09985087898a09985087898a09985087898a09985087838a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087828a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087848a09985087898a09985087898a09985087898a09985087898a09985087898a09985087868a09985087898a09985087898a099850878a8a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087898a09985087818a09985050868889099750868889099750868889099750868889099750868889099750868889099750868489099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868889099750868989099750868889099750868889099750868889099750868889099750868889099750868689099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868889099750868189099750508587880996508587880996508587880996508585880996508587880996508587880996508587880996508585880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508587880996508581880996508587880996508587880996508587880996508587880996508583880996508587880996508587880996508587880996508584880996508587880996508587880996508587880996508587880996508587880996508581880996505050505050808283099392505050565b60405180604001604052806002906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e30611de1565b8152602001611e3d611de1565b905290565b60405180602001604052806001906020820280368337509192915050565b805f5b6002811015611e82578151845260209384019390910190600101611e63565b50505050565b60808101611e968285611e60565b611ea36040830184611e60565b9392505050565b5f5f83601f840112611eba575f5ffd5b50813567ffffffffffffffff811115611ed1575f5ffd5b6020830191508360208285010111156102b5575f5ffd5b5f5f60208385031215611ef9575f5ffd5b823567ffffffffffffffff811115611f0f575f5ffd5b611f1b85828601611eaa565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611ea36020830184611f27565b5f5f5f5f5f5f60608789031215611f7c575f5ffd5b863567ffffffffffffffff811115611f92575f5ffd5b611f9e89828a01611eaa565b909750955050602087013567ffffffffffffffff811115611fbd575f5ffd5b611fc989828a01611eaa565b909550935050604087013567ffffffffffffffff811115611fe8575f5ffd5b611ff489828a01611eaa565b979a9699509497509295939492505050565b600181811c9082168061201a57607f821691505b60208210810361203857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52603260045260245ffd5b6080810181835f5b600481101561207957815183526020928301929091019060010161205a565b50505092915050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156103fb576103fb612082565b5f81518060208401855e5f93019283525090919050565b5f6120d46120ce838b6120a9565b896120a9565b6001600160f81b031960f889811b8216835288811b8216600184015287901b16600282015261210660038201866120a9565b60f89490941b6001600160f81b031916845250506001909101979650505050505050565b84815260f884901b6001600160f81b03191660208201525f61214f60218301856120a9565b60f89390931b6001600160f81b031916835250506001019392505050565b808201808211156103fb576103fb612082565b5f8261219a57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47183227397098d014dc2822db40c0ac2ecbc0b548b438e5469e10460b6c3e7ea3a26469706673582212205caa4b51dcb44fb7ffd37136b7d8f1021f0fe438a1383457afcecdb09fc9411664736f6c634300081c0033\";\n\ntype BlocklockSignatureSchemeConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: BlocklockSignatureSchemeConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class BlocklockSignatureScheme__factory extends ContractFactory {\n  constructor(...args: BlocklockSignatureSchemeConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    x: [BigNumberish, BigNumberish],\n    y: [BigNumberish, BigNumberish],\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(x, y, overrides || {});\n  }\n  override deploy(\n    x: [BigNumberish, BigNumberish],\n    y: [BigNumberish, BigNumberish],\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(x, y, overrides || {}) as Promise<\n      BlocklockSignatureScheme & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): BlocklockSignatureScheme__factory {\n    return super.connect(runner) as BlocklockSignatureScheme__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): BlocklockSignatureSchemeInterface {\n    return new Interface(_abi) as BlocklockSignatureSchemeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): BlocklockSignatureScheme {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as BlocklockSignatureScheme;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  ConfirmedOwner,\n  ConfirmedOwnerInterface,\n} from \"../ConfirmedOwner\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferRequested\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b5060405161044338038061044383398101604081905261002e9161016a565b805f6001600160a01b03821661008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100ba576100ba816100c2565b505050610197565b336001600160a01b0382160361011a5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610082565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f6020828403121561017a575f5ffd5b81516001600160a01b0381168114610190575f5ffd5b9392505050565b61029f806101a45f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806379ba5097146100435780638da5cb5b1461004d578063f2fde38b1461006b575b5f5ffd5b61004b61007e565b005b5f54604080516001600160a01b039092168252519081900360200190f35b61004b61007936600461023c565b61012c565b6001546001600160a01b031633146100d65760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064015b60405180910390fd5b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610134610140565b61013d81610194565b50565b5f546001600160a01b031633146101925760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016100cd565b565b336001600160a01b038216036101ec5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016100cd565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f6020828403121561024c575f5ffd5b81356001600160a01b0381168114610262575f5ffd5b939250505056fea2646970667358221220ad95a43990a2627a9469404e197585e36750ca2151cb207147d0cb0f0285131564736f6c634300081c0033\";\n\ntype ConfirmedOwnerConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ConfirmedOwnerConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ConfirmedOwner__factory extends ContractFactory {\n  constructor(...args: ConfirmedOwnerConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    newOwner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(newOwner, overrides || {});\n  }\n  override deploy(\n    newOwner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(newOwner, overrides || {}) as Promise<\n      ConfirmedOwner & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): ConfirmedOwner__factory {\n    return super.connect(runner) as ConfirmedOwner__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ConfirmedOwnerInterface {\n    return new Interface(_abi) as ConfirmedOwnerInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ConfirmedOwner {\n    return new Contract(address, _abi, runner) as unknown as ConfirmedOwner;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  ConfirmedOwnerWithProposal,\n  ConfirmedOwnerWithProposalInterface,\n} from \"../ConfirmedOwnerWithProposal\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"pendingOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferRequested\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b5060405161045f38038061045f83398101604081905261002e91610182565b6001600160a01b0382166100895760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b8576100b8816100bf565b50506101b3565b336001600160a01b038216036101175760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610080565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b038116811461017d575f5ffd5b919050565b5f5f60408385031215610193575f5ffd5b61019c83610167565b91506101aa60208401610167565b90509250929050565b61029f806101c05f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c806379ba5097146100435780638da5cb5b1461004d578063f2fde38b1461006b575b5f5ffd5b61004b61007e565b005b5f54604080516001600160a01b039092168252519081900360200190f35b61004b61007936600461023c565b61012c565b6001546001600160a01b031633146100d65760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064015b60405180910390fd5b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610134610140565b61013d81610194565b50565b5f546001600160a01b031633146101925760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016100cd565b565b336001600160a01b038216036101ec5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016100cd565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f6020828403121561024c575f5ffd5b81356001600160a01b0381168114610262575f5ffd5b939250505056fea26469706673582212207d3c5c87a2e12c199b13c2ff7c2d3dd92a3ed12e0d9148fd9d55a98773fbe16564736f6c634300081c0033\";\n\ntype ConfirmedOwnerWithProposalConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ConfirmedOwnerWithProposalConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ConfirmedOwnerWithProposal__factory extends ContractFactory {\n  constructor(...args: ConfirmedOwnerWithProposalConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    newOwner: AddressLike,\n    pendingOwner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(newOwner, pendingOwner, overrides || {});\n  }\n  override deploy(\n    newOwner: AddressLike,\n    pendingOwner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(newOwner, pendingOwner, overrides || {}) as Promise<\n      ConfirmedOwnerWithProposal & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): ConfirmedOwnerWithProposal__factory {\n    return super.connect(runner) as ConfirmedOwnerWithProposal__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ConfirmedOwnerWithProposalInterface {\n    return new Interface(_abi) as ConfirmedOwnerWithProposalInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ConfirmedOwnerWithProposal {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as ConfirmedOwnerWithProposal;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ContextUpgradeable,\n  ContextUpgradeableInterface,\n} from \"../ContextUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class ContextUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): ContextUpgradeableInterface {\n    return new Interface(_abi) as ContextUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ContextUpgradeable {\n    return new Contract(address, _abi, runner) as unknown as ContextUpgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  DecryptionReceiverBase,\n  DecryptionReceiverBaseInterface,\n} from \"../DecryptionReceiverBase\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"decryptionSender\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IDecryptionSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveDecryptionData\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class DecryptionReceiverBase__factory {\n  static readonly abi = _abi;\n  static createInterface(): DecryptionReceiverBaseInterface {\n    return new Interface(_abi) as DecryptionReceiverBaseInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DecryptionReceiverBase {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as DecryptionReceiverBase;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  DecryptionSender,\n  DecryptionSenderInterface,\n} from \"../DecryptionSender\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fulfillDecryptionRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllErroredRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllFulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCountOfUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.DecryptionRequest\",\n        components: [\n          {\n            name: \"schemeID\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"ciphertext\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"condition\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"decryptionKey\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"signature\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"isFulfilled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMembers\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasErrored\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"initialize\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_signatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"isInFlight\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"lastRequestID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"results\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"registerCiphertext\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requests\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"callback\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"isFulfilled\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSignatureSchemeAddressProvider\",\n    inputs: [\n      {\n        name: \"newSignatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"signatureSchemeAddressProvider\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract ISignatureSchemeAddressProvider\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"upgradeToAndCall\",\n    inputs: [\n      {\n        name: \"newImplementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n  {\n    type: \"event\",\n    name: \"DecryptionReceiverCallbackFailed\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DecryptionReceiverCallbackSuccess\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"DecryptionRequested\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"callback\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n      {\n        name: \"requestedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SignatureSchemeAddressProviderUpdated\",\n    inputs: [\n      {\n        name: \"newSignatureSchemeAddressProvider\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnauthorizedCallContext\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnsupportedProxiableUUID\",\n    inputs: [\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60a0604052306080525f600155348015610017575f5ffd5b5060015f55610024610029565b6100db565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100795760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d85780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516131f26101015f395f8181611efb01528181611f24015261207101526131f25ff3fe6080604052600436106101c5575f3560e01c80639010d07c116100f2578063c58343ef11610092578063e63b5d5811610062578063e63b5d581461054e578063e6b3ca7114610562578063f7cef80014610581578063f87f0e61146105a0575f5ffd5b8063c58343ef146104c5578063ca15c873146104f1578063cd802c9114610510578063d547741f1461052f575f5ffd5b8063a3246ad3116100cd578063a3246ad31461041e578063ac9650d81461044a578063ad3cb1cc14610476578063b0947289146104a6575f5ffd5b80639010d07c146103b557806391d14854146103ec578063a217fddf1461040b575f5ffd5b80634b96e16611610168578063571d708711610138578063571d70871461033b5780636f421ea91461034f57806375b238fc1461036357806381d12c5814610383575f5ffd5b80634b96e166146102bd5780634f1ef286146102de57806352d1902d146102f157806354fd4d5014610305575f5ffd5b80632f2ff15d116101a35780632f2ff15d1461024b57806336568abe1461026a57806347c0318614610289578063485cc9551461029e575f5ffd5b806301ffc9a7146101c957806316cc9a98146101fd578063248a9ca31461021e575b5f5ffd5b3480156101d4575f5ffd5b506101e86101e336600461271f565b6105bf565b60405190151581526020015b60405180910390f35b348015610208575f5ffd5b5061021c61021736600461275a565b6105e9565b005b348015610229575f5ffd5b5061023d610238366004612775565b610648565b6040519081526020016101f4565b348015610256575f5ffd5b5061021c61026536600461278c565b610668565b348015610275575f5ffd5b5061021c61028436600461278c565b61068a565b348015610294575f5ffd5b5061023d60015481565b3480156102a9575f5ffd5b5061021c6102b83660046127ba565b6106c2565b3480156102c8575f5ffd5b506102d1610882565b6040516101f491906127e6565b61021c6102ec366004612892565b610893565b3480156102fc575f5ffd5b5061023d6108b2565b348015610310575f5ffd5b50604080518082019091526005815264302e302e3160d81b60208201525b6040516101f4919061294c565b348015610346575f5ffd5b506102d16108cd565b34801561035a575f5ffd5b506102d16108d9565b34801561036e575f5ffd5b5061023d5f51602061319d5f395f51905f5281565b34801561038e575f5ffd5b506103a261039d366004612775565b6108e5565b6040516101f4979695949392919061295e565b3480156103c0575f5ffd5b506103d46103cf3660046129e3565b610bcc565b6040516001600160a01b0390911681526020016101f4565b3480156103f7575f5ffd5b506101e861040636600461278c565b610bf9565b348015610416575f5ffd5b5061023d5f81565b348015610429575f5ffd5b5061043d610438366004612775565b610c2f565b6040516101f49190612a03565b348015610455575f5ffd5b50610469610464366004612a43565b610c5f565b6040516101f49190612ab2565b348015610481575f5ffd5b5061032e604051806040016040528060058152602001640352e302e360dc1b81525081565b3480156104b1575f5ffd5b506101e86104c0366004612775565b610d44565b3480156104d0575f5ffd5b506104e46104df366004612775565b610d50565b6040516101f49190612b15565b3480156104fc575f5ffd5b5061023d61050b366004612775565b6110ad565b34801561051b575f5ffd5b506101e861052a366004612775565b6110d1565b34801561053a575f5ffd5b5061021c61054936600461278c565b6110ee565b348015610559575f5ffd5b5061023d61110a565b34801561056d575f5ffd5b506003546103d4906001600160a01b031681565b34801561058c575f5ffd5b5061021c61059b366004612c1c565b611115565b3480156105ab575f5ffd5b5061023d6105ba366004612c93565b611883565b5f6001600160e01b03198216635a05180f60e01b14806105e357506105e382611df6565b92915050565b6105ff5f51602061319d5f395f51905f52611e2a565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f7724bcb43a09ae6582affdee2f0ace931e26f2ffa8b5c334baf0a39e9dc03426905f90a250565b5f9081525f51602061317d5f395f51905f52602052604090206001015490565b61067182610648565b61067a81611e2a565b6106848383611e37565b50505050565b6001600160a01b03811633146106b35760405163334bd91960e11b815260040160405180910390fd5b6106bd8282611e79565b505050565b5f6106cb611eb2565b805490915060ff600160401b82041615906001600160401b03165f811580156106f15750825b90505f826001600160401b0316600114801561070c5750303b155b90508115801561071a575080155b156107385760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561076257845460ff60401b1916600160401b1785555b61076a611eda565b610772611eda565b6107895f51602061319d5f395f51905f5288611e37565b6107ce5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6107d85f88611e37565b6108185760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064016107c5565b600380546001600160a01b0319166001600160a01b038816179055831561087957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b606061088e6006611ee4565b905090565b61089b611ef0565b6108a482611f94565b6108ae8282611faa565b5050565b5f6108bb612066565b505f51602061315d5f395f51905f5290565b606061088e6004611ee4565b606061088e6008611ee4565b60026020525f90815260409020805481906108ff90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461092b90612d2f565b80156109765780601f1061094d57610100808354040283529160200191610976565b820191905f5260205f20905b81548152906001019060200180831161095957829003601f168201915b50505050509080600101805461098b90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546109b790612d2f565b8015610a025780601f106109d957610100808354040283529160200191610a02565b820191905f5260205f20905b8154815290600101906020018083116109e557829003601f168201915b505050505090806002018054610a1790612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390612d2f565b8015610a8e5780601f10610a6557610100808354040283529160200191610a8e565b820191905f5260205f20905b815481529060010190602001808311610a7157829003601f168201915b505050505090806003018054610aa390612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610acf90612d2f565b8015610b1a5780601f10610af157610100808354040283529160200191610b1a565b820191905f5260205f20905b815481529060010190602001808311610afd57829003601f168201915b505050505090806004018054610b2f90612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5b90612d2f565b8015610ba65780601f10610b7d57610100808354040283529160200191610ba6565b820191905f5260205f20905b815481529060010190602001808311610b8957829003601f168201915b505050600590930154919250506001600160a01b0381169060ff600160a01b9091041687565b5f8281525f51602061313d5f395f51905f52602081905260408220610bf190846120af565b949350505050565b5f9182525f51602061317d5f395f51905f52602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f8181525f51602061313d5f395f51905f526020819052604090912060609190610c5890611ee4565b9392505050565b604080515f815260208101909152606090826001600160401b03811115610c8857610c88612828565b604051908082528060200260200182016040528015610cbb57816020015b6060815260200190600190039081610ca65790505b5091505f5b83811015610d3c57610d1730868684818110610cde57610cde612d8e565b9050602002810190610cf09190612da2565b85604051602001610d0393929190612dfb565b6040516020818303038152906040526120ba565b838281518110610d2957610d29612d8e565b6020908102919091010152600101610cc0565b505092915050565b5f6105e360088361212c565b610d996040518060e0016040528060608152602001606081526020016060815260200160608152602001606081526020015f6001600160a01b031681526020015f151581525090565b5f8281526002602052604090819020815160e08101909252805482908290610dc090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610dec90612d2f565b8015610e375780601f10610e0e57610100808354040283529160200191610e37565b820191905f5260205f20905b815481529060010190602001808311610e1a57829003601f168201915b50505050508152602001600182018054610e5090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7c90612d2f565b8015610ec75780601f10610e9e57610100808354040283529160200191610ec7565b820191905f5260205f20905b815481529060010190602001808311610eaa57829003601f168201915b50505050508152602001600282018054610ee090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0c90612d2f565b8015610f575780601f10610f2e57610100808354040283529160200191610f57565b820191905f5260205f20905b815481529060010190602001808311610f3a57829003601f168201915b50505050508152602001600382018054610f7090612d2f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9c90612d2f565b8015610fe75780601f10610fbe57610100808354040283529160200191610fe7565b820191905f5260205f20905b815481529060010190602001808311610fca57829003601f168201915b5050505050815260200160048201805461100090612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461102c90612d2f565b80156110775780601f1061104e57610100808354040283529160200191611077565b820191905f5260205f20905b81548152906001019060200180831161105a57829003601f168201915b5050509183525050600591909101546001600160a01b0381166020830152600160a01b900460ff16151560409091015292915050565b5f8181525f51602061313d5f395f51905f52602081905260408220610c5890612143565b5f6110dd60068361212c565b806105e357506105e360088361212c565b6110f782610648565b61110081611e2a565b6106848383611e79565b5f61088e6006612143565b61111d61214c565b611126856110d1565b6111865760405162461bcd60e51b815260206004820152602b60248201527f4e6f2070656e64696e672072657175657374207769746820737065636966696560448201526a19081c995c5d595cdd125160aa1b60648201526084016107c5565b5f85815260026020526040808220815160e081019092528054829082906111ac90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546111d890612d2f565b80156112235780601f106111fa57610100808354040283529160200191611223565b820191905f5260205f20905b81548152906001019060200180831161120657829003601f168201915b5050505050815260200160018201805461123c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461126890612d2f565b80156112b35780601f1061128a576101008083540402835291602001916112b3565b820191905f5260205f20905b81548152906001019060200180831161129657829003601f168201915b505050505081526020016002820180546112cc90612d2f565b80601f01602080910402602001604051908101604052809291908181526020018280546112f890612d2f565b80156113435780601f1061131a57610100808354040283529160200191611343565b820191905f5260205f20905b81548152906001019060200180831161132657829003601f168201915b5050505050815260200160038201805461135c90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461138890612d2f565b80156113d35780601f106113aa576101008083540402835291602001916113d3565b820191905f5260205f20905b8154815290600101906020018083116113b657829003601f168201915b505050505081526020016004820180546113ec90612d2f565b80601f016020809104026020016040519081016040528092919081815260200182805461141890612d2f565b80156114635780601f1061143a57610100808354040283529160200191611463565b820191905f5260205f20905b81548152906001019060200180831161144657829003601f168201915b5050509183525050600591909101546001600160a01b038082166020840152600160a01b90910460ff16151560409283015282516003549251630b76139f60e31b8152939450925f9290911690635bb09cf8906114c490859060040161294c565b602060405180830381865afa1580156114df573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115039190612e1a565b90506001600160a01b03811661154c5760405162461bcd60e51b815260206004820152600e60248201526d696e76616c696420736368656d6560901b60448201526064016107c5565b604080840151905163eae1e15b60e01b815282915f916001600160a01b0384169163eae1e15b91611580919060040161294c565b5f60405180830381865afa15801561159a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115c19190810190612e35565b9050816001600160a01b031663f6e548e9828989866001600160a01b031663acae9fee6040518163ffffffff1660e01b81526004015f60405180830381865afa158015611610573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116379190810190612e35565b6040518563ffffffff1660e01b81526004016116569493929190612ed1565b602060405180830381865afa158015611671573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116959190612f15565b6116e15760405162461bcd60e51b815260206004820152601d60248201527f5369676e617475726520766572696669636174696f6e206661696c656400000060448201526064016107c5565b5f8560a001516001600160a01b0316635d3be00160e01b8c8c8c8c8c604051602401611711959493929190612f34565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161174f9190612f6c565b5f604051808303815f865af19150503d805f8114611788576040519150601f19603f3d011682016040523d82523d5f602084013e61178d565b606091505b50505f8c8152600260205260409020600501805460ff60a01b1916600160a01b17905590506117bd60068c612174565b5080611807576117ce60088c61217f565b506040518b81527f3fed05c5d3a79e0e2f23ffd594267f0e29799ad1b4b6a7756138d5247baa4a7b9060200160405180910390a161186d565b6118108b610d44565b156118225761182060088c612174565b505b61182d60048c61217f565b508a7f0a1f5b3782d8f604353407c980dbfe6b55499c5b92cb8c39f089c73f348407e68b8b8b8b6040516118649493929190612f77565b60405180910390a25b50505050505061187c60015f55565b5050505050565b5f6001805f8282546118959190612f9d565b9091555050600354604051632fc9fa3360e01b81526001600160a01b0390911690632fc9fa33906118cc908a908a90600401612fb0565b602060405180830381865afa1580156118e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190b9190612f15565b6119575760405162461bcd60e51b815260206004820152601e60248201527f5369676e617475726520736368656d65206e6f7420737570706f72746564000060448201526064016107c5565b61199e600161100087878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b6119f85760405162461bcd60e51b815260206004820152602560248201527f43697068657274657874206661696c6564206c656e67746820626f756e647320604482015264636865636b60d81b60648201526084016107c5565b611a3f600161100085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525092949392505061218a9050565b611a975760405162461bcd60e51b8152602060048201526024808201527f436f6e646974696f6e206661696c6564206c656e67746820626f756e647320636044820152636865636b60e01b60648201526084016107c5565b611ad583838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061221a92505050565b15611b2e5760405162461bcd60e51b815260206004820152602360248201527f436f6e646974696f6e2062797465732063616e6e6f7420626520616c6c207a65604482015262726f7360e81b60648201526084016107c5565b600354604051630b76139f60e31b81525f916001600160a01b031690635bb09cf890611b60908b908b90600401612fb0565b602060405180830381865afa158015611b7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9f9190612e1a565b90506001600160a01b038116611bf75760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e617475726520736368656d65000000000000000060448201526064016107c5565b6040518060e0016040528089898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250604080516020601f8a01819004810282018101909252888152918101919089908990819084018382808284375f92019190915250505090825250604080516020601f8801819004810282018101909252868152918101919087908790819084018382808284375f92018290525093855250506040805160208181018352848252808601919091528151808201835284815282860152336060860152608090940183905260015483526002909352502081518190611cf79082613007565b5060208201516001820190611d0c9082613007565b5060408201516002820190611d219082613007565b5060608201516003820190611d369082613007565b5060808201516004820190611d4b9082613007565b5060a08201516005909101805460c0909301511515600160a01b026001600160a81b03199093166001600160a01b0390921691909117919091179055600154611d969060069061217f565b50336001600160a01b03166001547f133b1acfa49920f88bc8c23faeb2ba43b75b3d6c453290a824f3c85e7733df138a8a88888c8c42604051611ddf97969594939291906130c1565b60405180910390a350506001549695505050505050565b5f6001600160e01b03198216637965db0b60e01b14806105e357506301ffc9a760e01b6001600160e01b03198316146105e3565b611e348133612265565b50565b5f5f51602061313d5f395f51905f5281611e51858561229e565b90508015610bf1575f858152602083905260409020611e70908561233f565b50949350505050565b5f5f51602061313d5f395f51905f5281611e938585612353565b90508015610bf1575f858152602083905260409020611e7090856123cc565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006105e3565b611ee26123e0565b565b60605f610c5883612405565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611f7657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611f6a5f51602061315d5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15611ee25760405163703e46dd60e11b815260040160405180910390fd5b611e345f51602061319d5f395f51905f52611e2a565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612004575060408051601f3d908101601f1916820190925261200191810190613111565b60015b61202c57604051634c9c8ce360e01b81526001600160a01b03831660048201526024016107c5565b5f51602061315d5f395f51905f52811461205c57604051632a87526960e21b8152600481018290526024016107c5565b6106bd838361245e565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611ee25760405163703e46dd60e11b815260040160405180910390fd5b5f610c5883836124b3565b60605f5f846001600160a01b0316846040516120d69190612f6c565b5f60405180830381855af49150503d805f811461210e576040519150601f19603f3d011682016040523d82523d5f602084013e612113565b606091505b50915091506121238583836124d9565b95945050505050565b5f8181526001830160205260408120541515610c58565b5f6105e3825490565b60025f540361216e57604051633ee5aeb560e01b815260040160405180910390fd5b60025f55565b5f610c588383612535565b5f610c58838361260f565b5f818311156122015760405162461bcd60e51b815260206004820152603a60248201527f496e76616c696420626f756e64733a206d696e4c656e6774682063616e6e6f7460448201527f2062652067726561746572207468616e206d61784c656e67746800000000000060648201526084016107c5565b8351838110801590612123575091909111159392505050565b5f805b825181101561225c5782818151811061223857612238612d8e565b01602001516001600160f81b0319161561225457505f92915050565b60010161221d565b50600192915050565b61226f8282610bf9565b6108ae5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016107c5565b5f5f51602061317d5f395f51905f526122b78484610bf9565b612336575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556122ec3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105e3565b5f9150506105e3565b5f610c58836001600160a01b03841661260f565b5f5f51602061317d5f395f51905f5261236c8484610bf9565b15612336575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105e3565b5f610c58836001600160a01b038416612535565b6123e861265b565b611ee257604051631afcd79f60e31b815260040160405180910390fd5b6060815f0180548060200260200160405190810160405280929190818152602001828054801561245257602002820191905f5260205f20905b81548152602001906001019080831161243e575b50505050509050919050565b61246782612674565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156124ab576106bd82826120ba565b6108ae6126d7565b5f825f0182815481106124c8576124c8612d8e565b905f5260205f200154905092915050565b6060826124ee576124e9826126f6565b610c58565b815115801561250557506001600160a01b0384163b155b1561252e57604051639996b31560e01b81526001600160a01b03851660048201526024016107c5565b5080610c58565b5f8181526001830160205260408120548015612336575f612557600183612d7b565b85549091505f9061256a90600190612d7b565b90508082146125c9575f865f01828154811061258857612588612d8e565b905f5260205f200154905080875f0184815481106125a8576125a8612d8e565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806125da576125da613128565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105e3565b5f81815260018301602052604081205461265457508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105e3565b505f6105e3565b5f612664611eb2565b54600160401b900460ff16919050565b806001600160a01b03163b5f036126a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024016107c5565b5f51602061315d5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b3415611ee25760405163b398979f60e01b815260040160405180910390fd5b8051156127065780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f6020828403121561272f575f5ffd5b81356001600160e01b031981168114610c58575f5ffd5b6001600160a01b0381168114611e34575f5ffd5b5f6020828403121561276a575f5ffd5b8135610c5881612746565b5f60208284031215612785575f5ffd5b5035919050565b5f5f6040838503121561279d575f5ffd5b8235915060208301356127af81612746565b809150509250929050565b5f5f604083850312156127cb575f5ffd5b82356127d681612746565b915060208301356127af81612746565b602080825282518282018190525f918401906040840190835b8181101561281d5783518352602093840193909201916001016127ff565b509095945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561286457612864612828565b604052919050565b5f6001600160401b0382111561288457612884612828565b50601f01601f191660200190565b5f5f604083850312156128a3575f5ffd5b82356128ae81612746565b915060208301356001600160401b038111156128c8575f5ffd5b8301601f810185136128d8575f5ffd5b80356128eb6128e68261286c565b61283c565b8181528660208385010111156128ff575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c58602083018461291e565b60e081525f61297060e083018a61291e565b8281036020840152612982818a61291e565b90508281036040840152612996818961291e565b905082810360608401526129aa818861291e565b905082810360808401526129be818761291e565b6001600160a01b039590951660a0840152505090151560c09091015295945050505050565b5f5f604083850312156129f4575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b8181101561281d5783516001600160a01b0316835260209384019390920191600101612a1c565b5f5f60208385031215612a54575f5ffd5b82356001600160401b03811115612a69575f5ffd5b8301601f81018513612a79575f5ffd5b80356001600160401b03811115612a8e575f5ffd5b8560208260051b8401011115612aa2575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015612b0957603f19878603018452612af485835161291e565b94506020938401939190910190600101612ad8565b50929695505050505050565b602081525f825160e06020840152612b3161010084018261291e565b90506020840151601f19848303016040850152612b4e828261291e565b9150506040840151601f19848303016060850152612b6c828261291e565b9150506060840151601f19848303016080850152612b8a828261291e565b9150506080840151601f198483030160a0850152612ba8828261291e565b91505060018060a01b0360a08501511660c084015260c0840151612bd060e085018215159052565b509392505050565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b602083019150836020828501011115612c15575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612c30575f5ffd5b8535945060208601356001600160401b03811115612c4c575f5ffd5b612c5888828901612bd8565b90955093505060408601356001600160401b03811115612c76575f5ffd5b612c8288828901612bd8565b969995985093965092949392505050565b5f5f5f5f5f5f60608789031215612ca8575f5ffd5b86356001600160401b03811115612cbd575f5ffd5b612cc989828a01612bd8565b90975095505060208701356001600160401b03811115612ce7575f5ffd5b612cf389828a01612bd8565b90955093505060408701356001600160401b03811115612d11575f5ffd5b612d1d89828a01612bd8565b979a9699509497509295939492505050565b600181811c90821680612d4357607f821691505b602082108103612d6157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156105e3576105e3612d67565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612db7575f5ffd5b8301803591506001600160401b03821115612dd0575f5ffd5b602001915036819003821315612c15575f5ffd5b5f81518060208401855e5f93019283525090919050565b828482375f8382015f8152612e108185612de4565b9695505050505050565b5f60208284031215612e2a575f5ffd5b8151610c5881612746565b5f60208284031215612e45575f5ffd5b81516001600160401b03811115612e5a575f5ffd5b8201601f81018413612e6a575f5ffd5b8051612e786128e68261286c565b818152856020838501011115612e8c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f612ee3606083018761291e565b8281036020840152612ef6818688612ea9565b90508281036040840152612f0a818561291e565b979650505050505050565b5f60208284031215612f25575f5ffd5b81518015158114610c58575f5ffd5b858152606060208201525f612f4d606083018688612ea9565b8281036040840152612f60818587612ea9565b98975050505050505050565b5f610c588284612de4565b604081525f612f8a604083018688612ea9565b8281036020840152612f0a818587612ea9565b808201808211156105e3576105e3612d67565b602081525f610bf1602083018486612ea9565b601f8211156106bd57805f5260205f20601f840160051c81016020851015612fe85750805b601f840160051c820191505b8181101561187c575f8155600101612ff4565b81516001600160401b0381111561302057613020612828565b6130348161302e8454612d2f565b84612fc3565b6020601f821160018114613066575f831561304f5750848201515b5f19600385901b1c1916600184901b17845561187c565b5f84815260208120601f198516915b828110156130955787850151825560209485019460019092019101613075565b50848210156130b257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b608081525f6130d460808301898b612ea9565b82810360208401526130e781888a612ea9565b905082810360408401526130fc818688612ea9565b91505082606083015298975050505050505050565b5f60208284031215613121575f5ffd5b5051919050565b634e487b7160e01b5f52603160045260245ffdfec1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a2646970667358221220b9bf840b608447c267623fc79124450c15b070c6cf6f643c84d5b29677f23f5964736f6c634300081c0033\";\n\ntype DecryptionSenderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: DecryptionSenderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class DecryptionSender__factory extends ContractFactory {\n  constructor(...args: DecryptionSenderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      DecryptionSender & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): DecryptionSender__factory {\n    return super.connect(runner) as DecryptionSender__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): DecryptionSenderInterface {\n    return new Interface(_abi) as DecryptionSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): DecryptionSender {\n    return new Contract(address, _abi, runner) as unknown as DecryptionSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { ERC165, ERC165Interface } from \"../ERC165\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class ERC165__factory {\n  static readonly abi = _abi;\n  static createInterface(): ERC165Interface {\n    return new Interface(_abi) as ERC165Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): ERC165 {\n    return new Contract(address, _abi, runner) as unknown as ERC165;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ERC165Upgradeable,\n  ERC165UpgradeableInterface,\n} from \"../ERC165Upgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class ERC165Upgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): ERC165UpgradeableInterface {\n    return new Interface(_abi) as ERC165UpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ERC165Upgradeable {\n    return new Contract(address, _abi, runner) as unknown as ERC165Upgradeable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  BytesLike,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { PayableOverrides } from \"../common\";\nimport type { ERC1967Proxy, ERC1967ProxyInterface } from \"../ERC1967Proxy\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"fallback\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60806040526040516103d03803806103d08339810160408190526100229161023c565b61002c8282610033565b5050610321565b61003c82610091565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561008557610080828261010c565b505050565b61008d61017f565b5050565b806001600160a01b03163b5f036100cb57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610128919061030b565b5f60405180830381855af49150503d805f8114610160576040519150601f19603f3d011682016040523d82523d5f602084013e610165565b606091505b5090925090506101768583836101a0565b95945050505050565b341561019e5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101b5576101b0826101ff565b6101f8565b81511580156101cc57506001600160a01b0384163b155b156101f557604051639996b31560e01b81526001600160a01b03851660048201526024016100c2565b50805b9392505050565b80511561020f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561024d575f5ffd5b82516001600160a01b0381168114610263575f5ffd5b60208401519092506001600160401b0381111561027e575f5ffd5b8301601f8101851361028e575f5ffd5b80516001600160401b038111156102a7576102a7610228565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102d5576102d5610228565b6040528181528282016020018710156102ec575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60a38061032d5f395ff3fe6080604052600a600c565b005b60186014601a565b6050565b565b5f604b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156069573d5ff35b3d5ffdfea26469706673582212206dff90a2055082fd24dc79aadb1cbdf480533621d0dc51693475958dfa4afdf664736f6c634300081c0033\";\n\ntype ERC1967ProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ERC1967ProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ERC1967Proxy__factory extends ContractFactory {\n  constructor(...args: ERC1967ProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: PayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(implementation, _data, overrides || {});\n  }\n  override deploy(\n    implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: PayableOverrides & { from?: string }\n  ) {\n    return super.deploy(implementation, _data, overrides || {}) as Promise<\n      ERC1967Proxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): ERC1967Proxy__factory {\n    return super.connect(runner) as ERC1967Proxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ERC1967ProxyInterface {\n    return new Interface(_abi) as ERC1967ProxyInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ERC1967Proxy {\n    return new Contract(address, _abi, runner) as unknown as ERC1967Proxy;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { ERC1967Utils, ERC1967UtilsInterface } from \"../ERC1967Utils\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidAdmin\",\n    inputs: [\n      {\n        name: \"admin\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidBeacon\",\n    inputs: [\n      {\n        name: \"beacon\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea264697066735822122088db321bbbbdd4869d72edb01f531e5d255a806e9e3a961e8db1d44e6cbb839464736f6c634300081c0033\";\n\ntype ERC1967UtilsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ERC1967UtilsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class ERC1967Utils__factory extends ContractFactory {\n  constructor(...args: ERC1967UtilsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      ERC1967Utils & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): ERC1967Utils__factory {\n    return super.connect(runner) as ERC1967Utils__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ERC1967UtilsInterface {\n    return new Interface(_abi) as ERC1967UtilsInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ERC1967Utils {\n    return new Contract(address, _abi, runner) as unknown as ERC1967Utils;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { EnvReader, EnvReaderInterface } from \"../EnvReader\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class EnvReader__factory {\n  static readonly abi = _abi;\n  static createInterface(): EnvReaderInterface {\n    return new Interface(_abi) as EnvReaderInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): EnvReader {\n    return new Contract(address, _abi, runner) as unknown as EnvReader;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Errors, ErrorsInterface } from \"../Errors\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedDeployment\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientBalance\",\n    inputs: [\n      {\n        name: \"balance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"needed\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MissingPrecompile\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212203296177dc16f2bce254c985cfbc5dc137a6a9f1ff3efdc6d32cfd398258f3c8864736f6c634300081c0033\";\n\ntype ErrorsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: ErrorsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Errors__factory extends ContractFactory {\n  constructor(...args: ErrorsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Errors & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Errors__factory {\n    return super.connect(runner) as Errors__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): ErrorsInterface {\n    return new Interface(_abi) as ErrorsInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Errors {\n    return new Contract(address, _abi, runner) as unknown as Errors;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { Factory, FactoryInterface } from \"../Factory\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"computeAddress\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creationCodeHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"deploy\",\n    inputs: [\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"creationCode\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"event\",\n    name: \"CreatedContract\",\n    inputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"salt\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"Create2EmptyBytecode\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"Create2FailedDeployment\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052348015600e575f5ffd5b506102678061001c5f395ff3fe608060405260043610610028575f3560e01c8063481286e61461002c578063cdcb760a14610067575b5f5ffd5b348015610037575f5ffd5b5061004b610046366004610140565b61007a565b6040516001600160a01b03909116815260200160405180910390f35b61004b610075366004610174565b6100a4565b6040805190810182905260208101839052308082525f91600b0160ff815360559020949350505050565b5f81515f036100c657604051631328927760e21b815260040160405180910390fd5b8282516020840134f590506001600160a01b0381166100f857604051633a0ba96160e11b815260040160405180910390fd5b604080516001600160a01b0383168152602081018590527f4108529e399e9cd5343c48ae06aa62a23c8c1b7c93f59d4691a0ea1e6f5b4603910160405180910390a192915050565b5f5f60408385031215610151575f5ffd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610185575f5ffd5b82359150602083013567ffffffffffffffff8111156101a2575f5ffd5b8301601f810185136101b2575f5ffd5b803567ffffffffffffffff8111156101cc576101cc610160565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156101fb576101fb610160565b604052818152828201602001871015610212575f5ffd5b816020840160208301375f60208383010152809350505050925092905056fea2646970667358221220b6b4f5de71e8ac337dd845cc23b73f6808935dd762517a951944059c04b08a3b64736f6c634300081c0033\";\n\ntype FactoryConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: FactoryConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class Factory__factory extends ContractFactory {\n  constructor(...args: FactoryConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      Factory & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): Factory__factory {\n    return super.connect(runner) as Factory__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): FactoryInterface {\n    return new Interface(_abi) as FactoryInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Factory {\n    return new Contract(address, _abi, runner) as unknown as Factory;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IAccessControl,\n  IAccessControlInterface,\n} from \"../IAccessControl\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class IAccessControl__factory {\n  static readonly abi = _abi;\n  static createInterface(): IAccessControlInterface {\n    return new Interface(_abi) as IAccessControlInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IAccessControl {\n    return new Contract(address, _abi, runner) as unknown as IAccessControl;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IAccessControlEnumerable,\n  IAccessControlEnumerableInterface,\n} from \"../IAccessControlEnumerable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMember\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"index\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleMemberCount\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class IAccessControlEnumerable__factory {\n  static readonly abi = _abi;\n  static createInterface(): IAccessControlEnumerableInterface {\n    return new Interface(_abi) as IAccessControlEnumerableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IAccessControlEnumerable {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as IAccessControlEnumerable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IBeacon, IBeaconInterface } from \"../IBeacon\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"implementation\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class IBeacon__factory {\n  static readonly abi = _abi;\n  static createInterface(): IBeaconInterface {\n    return new Interface(_abi) as IBeaconInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IBeacon {\n    return new Contract(address, _abi, runner) as unknown as IBeacon;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IBlocklockReceiver,\n  IBlocklockReceiverInterface,\n} from \"../IBlocklockReceiver\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"receiveBlocklock\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class IBlocklockReceiver__factory {\n  static readonly abi = _abi;\n  static createInterface(): IBlocklockReceiverInterface {\n    return new Interface(_abi) as IBlocklockReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IBlocklockReceiver {\n    return new Contract(address, _abi, runner) as unknown as IBlocklockReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IBlocklockSender,\n  IBlocklockSenderInterface,\n} from \"../IBlocklockSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"acceptSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"calculateRequestPriceNative\",\n    inputs: [\n      {\n        name: \"_callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscription\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"decrypt\",\n    inputs: [\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"estimateRequestPriceNative\",\n    inputs: [\n      {\n        name: \"_callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"_requestGasPriceWei\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fundSubscriptionWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getActiveSubscriptionIds\",\n    inputs: [\n      {\n        name: \"startIndex\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.BlocklockRequest\",\n        components: [\n          {\n            name: \"subId\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"directFundingFeePaid\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callbackGasLimit\",\n            type: \"uint32\",\n            internalType: \"uint32\",\n          },\n          {\n            name: \"decryptionRequestID\",\n            type: \"uint64\",\n            internalType: \"uint64\",\n          },\n          {\n            name: \"condition\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"ciphertext\",\n            type: \"tuple\",\n            internalType: \"struct TypesLib.Ciphertext\",\n            components: [\n              {\n                name: \"u\",\n                type: \"tuple\",\n                internalType: \"struct BLS.PointG2\",\n                components: [\n                  {\n                    name: \"x\",\n                    type: \"uint256[2]\",\n                    internalType: \"uint256[2]\",\n                  },\n                  {\n                    name: \"y\",\n                    type: \"uint256[2]\",\n                    internalType: \"uint256[2]\",\n                  },\n                ],\n              },\n              {\n                name: \"v\",\n                type: \"bytes\",\n                internalType: \"bytes\",\n              },\n              {\n                name: \"w\",\n                type: \"bytes\",\n                internalType: \"bytes\",\n              },\n            ],\n          },\n          {\n            name: \"signature\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"decryptionKey\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nativeBalance\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n      {\n        name: \"reqCount\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingRequestExists\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"removeConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestBlocklock\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestBlocklockWithSubscription\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setDecryptionSender\",\n    inputs: [\n      {\n        name: \"newDecryptionSender\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n] as const;\n\nexport class IBlocklockSender__factory {\n  static readonly abi = _abi;\n  static createInterface(): IBlocklockSenderInterface {\n    return new Interface(_abi) as IBlocklockSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IBlocklockSender {\n    return new Contract(address, _abi, runner) as unknown as IBlocklockSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IDecryptionReceiver,\n  IDecryptionReceiverInterface,\n} from \"../IDecryptionReceiver\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"receiveDecryptionData\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class IDecryptionReceiver__factory {\n  static readonly abi = _abi;\n  static createInterface(): IDecryptionReceiverInterface {\n    return new Interface(_abi) as IDecryptionReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IDecryptionReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as IDecryptionReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  IDecryptionSender,\n  IDecryptionSenderInterface,\n} from \"../IDecryptionSender\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"fulfillDecryptionRequest\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllErroredRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllFulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getAllUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCountOfUnfulfilledRequestIds\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRequest\",\n    inputs: [\n      {\n        name: \"requestId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.DecryptionRequest\",\n        components: [\n          {\n            name: \"schemeID\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"ciphertext\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"condition\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"decryptionKey\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"signature\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"callback\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"isFulfilled\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hasErrored\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isInFlight\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"registerCiphertext\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"ciphertext\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSignatureSchemeAddressProvider\",\n    inputs: [\n      {\n        name: \"newSignatureSchemeAddressProvider\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"version\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n  },\n] as const;\n\nexport class IDecryptionSender__factory {\n  static readonly abi = _abi;\n  static createInterface(): IDecryptionSenderInterface {\n    return new Interface(_abi) as IDecryptionSenderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): IDecryptionSender {\n    return new Contract(address, _abi, runner) as unknown as IDecryptionSender;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IERC165, IERC165Interface } from \"../IERC165\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class IERC165__factory {\n  static readonly abi = _abi;\n  static createInterface(): IERC165Interface {\n    return new Interface(_abi) as IERC165Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IERC165 {\n    return new Contract(address, _abi, runner) as unknown as IERC165;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IERC1967, IERC1967Interface } from \"../IERC1967\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"AdminChanged\",\n    inputs: [\n      {\n        name: \"previousAdmin\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"newAdmin\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"BeaconUpgraded\",\n    inputs: [\n      {\n        name: \"beacon\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class IERC1967__factory {\n  static readonly abi = _abi;\n  static createInterface(): IERC1967Interface {\n    return new Interface(_abi) as IERC1967Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IERC1967 {\n    return new Contract(address, _abi, runner) as unknown as IERC1967;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IMulticall, IMulticallInterface } from \"../IMulticall\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"results\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n] as const;\n\nexport class IMulticall__factory {\n  static readonly abi = _abi;\n  static createInterface(): IMulticallInterface {\n    return new Interface(_abi) as IMulticallInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IMulticall {\n    return new Contract(address, _abi, runner) as unknown as IMulticall;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IMulticall3, IMulticall3Interface } from \"../IMulticall3\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"aggregate\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"returnData\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"aggregate3\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call3[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"allowFailure\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"aggregate3Value\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call3Value[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"allowFailure\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"value\",\n            type: \"uint256\",\n            internalType: \"uint256\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"blockAndAggregate\",\n    inputs: [\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getBasefee\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"basefee\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockHash\",\n    inputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getBlockNumber\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainid\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockCoinbase\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"coinbase\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockDifficulty\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"difficulty\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockGasLimit\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"gaslimit\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getCurrentBlockTimestamp\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"timestamp\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getEthBalance\",\n    inputs: [\n      {\n        name: \"addr\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"balance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getLastBlockHash\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"tryAggregate\",\n    inputs: [\n      {\n        name: \"requireSuccess\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"tryBlockAndAggregate\",\n    inputs: [\n      {\n        name: \"requireSuccess\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n      {\n        name: \"calls\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Call[]\",\n        components: [\n          {\n            name: \"target\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"callData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"blockNumber\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"blockHash\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"returnData\",\n        type: \"tuple[]\",\n        internalType: \"struct IMulticall3.Result[]\",\n        components: [\n          {\n            name: \"success\",\n            type: \"bool\",\n            internalType: \"bool\",\n          },\n          {\n            name: \"returnData\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n] as const;\n\nexport class IMulticall3__factory {\n  static readonly abi = _abi;\n  static createInterface(): IMulticall3Interface {\n    return new Interface(_abi) as IMulticall3Interface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IMulticall3 {\n    return new Contract(address, _abi, runner) as unknown as IMulticall3;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { IOwnable, IOwnableInterface } from \"../IOwnable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class IOwnable__factory {\n  static readonly abi = _abi;\n  static createInterface(): IOwnableInterface {\n    return new Interface(_abi) as IOwnableInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): IOwnable {\n    return new Contract(address, _abi, runner) as unknown as IOwnable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ISignatureScheme,\n  ISignatureSchemeInterface,\n} from \"../ISignatureScheme\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKey\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKeyBytes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToBytes\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToPoint\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"verifySignature\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"publicKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class ISignatureScheme__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISignatureSchemeInterface {\n    return new Interface(_abi) as ISignatureSchemeInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISignatureScheme {\n    return new Contract(address, _abi, runner) as unknown as ISignatureScheme;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ISignatureSchemeAddressProvider,\n  ISignatureSchemeAddressProviderInterface,\n} from \"../ISignatureSchemeAddressProvider\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"getSignatureSchemeAddress\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isSupportedScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSignatureScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"schemeAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class ISignatureSchemeAddressProvider__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISignatureSchemeAddressProviderInterface {\n    return new Interface(_abi) as ISignatureSchemeAddressProviderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISignatureSchemeAddressProvider {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as ISignatureSchemeAddressProvider;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { ISubscription, ISubscriptionInterface } from \"../ISubscription\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"acceptSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscription\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"fundSubscriptionWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getActiveSubscriptionIds\",\n    inputs: [\n      {\n        name: \"startIndex\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nativeBalance\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n      {\n        name: \"reqCount\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingRequestExists\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"removeConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n] as const;\n\nexport class ISubscription__factory {\n  static readonly abi = _abi;\n  static createInterface(): ISubscriptionInterface {\n    return new Interface(_abi) as ISubscriptionInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ISubscription {\n    return new Contract(address, _abi, runner) as unknown as ISubscription;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Initializable, InitializableInterface } from \"../Initializable\";\n\nconst _abi = [\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n] as const;\n\nexport class Initializable__factory {\n  static readonly abi = _abi;\n  static createInterface(): InitializableInterface {\n    return new Interface(_abi) as InitializableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): Initializable {\n    return new Contract(address, _abi, runner) as unknown as Initializable;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { JsonUtils, JsonUtilsInterface } from \"../JsonUtils\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nconst _bytecode =\n  \"0x6080604052600c805462ff00ff191662010001179055348015601f575f5ffd5b50608680602b5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063f8ccbf4714602a575b5f5ffd5b600c54603c9062010000900460ff1681565b604051901515815260200160405180910390f3fea26469706673582212205bb8da81baad4ae06e0217afeae3210a1dfccc26da30ca2a8d822c78c413666464736f6c634300081c0033\";\n\ntype JsonUtilsConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: JsonUtilsConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class JsonUtils__factory extends ContractFactory {\n  constructor(...args: JsonUtilsConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      JsonUtils & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): JsonUtils__factory {\n    return super.connect(runner) as JsonUtils__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): JsonUtilsInterface {\n    return new Interface(_abi) as JsonUtilsInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): JsonUtils {\n    return new Contract(address, _abi, runner) as unknown as JsonUtils;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  MockBlocklockReceiver,\n  MockBlocklockReceiverInterface,\n} from \"../MockBlocklockReceiver\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"blocklockContract\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"receive\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blocklock\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IBlocklockSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelSubscription\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscriptionAndFundNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"createTimelockRequestWithDirectFunding\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"encryptedData\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createTimelockRequestWithSubscription\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"encryptedData\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"encryptedValue\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"u\",\n        type: \"tuple\",\n        internalType: \"struct BLS.PointG2\",\n        components: [\n          {\n            name: \"x\",\n            type: \"uint256[2]\",\n            internalType: \"uint256[2]\",\n          },\n          {\n            name: \"y\",\n            type: \"uint256[2]\",\n            internalType: \"uint256[2]\",\n          },\n        ],\n      },\n      {\n        name: \"v\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"w\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fundContractNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"plainTextValue\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveBlocklock\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setBlocklock\",\n    inputs: [\n      {\n        name: \"_blocklock\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSubId\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"subscriptionId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"topUpSubscriptionNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSubscription\",\n    inputs: [\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawNative\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"Funded\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"NewSubscriptionId\",\n    inputs: [\n      {\n        name: \"subscriptionId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferRequested\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Received\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Withdrawn\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b50604051611ae4380380611ae483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b611924806101c05f395ff3fe60806040526004361061011d575f3560e01c8063809800431161009d57806397a9c2851161006257806397a9c28514610321578063b8ca8dd814610336578063b96dbba714610355578063e64a66ea1461035d578063f2fde38b14610365575f5ffd5b8063809800431461027157806386e560be146102905780638da5cb5b146102b357806393b9740a146102e357806393d81d5814610302575f5ffd5b80634d3de353116100e35780634d3de353146101d85780634fa26d40146101eb57806359608fda1461020a5780635d9418021461023e57806379ba50971461025d575f5ffd5b80626d6cae1461016057806309c1ba2e1461018857806312065fe01461019d5780631d2b2afd146101af57806336bfffed146101b9575f5ffd5b3661015c57604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b34801561016b575f5ffd5b5061017560045481565b6040519081526020015b60405180910390f35b348015610193575f5ffd5b5061017560035481565b3480156101a8575f5ffd5b5047610175565b6101b7610384565b005b3480156101c4575f5ffd5b506101b76101d33660046111c2565b61042b565b6101756101e6366004611278565b610528565b3480156101f6575f5ffd5b506101b761020536600461131b565b61058b565b348015610215575f5ffd5b50610229610224366004611278565b610615565b6040805192835260208301919091520161017f565b348015610249575f5ffd5b506101b761025836600461133b565b610680565b348015610268575f5ffd5b506101b76106e5565b34801561027c575f5ffd5b506101b761028b366004611383565b61078e565b34801561029b575f5ffd5b506102a46107c8565b60405161017f9392919061140d565b3480156102be575f5ffd5b505f546001600160a01b03165b6040516001600160a01b03909116815260200161017f565b3480156102ee575f5ffd5b506002546102cb906001600160a01b031681565b34801561030d575f5ffd5b506101b761031c36600461131b565b610954565b34801561032c575f5ffd5b50610175600b5481565b348015610341575f5ffd5b506101b7610350366004611448565b610968565b6101b7610a3b565b6101b7610a82565b348015610370575f5ffd5b506101b761037f36600461131b565b610b01565b6003545f036103c85760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b158015610412575f5ffd5b505af1158015610424573d5f5f3e3d5ffd5b5050505050565b610433610b12565b6003545f036104745760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b60448201526064016103bf565b5f5b81811015610523576002546003546001600160a01b039091169063bec4c08c908585858181106104a8576104a8611472565b90506020020160208101906104bd919061131b565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b158015610501575f5ffd5b505af1158015610513573d5f5f3e3d5ffd5b5050600190920191506104769050565b505050565b5f5f61056b8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b66915050565b6004819055905082600561057f8282611613565b50909695505050505050565b610593610b12565b6001600160a01b0381166105f35760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b60648201526084016103bf565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f61065a8888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610be4915050565b600482905590925090508460056106718282611613565b50919890975095505050505050565b6002546001600160a01b031633146106da5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c60448201526064016103bf565b610523838383610cda565b6001546001600160a01b031633146107385760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064016103bf565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610796610b12565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107e557505050918352505060408051808201918290526020909201919060028481019182845b81548152602001906001019080831161081b5750505050508152505090806004018054610847906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610873906114dd565b80156108be5780601f10610895576101008083540402835291602001916108be565b820191905f5260205f20905b8154815290600101906020018083116108a157829003601f168201915b5050505050908060050180546108d3906114dd565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff906114dd565b801561094a5780601f106109215761010080835404028352916020019161094a565b820191905f5260205f20905b81548152906001019060200180831161092d57829003601f168201915b5050505050905083565b61095c610b12565b61096581610ee2565b50565b610970610b12565b814710156109c05760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e7472616374000060448201526064016103bf565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109f3573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a2f91815260200190565b60405180910390a25050565b610a43610b12565b610a4b610f7a565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103fb565b5f3411610aca5760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b60448201526064016103bf565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610b09610b12565b610965816110a4565b5f546001600160a01b03163314610b645760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016103bf565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b9c91889188908890600401611754565b6020604051808303815f875af1158015610bb8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdc9190611795565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c34573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c589190611795565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c8f908990899089906004016117ac565b60206040518083038185885af1158015610cab573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610cd09190611795565b9150935093915050565b8260045414610d215760405162461bcd60e51b815260206004820152601360248201527224b73b30b634b2103932b8bab2b9ba1034b21760691b60448201526064016103bf565b6040805160e08101909152610ec79060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610d4a57505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610d80575050505050815250508152602001600482018054610db0906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610ddc906114dd565b8015610e275780601f10610dfe57610100808354040283529160200191610e27565b820191905f5260205f20905b815481529060010190602001808311610e0a57829003601f168201915b50505050508152602001600582018054610e40906114dd565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6c906114dd565b8015610eb75780601f10610e8e57610100808354040283529160200191610eb7565b820191905f5260205f20905b815481529060010190602001808311610e9a57829003601f168201915b505050505081525050838361114c565b806020019051810190610eda9190611795565b600b55505050565b6003545f03610f2c5760405162461bcd60e51b8152602060048201526016602482015275537562736372697074696f6e4964206973207a65726f60501b60448201526064016103bf565b600254600354604051622b825560e61b815260048101919091526001600160a01b03838116602483015290911690630ae09540906044015f604051808303815f87803b158015610412575f5ffd5b5f6003545f14610fcc5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f00000000000060448201526064016103bf565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af115801561101d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110419190611795565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b15801561108b575f5ffd5b505af115801561109d573d5f5f3e3d5ffd5b5050505090565b336001600160a01b038216036110fc5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103bf565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c490611181908790879087906004016117dc565b5f60405180830381865afa15801561119b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bdc919081019061183b565b5f5f602083850312156111d3575f5ffd5b823567ffffffffffffffff8111156111e9575f5ffd5b8301601f810185136111f9575f5ffd5b803567ffffffffffffffff81111561120f575f5ffd5b8560208260051b8401011115611223575f5ffd5b6020919091019590945092505050565b5f5f83601f840112611243575f5ffd5b50813567ffffffffffffffff81111561125a575f5ffd5b602083019150836020828501011115611271575f5ffd5b9250929050565b5f5f5f5f6060858703121561128b575f5ffd5b843563ffffffff8116811461129e575f5ffd5b9350602085013567ffffffffffffffff8111156112b9575f5ffd5b6112c587828801611233565b909450925050604085013567ffffffffffffffff8111156112e4575f5ffd5b850160c081880312156112f5575f5ffd5b939692955090935050565b80356001600160a01b0381168114611316575f5ffd5b919050565b5f6020828403121561132b575f5ffd5b61133482611300565b9392505050565b5f5f5f6040848603121561134d575f5ffd5b83359250602084013567ffffffffffffffff81111561136a575f5ffd5b61137686828701611233565b9497909650939450505050565b5f60208284031215611393575f5ffd5b5035919050565b805f5b60028110156113bc57815184526020938401939091019060010161139d565b50505050565b6113cd82825161139a565b6020810151610523604084018261139a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b61141781856113c2565b60c060808201525f61142c60c08301856113df565b82810360a084015261143e81856113df565b9695505050505050565b5f5f60408385031215611459575f5ffd5b8235915061146960208401611300565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e198436030181126114af575f5ffd5b83018035915067ffffffffffffffff8211156114c9575f5ffd5b602001915036819003821315611271575f5ffd5b600181811c908216806114f157607f821691505b60208210810361150f57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561052357805f5260205f20601f840160051c8101602085101561153a5750805b601f840160051c820191505b81811015610424575f8155600101611546565b67ffffffffffffffff83111561157157611571611486565b6115858361157f83546114dd565b83611515565b5f601f8411600181146115b6575f851561159f5750838201355b5f19600387901b1c1916600186901b178355610424565b5f83815260208120601f198716915b828110156115e557868501358255602094850194600190920191016115c5565b5086821015611601575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b600281101561163357813583820155602090910190600101611616565b5050604082015f5b600281101561165b5781358382016002015560209091019060010161163b565b505061166a608083018361149a565b611678818360048601611559565b505061168760a083018361149a565b6113bc818360058601611559565b5f5f8335601e198436030181126116aa575f5ffd5b830160208101925035905067ffffffffffffffff8111156116c9575f5ffd5b803603821315611271575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f61171c6080830183611695565b60c0608086015261173160c0860182846116d7565b91505061174160a0840184611695565b85830360a087015261143e8382846116d7565b63ffffffff85168152836020820152608060408201525f61177860808301856113df565b828103606084015261178a81856116ff565b979650505050505050565b5f602082840312156117a5575f5ffd5b5051919050565b63ffffffff84168152606060208201525f6117ca60608301856113df565b828103604084015261143e81856116ff565b604081526117ee6040820185516113c2565b5f602085015160c0808401526118086101008401826113df565b90506040860151603f198483030160e085015261182582826113df565b915050828103602084015261143e8185876116d7565b5f6020828403121561184b575f5ffd5b815167ffffffffffffffff811115611861575f5ffd5b8201601f81018413611871575f5ffd5b805167ffffffffffffffff81111561188b5761188b611486565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156118ba576118ba611486565b6040528181528282016020018610156118d1575f5ffd5b8160208401602083015e5f9181016020019190915294935050505056fea2646970667358221220c3b44a1906b2ea323c1b7dd1b7b303f120420afb0c338072e3b98639f89bc6d564736f6c634300081c0033\";\n\ntype MockBlocklockReceiverConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: MockBlocklockReceiverConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class MockBlocklockReceiver__factory extends ContractFactory {\n  constructor(...args: MockBlocklockReceiverConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    blocklockContract: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(blocklockContract, overrides || {});\n  }\n  override deploy(\n    blocklockContract: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(blocklockContract, overrides || {}) as Promise<\n      MockBlocklockReceiver & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): MockBlocklockReceiver__factory {\n    return super.connect(runner) as MockBlocklockReceiver__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): MockBlocklockReceiverInterface {\n    return new Interface(_abi) as MockBlocklockReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): MockBlocklockReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as MockBlocklockReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  MockBlocklockRevertingReceiver,\n  MockBlocklockRevertingReceiverInterface,\n} from \"../MockBlocklockRevertingReceiver\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"blocklockContract\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"receive\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blocklock\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IBlocklockSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscriptionAndFundNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"createTimelockRequestWithDirectFunding\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"encryptedData\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createTimelockRequestWithSubscription\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"encryptedData\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"encryptedValue\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"u\",\n        type: \"tuple\",\n        internalType: \"struct BLS.PointG2\",\n        components: [\n          {\n            name: \"x\",\n            type: \"uint256[2]\",\n            internalType: \"uint256[2]\",\n          },\n          {\n            name: \"y\",\n            type: \"uint256[2]\",\n            internalType: \"uint256[2]\",\n          },\n        ],\n      },\n      {\n        name: \"v\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"w\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fundContractNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"plainTextValue\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveBlocklock\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setBlocklock\",\n    inputs: [\n      {\n        name: \"_blocklock\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSubId\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"subscriptionId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"topUpSubscriptionNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSubscription\",\n    inputs: [\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawNative\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"Funded\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"NewSubscriptionId\",\n    inputs: [\n      {\n        name: \"subscriptionId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferRequested\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Received\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Withdrawn\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b5060405161167438038061167483398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b6114b4806101c05f395ff3fe608060405260043610610112575f3560e01c806379ba50971161009d57806397a9c2851161006257806397a9c285146102f7578063b8ca8dd81461030c578063b96dbba71461032b578063e64a66ea14610333578063f2fde38b1461033b575f5ffd5b806379ba509714610252578063809800431461026657806386e560be146102855780638da5cb5b146102a857806393b9740a146102d8575f5ffd5b806336bfffed116100e357806336bfffed146101ae5780634d3de353146101cd5780634fa26d40146101e057806359608fda146101ff5780635d94180214610233575f5ffd5b80626d6cae1461015557806309c1ba2e1461017d57806312065fe0146101925780631d2b2afd146101a4575f5ffd5b3661015157604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b348015610160575f5ffd5b5061016a60045481565b6040519081526020015b60405180910390f35b348015610188575f5ffd5b5061016a60035481565b34801561019d575f5ffd5b504761016a565b6101ac61035a565b005b3480156101b9575f5ffd5b506101ac6101c8366004610e6d565b610401565b61016a6101db366004610f23565b6104fe565b3480156101eb575f5ffd5b506101ac6101fa366004610fc6565b610561565b34801561020a575f5ffd5b5061021e610219366004610f23565b6105eb565b60408051928352602083019190915201610174565b34801561023e575f5ffd5b506101ac61024d366004610fe6565b610656565b34801561025d575f5ffd5b506101ac6106b7565b348015610271575f5ffd5b506101ac61028036600461102e565b610760565b348015610290575f5ffd5b5061029961079a565b6040516101749392919061109b565b3480156102b3575f5ffd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610174565b3480156102e3575f5ffd5b506002546102c0906001600160a01b031681565b348015610302575f5ffd5b5061016a600b5481565b348015610317575f5ffd5b506101ac6103263660046110ea565b610926565b6101ac6109f9565b6101ac610a40565b348015610346575f5ffd5b506101ac610355366004610fc6565b610abf565b6003545f0361039e5760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b1580156103e8575f5ffd5b505af11580156103fa573d5f5f3e3d5ffd5b5050505050565b610409610ad3565b6003545f0361044a5760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b6044820152606401610395565b5f5b818110156104f9576002546003546001600160a01b039091169063bec4c08c9085858581811061047e5761047e611114565b90506020020160208101906104939190610fc6565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b1580156104d7575f5ffd5b505af11580156104e9573d5f5f3e3d5ffd5b50506001909201915061044c9050565b505050565b5f5f6105418686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b27915050565b6004819055905082600561055582826112b5565b50909695505050505050565b610569610ad3565b6001600160a01b0381166105c95760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b6064820152608401610395565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f6106308888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610ba5915050565b6004829055909250905084600561064782826112b5565b50919890975095505050505050565b6002546001600160a01b031633146106b05760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c6044820152606401610395565b6104f95f5ffd5b6001546001600160a01b0316331461070a5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b6044820152606401610395565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610768610ad3565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107b757505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116107ed57505050505081525050908060040180546108199061117f565b80601f01602080910402602001604051908101604052809291908181526020018280546108459061117f565b80156108905780601f1061086757610100808354040283529160200191610890565b820191905f5260205f20905b81548152906001019060200180831161087357829003601f168201915b5050505050908060050180546108a59061117f565b80601f01602080910402602001604051908101604052809291908181526020018280546108d19061117f565b801561091c5780601f106108f35761010080835404028352916020019161091c565b820191905f5260205f20905b8154815290600101906020018083116108ff57829003601f168201915b5050505050905083565b61092e610ad3565b8147101561097e5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e747261637400006044820152606401610395565b6040516001600160a01b0382169083156108fc029084905f818181858888f193505050501580156109b1573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5836040516109ed91815260200190565b60405180910390a25050565b610a01610ad3565b610a09610c9b565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103d1565b5f3411610a885760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b6044820152606401610395565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610ac7610ad3565b610ad081610dc5565b50565b5f546001600160a01b03163314610b255760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b6044820152606401610395565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610b5d918891889088906004016113f6565b6020604051808303815f875af1158015610b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9d9190611437565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610bf5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c199190611437565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610c509089908990899060040161144e565b60206040518083038185885af1158015610c6c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610c919190611437565b9150935093915050565b5f6003545f14610ced5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f0000000000006044820152606401610395565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610d3e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d629190611437565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b158015610dac575f5ffd5b505af1158015610dbe573d5f5f3e3d5ffd5b5050505090565b336001600160a01b03821603610e1d5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610395565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f5f60208385031215610e7e575f5ffd5b823567ffffffffffffffff811115610e94575f5ffd5b8301601f81018513610ea4575f5ffd5b803567ffffffffffffffff811115610eba575f5ffd5b8560208260051b8401011115610ece575f5ffd5b6020919091019590945092505050565b5f5f83601f840112610eee575f5ffd5b50813567ffffffffffffffff811115610f05575f5ffd5b602083019150836020828501011115610f1c575f5ffd5b9250929050565b5f5f5f5f60608587031215610f36575f5ffd5b843563ffffffff81168114610f49575f5ffd5b9350602085013567ffffffffffffffff811115610f64575f5ffd5b610f7087828801610ede565b909450925050604085013567ffffffffffffffff811115610f8f575f5ffd5b850160c08188031215610fa0575f5ffd5b939692955090935050565b80356001600160a01b0381168114610fc1575f5ffd5b919050565b5f60208284031215610fd6575f5ffd5b610fdf82610fab565b9392505050565b5f5f5f60408486031215610ff8575f5ffd5b83359250602084013567ffffffffffffffff811115611015575f5ffd5b61102186828701610ede565b9497909650939450505050565b5f6020828403121561103e575f5ffd5b5035919050565b805f5b6002811015611067578151845260209384019390910190600101611048565b50505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6110a6818551611045565b5f60208501516110b96040840182611045565b5060c060808301526110ce60c083018561106d565b82810360a08401526110e0818561106d565b9695505050505050565b5f5f604083850312156110fb575f5ffd5b8235915061110b60208401610fab565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112611151575f5ffd5b83018035915067ffffffffffffffff82111561116b575f5ffd5b602001915036819003821315610f1c575f5ffd5b600181811c9082168061119357607f821691505b6020821081036111b157634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156104f957805f5260205f20601f840160051c810160208510156111dc5750805b601f840160051c820191505b818110156103fa575f81556001016111e8565b67ffffffffffffffff83111561121357611213611128565b61122783611221835461117f565b836111b7565b5f601f841160018114611258575f85156112415750838201355b5f19600387901b1c1916600186901b1783556103fa565b5f83815260208120601f198716915b828110156112875786850135825560209485019460019092019101611267565b50868210156112a3575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b60028110156112d5578135838201556020909101906001016112b8565b5050604082015f5b60028110156112fd578135838201600201556020909101906001016112dd565b505061130c608083018361113c565b61131a8183600486016111fb565b505061132960a083018361113c565b6110678183600586016111fb565b5f5f8335601e1984360301811261134c575f5ffd5b830160208101925035905067ffffffffffffffff81111561136b575f5ffd5b803603821315610f1c575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f6113be6080830183611337565b60c060808601526113d360c086018284611379565b9150506113e360a0840184611337565b85830360a08701526110e0838284611379565b63ffffffff85168152836020820152608060408201525f61141a608083018561106d565b828103606084015261142c81856113a1565b979650505050505050565b5f60208284031215611447575f5ffd5b5051919050565b63ffffffff84168152606060208201525f61146c606083018561106d565b82810360408401526110e081856113a156fea26469706673582212201fe097e8426334c314f7a950394f6b0caa0adc48dfbeca6c71d97598f0df174764736f6c634300081c0033\";\n\ntype MockBlocklockRevertingReceiverConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: MockBlocklockRevertingReceiverConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class MockBlocklockRevertingReceiver__factory extends ContractFactory {\n  constructor(...args: MockBlocklockRevertingReceiverConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    blocklockContract: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(blocklockContract, overrides || {});\n  }\n  override deploy(\n    blocklockContract: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(blocklockContract, overrides || {}) as Promise<\n      MockBlocklockRevertingReceiver & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): MockBlocklockRevertingReceiver__factory {\n    return super.connect(runner) as MockBlocklockRevertingReceiver__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): MockBlocklockRevertingReceiverInterface {\n    return new Interface(_abi) as MockBlocklockRevertingReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): MockBlocklockRevertingReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as MockBlocklockRevertingReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  MockBlocklockStringReceiver,\n  MockBlocklockStringReceiverInterface,\n} from \"../MockBlocklockStringReceiver\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"blocklockContract\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"receive\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptOwnership\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"blocklock\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"contract IBlocklockSender\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscriptionAndFundNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"createTimelockRequestWithDirectFunding\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"encryptedData\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createTimelockRequestWithSubscription\",\n    inputs: [\n      {\n        name: \"callbackGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"condition\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"encryptedData\",\n        type: \"tuple\",\n        internalType: \"struct TypesLib.Ciphertext\",\n        components: [\n          {\n            name: \"u\",\n            type: \"tuple\",\n            internalType: \"struct BLS.PointG2\",\n            components: [\n              {\n                name: \"x\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n              {\n                name: \"y\",\n                type: \"uint256[2]\",\n                internalType: \"uint256[2]\",\n              },\n            ],\n          },\n          {\n            name: \"v\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n          {\n            name: \"w\",\n            type: \"bytes\",\n            internalType: \"bytes\",\n          },\n        ],\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"encryptedValue\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"u\",\n        type: \"tuple\",\n        internalType: \"struct BLS.PointG2\",\n        components: [\n          {\n            name: \"x\",\n            type: \"uint256[2]\",\n            internalType: \"uint256[2]\",\n          },\n          {\n            name: \"y\",\n            type: \"uint256[2]\",\n            internalType: \"uint256[2]\",\n          },\n        ],\n      },\n      {\n        name: \"v\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"w\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"fundContractNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"owner\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"plainTextValue\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"receiveBlocklock\",\n    inputs: [\n      {\n        name: \"requestID\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decryptionKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"setBlocklock\",\n    inputs: [\n      {\n        name: \"_blocklock\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"setSubId\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"subscriptionId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"topUpSubscriptionNative\",\n    inputs: [],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"transferOwnership\",\n    inputs: [\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSubscription\",\n    inputs: [\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"withdrawNative\",\n    inputs: [\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"recipient\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"Funded\",\n    inputs: [\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"NewSubscriptionId\",\n    inputs: [\n      {\n        name: \"subscriptionId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferRequested\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"OwnershipTransferred\",\n    inputs: [\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Received\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Withdrawn\",\n    inputs: [\n      {\n        name: \"recipient\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"amount\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b50604051611b76380380611b7683398101604081905261002e91610186565b8033805f816100845760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b5f80546001600160a01b0319166001600160a01b03848116919091179091558116156100b3576100b3816100de565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506101b39050565b336001600160a01b038216036101365760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161007b565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b5f60208284031215610196575f5ffd5b81516001600160a01b03811681146101ac575f5ffd5b9392505050565b6119b6806101c05f395ff3fe608060405260043610610112575f3560e01c806379ba50971161009d57806397a9c2851161006257806397a9c285146102f7578063b8ca8dd814610318578063b96dbba714610337578063e64a66ea1461033f578063f2fde38b14610347575f5ffd5b806379ba509714610252578063809800431461026657806386e560be146102855780638da5cb5b146102a857806393b9740a146102d8575f5ffd5b806336bfffed116100e357806336bfffed146101ae5780634d3de353146101cd5780634fa26d40146101e057806359608fda146101ff5780635d94180214610233575f5ffd5b80626d6cae1461015557806309c1ba2e1461017d57806312065fe0146101925780631d2b2afd146101a4575f5ffd5b3661015157604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b5f5ffd5b348015610160575f5ffd5b5061016a60045481565b6040519081526020015b60405180910390f35b348015610188575f5ffd5b5061016a60035481565b34801561019d575f5ffd5b504761016a565b6101ac610366565b005b3480156101b9575f5ffd5b506101ac6101c8366004611191565b61040d565b61016a6101db366004611244565b61050a565b3480156101eb575f5ffd5b506101ac6101fa3660046112e5565b61056d565b34801561020a575f5ffd5b5061021e610219366004611244565b6105f7565b60408051928352602083019190915201610174565b34801561023e575f5ffd5b506101ac61024d366004611305565b610662565b34801561025d575f5ffd5b506101ac6106c7565b348015610271575f5ffd5b506101ac61028036600461134c565b610770565b348015610290575f5ffd5b506102996107aa565b604051610174939291906113d0565b3480156102b3575f5ffd5b505f546001600160a01b03165b6040516001600160a01b039091168152602001610174565b3480156102e3575f5ffd5b506002546102c0906001600160a01b031681565b348015610302575f5ffd5b5061030b610936565b604051610174919061140b565b348015610323575f5ffd5b506101ac61033236600461141d565b6109c2565b6101ac610a95565b6101ac610adc565b348015610352575f5ffd5b506101ac6103613660046112e5565b610b5b565b6003545f036103aa5760405162461bcd60e51b815260206004820152600b60248201526a1cdd58881b9bdd081cd95d60aa1b60448201526064015b60405180910390fd5b60025460035460405163256d573f60e21b815260048101919091526001600160a01b03909116906395b55cfc9034906024015b5f604051808303818588803b1580156103f4575f5ffd5b505af1158015610406573d5f5f3e3d5ffd5b5050505050565b610415610b6f565b6003545f036104565760405162461bcd60e51b815260206004820152600d60248201526c1cdd589251081b9bdd081cd95d609a1b60448201526064016103a1565b5f5b81811015610505576002546003546001600160a01b039091169063bec4c08c9085858581811061048a5761048a611447565b905060200201602081019061049f91906112e5565b6040516001600160e01b031960e085901b16815260048101929092526001600160a01b031660248201526044015f604051808303815f87803b1580156104e3575f5ffd5b505af11580156104f5573d5f5f3e3d5ffd5b5050600190920191506104589050565b505050565b5f5f61054d8686868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610bc3915050565b6004819055905082600561056182826115e6565b50909695505050505050565b610575610b6f565b6001600160a01b0381166105d55760405162461bcd60e51b815260206004820152602160248201527f43616e6e6f7420736574207a65726f20616464726573732061732073656e64656044820152603960f91b60648201526084016103a1565b600280546001600160a01b0319166001600160a01b0392909216919091179055565b5f5f5f5f61063c8888888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a9250610c41915050565b6004829055909250905084600561065382826115e6565b50919890975095505050505050565b6002546001600160a01b031633146106bc5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920626c6f636b6c6f636b20636f6e74726163742063616e2063616c6c60448201526064016103a1565b610505838383610d37565b6001546001600160a01b0316331461071a5760405162461bcd60e51b815260206004820152601660248201527526bab9ba10313290383937b837b9b2b21037bbb732b960511b60448201526064016103a1565b5f8054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610778610b6f565b600381905560405181907f5f479ac993925efae23839aa1c813b6ecb2fe1bbd14dc78295ab267d2fca4368905f90a250565b604080516080810180835260059283918391820190839060029082845b8154815260200190600101908083116107c757505050918352505060408051808201918290526020909201919060028481019182845b8154815260200190600101908083116107fd5750505050508152505090806004018054610829906114b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610855906114b1565b80156108a05780601f10610877576101008083540402835291602001916108a0565b820191905f5260205f20905b81548152906001019060200180831161088357829003601f168201915b5050505050908060050180546108b5906114b1565b80601f01602080910402602001604051908101604052809291908181526020018280546108e1906114b1565b801561092c5780601f106109035761010080835404028352916020019161092c565b820191905f5260205f20905b81548152906001019060200180831161090f57829003601f168201915b5050505050905083565b600b8054610943906114b1565b80601f016020809104026020016040519081016040528092919081815260200182805461096f906114b1565b80156109ba5780601f10610991576101008083540402835291602001916109ba565b820191905f5260205f20905b81548152906001019060200180831161099d57829003601f168201915b505050505081565b6109ca610b6f565b81471015610a1a5760405162461bcd60e51b815260206004820152601e60248201527f496e73756666696369656e742066756e647320696e20636f6e7472616374000060448201526064016103a1565b6040516001600160a01b0382169083156108fc029084905f818181858888f19350505050158015610a4d573d5f5f3e3d5ffd5b50806001600160a01b03167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610a8991815260200190565b60405180910390a25050565b610a9d610b6f565b610aa5610f49565b600381905560025460405163256d573f60e21b815260048101929092526001600160a01b0316906395b55cfc9034906024016103dd565b5f3411610b245760405162461bcd60e51b81526020600482015260166024820152750b2deea40daeae6e840e6cadcc840e6dedaca408aa8960531b60448201526064016103a1565b60405134815233907f5af8184bef8e4b45eb9f6ed7734d04da38ced226495548f46e0c8ff8d7d9a5249060200160405180910390a2565b610b63610b6f565b610b6c81611073565b50565b5f546001600160a01b03163314610bc15760405162461bcd60e51b815260206004820152601660248201527527b7363c9031b0b63630b1363290313c9037bbb732b960511b60448201526064016103a1565b565b6002546003546040516262b1d960e41b81525f926001600160a01b03169163062b1d9091610bf991889188908890600401611726565b6020604051808303815f875af1158015610c15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c399190611767565b949350505050565b600254604051634b16093560e01b815263ffffffff851660048201525f9182916001600160a01b0390911690634b16093590602401602060405180830381865afa158015610c91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb59190611767565b600254604051637909dc7b60e01b81529192506001600160a01b031690637909dc7b908390610cec9089908990899060040161177e565b60206040518083038185885af1158015610d08573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190610d2d9190611767565b9150935093915050565b8260045414610d7d5760405162461bcd60e51b8152602060048201526012602482015271125b9d985b1a59081c995c5d595cdd081a5960721b60448201526064016103a1565b6040805160e08101909152610f239060058160608101828160a084018260028282826020028201915b815481526020019060010190808311610da657505050918352505060408051808201918290526020909201919060028481019182845b815481526020019060010190808311610ddc575050505050815250508152602001600482018054610e0c906114b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e38906114b1565b8015610e835780601f10610e5a57610100808354040283529160200191610e83565b820191905f5260205f20905b815481529060010190602001808311610e6657829003601f168201915b50505050508152602001600582018054610e9c906114b1565b80601f0160208091040260200160405190810160405280929190818152602001828054610ec8906114b1565b8015610f135780601f10610eea57610100808354040283529160200191610f13565b820191905f5260205f20905b815481529060010190602001808311610ef657829003601f168201915b505050505081525050838361111b565b806020019051810190610f369190611823565b600b90610f439082611867565b50505050565b5f6003545f14610f9b5760405162461bcd60e51b815260206004820152601a60248201527f537562736372697074696f6e4964206973206e6f74207a65726f00000000000060448201526064016103a1565b60025f9054906101000a90046001600160a01b03166001600160a01b031663a21a23e46040518163ffffffff1660e01b81526004016020604051808303815f875af1158015610fec573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110109190611767565b600254604051632fb1302360e21b8152600481018390523060248201529192506001600160a01b03169063bec4c08c906044015f604051808303815f87803b15801561105a575f5ffd5b505af115801561106c573d5f5f3e3d5ffd5b5050505090565b336001600160a01b038216036110cb5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103a1565b600180546001600160a01b0319166001600160a01b038381169182179092555f8054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60025460405163326f063160e21b81526060916001600160a01b03169063c9bc18c49061115090879087908790600401611921565b5f60405180830381865afa15801561116a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c399190810190611823565b5f5f602083850312156111a2575f5ffd5b82356001600160401b038111156111b7575f5ffd5b8301601f810185136111c7575f5ffd5b80356001600160401b038111156111dc575f5ffd5b8560208260051b84010111156111f0575f5ffd5b6020919091019590945092505050565b5f5f83601f840112611210575f5ffd5b5081356001600160401b03811115611226575f5ffd5b60208301915083602082850101111561123d575f5ffd5b9250929050565b5f5f5f5f60608587031215611257575f5ffd5b843563ffffffff8116811461126a575f5ffd5b935060208501356001600160401b03811115611284575f5ffd5b61129087828801611200565b90945092505060408501356001600160401b038111156112ae575f5ffd5b850160c081880312156112bf575f5ffd5b939692955090935050565b80356001600160a01b03811681146112e0575f5ffd5b919050565b5f602082840312156112f5575f5ffd5b6112fe826112ca565b9392505050565b5f5f5f60408486031215611317575f5ffd5b8335925060208401356001600160401b03811115611333575f5ffd5b61133f86828701611200565b9497909650939450505050565b5f6020828403121561135c575f5ffd5b5035919050565b805f5b6002811015610f43578151845260209384019390910190600101611366565b611390828251611363565b60208101516105056040840182611363565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6113da8185611385565b60c060808201525f6113ef60c08301856113a2565b82810360a084015261140181856113a2565b9695505050505050565b602081525f6112fe60208301846113a2565b5f5f6040838503121561142e575f5ffd5b8235915061143e602084016112ca565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f8335601e19843603018112611484575f5ffd5b8301803591506001600160401b0382111561149d575f5ffd5b60200191503681900382131561123d575f5ffd5b600181811c908216806114c557607f821691505b6020821081036114e357634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561050557805f5260205f20601f840160051c8101602085101561150e5750805b601f840160051c820191505b81811015610406575f815560010161151a565b6001600160401b038311156115445761154461145b565b6115588361155283546114b1565b836114e9565b5f601f841160018114611589575f85156115725750838201355b5f19600387901b1c1916600186901b178355610406565b5f83815260208120601f198716915b828110156115b85786850135825560209485019460019092019101611598565b50868210156115d4575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b815f5b6002811015611606578135838201556020909101906001016115e9565b5050604082015f5b600281101561162e5781358382016002015560209091019060010161160e565b505061163d608083018361146f565b61164b81836004860161152d565b505061165a60a083018361146f565b610f4381836005860161152d565b5f5f8335601e1984360301811261167d575f5ffd5b83016020810192503590506001600160401b0381111561169b575f5ffd5b80360382131561123d575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6040818337604080820160408401375f6116ee6080830183611668565b60c0608086015261170360c0860182846116a9565b91505061171360a0840184611668565b85830360a08701526114018382846116a9565b63ffffffff85168152836020820152608060408201525f61174a60808301856113a2565b828103606084015261175c81856116d1565b979650505050505050565b5f60208284031215611777575f5ffd5b5051919050565b63ffffffff84168152606060208201525f61179c60608301856113a2565b828103604084015261140181856116d1565b5f5f6001600160401b038411156117c7576117c761145b565b50604051601f19601f85018116603f011681018181106001600160401b03821117156117f5576117f561145b565b60405283815290508082840185101561180c575f5ffd5b8383602083015e5f60208583010152509392505050565b5f60208284031215611833575f5ffd5b81516001600160401b03811115611848575f5ffd5b8201601f81018413611858575f5ffd5b610c39848251602084016117ae565b81516001600160401b038111156118805761188061145b565b6118948161188e84546114b1565b846114e9565b6020601f8211600181146118c6575f83156118af5750848201515b5f19600385901b1c1916600184901b178455610406565b5f84815260208120601f198516915b828110156118f557878501518255602094850194600190920191016118d5565b508482101561191257868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60408152611933604082018551611385565b5f602085015160c08084015261194d6101008401826113a2565b90506040860151603f198483030160e085015261196a82826113a2565b91505082810360208401526114018185876116a956fea26469706673582212202b234f6cc1c77cb4cf135ab8e80bc0c30375aa29a81fe32676c349dfc700649e64736f6c634300081c0033\";\n\ntype MockBlocklockStringReceiverConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: MockBlocklockStringReceiverConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class MockBlocklockStringReceiver__factory extends ContractFactory {\n  constructor(...args: MockBlocklockStringReceiverConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    blocklockContract: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(blocklockContract, overrides || {});\n  }\n  override deploy(\n    blocklockContract: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(blocklockContract, overrides || {}) as Promise<\n      MockBlocklockStringReceiver & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): MockBlocklockStringReceiver__factory {\n    return super.connect(runner) as MockBlocklockStringReceiver__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): MockBlocklockStringReceiverInterface {\n    return new Interface(_abi) as MockBlocklockStringReceiverInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): MockBlocklockStringReceiver {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as MockBlocklockStringReceiver;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Multicall, MulticallInterface } from \"../Multicall\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"multicall\",\n    inputs: [\n      {\n        name: \"data\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"results\",\n        type: \"bytes[]\",\n        internalType: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n] as const;\n\nexport class Multicall__factory {\n  static readonly abi = _abi;\n  static createInterface(): MulticallInterface {\n    return new Interface(_abi) as MulticallInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Multicall {\n    return new Contract(address, _abi, runner) as unknown as Multicall;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Proxy, ProxyInterface } from \"../Proxy\";\n\nconst _abi = [\n  {\n    type: \"fallback\",\n    stateMutability: \"payable\",\n  },\n] as const;\n\nexport class Proxy__factory {\n  static readonly abi = _abi;\n  static createInterface(): ProxyInterface {\n    return new Interface(_abi) as ProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Proxy {\n    return new Contract(address, _abi, runner) as unknown as Proxy;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  ReentrancyGuard,\n  ReentrancyGuardInterface,\n} from \"../ReentrancyGuard\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n] as const;\n\nexport class ReentrancyGuard__factory {\n  static readonly abi = _abi;\n  static createInterface(): ReentrancyGuardInterface {\n    return new Interface(_abi) as ReentrancyGuardInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): ReentrancyGuard {\n    return new Contract(address, _abi, runner) as unknown as ReentrancyGuard;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type { Signer, ContractDeployTransaction, ContractRunner } from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { SafeCast, SafeCastInterface } from \"../SafeCast\";\n\nconst _abi = [\n  {\n    type: \"error\",\n    name: \"SafeCastOverflowedIntDowncast\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SafeCastOverflowedIntToUint\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"int256\",\n        internalType: \"int256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SafeCastOverflowedUintDowncast\",\n    inputs: [\n      {\n        name: \"bits\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"SafeCastOverflowedUintToInt\",\n    inputs: [\n      {\n        name: \"value\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220b0304ef4187e10492a66fecf43fc5ee811baf9534a4dc85919865ee3f913bb2864736f6c634300081c0033\";\n\ntype SafeCastConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SafeCastConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SafeCast__factory extends ContractFactory {\n  constructor(...args: SafeCastConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(overrides || {});\n  }\n  override deploy(overrides?: NonPayableOverrides & { from?: string }) {\n    return super.deploy(overrides || {}) as Promise<\n      SafeCast & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): SafeCast__factory {\n    return super.connect(runner) as SafeCast__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SafeCastInterface {\n    return new Interface(_abi) as SafeCastInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): SafeCast {\n    return new Contract(address, _abi, runner) as unknown as SafeCast;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Script, ScriptInterface } from \"../Script\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_SCRIPT\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class Script__factory {\n  static readonly abi = _abi;\n  static createInterface(): ScriptInterface {\n    return new Interface(_abi) as ScriptInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Script {\n    return new Contract(address, _abi, runner) as unknown as Script;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type {\n  SignatureSchemeAddressProvider,\n  SignatureSchemeAddressProviderInterface,\n} from \"../SignatureSchemeAddressProvider\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"DEFAULT_ADMIN_ROLE\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getRoleAdmin\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSignatureSchemeAddress\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"grantRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"hasRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"isSupportedScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"renounceRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"callerConfirmation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"revokeRole\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"supportsInterface\",\n    inputs: [\n      {\n        name: \"interfaceId\",\n        type: \"bytes4\",\n        internalType: \"bytes4\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"updateSignatureScheme\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n      {\n        name: \"schemeAddress\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"event\",\n    name: \"NewSignatureSchemeAddressAdded\",\n    inputs: [\n      {\n        name: \"schemeID\",\n        type: \"string\",\n        indexed: true,\n        internalType: \"string\",\n      },\n      {\n        name: \"schemeAddress\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"addedAt\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleAdminChanged\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleGranted\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"RoleRevoked\",\n    inputs: [\n      {\n        name: \"role\",\n        type: \"bytes32\",\n        indexed: true,\n        internalType: \"bytes32\",\n      },\n      {\n        name: \"account\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n      {\n        name: \"sender\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlBadConfirmation\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"AccessControlUnauthorizedAccount\",\n    inputs: [\n      {\n        name: \"account\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"neededRole\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b506040516109e03803806109e083398101604081905261002e916101a7565b6001600160a01b03811661003f5750335b6100495f826100fe565b61008e5760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b60448201526064015b60405180910390fd5b6100b87fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775826100fe565b6100f85760405162461bcd60e51b815260206004820152601160248201527011dc985b9d081c9bdb194819985a5b1959607a1b6044820152606401610085565b506101d4565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661019e575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101563390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101a1565b505f5b92915050565b5f602082840312156101b7575f5ffd5b81516001600160a01b03811681146101cd575f5ffd5b9392505050565b6107ff806101e15f395ff3fe608060405234801561000f575f5ffd5b50600436106100a6575f3560e01c80635bb09cf81161006e5780635bb09cf81461013d57806375b238fc1461016857806391d148541461018f578063a217fddf146101a2578063bab867da146101a9578063d547741f146101bc575f5ffd5b806301ffc9a7146100aa578063248a9ca3146100d25780632f2ff15d146101025780632fc9fa331461011757806336568abe1461012a575b5f5ffd5b6100bd6100b836600461065c565b6101cf565b60405190151581526020015b60405180910390f35b6100f46100e036600461068a565b5f9081526020819052604090206001015490565b6040519081526020016100c9565b6101156101103660046106bc565b610205565b005b6100bd61012536600461072b565b61022f565b6101156101383660046106bc565b61026f565b61015061014b36600461072b565b6102a7565b6040516001600160a01b0390911681526020016100c9565b6100f47fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b6100bd61019d3660046106bc565b6102db565b6100f45f81565b6101156101b736600461076a565b610303565b6101156101ca3660046106bc565b6104f6565b5f6001600160e01b03198216637965db0b60e01b14806101ff57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f8281526020819052604090206001015461021f8161051a565b6102298383610527565b50505050565b5f5f6001600160a01b03166001848460405161024c9291906107ba565b908152604051908190036020019020546001600160a01b03161415905092915050565b6001600160a01b03811633146102985760405163334bd91960e11b815260040160405180910390fd5b6102a282826105b6565b505050565b5f600183836040516102ba9291906107ba565b908152604051908190036020019020546001600160a01b0316905092915050565b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61032c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561051a565b6001600160a01b0381161580159061034d57505f816001600160a01b03163b115b6103b15760405162461bcd60e51b815260206004820152602a60248201527f496e76616c696420636f6e7472616374206164647265737320666f7220736368604482015269656d654164647265737360b01b60648201526084015b60405180910390fd5b5f6001600160a01b0316600184846040516103cd9291906107ba565b908152604051908190036020019020546001600160a01b03161461043d5760405162461bcd60e51b815260206004820152602160248201527f536368656d6520616c726561647920616464656420666f7220736368656d65496044820152601160fa1b60648201526084016103a8565b80600184846040516104509291906107ba565b90815260405190819003602001812080546001600160a01b03939093166001600160a01b03199093169290921790915560019061049090859085906107ba565b908152604051908190036020018120546001600160a01b0316906104b790859085906107ba565b604051908190038120428252907f0a1cd6a1e0a7b200d28ead555f3cee96e0d2def049535fbcfdc2926bc4cec5049060200160405180910390a3505050565b5f828152602081905260409020600101546105108161051a565b61022983836105b6565b610524813361061f565b50565b5f61053283836102db565b6105af575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556105673390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101ff565b505f6101ff565b5f6105c183836102db565b156105af575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016101ff565b61062982826102db565b6106585760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016103a8565b5050565b5f6020828403121561066c575f5ffd5b81356001600160e01b031981168114610683575f5ffd5b9392505050565b5f6020828403121561069a575f5ffd5b5035919050565b80356001600160a01b03811681146106b7575f5ffd5b919050565b5f5f604083850312156106cd575f5ffd5b823591506106dd602084016106a1565b90509250929050565b5f5f83601f8401126106f6575f5ffd5b50813567ffffffffffffffff81111561070d575f5ffd5b602083019150836020828501011115610724575f5ffd5b9250929050565b5f5f6020838503121561073c575f5ffd5b823567ffffffffffffffff811115610752575f5ffd5b61075e858286016106e6565b90969095509350505050565b5f5f5f6040848603121561077c575f5ffd5b833567ffffffffffffffff811115610792575f5ffd5b61079e868287016106e6565b90945092506107b19050602085016106a1565b90509250925092565b818382375f910190815291905056fea2646970667358221220e5144df0d342a74d5f0128ec7e3d4f61ebce0b76c178b4747512db764315a6cd64736f6c634300081c0033\";\n\ntype SignatureSchemeAddressProviderConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: SignatureSchemeAddressProviderConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class SignatureSchemeAddressProvider__factory extends ContractFactory {\n  constructor(...args: SignatureSchemeAddressProviderConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    owner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(owner, overrides || {});\n  }\n  override deploy(\n    owner: AddressLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(owner, overrides || {}) as Promise<\n      SignatureSchemeAddressProvider & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(\n    runner: ContractRunner | null\n  ): SignatureSchemeAddressProvider__factory {\n    return super.connect(runner) as SignatureSchemeAddressProvider__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): SignatureSchemeAddressProviderInterface {\n    return new Interface(_abi) as SignatureSchemeAddressProviderInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SignatureSchemeAddressProvider {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as SignatureSchemeAddressProvider;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  SignatureSchemeBase,\n  SignatureSchemeBaseInterface,\n} from \"../SignatureSchemeBase\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"SCHEME_ID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"getChainId\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"chainId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKey\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n      {\n        name: \"\",\n        type: \"uint256[2]\",\n        internalType: \"uint256[2]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getPublicKeyBytes\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToBytes\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"hashToPoint\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"verifySignature\",\n    inputs: [\n      {\n        name: \"message\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"signature\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n      {\n        name: \"publicKey\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"isValid\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class SignatureSchemeBase__factory {\n  static readonly abi = _abi;\n  static createInterface(): SignatureSchemeBaseInterface {\n    return new Interface(_abi) as SignatureSchemeBaseInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SignatureSchemeBase {\n    return new Contract(\n      address,\n      _abi,\n      runner\n    ) as unknown as SignatureSchemeBase;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { StdAssertions, StdAssertionsInterface } from \"../StdAssertions\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class StdAssertions__factory {\n  static readonly abi = _abi;\n  static createInterface(): StdAssertionsInterface {\n    return new Interface(_abi) as StdAssertionsInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): StdAssertions {\n    return new Contract(address, _abi, runner) as unknown as StdAssertions;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { StdInvariant, StdInvariantInterface } from \"../StdInvariant\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n] as const;\n\nexport class StdInvariant__factory {\n  static readonly abi = _abi;\n  static createInterface(): StdInvariantInterface {\n    return new Interface(_abi) as StdInvariantInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): StdInvariant {\n    return new Contract(address, _abi, runner) as unknown as StdInvariant;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  SubscriptionAPI,\n  SubscriptionAPIInterface,\n} from \"../SubscriptionAPI\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"MAX_CONSUMERS\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint16\",\n        internalType: \"uint16\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"acceptSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"addConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"cancelSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"createSubscription\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"fundSubscriptionWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getActiveSubscriptionIds\",\n    inputs: [\n      {\n        name: \"startIndex\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"maxCount\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"ids\",\n        type: \"uint256[]\",\n        internalType: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"getSubscription\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"nativeBalance\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n      {\n        name: \"reqCount\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n      {\n        name: \"subOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"consumers\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"pendingRequestExists\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"removeConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"requestSubscriptionOwnerTransfer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"function\",\n    name: \"s_config\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"maxGasLimit\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"gasAfterPaymentCalculation\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"fulfillmentFlatFeeNativePPM\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"weiPerUnitGas\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"blsPairingCheckOverhead\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n      {\n        name: \"nativePremiumPercentage\",\n        type: \"uint8\",\n        internalType: \"uint8\",\n      },\n      {\n        name: \"gasForCallExactCheck\",\n        type: \"uint32\",\n        internalType: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_currentSubNonce\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint64\",\n        internalType: \"uint64\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_totalNativeBalance\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_withdrawableDirectFundingFeeNative\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"s_withdrawableSubscriptionFeeNative\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"uint96\",\n        internalType: \"uint96\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionCanceled\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"amountNative\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionConsumerAdded\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionConsumerRemoved\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionCreated\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"owner\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionFundedWithNative\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"oldNativeBalance\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"newNativeBalance\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionOwnerTransferRequested\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"SubscriptionOwnerTransferred\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        indexed: true,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"from\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n      {\n        name: \"to\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"BalanceInvariantViolated\",\n    inputs: [\n      {\n        name: \"internalBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"externalBalance\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"FailedToSendNative\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"IndexOutOfRange\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InsufficientBalance\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidCalldata\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidConsumer\",\n    inputs: [\n      {\n        name: \"subId\",\n        type: \"uint256\",\n        internalType: \"uint256\",\n      },\n      {\n        name: \"consumer\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidSubscription\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"MustBeRequestedOwner\",\n    inputs: [\n      {\n        name: \"proposedOwner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"MustBeSubOwner\",\n    inputs: [\n      {\n        name: \"owner\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"PendingRequestExists\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"ReentrancyGuardReentrantCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"TooManyConsumers\",\n    inputs: [],\n  },\n] as const;\n\nexport class SubscriptionAPI__factory {\n  static readonly abi = _abi;\n  static createInterface(): SubscriptionAPIInterface {\n    return new Interface(_abi) as SubscriptionAPIInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): SubscriptionAPI {\n    return new Contract(address, _abi, runner) as unknown as SubscriptionAPI;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type { Test, TestInterface } from \"../Test\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"IS_TEST\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"excludeSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"excludedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"failed\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bool\",\n        internalType: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifactSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifactSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzArtifactSelector[]\",\n        components: [\n          {\n            name: \"artifact\",\n            type: \"string\",\n            internalType: \"string\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetArtifacts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedArtifacts_\",\n        type: \"string[]\",\n        internalType: \"string[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetContracts\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedContracts_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetInterfaces\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedInterfaces_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzInterface[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"artifacts\",\n            type: \"string[]\",\n            internalType: \"string[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSelectors\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSelectors_\",\n        type: \"tuple[]\",\n        internalType: \"struct StdInvariant.FuzzSelector[]\",\n        components: [\n          {\n            name: \"addr\",\n            type: \"address\",\n            internalType: \"address\",\n          },\n          {\n            name: \"selectors\",\n            type: \"bytes4[]\",\n            internalType: \"bytes4[]\",\n          },\n        ],\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"targetSenders\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"targetedSenders_\",\n        type: \"address[]\",\n        internalType: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"log\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_address\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_array\",\n    inputs: [\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_bytes32\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_int\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_address\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address\",\n        indexed: false,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256[]\",\n        indexed: false,\n        internalType: \"uint256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256[]\",\n        indexed: false,\n        internalType: \"int256[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_array\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"address[]\",\n        indexed: false,\n        internalType: \"address[]\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_bytes32\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"bytes32\",\n        indexed: false,\n        internalType: \"bytes32\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_decimal_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n      {\n        name: \"decimals\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_int\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"int256\",\n        indexed: false,\n        internalType: \"int256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_string\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_named_uint\",\n    inputs: [\n      {\n        name: \"key\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n      {\n        name: \"val\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_string\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        indexed: false,\n        internalType: \"string\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"log_uint\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"uint256\",\n        indexed: false,\n        internalType: \"uint256\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"logs\",\n    inputs: [\n      {\n        name: \"\",\n        type: \"bytes\",\n        indexed: false,\n        internalType: \"bytes\",\n      },\n    ],\n    anonymous: false,\n  },\n] as const;\n\nexport class Test__factory {\n  static readonly abi = _abi;\n  static createInterface(): TestInterface {\n    return new Interface(_abi) as TestInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): Test {\n    return new Contract(address, _abi, runner) as unknown as Test;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\nimport {\n  Contract,\n  ContractFactory,\n  ContractTransactionResponse,\n  Interface,\n} from \"ethers\";\nimport type {\n  Signer,\n  BytesLike,\n  AddressLike,\n  ContractDeployTransaction,\n  ContractRunner,\n} from \"ethers\";\nimport type { NonPayableOverrides } from \"../common\";\nimport type { UUPSProxy, UUPSProxyInterface } from \"../UUPSProxy\";\n\nconst _abi = [\n  {\n    type: \"constructor\",\n    inputs: [\n      {\n        name: \"_implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"_data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n  },\n  {\n    type: \"fallback\",\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"function\",\n    name: \"getImplementation\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n] as const;\n\nconst _bytecode =\n  \"0x608060405234801561000f575f5ffd5b5060405161042b38038061042b83398101604081905261002e9161024c565b818161003a8282610043565b50505050610331565b61004c826100a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561009557610090828261011c565b505050565b61009d61018f565b5050565b806001600160a01b03163b5f036100db57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051610138919061031b565b5f60405180830381855af49150503d805f8114610170576040519150601f19603f3d011682016040523d82523d5f602084013e610175565b606091505b5090925090506101868583836101b0565b95945050505050565b34156101ae5760405163b398979f60e01b815260040160405180910390fd5b565b6060826101c5576101c08261020f565b610208565b81511580156101dc57506001600160a01b0384163b155b1561020557604051639996b31560e01b81526001600160a01b03851660048201526024016100d2565b50805b9392505050565b80511561021f5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561025d575f5ffd5b82516001600160a01b0381168114610273575f5ffd5b60208401519092506001600160401b0381111561028e575f5ffd5b8301601f8101851361029e575f5ffd5b80516001600160401b038111156102b7576102b7610238565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102e5576102e5610238565b6040528181528282016020018710156102fc575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b60ee8061033d5f395ff3fe608060405260043610601b575f3560e01c8063aaf10f42146023575b60216050565b005b348015602d575f5ffd5b506034605e565b6040516001600160a01b03909116815260200160405180910390f35b605c6058606a565b609b565b565b5f6065606a565b905090565b5f60657f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b365f5f375f5f365f845af43d5f5f3e80801560b4573d5ff35b3d5ffdfea26469706673582212201f88a9384bfa30d2906e52bacd1d97e51a08a4400b82dd22dfa2452b39c5cca764736f6c634300081c0033\";\n\ntype UUPSProxyConstructorParams =\n  | [signer?: Signer]\n  | ConstructorParameters<typeof ContractFactory>;\n\nconst isSuperArgs = (\n  xs: UUPSProxyConstructorParams\n): xs is ConstructorParameters<typeof ContractFactory> => xs.length > 1;\n\nexport class UUPSProxy__factory extends ContractFactory {\n  constructor(...args: UUPSProxyConstructorParams) {\n    if (isSuperArgs(args)) {\n      super(...args);\n    } else {\n      super(_abi, _bytecode, args[0]);\n    }\n  }\n\n  override getDeployTransaction(\n    _implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ): Promise<ContractDeployTransaction> {\n    return super.getDeployTransaction(_implementation, _data, overrides || {});\n  }\n  override deploy(\n    _implementation: AddressLike,\n    _data: BytesLike,\n    overrides?: NonPayableOverrides & { from?: string }\n  ) {\n    return super.deploy(_implementation, _data, overrides || {}) as Promise<\n      UUPSProxy & {\n        deploymentTransaction(): ContractTransactionResponse;\n      }\n    >;\n  }\n  override connect(runner: ContractRunner | null): UUPSProxy__factory {\n    return super.connect(runner) as UUPSProxy__factory;\n  }\n\n  static readonly bytecode = _bytecode;\n  static readonly abi = _abi;\n  static createInterface(): UUPSProxyInterface {\n    return new Interface(_abi) as UUPSProxyInterface;\n  }\n  static connect(address: string, runner?: ContractRunner | null): UUPSProxy {\n    return new Contract(address, _abi, runner) as unknown as UUPSProxy;\n  }\n}\n", "/* Autogenerated file. Do not edit manually. */\n/* tslint:disable */\n/* eslint-disable */\n\nimport { Contract, Interface, type ContractRunner } from \"ethers\";\nimport type {\n  UUPSUpgradeable,\n  UUPSUpgradeableInterface,\n} from \"../UUPSUpgradeable\";\n\nconst _abi = [\n  {\n    type: \"function\",\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"string\",\n        internalType: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"proxiableUUID\",\n    inputs: [],\n    outputs: [\n      {\n        name: \"\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n  },\n  {\n    type: \"function\",\n    name: \"upgradeToAndCall\",\n    inputs: [\n      {\n        name: \"newImplementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n      {\n        name: \"data\",\n        type: \"bytes\",\n        internalType: \"bytes\",\n      },\n    ],\n    outputs: [],\n    stateMutability: \"payable\",\n  },\n  {\n    type: \"event\",\n    name: \"Initialized\",\n    inputs: [\n      {\n        name: \"version\",\n        type: \"uint64\",\n        indexed: false,\n        internalType: \"uint64\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"event\",\n    name: \"Upgraded\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        indexed: true,\n        internalType: \"address\",\n      },\n    ],\n    anonymous: false,\n  },\n  {\n    type: \"error\",\n    name: \"AddressEmptyCode\",\n    inputs: [\n      {\n        name: \"target\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967InvalidImplementation\",\n    inputs: [\n      {\n        name: \"implementation\",\n        type: \"address\",\n        internalType: \"address\",\n      },\n    ],\n  },\n  {\n    type: \"error\",\n    name: \"ERC1967NonPayable\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"FailedCall\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"InvalidInitialization\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"NotInitializing\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnauthorizedCallContext\",\n    inputs: [],\n  },\n  {\n    type: \"error\",\n    name: \"UUPSUnsupportedProxiableUUID\",\n    inputs: [\n      {\n        name: \"slot\",\n        type: \"bytes32\",\n        internalType: \"bytes32\",\n      },\n    ],\n  },\n] as const;\n\nexport class UUPSUpgradeable__factory {\n  static readonly abi = _abi;\n  static createInterface(): UUPSUpgradeableInterface {\n    return new Interface(_abi) as UUPSUpgradeableInterface;\n  }\n  static connect(\n    address: string,\n    runner?: ContractRunner | null\n  ): UUPSUpgradeable {\n    return new Contract(address, _abi, runner) as unknown as UUPSUpgradeable;\n  }\n}\n", "import { getBytes, ethers, Signer, Provider, BigNumberish, BytesLike } from \"ethers\"\nimport { keccak_256 } from \"@noble/hashes/sha3\"\nimport {\n    encodeCiphertextToSolidity,\n    encodeParams,\n    extractSingleLog, parseSolidityCiphertext,\n} from \"./ethers-utils\"\nimport { Ciphertext, decrypt_g1_with_preprocess, encrypt_towards_identity_g1, G2, IbeOpts } from \"./crypto/ibe-bn254\"\nimport { BlocklockSender, BlocklockSender__factory } from \"./generated\"\nimport { TypesLib } from \"./generated/BlocklockSender\"\n\nexport type BigIntPair = {\n    c0: bigint;\n    c1: bigint;\n};\n\nexport type BlockLockPublicKey = {\n    x: BigIntPair;\n    y: BigIntPair;\n};\n\nconst BLOCKLOCK_MAX_MSG_LEN: number = 256\n\nconst createBlocklockIbeOpts = (chainId: bigint): IbeOpts => ({\n    hash: keccak_256,\n    k: 128,\n    expand_fn: \"xmd\",\n    dsts: {\n        H1_G1: Buffer.from(`BLOCKLOCK_BN254G1_XMD:KECCAK-256_SVDW_RO_H1_${encodeParams([\"uint256\"], [chainId])}_`),\n        H2: Buffer.from(`BLOCKLOCK_BN254_XMD:KECCAK-256_H2_${encodeParams([\"uint256\"], [chainId])}_`),\n        H3: Buffer.from(`BLOCKLOCK_BN254_XMD:KECCAK-256_H3_${encodeParams([\"uint256\"], [chainId])}_`),\n        H4: Buffer.from(`BLOCKLOCK_BN254_XMD:KECCAK-256_H4_${encodeParams([\"uint256\"], [chainId])}_`),\n    },\n})\n\nexport const BLOCKLOCK_TESTNET_PUBLIC_KEY: BlockLockPublicKey = {\n    x: {\n        c0: BigInt(\"0x2691d39ecc380bfa873911a0b848c77556ee948fb8ab649137d3d3e78153f6ca\"),\n        c1: BigInt(\"0x2863e20a5125b098108a5061b31f405e16a069e9ebff60022f57f4c4fd0237bf\"),\n    },\n    y: {\n        c0: BigInt(\"0x193513dbe180d700b189c529754f650b7b7882122c8a1e242a938d23ea9f765c\"),\n        c1: BigInt(\"0x11c939ea560caf31f552c9c4879b15865d38ba1dfb0f7a7d2ac46a4f0cae25ba\"),\n    },\n};\n\nexport const BLOCKLOCK_MAINNET_PUBLIC_KEY : BlockLockPublicKey = {\n    x: {\n        c0: BigInt(\"0x2b0985484a2503404d6c2b183d8be1e38aeb548f0435a935e4058499980c22a4\"),\n        c1: BigInt(\"0x2eb81c7b1bb618894ad337b68d7ddf1d19f9b786d20b9de7735da410a98e458c\"),\n    },\n    y: {\n        c0: BigInt(\"0x10c1587f14b640331d0dfd0edf9817e2c650c15e70c7bf408124d58e24b0ff3c\"),\n        c1: BigInt(\"0xbd0526dce7136f54cf574cfd26e8d2d8c61c5218afb9d4466f9177674f436f4\"),\n    },\n};\n\ntype GasParams = {\n    gasLimit: number\n    maxFeePerGas: bigint\n    maxPriorityFeePerGas: bigint\n}\n\nconst defaultGasParams: GasParams = {\n    gasLimit: 100_000,\n    maxFeePerGas: ethers.parseUnits(\"0.2\", \"gwei\"),\n    maxPriorityFeePerGas: ethers.parseUnits(\"0.2\", \"gwei\"),\n}\n\nconst filecoinGasParams: GasParams = {\n    gasLimit: defaultGasParams.gasLimit * 500,\n    maxFeePerGas: ethers.parseUnits(\"0.2\", \"gwei\"),\n    maxPriorityFeePerGas: ethers.parseUnits(\"0.2\", \"gwei\"),\n}\n\n/* addresses of the deployed blocklockSender contracts */\nexport const FURNACE_TESTNET_CONTRACT_ADDRESS = \"0xEd925F96790F11678972b0F2c250498D782DDec9\"\nexport const FILECOIN_CALIBNET_CONTRACT_ADDRESS = \"0xF00aB3B64c81b6Ce51f8220EB2bFaa2D469cf702\"\nexport const FILECOIN_MAINNET_CONTRACT_ADDRESS = \"0x34092470CC59A097d770523931E3bC179370B44b\"\nexport const BASE_SEPOLIA_CONTRACT_ADDRESS = \"0x82Fed730CbdeC5A2D8724F2e3b316a70A565e27e\"\nexport const POLYGON_POS_CONTRACT_ADDRESS = \"0x82Fed730CbdeC5A2D8724F2e3b316a70A565e27e\"\n\nconst iface = BlocklockSender__factory.createInterface()\n\nexport class Blocklock {\n    private blocklockSender: BlocklockSender\n    private blocklockPublicKey: BlockLockPublicKey\n    private ibeOpts: IbeOpts\n    private gasParams: GasParams\n    private signer: Signer | Provider\n\n    constructor(\n        signer: Signer | Provider,\n        private readonly blocklockSenderContractAddress: string,\n        chainId: bigint,\n        gasParams: GasParams = defaultGasParams,\n        blocklockPublicKey: BlockLockPublicKey = BLOCKLOCK_TESTNET_PUBLIC_KEY,\n    ) {\n        this.blocklockSender = BlocklockSender__factory.connect(blocklockSenderContractAddress, signer)\n        this.blocklockPublicKey = blocklockPublicKey\n        this.gasParams = gasParams\n        this.ibeOpts = createBlocklockIbeOpts(chainId)\n        this.signer = signer\n    }\n\n    static createFilecoinMainnet(rpc: Signer | Provider): Blocklock {\n        return new Blocklock(rpc, FILECOIN_MAINNET_CONTRACT_ADDRESS, 314n, filecoinGasParams, BLOCKLOCK_MAINNET_PUBLIC_KEY)\n    }\n    static createFilecoinCalibnet(rpc: Signer | Provider): Blocklock {\n        return new Blocklock(rpc, FILECOIN_CALIBNET_CONTRACT_ADDRESS, 314159n, filecoinGasParams)\n    }\n\n    static createFurnace(rpc: Signer | Provider): Blocklock {\n        return new Blocklock(rpc, FURNACE_TESTNET_CONTRACT_ADDRESS, 64630n)\n    }\n\n    static createBaseSepolia(rpc: Signer | Provider): Blocklock {\n        return new Blocklock(rpc, BASE_SEPOLIA_CONTRACT_ADDRESS, 84532n)\n    }\n\n    static createPolygonPos(rpc: Signer | Provider): Blocklock {\n        return new Blocklock(rpc, POLYGON_POS_CONTRACT_ADDRESS, 137n)\n    }\n\n    static createFromChainId(rpc: Signer | Provider, chainId: BigNumberish): Blocklock {\n        switch (chainId.toString().toLowerCase()) {\n            case \"314159\":\n            case \"314159n\":\n            case \"0x4cb2f\":\n                return Blocklock.createFilecoinCalibnet(rpc)\n\n            case \"314\":\n            case \"314n\":\n            case \"0x13a\":\n                return Blocklock.createFilecoinMainnet(rpc)\n\n            case \"64630\":\n            case \"64630n\":\n            case \"0xfc76\":\n                return Blocklock.createFurnace(rpc)\n\n            case \"84532\":\n            case \"84532n\":\n            case \"0x14a34\":\n                return Blocklock.createBaseSepolia(rpc)\n\n            case \"137\":\n            case \"137n\":\n            case \"0x89\":\n                return Blocklock.createPolygonPos(rpc)\n\n            default:\n                throw new Error(\"unsupported chainId :(\")\n        }\n    }\n\n    /**\n     * Request a blocklock decryption at block number blockHeight.\n     * @param blockHeight time at which the decryption should key should be released\n     * @param ciphertext encrypted message to store on chain\n     * @returns blocklock request id as a string\n     */\n    async requestBlocklock(blockHeight: bigint, ciphertext: TypesLib.CiphertextStruct): Promise<bigint> {\n        const conditionBytes = encodeCondition(blockHeight);\n\n        // 1. Get chain ID and fee data\n        const network = await this.signer.provider!.getNetwork();\n        const chainId = network.chainId;\n\n        const feeData = await this.signer.provider!.getFeeData();\n        \n        // feeData.gasPrice: Legacy flat gas price (used on non-EIP-1559 chains like Filecoin or older EVMs)\n        const gasPrice = feeData.gasPrice!;\n\n        // feeData.maxFeePerGas: Max total gas price we're willing to pay (base + priority), used in EIP-1559\n        const maxFeePerGas = feeData.maxFeePerGas!;\n\n        // feeData.maxPriorityFeePerGas: Tip to incentivize validators (goes directly to them)\n        const maxPriorityFeePerGas = feeData.maxPriorityFeePerGas!;\n\n        // latestblock.baseFeePerGas: Minimum gas price required by the network (burned), set by latest block\n        // const latestBlock = await this.signer.provider!.getBlock(\"latest\");\n        // const baseFeePerGas = latestBlock!.baseFeePerGas; // BigNumber (v5) or bigint (v6)\n\n        // 2. Determine whether to use legacy or EIP-1559 pricing\n        const isFilecoin = Number(chainId) === 314 || Number(chainId) === 314159;\n\n        let txGasPrice: bigint;\n        if (isFilecoin) {\n            // Use legacy gasPrice directly\n            txGasPrice = gasPrice > 0? gasPrice * 10n : (maxFeePerGas + maxPriorityFeePerGas) * 10n;\n        } else {\n            // Use effective gas price based on EIP-1559\n            txGasPrice = maxFeePerGas + maxPriorityFeePerGas;\n        }\n\n        // 3. Estimate request price using the selected txGasPrice\n        const requestPrice = await this.blocklockSender.estimateRequestPriceNative(\n            this.gasParams.gasLimit,\n            txGasPrice \n        );\n\n        // 4. Apply buffer (e.g. 100% = 2\u00D7 total)\n        const bufferPercent = isFilecoin? 300n: 100n;\n        const valueToSend = requestPrice + (requestPrice * bufferPercent) / 100n;\n\n        // 5. Estimate gas\n        const estimatedGas = await this.blocklockSender.requestBlocklock.estimateGas(\n            this.gasParams.gasLimit,\n            conditionBytes,\n            ciphertext,\n            isFilecoin\n                ? { value: valueToSend, gasPrice: txGasPrice }\n                : {\n                    value: valueToSend,\n                    maxFeePerGas,\n                    maxPriorityFeePerGas,\n                }\n        );\n\n        // 6. Send transaction\n        const tx = await this.blocklockSender.requestBlocklock(\n            this.gasParams.gasLimit,\n            conditionBytes,\n            ciphertext,\n            isFilecoin\n                ? {\n                    value: valueToSend,\n                    gasLimit: estimatedGas,\n                    gasPrice: txGasPrice,\n                }\n                : {\n                    value: valueToSend,\n                    gasLimit: estimatedGas,\n                    maxFeePerGas,\n                    maxPriorityFeePerGas,\n                }\n        );\n\n        const receipt = await tx.wait();\n        if (!receipt) {\n            throw new Error(\"Transaction was not mined\");\n        }\n\n        // 7. Extract request ID from log\n        const [requestID] = extractSingleLog(\n            iface,\n            receipt,\n            this.blocklockSenderContractAddress,\n            iface.getEvent(\"BlocklockRequested\")\n        );\n\n        return requestID;\n    }\n\n    /**\n     * Fetch the details of a blocklock request, decryption key / signature excluded.\n     * This function should be called to fetch pending blocklock requests.\n     * @param requestId blocklock request id\n     * @returns details of the blocklock request, undefined if not found\n     */\n    async fetchBlocklockRequest(requestId: bigint): Promise<BlocklockRequest | undefined> {\n        const request = await this.blocklockSender.getRequest.staticCall(requestId)\n        const blockHeight = decodeCondition(request.condition)\n        return {\n            id: request.decryptionRequestID,\n            blockHeight: blockHeight,\n            ciphertext: parseSolidityCiphertext(request.ciphertext)\n        }\n    }\n\n    /**\n     * Fetch all blocklock requests, decryption keys / signatures excluded.\n     * @returns a map with the details of each blocklock request\n     */\n    async fetchAllBlocklockRequests(): Promise<Map<bigint, BlocklockRequest>> {\n        const requestFilter = this.blocklockSender.filters.BlocklockRequested()\n        const requests = await this.blocklockSender.queryFilter(requestFilter)\n\n        return new Map(Array.from(\n            requests.map((event) => {\n                const id = event.args.requestID\n                const blockHeight = decodeCondition(event.args.condition)\n\n                return [id, {\n                    id,\n                    blockHeight,\n                    ciphertext: parseSolidityCiphertext(event.args.ciphertext),\n                }]\n            })\n        ))\n    }\n\n    /**\n     * Fetch the status of a blocklock request, including the decryption key / signature if available.\n     * This function should be called to fetch blocklock requests that have been fulfilled, or to check\n     * whether it has been fulfilled or not.\n     * @param requestId blocklock request id\n     * @returns details of the blocklock request, undefined if not found\n     */\n    async fetchBlocklockStatus(requestId: bigint): Promise<BlocklockStatus> {\n        const { condition, ciphertext, decryptionKey } = await this.blocklockSender.getRequest.staticCall(requestId)\n\n        return {\n            id: requestId,\n            blockHeight: decodeCondition(condition),\n            decryptionKey: getBytes(decryptionKey),\n            ciphertext: parseSolidityCiphertext(ciphertext),\n        }\n    }\n\n    /**\n     * Encrypt a message that can be decrypted once a certain blockHeight is reached.\n     * @param message plaintext to encrypt\n     * @param blockHeight time at which the decryption key should be released\n     * @param pk public key of the scheme\n     * @returns encrypted message\n     */\n    encrypt(message: Uint8Array, blockHeight: bigint, pk: G2 = this.blocklockPublicKey): Ciphertext {\n        if (message.length > BLOCKLOCK_MAX_MSG_LEN) {\n            throw new Error(`cannot encrypt messages larger than ${BLOCKLOCK_MAX_MSG_LEN} bytes.`)\n        }\n        const identity = encodeCondition(blockHeight)\n        return encrypt_towards_identity_g1(message, identity, pk, this.ibeOpts)\n    }\n\n    /**\n     * Decrypt a ciphertext using a decryption key.\n     * @param ciphertext the ciphertext to decrypt\n     * @param key decryption key\n     * @returns plaintext\n     */\n    decrypt(ciphertext: Ciphertext, key: Uint8Array): Uint8Array {\n        if (ciphertext.W.length > BLOCKLOCK_MAX_MSG_LEN) {\n            throw new Error(`cannot decrypt messages larger than ${BLOCKLOCK_MAX_MSG_LEN} bytes.`)\n        }\n        return decrypt_g1_with_preprocess(ciphertext, key, this.ibeOpts)\n    }\n\n    /**\n     * Encrypt a message that can be decrypted once a certain blockHeight is reached.\n     * @param message plaintext to encrypt\n     * @param blockHeight time at which the decryption key should be released\n     * @param pk public key of the scheme\n     * @returns the identifier of the blocklock request, and the ciphertext\n     */\n    async encryptAndRegister(message: Uint8Array, blockHeight: bigint, pk: G2 = this.blocklockPublicKey): Promise<{\n        id: bigint,\n        ciphertext: Ciphertext\n    }> {\n        const ciphertext = this.encrypt(message, blockHeight, pk)\n        const id = await this.requestBlocklock(blockHeight, encodeCiphertextToSolidity(ciphertext))\n        return { id, ciphertext }\n    }\n\n    /**\n     * Try to decrypt a ciphertext with a specific blocklock id.\n     * @param requestId blocklock id of the ciphertext to decrypt\n     * @returns the plaintext if the decryption key is available, undefined otherwise\n     */\n    async decryptWithId(requestId: bigint): Promise<Uint8Array> {\n        const status = await this.fetchBlocklockStatus(requestId)\n        if (!status) {\n            throw new Error(\"cannot find a request with this identifier\")\n        }\n\n        // Decryption key has not been delivered yet, return\n        if (status.decryptionKey.length === 0) {\n            return new Uint8Array(0)\n        }\n\n        return this.decrypt(status.ciphertext, status.decryptionKey)\n    }\n}\n\nexport type BlocklockRequest = {\n    id: bigint,\n    blockHeight: bigint,\n    ciphertext: Ciphertext,\n}\n\nexport type BlocklockStatus = BlocklockRequest & {\n    decryptionKey: Uint8Array,\n}\n\n// encodes a block height condition with the correct prefix\nexport function encodeCondition(blockHeight: bigint): Uint8Array {\n    const blockHeightBytes = getBytes(encodeParams([\"uint256\"], [blockHeight]))\n    // 0x42 is the magic 'B' tag for the `blockHeight` condition\n    return new Uint8Array([0x42, ...blockHeightBytes])\n}\n\nexport function decodeCondition(bytes: BytesLike): bigint {\n    const b = getBytes(bytes)\n    if (b[0] !== 0x42) {\n        throw new Error(\"unexpected condition tag: expected `b` for blocklock!\")\n    }\n    const [round] = ethers.AbiCoder.defaultAbiCoder().decode([\"uint256\"], b.slice(1))\n    return round\n}\n", "import { AbiCoder, BigNumberish } from \"ethers\";\n\nexport class SolidityEncoder {\n  private abiCoder: AbiCoder;\n\n  constructor() {\n    this.abiCoder = AbiCoder.defaultAbiCoder();\n  }\n\n  // ------------------- ENCODERS -------------------\n\n  encodeUint256(value: number | string | BigNumberish): string {\n    return this.abiCoder.encode([\"uint256\"], [value]);\n  }\n\n  encodeInt256(value: number | string | BigNumberish): string {\n    return this.abiCoder.encode([\"int256\"], [value]);\n  }\n\n  encodeAddress(address: string): string {\n    return this.abiCoder.encode([\"address\"], [address]);\n  }\n\n  encodeString(value: string): string {\n    return this.abiCoder.encode([\"string\"], [value]);\n  }\n\n  encodeBool(value: boolean): string {\n    return this.abiCoder.encode([\"bool\"], [value]);\n  }\n\n  encodeBytes32(value: string): string {\n    if (!/^0x[0-9a-fA-F]{64}$/.test(value)) {\n      throw new Error(\"Invalid bytes32 format. Must be a 32-byte hex string.\");\n    }\n    return this.abiCoder.encode([\"bytes32\"], [value]);\n  }\n\n  encodeBytes(value: Uint8Array | string): string {\n    return this.abiCoder.encode([\"bytes\"], [value]);\n  }\n\n  encodeUint256Array(values: (number | string | BigNumberish)[]): string {\n    return this.abiCoder.encode([\"uint256[]\"], [values]);\n  }\n\n  encodeAddressArray(addresses: string[]): string {\n    return this.abiCoder.encode([\"address[]\"], [addresses]);\n  }\n\n  encodeTuple(types: string[], values: any[]): string {\n    return this.abiCoder.encode([`tuple(${types.join(\",\")})`], [values]);\n  }\n\n  encodeStruct(structDefinition: string[], structValues: any[]): string {\n    return this.encodeTuple(structDefinition, structValues);\n  }\n}\n", "import { AbiCoder, BigNumberish } from \"ethers\";\n\nexport class SolidityDecoder {\n  private abiCoder: AbiCoder;\n\n  constructor() {\n    this.abiCoder = AbiCoder.defaultAbiCoder();\n  }\n\n  // ------------------- DECODERS -------------------\n\n  decodeUint256(data: string): BigNumberish {\n    return this.abiCoder.decode([\"uint256\"], data)[0];\n  }\n\n  decodeInt256(data: string): BigNumberish {\n    return this.abiCoder.decode([\"int256\"], data)[0];\n  }\n\n  decodeAddress(data: string): string {\n    return this.abiCoder.decode([\"address\"], data)[0];\n  }\n\n  decodeString(data: string): string {\n    return this.abiCoder.decode([\"string\"], data)[0];\n  }\n\n  decodeBool(data: string): boolean {\n    return this.abiCoder.decode([\"bool\"], data)[0];\n  }\n\n  decodeBytes32(data: string): string {\n    return this.abiCoder.decode([\"bytes32\"], data)[0];\n  }\n\n  decodeBytes(data: string): string {\n    return this.abiCoder.decode([\"bytes\"], data)[0];\n  }\n\n  decodeUint256Array(data: string): BigNumberish[] {\n    return this.abiCoder.decode([\"uint256[]\"], data)[0];\n  }\n\n  decodeAddressArray(data: string): string[] {\n    return this.abiCoder.decode([\"address[]\"], data)[0];\n  }\n\n  decodeTuple(types: string[], data: string): any[] {\n    return this.abiCoder.decode([`tuple(${types.join(\",\")})`], data)[0];\n  }\n\n  decodeStruct(structDefinition: string[], data: string): any[] {\n    return this.decodeTuple(structDefinition, data);\n  }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,kCAAAA,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,OAAO,IAAI,QAAQ,QAAQ;AAQnC,aAAS,UAAU,QAAQ;AACzB,aAAO,KAAK,OAAO;AAAA,IACrB;AAOA,aAAS,cAAc;AACrB,UAAI,CAAC,KAAK,aAAa,KAAK,eAAe,UAAU;AACnD,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAQA,aAAS,cAAc,KAAK;AAC1B,WAAK,eAAe,SAAS,aAAa;AAC1C,WAAK,QAAQ;AACb,UAAI,KAAK,cAAc,OAAO,MAAM,GAAG;AAErC,aAAK,KAAK,SAAS,GAAG;AAAA,MACxB;AAAA,IACF;AAUA,aAASC,uBAAsB,IAAI,SAAS;AAC1C,UAAI,qBAAqB;AAEzB,YAAM,SAAS,IAAI,OAAO;AAAA,QACxB,GAAG;AAAA,QACH,aAAa;AAAA,QACb,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,oBAAoB;AAAA,MACtB,CAAC;AAED,SAAG,GAAG,WAAW,SAAS,QAAQ,KAAK,UAAU;AAC/C,cAAMC,QACJ,CAAC,YAAY,OAAO,eAAe,aAAa,IAAI,SAAS,IAAI;AAEnE,YAAI,CAAC,OAAO,KAAKA,KAAI,EAAG,IAAG,MAAM;AAAA,MACnC,CAAC;AAED,SAAG,KAAK,SAAS,SAAS,MAAM,KAAK;AACnC,YAAI,OAAO,UAAW;AAWtB,6BAAqB;AACrB,eAAO,QAAQ,GAAG;AAAA,MACpB,CAAC;AAED,SAAG,KAAK,SAAS,SAAS,QAAQ;AAChC,YAAI,OAAO,UAAW;AAEtB,eAAO,KAAK,IAAI;AAAA,MAClB,CAAC;AAED,aAAO,WAAW,SAAU,KAAK,UAAU;AACzC,YAAI,GAAG,eAAe,GAAG,QAAQ;AAC/B,mBAAS,GAAG;AACZ,kBAAQ,SAAS,WAAW,MAAM;AAClC;AAAA,QACF;AAEA,YAAI,SAAS;AAEb,WAAG,KAAK,SAAS,SAAS,MAAMC,MAAK;AACnC,mBAAS;AACT,mBAASA,IAAG;AAAA,QACd,CAAC;AAED,WAAG,KAAK,SAAS,SAAS,QAAQ;AAChC,cAAI,CAAC,OAAQ,UAAS,GAAG;AACzB,kBAAQ,SAAS,WAAW,MAAM;AAAA,QACpC,CAAC;AAED,YAAI,mBAAoB,IAAG,UAAU;AAAA,MACvC;AAEA,aAAO,SAAS,SAAU,UAAU;AAClC,YAAI,GAAG,eAAe,GAAG,YAAY;AACnC,aAAG,KAAK,QAAQ,SAAS,OAAO;AAC9B,mBAAO,OAAO,QAAQ;AAAA,UACxB,CAAC;AACD;AAAA,QACF;AAMA,YAAI,GAAG,YAAY,KAAM;AAEzB,YAAI,GAAG,QAAQ,eAAe,UAAU;AACtC,mBAAS;AACT,cAAI,OAAO,eAAe,WAAY,QAAO,QAAQ;AAAA,QACvD,OAAO;AACL,aAAG,QAAQ,KAAK,UAAU,SAAS,SAAS;AAI1C,qBAAS;AAAA,UACX,CAAC;AACD,aAAG,MAAM;AAAA,QACX;AAAA,MACF;AAEA,aAAO,QAAQ,WAAY;AACzB,YAAI,GAAG,SAAU,IAAG,OAAO;AAAA,MAC7B;AAEA,aAAO,SAAS,SAAU,OAAO,UAAU,UAAU;AACnD,YAAI,GAAG,eAAe,GAAG,YAAY;AACnC,aAAG,KAAK,QAAQ,SAAS,OAAO;AAC9B,mBAAO,OAAO,OAAO,UAAU,QAAQ;AAAA,UACzC,CAAC;AACD;AAAA,QACF;AAEA,WAAG,KAAK,OAAO,QAAQ;AAAA,MACzB;AAEA,aAAO,GAAG,OAAO,WAAW;AAC5B,aAAO,GAAG,SAAS,aAAa;AAChC,aAAO;AAAA,IACT;AAEA,IAAAH,QAAO,UAAUC;AAAA;AAAA;;;AC9JjB;AAAA,qCAAAG,UAAAC,SAAA;AAAA;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf,cAAc,CAAC,cAAc,eAAe,WAAW;AAAA,MACvD,cAAc,OAAO,MAAM,CAAC;AAAA,MAC5B,MAAM;AAAA,MACN,sBAAsB,OAAO,wBAAwB;AAAA,MACrD,WAAW,OAAO,WAAW;AAAA,MAC7B,aAAa,OAAO,aAAa;AAAA,MACjC,YAAY,OAAO,WAAW;AAAA,MAC9B,MAAM,MAAM;AAAA,MAAC;AAAA,IACf;AAAA;AAAA;;;ACXA;AAAA,uCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,aAAa,IAAI;AAEzB,QAAM,aAAa,OAAO,OAAO,OAAO;AAUxC,aAASC,QAAO,MAAM,aAAa;AACjC,UAAI,KAAK,WAAW,EAAG,QAAO;AAC9B,UAAI,KAAK,WAAW,EAAG,QAAO,KAAK,CAAC;AAEpC,YAAM,SAAS,OAAO,YAAY,WAAW;AAC7C,UAAI,SAAS;AAEb,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,cAAM,MAAM,KAAK,CAAC;AAClB,eAAO,IAAI,KAAK,MAAM;AACtB,kBAAU,IAAI;AAAA,MAChB;AAEA,UAAI,SAAS,aAAa;AACxB,eAAO,IAAI,WAAW,OAAO,QAAQ,OAAO,YAAY,MAAM;AAAA,MAChE;AAEA,aAAO;AAAA,IACT;AAYA,aAAS,MAAM,QAAQC,OAAMC,SAAQ,QAAQ,QAAQ;AACnD,eAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC/B,QAAAA,QAAO,SAAS,CAAC,IAAI,OAAO,CAAC,IAAID,MAAK,IAAI,CAAC;AAAA,MAC7C;AAAA,IACF;AASA,aAAS,QAAQ,QAAQA,OAAM;AAC7B,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,eAAO,CAAC,KAAKA,MAAK,IAAI,CAAC;AAAA,MACzB;AAAA,IACF;AASA,aAAS,cAAc,KAAK;AAC1B,UAAI,IAAI,WAAW,IAAI,OAAO,YAAY;AACxC,eAAO,IAAI;AAAA,MACb;AAEA,aAAO,IAAI,OAAO,MAAM,IAAI,YAAY,IAAI,aAAa,IAAI,MAAM;AAAA,IACrE;AAUA,aAAS,SAASE,OAAM;AACtB,eAAS,WAAW;AAEpB,UAAI,OAAO,SAASA,KAAI,EAAG,QAAOA;AAElC,UAAI;AAEJ,UAAIA,iBAAgB,aAAa;AAC/B,cAAM,IAAI,WAAWA,KAAI;AAAA,MAC3B,WAAW,YAAY,OAAOA,KAAI,GAAG;AACnC,cAAM,IAAI,WAAWA,MAAK,QAAQA,MAAK,YAAYA,MAAK,UAAU;AAAA,MACpE,OAAO;AACL,cAAM,OAAO,KAAKA,KAAI;AACtB,iBAAS,WAAW;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAEA,IAAAJ,QAAO,UAAU;AAAA,MACf,QAAAC;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,IACV;AAGA,QAAI,CAAC,QAAQ,IAAI,mBAAmB;AAClC,UAAI;AACF,cAAM,aAAa,QAAQ,YAAY;AAEvC,QAAAD,QAAO,QAAQ,OAAO,SAAU,QAAQE,OAAMC,SAAQ,QAAQ,QAAQ;AACpE,cAAI,SAAS,GAAI,OAAM,QAAQD,OAAMC,SAAQ,QAAQ,MAAM;AAAA,cACtD,YAAW,KAAK,QAAQD,OAAMC,SAAQ,QAAQ,MAAM;AAAA,QAC3D;AAEA,QAAAH,QAAO,QAAQ,SAAS,SAAU,QAAQE,OAAM;AAC9C,cAAI,OAAO,SAAS,GAAI,SAAQ,QAAQA,KAAI;AAAA,cACvC,YAAW,OAAO,QAAQA,KAAI;AAAA,QACrC;AAAA,MACF,SAAS,GAAG;AAAA,MAEZ;AAAA,IACF;AAAA;AAAA;;;AClIA;AAAA,mCAAAG,UAAAC,SAAA;AAAA;AAEA,QAAM,QAAQ,OAAO,OAAO;AAC5B,QAAM,OAAO,OAAO,MAAM;AAM1B,QAAM,UAAN,MAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOZ,YAAY,aAAa;AACvB,aAAK,KAAK,IAAI,MAAM;AAClB,eAAK;AACL,eAAK,IAAI,EAAE;AAAA,QACb;AACA,aAAK,cAAc,eAAe;AAClC,aAAK,OAAO,CAAC;AACb,aAAK,UAAU;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,IAAI,KAAK;AACP,aAAK,KAAK,KAAK,GAAG;AAClB,aAAK,IAAI,EAAE;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,CAAC,IAAI,IAAI;AACP,YAAI,KAAK,YAAY,KAAK,YAAa;AAEvC,YAAI,KAAK,KAAK,QAAQ;AACpB,gBAAM,MAAM,KAAK,KAAK,MAAM;AAE5B,eAAK;AACL,cAAI,KAAK,KAAK,CAAC;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAEA,IAAAA,QAAO,UAAU;AAAA;AAAA;;;ACtDjB;AAAA,8CAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,OAAO,QAAQ,MAAM;AAE3B,QAAM,aAAa;AACnB,QAAM,UAAU;AAChB,QAAM,EAAE,YAAY,IAAI;AAExB,QAAM,aAAa,OAAO,OAAO,OAAO;AACxC,QAAM,UAAU,OAAO,KAAK,CAAC,GAAM,GAAM,KAAM,GAAI,CAAC;AACpD,QAAM,qBAAqB,OAAO,oBAAoB;AACtD,QAAM,eAAe,OAAO,cAAc;AAC1C,QAAM,YAAY,OAAO,UAAU;AACnC,QAAM,WAAW,OAAO,SAAS;AACjC,QAAM,SAAS,OAAO,OAAO;AAS7B,QAAI;AAKJ,QAAM,oBAAN,MAAwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBtB,YAAY,SAAS,UAAU,YAAY;AACzC,aAAK,cAAc,aAAa;AAChC,aAAK,WAAW,WAAW,CAAC;AAC5B,aAAK,aACH,KAAK,SAAS,cAAc,SAAY,KAAK,SAAS,YAAY;AACpE,aAAK,YAAY,CAAC,CAAC;AACnB,aAAK,WAAW;AAChB,aAAK,WAAW;AAEhB,aAAK,SAAS;AAEd,YAAI,CAAC,aAAa;AAChB,gBAAM,cACJ,KAAK,SAAS,qBAAqB,SAC/B,KAAK,SAAS,mBACd;AACN,wBAAc,IAAI,QAAQ,WAAW;AAAA,QACvC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,gBAAgB;AACzB,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ;AACN,cAAM,SAAS,CAAC;AAEhB,YAAI,KAAK,SAAS,yBAAyB;AACzC,iBAAO,6BAA6B;AAAA,QACtC;AACA,YAAI,KAAK,SAAS,yBAAyB;AACzC,iBAAO,6BAA6B;AAAA,QACtC;AACA,YAAI,KAAK,SAAS,qBAAqB;AACrC,iBAAO,yBAAyB,KAAK,SAAS;AAAA,QAChD;AACA,YAAI,KAAK,SAAS,qBAAqB;AACrC,iBAAO,yBAAyB,KAAK,SAAS;AAAA,QAChD,WAAW,KAAK,SAAS,uBAAuB,MAAM;AACpD,iBAAO,yBAAyB;AAAA,QAClC;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,OAAO,gBAAgB;AACrB,yBAAiB,KAAK,gBAAgB,cAAc;AAEpD,aAAK,SAAS,KAAK,YACf,KAAK,eAAe,cAAc,IAClC,KAAK,eAAe,cAAc;AAEtC,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU;AACR,YAAI,KAAK,UAAU;AACjB,eAAK,SAAS,MAAM;AACpB,eAAK,WAAW;AAAA,QAClB;AAEA,YAAI,KAAK,UAAU;AACjB,gBAAM,WAAW,KAAK,SAAS,SAAS;AAExC,eAAK,SAAS,MAAM;AACpB,eAAK,WAAW;AAEhB,cAAI,UAAU;AACZ;AAAA,cACE,IAAI;AAAA,gBACF;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,QAAQ;AACrB,cAAM,OAAO,KAAK;AAClB,cAAM,WAAW,OAAO,KAAK,CAAC,WAAW;AACvC,cACG,KAAK,4BAA4B,SAChC,OAAO,8BACR,OAAO,2BACL,KAAK,wBAAwB,SAC3B,OAAO,KAAK,wBAAwB,YACnC,KAAK,sBAAsB,OAAO,2BACvC,OAAO,KAAK,wBAAwB,YACnC,CAAC,OAAO,wBACV;AACA,mBAAO;AAAA,UACT;AAEA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,CAAC,UAAU;AACb,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QAChE;AAEA,YAAI,KAAK,yBAAyB;AAChC,mBAAS,6BAA6B;AAAA,QACxC;AACA,YAAI,KAAK,yBAAyB;AAChC,mBAAS,6BAA6B;AAAA,QACxC;AACA,YAAI,OAAO,KAAK,wBAAwB,UAAU;AAChD,mBAAS,yBAAyB,KAAK;AAAA,QACzC;AACA,YAAI,OAAO,KAAK,wBAAwB,UAAU;AAChD,mBAAS,yBAAyB,KAAK;AAAA,QACzC,WACE,SAAS,2BAA2B,QACpC,KAAK,wBAAwB,OAC7B;AACA,iBAAO,SAAS;AAAA,QAClB;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAe,UAAU;AACvB,cAAM,SAAS,SAAS,CAAC;AAEzB,YACE,KAAK,SAAS,4BAA4B,SAC1C,OAAO,4BACP;AACA,gBAAM,IAAI,MAAM,mDAAmD;AAAA,QACrE;AAEA,YAAI,CAAC,OAAO,wBAAwB;AAClC,cAAI,OAAO,KAAK,SAAS,wBAAwB,UAAU;AACzD,mBAAO,yBAAyB,KAAK,SAAS;AAAA,UAChD;AAAA,QACF,WACE,KAAK,SAAS,wBAAwB,SACrC,OAAO,KAAK,SAAS,wBAAwB,YAC5C,OAAO,yBAAyB,KAAK,SAAS,qBAChD;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,gBAAgB,gBAAgB;AAC9B,uBAAe,QAAQ,CAAC,WAAW;AACjC,iBAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,QAAQ;AACnC,gBAAI,QAAQ,OAAO,GAAG;AAEtB,gBAAI,MAAM,SAAS,GAAG;AACpB,oBAAM,IAAI,MAAM,cAAc,GAAG,iCAAiC;AAAA,YACpE;AAEA,oBAAQ,MAAM,CAAC;AAEf,gBAAI,QAAQ,0BAA0B;AACpC,kBAAI,UAAU,MAAM;AAClB,sBAAM,MAAM,CAAC;AACb,oBAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,IAAI;AACjD,wBAAM,IAAI;AAAA,oBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,kBAChD;AAAA,gBACF;AACA,wBAAQ;AAAA,cACV,WAAW,CAAC,KAAK,WAAW;AAC1B,sBAAM,IAAI;AAAA,kBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,gBAChD;AAAA,cACF;AAAA,YACF,WAAW,QAAQ,0BAA0B;AAC3C,oBAAM,MAAM,CAAC;AACb,kBAAI,CAAC,OAAO,UAAU,GAAG,KAAK,MAAM,KAAK,MAAM,IAAI;AACjD,sBAAM,IAAI;AAAA,kBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,gBAChD;AAAA,cACF;AACA,sBAAQ;AAAA,YACV,WACE,QAAQ,gCACR,QAAQ,8BACR;AACA,kBAAI,UAAU,MAAM;AAClB,sBAAM,IAAI;AAAA,kBACR,gCAAgC,GAAG,MAAM,KAAK;AAAA,gBAChD;AAAA,cACF;AAAA,YACF,OAAO;AACL,oBAAM,IAAI,MAAM,sBAAsB,GAAG,GAAG;AAAA,YAC9C;AAEA,mBAAO,GAAG,IAAI;AAAA,UAChB,CAAC;AAAA,QACH,CAAC;AAED,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,WAAWC,OAAM,KAAK,UAAU;AAC9B,oBAAY,IAAI,CAAC,SAAS;AACxB,eAAK,YAAYA,OAAM,KAAK,CAAC,KAAK,WAAW;AAC3C,iBAAK;AACL,qBAAS,KAAK,MAAM;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,SAASA,OAAM,KAAK,UAAU;AAC5B,oBAAY,IAAI,CAAC,SAAS;AACxB,eAAK,UAAUA,OAAM,KAAK,CAAC,KAAK,WAAW;AACzC,iBAAK;AACL,qBAAS,KAAK,MAAM;AAAA,UACtB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,YAAYA,OAAM,KAAK,UAAU;AAC/B,cAAM,WAAW,KAAK,YAAY,WAAW;AAE7C,YAAI,CAAC,KAAK,UAAU;AAClB,gBAAM,MAAM,GAAG,QAAQ;AACvB,gBAAM,aACJ,OAAO,KAAK,OAAO,GAAG,MAAM,WACxB,KAAK,uBACL,KAAK,OAAO,GAAG;AAErB,eAAK,WAAW,KAAK,iBAAiB;AAAA,YACpC,GAAG,KAAK,SAAS;AAAA,YACjB;AAAA,UACF,CAAC;AACD,eAAK,SAAS,kBAAkB,IAAI;AACpC,eAAK,SAAS,YAAY,IAAI;AAC9B,eAAK,SAAS,QAAQ,IAAI,CAAC;AAC3B,eAAK,SAAS,GAAG,SAAS,cAAc;AACxC,eAAK,SAAS,GAAG,QAAQ,aAAa;AAAA,QACxC;AAEA,aAAK,SAAS,SAAS,IAAI;AAE3B,aAAK,SAAS,MAAMA,KAAI;AACxB,YAAI,IAAK,MAAK,SAAS,MAAM,OAAO;AAEpC,aAAK,SAAS,MAAM,MAAM;AACxB,gBAAM,MAAM,KAAK,SAAS,MAAM;AAEhC,cAAI,KAAK;AACP,iBAAK,SAAS,MAAM;AACpB,iBAAK,WAAW;AAChB,qBAAS,GAAG;AACZ;AAAA,UACF;AAEA,gBAAMA,QAAO,WAAW;AAAA,YACtB,KAAK,SAAS,QAAQ;AAAA,YACtB,KAAK,SAAS,YAAY;AAAA,UAC5B;AAEA,cAAI,KAAK,SAAS,eAAe,YAAY;AAC3C,iBAAK,SAAS,MAAM;AACpB,iBAAK,WAAW;AAAA,UAClB,OAAO;AACL,iBAAK,SAAS,YAAY,IAAI;AAC9B,iBAAK,SAAS,QAAQ,IAAI,CAAC;AAE3B,gBAAI,OAAO,KAAK,OAAO,GAAG,QAAQ,sBAAsB,GAAG;AACzD,mBAAK,SAAS,MAAM;AAAA,YACtB;AAAA,UACF;AAEA,mBAAS,MAAMA,KAAI;AAAA,QACrB,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,UAAUA,OAAM,KAAK,UAAU;AAC7B,cAAM,WAAW,KAAK,YAAY,WAAW;AAE7C,YAAI,CAAC,KAAK,UAAU;AAClB,gBAAM,MAAM,GAAG,QAAQ;AACvB,gBAAM,aACJ,OAAO,KAAK,OAAO,GAAG,MAAM,WACxB,KAAK,uBACL,KAAK,OAAO,GAAG;AAErB,eAAK,WAAW,KAAK,iBAAiB;AAAA,YACpC,GAAG,KAAK,SAAS;AAAA,YACjB;AAAA,UACF,CAAC;AAED,eAAK,SAAS,YAAY,IAAI;AAC9B,eAAK,SAAS,QAAQ,IAAI,CAAC;AAE3B,eAAK,SAAS,GAAG,QAAQ,aAAa;AAAA,QACxC;AAEA,aAAK,SAAS,SAAS,IAAI;AAE3B,aAAK,SAAS,MAAMA,KAAI;AACxB,aAAK,SAAS,MAAM,KAAK,cAAc,MAAM;AAC3C,cAAI,CAAC,KAAK,UAAU;AAIlB;AAAA,UACF;AAEA,cAAIA,QAAO,WAAW;AAAA,YACpB,KAAK,SAAS,QAAQ;AAAA,YACtB,KAAK,SAAS,YAAY;AAAA,UAC5B;AAEA,cAAI,KAAK;AACP,YAAAA,QAAO,IAAI,WAAWA,MAAK,QAAQA,MAAK,YAAYA,MAAK,SAAS,CAAC;AAAA,UACrE;AAMA,eAAK,SAAS,SAAS,IAAI;AAE3B,eAAK,SAAS,YAAY,IAAI;AAC9B,eAAK,SAAS,QAAQ,IAAI,CAAC;AAE3B,cAAI,OAAO,KAAK,OAAO,GAAG,QAAQ,sBAAsB,GAAG;AACzD,iBAAK,SAAS,MAAM;AAAA,UACtB;AAEA,mBAAS,MAAMA,KAAI;AAAA,QACrB,CAAC;AAAA,MACH;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAQjB,aAAS,cAAc,OAAO;AAC5B,WAAK,QAAQ,EAAE,KAAK,KAAK;AACzB,WAAK,YAAY,KAAK,MAAM;AAAA,IAC9B;AAQA,aAAS,cAAc,OAAO;AAC5B,WAAK,YAAY,KAAK,MAAM;AAE5B,UACE,KAAK,kBAAkB,EAAE,cAAc,KACvC,KAAK,YAAY,KAAK,KAAK,kBAAkB,EAAE,aAC/C;AACA,aAAK,QAAQ,EAAE,KAAK,KAAK;AACzB;AAAA,MACF;AAEA,WAAK,MAAM,IAAI,IAAI,WAAW,2BAA2B;AACzD,WAAK,MAAM,EAAE,OAAO;AACpB,WAAK,MAAM,EAAE,WAAW,IAAI;AAC5B,WAAK,eAAe,QAAQ,aAAa;AACzC,WAAK,MAAM;AAAA,IACb;AAQA,aAAS,eAAe,KAAK;AAK3B,WAAK,kBAAkB,EAAE,WAAW;AACpC,UAAI,WAAW,IAAI;AACnB,WAAK,SAAS,EAAE,GAAG;AAAA,IACrB;AAAA;AAAA;;;ACjgBA;AAAA,sCAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,OAAO,IAAI,QAAQ,QAAQ;AAcnC,QAAM,aAAa;AAAA,MACjB;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,MAC7C;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA,MAAG;AAAA;AAAA,IAC/C;AASA,aAAS,kBAAkB,MAAM;AAC/B,aACG,QAAQ,OACP,QAAQ,QACR,SAAS,QACT,SAAS,QACT,SAAS,QACV,QAAQ,OAAQ,QAAQ;AAAA,IAE7B;AAWA,aAAS,aAAa,KAAK;AACzB,YAAM,MAAM,IAAI;AAChB,UAAI,IAAI;AAER,aAAO,IAAI,KAAK;AACd,aAAK,IAAI,CAAC,IAAI,SAAU,GAAG;AAEzB;AAAA,QACF,YAAY,IAAI,CAAC,IAAI,SAAU,KAAM;AAEnC,cACE,IAAI,MAAM,QACT,IAAI,IAAI,CAAC,IAAI,SAAU,QACvB,IAAI,CAAC,IAAI,SAAU,KACpB;AACA,mBAAO;AAAA,UACT;AAEA,eAAK;AAAA,QACP,YAAY,IAAI,CAAC,IAAI,SAAU,KAAM;AAEnC,cACE,IAAI,KAAK,QACR,IAAI,IAAI,CAAC,IAAI,SAAU,QACvB,IAAI,IAAI,CAAC,IAAI,SAAU,OACvB,IAAI,CAAC,MAAM,QAAS,IAAI,IAAI,CAAC,IAAI,SAAU;AAAA,UAC3C,IAAI,CAAC,MAAM,QAAS,IAAI,IAAI,CAAC,IAAI,SAAU,KAC5C;AACA,mBAAO;AAAA,UACT;AAEA,eAAK;AAAA,QACP,YAAY,IAAI,CAAC,IAAI,SAAU,KAAM;AAEnC,cACE,IAAI,KAAK,QACR,IAAI,IAAI,CAAC,IAAI,SAAU,QACvB,IAAI,IAAI,CAAC,IAAI,SAAU,QACvB,IAAI,IAAI,CAAC,IAAI,SAAU,OACvB,IAAI,CAAC,MAAM,QAAS,IAAI,IAAI,CAAC,IAAI,SAAU;AAAA,UAC3C,IAAI,CAAC,MAAM,OAAQ,IAAI,IAAI,CAAC,IAAI,OACjC,IAAI,CAAC,IAAI,KACT;AACA,mBAAO;AAAA,UACT;AAEA,eAAK;AAAA,QACP,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,IAAAA,QAAO,UAAU;AAAA,MACf;AAAA,MACA,aAAa;AAAA,MACb;AAAA,IACF;AAEA,QAAI,QAAQ;AACV,MAAAA,QAAO,QAAQ,cAAc,SAAU,KAAK;AAC1C,eAAO,IAAI,SAAS,KAAK,aAAa,GAAG,IAAI,OAAO,GAAG;AAAA,MACzD;AAAA,IACF,WAAuC,CAAC,QAAQ,IAAI,sBAAsB;AACxE,UAAI;AACF,cAAM,cAAc,QAAQ,gBAAgB;AAE5C,QAAAA,QAAO,QAAQ,cAAc,SAAU,KAAK;AAC1C,iBAAO,IAAI,SAAS,KAAK,aAAa,GAAG,IAAI,YAAY,GAAG;AAAA,QAC9D;AAAA,MACF,SAAS,GAAG;AAAA,MAEZ;AAAA,IACF;AAAA;AAAA;;;ACjIA;AAAA,oCAAAC,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,SAAS,IAAI,QAAQ,QAAQ;AAErC,QAAM,oBAAoB;AAC1B,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,QAAAC,SAAQ,eAAe,OAAO,IAAI;AAC1C,QAAM,EAAE,mBAAmB,YAAY,IAAI;AAE3C,QAAM,aAAa,OAAO,OAAO,OAAO;AAExC,QAAM,WAAW;AACjB,QAAM,wBAAwB;AAC9B,QAAM,wBAAwB;AAC9B,QAAM,WAAW;AACjB,QAAM,WAAW;AACjB,QAAM,YAAY;AAClB,QAAM,cAAc;AAOpB,QAAMC,YAAN,cAAuB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiB9B,YAAY,UAAU,CAAC,GAAG;AACxB,cAAM;AAEN,aAAK,0BACH,QAAQ,2BAA2B,SAC/B,QAAQ,yBACR;AACN,aAAK,cAAc,QAAQ,cAAc,aAAa,CAAC;AACvD,aAAK,cAAc,QAAQ,cAAc,CAAC;AAC1C,aAAK,YAAY,CAAC,CAAC,QAAQ;AAC3B,aAAK,cAAc,QAAQ,aAAa;AACxC,aAAK,sBAAsB,CAAC,CAAC,QAAQ;AACrC,aAAK,UAAU,IAAI;AAEnB,aAAK,iBAAiB;AACtB,aAAK,WAAW,CAAC;AAEjB,aAAK,cAAc;AACnB,aAAK,iBAAiB;AACtB,aAAK,QAAQ;AACb,aAAK,cAAc;AACnB,aAAK,UAAU;AACf,aAAK,OAAO;AACZ,aAAK,UAAU;AAEf,aAAK,sBAAsB;AAC3B,aAAK,iBAAiB;AACtB,aAAK,aAAa,CAAC;AAEnB,aAAK,WAAW;AAChB,aAAK,QAAQ;AACb,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,OAAO,OAAO,UAAU,IAAI;AAC1B,YAAI,KAAK,YAAY,KAAQ,KAAK,UAAU,SAAU,QAAO,GAAG;AAEhE,aAAK,kBAAkB,MAAM;AAC7B,aAAK,SAAS,KAAK,KAAK;AACxB,aAAK,UAAU,EAAE;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,QAAQC,IAAG;AACT,aAAK,kBAAkBA;AAEvB,YAAIA,OAAM,KAAK,SAAS,CAAC,EAAE,OAAQ,QAAO,KAAK,SAAS,MAAM;AAE9D,YAAIA,KAAI,KAAK,SAAS,CAAC,EAAE,QAAQ;AAC/B,gBAAM,MAAM,KAAK,SAAS,CAAC;AAC3B,eAAK,SAAS,CAAC,IAAI,IAAI;AAAA,YACrB,IAAI;AAAA,YACJ,IAAI,aAAaA;AAAA,YACjB,IAAI,SAASA;AAAA,UACf;AAEA,iBAAO,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAYA,EAAC;AAAA,QACrD;AAEA,cAAM,MAAM,OAAO,YAAYA,EAAC;AAEhC,WAAG;AACD,gBAAM,MAAM,KAAK,SAAS,CAAC;AAC3B,gBAAM,SAAS,IAAI,SAASA;AAE5B,cAAIA,MAAK,IAAI,QAAQ;AACnB,gBAAI,IAAI,KAAK,SAAS,MAAM,GAAG,MAAM;AAAA,UACvC,OAAO;AACL,gBAAI,IAAI,IAAI,WAAW,IAAI,QAAQ,IAAI,YAAYA,EAAC,GAAG,MAAM;AAC7D,iBAAK,SAAS,CAAC,IAAI,IAAI;AAAA,cACrB,IAAI;AAAA,cACJ,IAAI,aAAaA;AAAA,cACjB,IAAI,SAASA;AAAA,YACf;AAAA,UACF;AAEA,UAAAA,MAAK,IAAI;AAAA,QACX,SAASA,KAAI;AAEb,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,UAAU,IAAI;AACZ,aAAK,QAAQ;AAEb,WAAG;AACD,kBAAQ,KAAK,QAAQ;AAAA,YACnB,KAAK;AACH,mBAAK,QAAQ,EAAE;AACf;AAAA,YACF,KAAK;AACH,mBAAK,mBAAmB,EAAE;AAC1B;AAAA,YACF,KAAK;AACH,mBAAK,mBAAmB,EAAE;AAC1B;AAAA,YACF,KAAK;AACH,mBAAK,QAAQ;AACb;AAAA,YACF,KAAK;AACH,mBAAK,QAAQ,EAAE;AACf;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AACH,mBAAK,QAAQ;AACb;AAAA,UACJ;AAAA,QACF,SAAS,KAAK;AAEd,YAAI,CAAC,KAAK,SAAU,IAAG;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,IAAI;AACV,YAAI,KAAK,iBAAiB,GAAG;AAC3B,eAAK,QAAQ;AACb;AAAA,QACF;AAEA,cAAM,MAAM,KAAK,QAAQ,CAAC;AAE1B,aAAK,IAAI,CAAC,IAAI,QAAU,GAAM;AAC5B,gBAAM,QAAQ,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,aAAG,KAAK;AACR;AAAA,QACF;AAEA,cAAM,cAAc,IAAI,CAAC,IAAI,QAAU;AAEvC,YAAI,cAAc,CAAC,KAAK,YAAY,kBAAkB,aAAa,GAAG;AACpE,gBAAM,QAAQ,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,aAAG,KAAK;AACR;AAAA,QACF;AAEA,aAAK,QAAQ,IAAI,CAAC,IAAI,SAAU;AAChC,aAAK,UAAU,IAAI,CAAC,IAAI;AACxB,aAAK,iBAAiB,IAAI,CAAC,IAAI;AAE/B,YAAI,KAAK,YAAY,GAAM;AACzB,cAAI,YAAY;AACd,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAEA,cAAI,CAAC,KAAK,aAAa;AACrB,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAEA,eAAK,UAAU,KAAK;AAAA,QACtB,WAAW,KAAK,YAAY,KAAQ,KAAK,YAAY,GAAM;AACzD,cAAI,KAAK,aAAa;AACpB,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA,kBAAkB,KAAK,OAAO;AAAA,cAC9B;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAEA,eAAK,cAAc;AAAA,QACrB,WAAW,KAAK,UAAU,KAAQ,KAAK,UAAU,IAAM;AACrD,cAAI,CAAC,KAAK,MAAM;AACd,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAEA,cAAI,YAAY;AACd,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAEA,cACE,KAAK,iBAAiB,OACrB,KAAK,YAAY,KAAQ,KAAK,mBAAmB,GAClD;AACA,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA,0BAA0B,KAAK,cAAc;AAAA,cAC7C;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAAA,QACF,OAAO;AACL,gBAAM,QAAQ,KAAK;AAAA,YACjB;AAAA,YACA,kBAAkB,KAAK,OAAO;AAAA,YAC9B;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,aAAG,KAAK;AACR;AAAA,QACF;AAEA,YAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,YAAa,MAAK,cAAc,KAAK;AAC7D,aAAK,WAAW,IAAI,CAAC,IAAI,SAAU;AAEnC,YAAI,KAAK,WAAW;AAClB,cAAI,CAAC,KAAK,SAAS;AACjB,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAAA,QACF,WAAW,KAAK,SAAS;AACvB,gBAAM,QAAQ,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,aAAG,KAAK;AACR;AAAA,QACF;AAEA,YAAI,KAAK,mBAAmB,IAAK,MAAK,SAAS;AAAA,iBACtC,KAAK,mBAAmB,IAAK,MAAK,SAAS;AAAA,YAC/C,MAAK,WAAW,EAAE;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,mBAAmB,IAAI;AACrB,YAAI,KAAK,iBAAiB,GAAG;AAC3B,eAAK,QAAQ;AACb;AAAA,QACF;AAEA,aAAK,iBAAiB,KAAK,QAAQ,CAAC,EAAE,aAAa,CAAC;AACpD,aAAK,WAAW,EAAE;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,mBAAmB,IAAI;AACrB,YAAI,KAAK,iBAAiB,GAAG;AAC3B,eAAK,QAAQ;AACb;AAAA,QACF;AAEA,cAAM,MAAM,KAAK,QAAQ,CAAC;AAC1B,cAAM,MAAM,IAAI,aAAa,CAAC;AAM9B,YAAI,MAAM,KAAK,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG;AAClC,gBAAM,QAAQ,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,aAAG,KAAK;AACR;AAAA,QACF;AAEA,aAAK,iBAAiB,MAAM,KAAK,IAAI,GAAG,EAAE,IAAI,IAAI,aAAa,CAAC;AAChE,aAAK,WAAW,EAAE;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,WAAW,IAAI;AACb,YAAI,KAAK,kBAAkB,KAAK,UAAU,GAAM;AAC9C,eAAK,uBAAuB,KAAK;AACjC,cAAI,KAAK,sBAAsB,KAAK,eAAe,KAAK,cAAc,GAAG;AACvE,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAAA,QACF;AAEA,YAAI,KAAK,QAAS,MAAK,SAAS;AAAA,YAC3B,MAAK,SAAS;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU;AACR,YAAI,KAAK,iBAAiB,GAAG;AAC3B,eAAK,QAAQ;AACb;AAAA,QACF;AAEA,aAAK,QAAQ,KAAK,QAAQ,CAAC;AAC3B,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,IAAI;AACV,YAAIC,QAAO;AAEX,YAAI,KAAK,gBAAgB;AACvB,cAAI,KAAK,iBAAiB,KAAK,gBAAgB;AAC7C,iBAAK,QAAQ;AACb;AAAA,UACF;AAEA,UAAAA,QAAO,KAAK,QAAQ,KAAK,cAAc;AAEvC,cACE,KAAK,YACJ,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,GACpE;AACA,mBAAOA,OAAM,KAAK,KAAK;AAAA,UACzB;AAAA,QACF;AAEA,YAAI,KAAK,UAAU,GAAM;AACvB,eAAK,eAAeA,OAAM,EAAE;AAC5B;AAAA,QACF;AAEA,YAAI,KAAK,aAAa;AACpB,eAAK,SAAS;AACd,eAAK,WAAWA,OAAM,EAAE;AACxB;AAAA,QACF;AAEA,YAAIA,MAAK,QAAQ;AAKf,eAAK,iBAAiB,KAAK;AAC3B,eAAK,WAAW,KAAKA,KAAI;AAAA,QAC3B;AAEA,aAAK,YAAY,EAAE;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,WAAWA,OAAM,IAAI;AACnB,cAAM,oBAAoB,KAAK,YAAY,kBAAkB,aAAa;AAE1E,0BAAkB,WAAWA,OAAM,KAAK,MAAM,CAAC,KAAK,QAAQ;AAC1D,cAAI,IAAK,QAAO,GAAG,GAAG;AAEtB,cAAI,IAAI,QAAQ;AACd,iBAAK,kBAAkB,IAAI;AAC3B,gBAAI,KAAK,iBAAiB,KAAK,eAAe,KAAK,cAAc,GAAG;AAClE,oBAAM,QAAQ,KAAK;AAAA,gBACjB;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEA,iBAAG,KAAK;AACR;AAAA,YACF;AAEA,iBAAK,WAAW,KAAK,GAAG;AAAA,UAC1B;AAEA,eAAK,YAAY,EAAE;AACnB,cAAI,KAAK,WAAW,SAAU,MAAK,UAAU,EAAE;AAAA,QACjD,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,YAAY,IAAI;AACd,YAAI,CAAC,KAAK,MAAM;AACd,eAAK,SAAS;AACd;AAAA,QACF;AAEA,cAAM,gBAAgB,KAAK;AAC3B,cAAM,YAAY,KAAK;AAEvB,aAAK,sBAAsB;AAC3B,aAAK,iBAAiB;AACtB,aAAK,cAAc;AACnB,aAAK,aAAa,CAAC;AAEnB,YAAI,KAAK,YAAY,GAAG;AACtB,cAAIA;AAEJ,cAAI,KAAK,gBAAgB,cAAc;AACrC,YAAAA,QAAOH,QAAO,WAAW,aAAa;AAAA,UACxC,WAAW,KAAK,gBAAgB,eAAe;AAC7C,YAAAG,QAAO,cAAcH,QAAO,WAAW,aAAa,CAAC;AAAA,UACvD,OAAO;AACL,YAAAG,QAAO;AAAA,UACT;AAEA,cAAI,KAAK,yBAAyB;AAChC,iBAAK,KAAK,WAAWA,OAAM,IAAI;AAC/B,iBAAK,SAAS;AAAA,UAChB,OAAO;AACL,iBAAK,SAAS;AACd,yBAAa,MAAM;AACjB,mBAAK,KAAK,WAAWA,OAAM,IAAI;AAC/B,mBAAK,SAAS;AACd,mBAAK,UAAU,EAAE;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF,OAAO;AACL,gBAAM,MAAMH,QAAO,WAAW,aAAa;AAE3C,cAAI,CAAC,KAAK,uBAAuB,CAAC,YAAY,GAAG,GAAG;AAClD,kBAAM,QAAQ,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAEA,eAAG,KAAK;AACR;AAAA,UACF;AAEA,cAAI,KAAK,WAAW,aAAa,KAAK,yBAAyB;AAC7D,iBAAK,KAAK,WAAW,KAAK,KAAK;AAC/B,iBAAK,SAAS;AAAA,UAChB,OAAO;AACL,iBAAK,SAAS;AACd,yBAAa,MAAM;AACjB,mBAAK,KAAK,WAAW,KAAK,KAAK;AAC/B,mBAAK,SAAS;AACd,mBAAK,UAAU,EAAE;AAAA,YACnB,CAAC;AAAA,UACH;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,eAAeG,OAAM,IAAI;AACvB,YAAI,KAAK,YAAY,GAAM;AACzB,cAAIA,MAAK,WAAW,GAAG;AACrB,iBAAK,QAAQ;AACb,iBAAK,KAAK,YAAY,MAAM,YAAY;AACxC,iBAAK,IAAI;AAAA,UACX,OAAO;AACL,kBAAM,OAAOA,MAAK,aAAa,CAAC;AAEhC,gBAAI,CAAC,kBAAkB,IAAI,GAAG;AAC5B,oBAAM,QAAQ,KAAK;AAAA,gBACjB;AAAA,gBACA,uBAAuB,IAAI;AAAA,gBAC3B;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEA,iBAAG,KAAK;AACR;AAAA,YACF;AAEA,kBAAM,MAAM,IAAI;AAAA,cACdA,MAAK;AAAA,cACLA,MAAK,aAAa;AAAA,cAClBA,MAAK,SAAS;AAAA,YAChB;AAEA,gBAAI,CAAC,KAAK,uBAAuB,CAAC,YAAY,GAAG,GAAG;AAClD,oBAAM,QAAQ,KAAK;AAAA,gBACjB;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAEA,iBAAG,KAAK;AACR;AAAA,YACF;AAEA,iBAAK,QAAQ;AACb,iBAAK,KAAK,YAAY,MAAM,GAAG;AAC/B,iBAAK,IAAI;AAAA,UACX;AAEA,eAAK,SAAS;AACd;AAAA,QACF;AAEA,YAAI,KAAK,yBAAyB;AAChC,eAAK,KAAK,KAAK,YAAY,IAAO,SAAS,QAAQA,KAAI;AACvD,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK,SAAS;AACd,uBAAa,MAAM;AACjB,iBAAK,KAAK,KAAK,YAAY,IAAO,SAAS,QAAQA,KAAI;AACvD,iBAAK,SAAS;AACd,iBAAK,UAAU,EAAE;AAAA,UACnB,CAAC;AAAA,QACH;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAcA,YAAY,WAAW,SAAS,QAAQ,YAAY,WAAW;AAC7D,aAAK,QAAQ;AACb,aAAK,WAAW;AAEhB,cAAM,MAAM,IAAI;AAAA,UACd,SAAS,4BAA4B,OAAO,KAAK;AAAA,QACnD;AAEA,cAAM,kBAAkB,KAAK,KAAK,WAAW;AAC7C,YAAI,OAAO;AACX,YAAI,WAAW,IAAI;AACnB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,IAAAJ,QAAO,UAAUE;AAAA;AAAA;;;AC/rBjB;AAAA,kCAAAG,UAAAC,SAAA;AAAA;AAIA,QAAM,EAAE,OAAO,IAAI,QAAQ,QAAQ;AACnC,QAAM,EAAE,eAAe,IAAI,QAAQ,QAAQ;AAE3C,QAAM,oBAAoB;AAC1B,QAAM,EAAE,aAAa,IAAI;AACzB,QAAM,EAAE,kBAAkB,IAAI;AAC9B,QAAM,EAAE,MAAM,WAAW,SAAS,IAAI;AAEtC,QAAM,cAAc,OAAO,aAAa;AACxC,QAAM,aAAa,OAAO,MAAM,CAAC;AACjC,QAAM,mBAAmB,IAAI;AAC7B,QAAI;AACJ,QAAI,oBAAoB;AAKxB,QAAMC,UAAN,MAAM,QAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASX,YAAY,QAAQ,YAAY,cAAc;AAC5C,aAAK,cAAc,cAAc,CAAC;AAElC,YAAI,cAAc;AAChB,eAAK,gBAAgB;AACrB,eAAK,cAAc,OAAO,MAAM,CAAC;AAAA,QACnC;AAEA,aAAK,UAAU;AAEf,aAAK,iBAAiB;AACtB,aAAK,YAAY;AAEjB,aAAK,iBAAiB;AACtB,aAAK,aAAa;AAClB,aAAK,SAAS,CAAC;AAAA,MACjB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAuBA,OAAO,MAAMC,OAAM,SAAS;AAC1B,YAAIC;AACJ,YAAI,QAAQ;AACZ,YAAI,SAAS;AACb,YAAI,cAAc;AAElB,YAAI,QAAQ,MAAM;AAChB,UAAAA,QAAO,QAAQ,cAAc;AAE7B,cAAI,QAAQ,cAAc;AACxB,oBAAQ,aAAaA,KAAI;AAAA,UAC3B,OAAO;AACL,gBAAI,sBAAsB,kBAAkB;AAE1C,kBAAI,eAAe,QAAW;AAK5B,6BAAa,OAAO,MAAM,gBAAgB;AAAA,cAC5C;AAEA,6BAAe,YAAY,GAAG,gBAAgB;AAC9C,kCAAoB;AAAA,YACtB;AAEA,YAAAA,MAAK,CAAC,IAAI,WAAW,mBAAmB;AACxC,YAAAA,MAAK,CAAC,IAAI,WAAW,mBAAmB;AACxC,YAAAA,MAAK,CAAC,IAAI,WAAW,mBAAmB;AACxC,YAAAA,MAAK,CAAC,IAAI,WAAW,mBAAmB;AAAA,UAC1C;AAEA,yBAAeA,MAAK,CAAC,IAAIA,MAAK,CAAC,IAAIA,MAAK,CAAC,IAAIA,MAAK,CAAC,OAAO;AAC1D,mBAAS;AAAA,QACX;AAEA,YAAIC;AAEJ,YAAI,OAAOF,UAAS,UAAU;AAC5B,eACG,CAAC,QAAQ,QAAQ,gBAClB,QAAQ,WAAW,MAAM,QACzB;AACA,YAAAE,cAAa,QAAQ,WAAW;AAAA,UAClC,OAAO;AACL,YAAAF,QAAO,OAAO,KAAKA,KAAI;AACvB,YAAAE,cAAaF,MAAK;AAAA,UACpB;AAAA,QACF,OAAO;AACL,UAAAE,cAAaF,MAAK;AAClB,kBAAQ,QAAQ,QAAQ,QAAQ,YAAY,CAAC;AAAA,QAC/C;AAEA,YAAI,gBAAgBE;AAEpB,YAAIA,eAAc,OAAO;AACvB,oBAAU;AACV,0BAAgB;AAAA,QAClB,WAAWA,cAAa,KAAK;AAC3B,oBAAU;AACV,0BAAgB;AAAA,QAClB;AAEA,cAAM,SAAS,OAAO,YAAY,QAAQA,cAAa,SAAS,MAAM;AAEtE,eAAO,CAAC,IAAI,QAAQ,MAAM,QAAQ,SAAS,MAAO,QAAQ;AAC1D,YAAI,QAAQ,KAAM,QAAO,CAAC,KAAK;AAE/B,eAAO,CAAC,IAAI;AAEZ,YAAI,kBAAkB,KAAK;AACzB,iBAAO,cAAcA,aAAY,CAAC;AAAA,QACpC,WAAW,kBAAkB,KAAK;AAChC,iBAAO,CAAC,IAAI,OAAO,CAAC,IAAI;AACxB,iBAAO,YAAYA,aAAY,GAAG,CAAC;AAAA,QACrC;AAEA,YAAI,CAAC,QAAQ,KAAM,QAAO,CAAC,QAAQF,KAAI;AAEvC,eAAO,CAAC,KAAK;AACb,eAAO,SAAS,CAAC,IAAIC,MAAK,CAAC;AAC3B,eAAO,SAAS,CAAC,IAAIA,MAAK,CAAC;AAC3B,eAAO,SAAS,CAAC,IAAIA,MAAK,CAAC;AAC3B,eAAO,SAAS,CAAC,IAAIA,MAAK,CAAC;AAE3B,YAAI,YAAa,QAAO,CAAC,QAAQD,KAAI;AAErC,YAAI,OAAO;AACT,oBAAUA,OAAMC,OAAM,QAAQ,QAAQC,WAAU;AAChD,iBAAO,CAAC,MAAM;AAAA,QAChB;AAEA,kBAAUF,OAAMC,OAAMD,OAAM,GAAGE,WAAU;AACzC,eAAO,CAAC,QAAQF,KAAI;AAAA,MACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,MAAM,MAAMA,OAAMC,OAAM,IAAI;AAC1B,YAAI;AAEJ,YAAI,SAAS,QAAW;AACtB,gBAAM;AAAA,QACR,WAAW,OAAO,SAAS,YAAY,CAAC,kBAAkB,IAAI,GAAG;AAC/D,gBAAM,IAAI,UAAU,kDAAkD;AAAA,QACxE,WAAWD,UAAS,UAAa,CAACA,MAAK,QAAQ;AAC7C,gBAAM,OAAO,YAAY,CAAC;AAC1B,cAAI,cAAc,MAAM,CAAC;AAAA,QAC3B,OAAO;AACL,gBAAM,SAAS,OAAO,WAAWA,KAAI;AAErC,cAAI,SAAS,KAAK;AAChB,kBAAM,IAAI,WAAW,gDAAgD;AAAA,UACvE;AAEA,gBAAM,OAAO,YAAY,IAAI,MAAM;AACnC,cAAI,cAAc,MAAM,CAAC;AAEzB,cAAI,OAAOA,UAAS,UAAU;AAC5B,gBAAI,MAAMA,OAAM,CAAC;AAAA,UACnB,OAAO;AACL,gBAAI,IAAIA,OAAM,CAAC;AAAA,UACjB;AAAA,QACF;AAEA,cAAM,UAAU;AAAA,UACd,CAAC,WAAW,GAAG,IAAI;AAAA,UACnB,KAAK;AAAA,UACL,cAAc,KAAK;AAAA,UACnB,MAAAC;AAAA,UACA,YAAY,KAAK;AAAA,UACjB,QAAQ;AAAA,UACR,UAAU;AAAA,UACV,MAAM;AAAA,QACR;AAEA,YAAI,KAAK,YAAY;AACnB,eAAK,QAAQ,CAAC,KAAK,UAAU,KAAK,OAAO,SAAS,EAAE,CAAC;AAAA,QACvD,OAAO;AACL,eAAK,UAAU,QAAO,MAAM,KAAK,OAAO,GAAG,EAAE;AAAA,QAC/C;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,KAAKD,OAAMC,OAAM,IAAI;AACnB,YAAI;AACJ,YAAI;AAEJ,YAAI,OAAOD,UAAS,UAAU;AAC5B,uBAAa,OAAO,WAAWA,KAAI;AACnC,qBAAW;AAAA,QACb,OAAO;AACL,UAAAA,QAAO,SAASA,KAAI;AACpB,uBAAaA,MAAK;AAClB,qBAAW,SAAS;AAAA,QACtB;AAEA,YAAI,aAAa,KAAK;AACpB,gBAAM,IAAI,WAAW,kDAAkD;AAAA,QACzE;AAEA,cAAM,UAAU;AAAA,UACd,CAAC,WAAW,GAAG;AAAA,UACf,KAAK;AAAA,UACL,cAAc,KAAK;AAAA,UACnB,MAAAC;AAAA,UACA,YAAY,KAAK;AAAA,UACjB,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,QACR;AAEA,YAAI,KAAK,YAAY;AACnB,eAAK,QAAQ,CAAC,KAAK,UAAUD,OAAM,OAAO,SAAS,EAAE,CAAC;AAAA,QACxD,OAAO;AACL,eAAK,UAAU,QAAO,MAAMA,OAAM,OAAO,GAAG,EAAE;AAAA,QAChD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,KAAKA,OAAMC,OAAM,IAAI;AACnB,YAAI;AACJ,YAAI;AAEJ,YAAI,OAAOD,UAAS,UAAU;AAC5B,uBAAa,OAAO,WAAWA,KAAI;AACnC,qBAAW;AAAA,QACb,OAAO;AACL,UAAAA,QAAO,SAASA,KAAI;AACpB,uBAAaA,MAAK;AAClB,qBAAW,SAAS;AAAA,QACtB;AAEA,YAAI,aAAa,KAAK;AACpB,gBAAM,IAAI,WAAW,kDAAkD;AAAA,QACzE;AAEA,cAAM,UAAU;AAAA,UACd,CAAC,WAAW,GAAG;AAAA,UACf,KAAK;AAAA,UACL,cAAc,KAAK;AAAA,UACnB,MAAAC;AAAA,UACA,YAAY,KAAK;AAAA,UACjB,QAAQ;AAAA,UACR;AAAA,UACA,MAAM;AAAA,QACR;AAEA,YAAI,KAAK,YAAY;AACnB,eAAK,QAAQ,CAAC,KAAK,UAAUD,OAAM,OAAO,SAAS,EAAE,CAAC;AAAA,QACxD,OAAO;AACL,eAAK,UAAU,QAAO,MAAMA,OAAM,OAAO,GAAG,EAAE;AAAA,QAChD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,KAAKA,OAAM,SAAS,IAAI;AACtB,cAAM,oBAAoB,KAAK,YAAY,kBAAkB,aAAa;AAC1E,YAAI,SAAS,QAAQ,SAAS,IAAI;AAClC,YAAI,OAAO,QAAQ;AAEnB,YAAI;AACJ,YAAI;AAEJ,YAAI,OAAOA,UAAS,UAAU;AAC5B,uBAAa,OAAO,WAAWA,KAAI;AACnC,qBAAW;AAAA,QACb,OAAO;AACL,UAAAA,QAAO,SAASA,KAAI;AACpB,uBAAaA,MAAK;AAClB,qBAAW,SAAS;AAAA,QACtB;AAEA,YAAI,KAAK,gBAAgB;AACvB,eAAK,iBAAiB;AACtB,cACE,QACA,qBACA,kBAAkB,OAChB,kBAAkB,YACd,+BACA,4BACN,GACA;AACA,mBAAO,cAAc,kBAAkB;AAAA,UACzC;AACA,eAAK,YAAY;AAAA,QACnB,OAAO;AACL,iBAAO;AACP,mBAAS;AAAA,QACX;AAEA,YAAI,QAAQ,IAAK,MAAK,iBAAiB;AAEvC,YAAI,mBAAmB;AACrB,gBAAM,OAAO;AAAA,YACX,CAAC,WAAW,GAAG;AAAA,YACf,KAAK,QAAQ;AAAA,YACb,cAAc,KAAK;AAAA,YACnB,MAAM,QAAQ;AAAA,YACd,YAAY,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAEA,cAAI,KAAK,YAAY;AACnB,iBAAK,QAAQ,CAAC,KAAK,UAAUA,OAAM,KAAK,WAAW,MAAM,EAAE,CAAC;AAAA,UAC9D,OAAO;AACL,iBAAK,SAASA,OAAM,KAAK,WAAW,MAAM,EAAE;AAAA,UAC9C;AAAA,QACF,OAAO;AACL,eAAK;AAAA,YACH,QAAO,MAAMA,OAAM;AAAA,cACjB,CAAC,WAAW,GAAG;AAAA,cACf,KAAK,QAAQ;AAAA,cACb,cAAc,KAAK;AAAA,cACnB,MAAM,QAAQ;AAAA,cACd,YAAY,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA,MAAM;AAAA,YACR,CAAC;AAAA,YACD;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAyBA,SAASA,OAAM,UAAU,SAAS,IAAI;AACpC,YAAI,CAAC,UAAU;AACb,eAAK,UAAU,QAAO,MAAMA,OAAM,OAAO,GAAG,EAAE;AAC9C;AAAA,QACF;AAEA,cAAM,oBAAoB,KAAK,YAAY,kBAAkB,aAAa;AAE1E,aAAK,kBAAkB,QAAQ,WAAW;AAC1C,aAAK,aAAa;AAClB,0BAAkB,SAASA,OAAM,QAAQ,KAAK,CAAC,GAAG,QAAQ;AACxD,cAAI,KAAK,QAAQ,WAAW;AAC1B,kBAAM,MAAM,IAAI;AAAA,cACd;AAAA,YACF;AAEA,gBAAI,OAAO,OAAO,WAAY,IAAG,GAAG;AAEpC,qBAAS,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;AAC3C,oBAAM,SAAS,KAAK,OAAO,CAAC;AAC5B,oBAAM,WAAW,OAAO,OAAO,SAAS,CAAC;AAEzC,kBAAI,OAAO,aAAa,WAAY,UAAS,GAAG;AAAA,YAClD;AAEA;AAAA,UACF;AAEA,eAAK,kBAAkB,QAAQ,WAAW;AAC1C,eAAK,aAAa;AAClB,kBAAQ,WAAW;AACnB,eAAK,UAAU,QAAO,MAAM,KAAK,OAAO,GAAG,EAAE;AAC7C,eAAK,QAAQ;AAAA,QACf,CAAC;AAAA,MACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,UAAU;AACR,eAAO,CAAC,KAAK,cAAc,KAAK,OAAO,QAAQ;AAC7C,gBAAM,SAAS,KAAK,OAAO,MAAM;AAEjC,eAAK,kBAAkB,OAAO,CAAC,EAAE,WAAW;AAC5C,kBAAQ,MAAM,OAAO,CAAC,GAAG,MAAM,OAAO,MAAM,CAAC,CAAC;AAAA,QAChD;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,QAAQ,QAAQ;AACd,aAAK,kBAAkB,OAAO,CAAC,EAAE,WAAW;AAC5C,aAAK,OAAO,KAAK,MAAM;AAAA,MACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,UAAU,MAAM,IAAI;AAClB,YAAI,KAAK,WAAW,GAAG;AACrB,eAAK,QAAQ,KAAK;AAClB,eAAK,QAAQ,MAAM,KAAK,CAAC,CAAC;AAC1B,eAAK,QAAQ,MAAM,KAAK,CAAC,GAAG,EAAE;AAC9B,eAAK,QAAQ,OAAO;AAAA,QACtB,OAAO;AACL,eAAK,QAAQ,MAAM,KAAK,CAAC,GAAG,EAAE;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAEA,IAAAF,QAAO,UAAUC;AAAA;AAAA;;;AChfjB;AAAA,wCAAAI,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,sBAAsB,UAAU,IAAI;AAE5C,QAAM,QAAQ,OAAO,OAAO;AAC5B,QAAM,QAAQ,OAAO,OAAO;AAC5B,QAAM,SAAS,OAAO,QAAQ;AAC9B,QAAM,WAAW,OAAO,UAAU;AAClC,QAAM,UAAU,OAAO,SAAS;AAChC,QAAM,UAAU,OAAO,SAAS;AAChC,QAAM,QAAQ,OAAO,OAAO;AAC5B,QAAM,YAAY,OAAO,WAAW;AAKpC,QAAM,QAAN,MAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOV,YAAY,MAAM;AAChB,aAAK,OAAO,IAAI;AAChB,aAAK,KAAK,IAAI;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,SAAS;AACX,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,eAAe,MAAM,WAAW,UAAU,EAAE,YAAY,KAAK,CAAC;AACrE,WAAO,eAAe,MAAM,WAAW,QAAQ,EAAE,YAAY,KAAK,CAAC;AAOnE,QAAM,aAAN,cAAyB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAc7B,YAAY,MAAM,UAAU,CAAC,GAAG;AAC9B,cAAM,IAAI;AAEV,aAAK,KAAK,IAAI,QAAQ,SAAS,SAAY,IAAI,QAAQ;AACvD,aAAK,OAAO,IAAI,QAAQ,WAAW,SAAY,KAAK,QAAQ;AAC5D,aAAK,SAAS,IAAI,QAAQ,aAAa,SAAY,QAAQ,QAAQ;AAAA,MACrE;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,SAAS;AACX,eAAO,KAAK,OAAO;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,WAAW;AACb,eAAO,KAAK,SAAS;AAAA,MACvB;AAAA,IACF;AAEA,WAAO,eAAe,WAAW,WAAW,QAAQ,EAAE,YAAY,KAAK,CAAC;AACxE,WAAO,eAAe,WAAW,WAAW,UAAU,EAAE,YAAY,KAAK,CAAC;AAC1E,WAAO,eAAe,WAAW,WAAW,YAAY,EAAE,YAAY,KAAK,CAAC;AAO5E,QAAM,aAAN,cAAyB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAU7B,YAAY,MAAM,UAAU,CAAC,GAAG;AAC9B,cAAM,IAAI;AAEV,aAAK,MAAM,IAAI,QAAQ,UAAU,SAAY,OAAO,QAAQ;AAC5D,aAAK,QAAQ,IAAI,QAAQ,YAAY,SAAY,KAAK,QAAQ;AAAA,MAChE;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,QAAQ;AACV,eAAO,KAAK,MAAM;AAAA,MACpB;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,UAAU;AACZ,eAAO,KAAK,QAAQ;AAAA,MACtB;AAAA,IACF;AAEA,WAAO,eAAe,WAAW,WAAW,SAAS,EAAE,YAAY,KAAK,CAAC;AACzE,WAAO,eAAe,WAAW,WAAW,WAAW,EAAE,YAAY,KAAK,CAAC;AAO3E,QAAM,eAAN,cAA2B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAS/B,YAAY,MAAM,UAAU,CAAC,GAAG;AAC9B,cAAM,IAAI;AAEV,aAAK,KAAK,IAAI,QAAQ,SAAS,SAAY,OAAO,QAAQ;AAAA,MAC5D;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,OAAO;AACT,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF;AAEA,WAAO,eAAe,aAAa,WAAW,QAAQ,EAAE,YAAY,KAAK,CAAC;AAQ1E,QAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAalB,iBAAiB,MAAM,SAAS,UAAU,CAAC,GAAG;AAC5C,mBAAW,YAAY,KAAK,UAAU,IAAI,GAAG;AAC3C,cACE,CAAC,QAAQ,oBAAoB,KAC7B,SAAS,SAAS,MAAM,WACxB,CAAC,SAAS,oBAAoB,GAC9B;AACA;AAAA,UACF;AAAA,QACF;AAEA,YAAI;AAEJ,YAAI,SAAS,WAAW;AACtB,oBAAU,SAAS,UAAUC,OAAM,UAAU;AAC3C,kBAAM,QAAQ,IAAI,aAAa,WAAW;AAAA,cACxC,MAAM,WAAWA,QAAOA,MAAK,SAAS;AAAA,YACxC,CAAC;AAED,kBAAM,OAAO,IAAI;AACjB,yBAAa,SAAS,MAAM,KAAK;AAAA,UACnC;AAAA,QACF,WAAW,SAAS,SAAS;AAC3B,oBAAU,SAAS,QAAQ,MAAM,SAAS;AACxC,kBAAM,QAAQ,IAAI,WAAW,SAAS;AAAA,cACpC;AAAA,cACA,QAAQ,QAAQ,SAAS;AAAA,cACzB,UAAU,KAAK,uBAAuB,KAAK;AAAA,YAC7C,CAAC;AAED,kBAAM,OAAO,IAAI;AACjB,yBAAa,SAAS,MAAM,KAAK;AAAA,UACnC;AAAA,QACF,WAAW,SAAS,SAAS;AAC3B,oBAAU,SAAS,QAAQ,OAAO;AAChC,kBAAM,QAAQ,IAAI,WAAW,SAAS;AAAA,cACpC;AAAA,cACA,SAAS,MAAM;AAAA,YACjB,CAAC;AAED,kBAAM,OAAO,IAAI;AACjB,yBAAa,SAAS,MAAM,KAAK;AAAA,UACnC;AAAA,QACF,WAAW,SAAS,QAAQ;AAC1B,oBAAU,SAAS,SAAS;AAC1B,kBAAM,QAAQ,IAAI,MAAM,MAAM;AAE9B,kBAAM,OAAO,IAAI;AACjB,yBAAa,SAAS,MAAM,KAAK;AAAA,UACnC;AAAA,QACF,OAAO;AACL;AAAA,QACF;AAEA,gBAAQ,oBAAoB,IAAI,CAAC,CAAC,QAAQ,oBAAoB;AAC9D,gBAAQ,SAAS,IAAI;AAErB,YAAI,QAAQ,MAAM;AAChB,eAAK,KAAK,MAAM,OAAO;AAAA,QACzB,OAAO;AACL,eAAK,GAAG,MAAM,OAAO;AAAA,QACvB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,oBAAoB,MAAM,SAAS;AACjC,mBAAW,YAAY,KAAK,UAAU,IAAI,GAAG;AAC3C,cAAI,SAAS,SAAS,MAAM,WAAW,CAAC,SAAS,oBAAoB,GAAG;AACtE,iBAAK,eAAe,MAAM,QAAQ;AAClC;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAAD,QAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAUA,aAAS,aAAa,UAAU,SAAS,OAAO;AAC9C,UAAI,OAAO,aAAa,YAAY,SAAS,aAAa;AACxD,iBAAS,YAAY,KAAK,UAAU,KAAK;AAAA,MAC3C,OAAO;AACL,iBAAS,KAAK,SAAS,KAAK;AAAA,MAC9B;AAAA,IACF;AAAA;AAAA;;;ACnSA;AAAA,qCAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,WAAW,IAAI;AAYvB,aAAS,KAAK,MAAM,MAAM,MAAM;AAC9B,UAAI,KAAK,IAAI,MAAM,OAAW,MAAK,IAAI,IAAI,CAAC,IAAI;AAAA,UAC3C,MAAK,IAAI,EAAE,KAAK,IAAI;AAAA,IAC3B;AASA,aAAS,MAAM,QAAQ;AACrB,YAAM,SAAS,uBAAO,OAAO,IAAI;AACjC,UAAI,SAAS,uBAAO,OAAO,IAAI;AAC/B,UAAI,eAAe;AACnB,UAAI,aAAa;AACjB,UAAI,WAAW;AACf,UAAI;AACJ,UAAI;AACJ,UAAI,QAAQ;AACZ,UAAI,OAAO;AACX,UAAI,MAAM;AACV,UAAI,IAAI;AAER,aAAO,IAAI,OAAO,QAAQ,KAAK;AAC7B,eAAO,OAAO,WAAW,CAAC;AAE1B,YAAI,kBAAkB,QAAW;AAC/B,cAAI,QAAQ,MAAM,WAAW,IAAI,MAAM,GAAG;AACxC,gBAAI,UAAU,GAAI,SAAQ;AAAA,UAC5B,WACE,MAAM,MACL,SAAS,MAAkB,SAAS,IACrC;AACA,gBAAI,QAAQ,MAAM,UAAU,GAAI,OAAM;AAAA,UACxC,WAAW,SAAS,MAAkB,SAAS,IAAgB;AAC7D,gBAAI,UAAU,IAAI;AAChB,oBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,YAC5D;AAEA,gBAAI,QAAQ,GAAI,OAAM;AACtB,kBAAM,OAAO,OAAO,MAAM,OAAO,GAAG;AACpC,gBAAI,SAAS,IAAM;AACjB,mBAAK,QAAQ,MAAM,MAAM;AACzB,uBAAS,uBAAO,OAAO,IAAI;AAAA,YAC7B,OAAO;AACL,8BAAgB;AAAA,YAClB;AAEA,oBAAQ,MAAM;AAAA,UAChB,OAAO;AACL,kBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,UAC5D;AAAA,QACF,WAAW,cAAc,QAAW;AAClC,cAAI,QAAQ,MAAM,WAAW,IAAI,MAAM,GAAG;AACxC,gBAAI,UAAU,GAAI,SAAQ;AAAA,UAC5B,WAAW,SAAS,MAAQ,SAAS,GAAM;AACzC,gBAAI,QAAQ,MAAM,UAAU,GAAI,OAAM;AAAA,UACxC,WAAW,SAAS,MAAQ,SAAS,IAAM;AACzC,gBAAI,UAAU,IAAI;AAChB,oBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,YAC5D;AAEA,gBAAI,QAAQ,GAAI,OAAM;AACtB,iBAAK,QAAQ,OAAO,MAAM,OAAO,GAAG,GAAG,IAAI;AAC3C,gBAAI,SAAS,IAAM;AACjB,mBAAK,QAAQ,eAAe,MAAM;AAClC,uBAAS,uBAAO,OAAO,IAAI;AAC3B,8BAAgB;AAAA,YAClB;AAEA,oBAAQ,MAAM;AAAA,UAChB,WAAW,SAAS,MAAkB,UAAU,MAAM,QAAQ,IAAI;AAChE,wBAAY,OAAO,MAAM,OAAO,CAAC;AACjC,oBAAQ,MAAM;AAAA,UAChB,OAAO;AACL,kBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,UAC5D;AAAA,QACF,OAAO;AAML,cAAI,YAAY;AACd,gBAAI,WAAW,IAAI,MAAM,GAAG;AAC1B,oBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,YAC5D;AACA,gBAAI,UAAU,GAAI,SAAQ;AAAA,qBACjB,CAAC,aAAc,gBAAe;AACvC,yBAAa;AAAA,UACf,WAAW,UAAU;AACnB,gBAAI,WAAW,IAAI,MAAM,GAAG;AAC1B,kBAAI,UAAU,GAAI,SAAQ;AAAA,YAC5B,WAAW,SAAS,MAAkB,UAAU,IAAI;AAClD,yBAAW;AACX,oBAAM;AAAA,YACR,WAAW,SAAS,IAAgB;AAClC,2BAAa;AAAA,YACf,OAAO;AACL,oBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,YAC5D;AAAA,UACF,WAAW,SAAS,MAAQ,OAAO,WAAW,IAAI,CAAC,MAAM,IAAM;AAC7D,uBAAW;AAAA,UACb,WAAW,QAAQ,MAAM,WAAW,IAAI,MAAM,GAAG;AAC/C,gBAAI,UAAU,GAAI,SAAQ;AAAA,UAC5B,WAAW,UAAU,OAAO,SAAS,MAAQ,SAAS,IAAO;AAC3D,gBAAI,QAAQ,GAAI,OAAM;AAAA,UACxB,WAAW,SAAS,MAAQ,SAAS,IAAM;AACzC,gBAAI,UAAU,IAAI;AAChB,oBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,YAC5D;AAEA,gBAAI,QAAQ,GAAI,OAAM;AACtB,gBAAI,QAAQ,OAAO,MAAM,OAAO,GAAG;AACnC,gBAAI,cAAc;AAChB,sBAAQ,MAAM,QAAQ,OAAO,EAAE;AAC/B,6BAAe;AAAA,YACjB;AACA,iBAAK,QAAQ,WAAW,KAAK;AAC7B,gBAAI,SAAS,IAAM;AACjB,mBAAK,QAAQ,eAAe,MAAM;AAClC,uBAAS,uBAAO,OAAO,IAAI;AAC3B,8BAAgB;AAAA,YAClB;AAEA,wBAAY;AACZ,oBAAQ,MAAM;AAAA,UAChB,OAAO;AACL,kBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,UAC5D;AAAA,QACF;AAAA,MACF;AAEA,UAAI,UAAU,MAAM,YAAY,SAAS,MAAQ,SAAS,GAAM;AAC9D,cAAM,IAAI,YAAY,yBAAyB;AAAA,MACjD;AAEA,UAAI,QAAQ,GAAI,OAAM;AACtB,YAAM,QAAQ,OAAO,MAAM,OAAO,GAAG;AACrC,UAAI,kBAAkB,QAAW;AAC/B,aAAK,QAAQ,OAAO,MAAM;AAAA,MAC5B,OAAO;AACL,YAAI,cAAc,QAAW;AAC3B,eAAK,QAAQ,OAAO,IAAI;AAAA,QAC1B,WAAW,cAAc;AACvB,eAAK,QAAQ,WAAW,MAAM,QAAQ,OAAO,EAAE,CAAC;AAAA,QAClD,OAAO;AACL,eAAK,QAAQ,WAAW,KAAK;AAAA,QAC/B;AACA,aAAK,QAAQ,eAAe,MAAM;AAAA,MACpC;AAEA,aAAO;AAAA,IACT;AASA,aAAS,OAAO,YAAY;AAC1B,aAAO,OAAO,KAAK,UAAU,EAC1B,IAAI,CAAC,cAAc;AAClB,YAAI,iBAAiB,WAAW,SAAS;AACzC,YAAI,CAAC,MAAM,QAAQ,cAAc,EAAG,kBAAiB,CAAC,cAAc;AACpE,eAAO,eACJ,IAAI,CAAC,WAAW;AACf,iBAAO,CAAC,SAAS,EACd;AAAA,YACC,OAAO,KAAK,MAAM,EAAE,IAAI,CAAC,MAAM;AAC7B,kBAAI,SAAS,OAAO,CAAC;AACrB,kBAAI,CAAC,MAAM,QAAQ,MAAM,EAAG,UAAS,CAAC,MAAM;AAC5C,qBAAO,OACJ,IAAI,CAAC,MAAO,MAAM,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,EAAG,EACzC,KAAK,IAAI;AAAA,YACd,CAAC;AAAA,UACH,EACC,KAAK,IAAI;AAAA,QACd,CAAC,EACA,KAAK,IAAI;AAAA,MACd,CAAC,EACA,KAAK,IAAI;AAAA,IACd;AAEA,IAAAA,QAAO,UAAU,EAAE,QAAQ,MAAM;AAAA;AAAA;;;AC1MjC;AAAA,qCAAAC,UAAAC,SAAA;AAAA;AAIA,QAAM,eAAe,QAAQ,QAAQ;AACrC,QAAMC,SAAQ,QAAQ,OAAO;AAC7B,QAAMC,QAAO,QAAQ,MAAM;AAC3B,QAAM,MAAM,QAAQ,KAAK;AACzB,QAAM,MAAM,QAAQ,KAAK;AACzB,QAAM,EAAE,aAAAC,cAAa,YAAAC,YAAW,IAAI,QAAQ,QAAQ;AACpD,QAAM,EAAE,QAAQ,SAAS,IAAI,QAAQ,QAAQ;AAC7C,QAAM,EAAE,IAAI,IAAI,QAAQ,KAAK;AAE7B,QAAM,oBAAoB;AAC1B,QAAMC,YAAW;AACjB,QAAMC,UAAS;AACf,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM;AAAA,MACJ,aAAa,EAAE,kBAAkB,oBAAoB;AAAA,IACvD,IAAI;AACJ,QAAM,EAAE,QAAQ,MAAM,IAAI;AAC1B,QAAM,EAAE,SAAS,IAAI;AAErB,QAAM,eAAe,KAAK;AAC1B,QAAM,WAAW,OAAO,UAAU;AAClC,QAAM,mBAAmB,CAAC,GAAG,EAAE;AAC/B,QAAM,cAAc,CAAC,cAAc,QAAQ,WAAW,QAAQ;AAC9D,QAAM,mBAAmB;AAOzB,QAAMC,aAAN,MAAM,mBAAkB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQnC,YAAY,SAAS,WAAW,SAAS;AACvC,cAAM;AAEN,aAAK,cAAc,aAAa,CAAC;AACjC,aAAK,aAAa;AAClB,aAAK,sBAAsB;AAC3B,aAAK,kBAAkB;AACvB,aAAK,gBAAgB;AACrB,aAAK,cAAc;AACnB,aAAK,cAAc,CAAC;AACpB,aAAK,UAAU;AACf,aAAK,YAAY;AACjB,aAAK,cAAc,WAAU;AAC7B,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,UAAU;AAEf,YAAI,YAAY,MAAM;AACpB,eAAK,kBAAkB;AACvB,eAAK,YAAY;AACjB,eAAK,aAAa;AAElB,cAAI,cAAc,QAAW;AAC3B,wBAAY,CAAC;AAAA,UACf,WAAW,CAAC,MAAM,QAAQ,SAAS,GAAG;AACpC,gBAAI,OAAO,cAAc,YAAY,cAAc,MAAM;AACvD,wBAAU;AACV,0BAAY,CAAC;AAAA,YACf,OAAO;AACL,0BAAY,CAAC,SAAS;AAAA,YACxB;AAAA,UACF;AAEA,uBAAa,MAAM,SAAS,WAAW,OAAO;AAAA,QAChD,OAAO;AACL,eAAK,YAAY,QAAQ;AACzB,eAAK,YAAY;AAAA,QACnB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,IAAI,aAAa;AACf,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,IAAI,WAAW,MAAM;AACnB,YAAI,CAAC,aAAa,SAAS,IAAI,EAAG;AAElC,aAAK,cAAc;AAKnB,YAAI,KAAK,UAAW,MAAK,UAAU,cAAc;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,iBAAiB;AACnB,YAAI,CAAC,KAAK,QAAS,QAAO,KAAK;AAE/B,eAAO,KAAK,QAAQ,eAAe,SAAS,KAAK,QAAQ;AAAA,MAC3D;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,aAAa;AACf,eAAO,OAAO,KAAK,KAAK,WAAW,EAAE,KAAK;AAAA,MAC5C;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,WAAW;AACb,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,UAAU;AACZ,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,UAAU;AACZ,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA,MAMA,IAAI,YAAY;AACd,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,WAAW;AACb,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,aAAa;AACf,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA,MAKA,IAAI,MAAM;AACR,eAAO,KAAK;AAAA,MACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAkBA,UAAU,QAAQ,MAAM,SAAS;AAC/B,cAAM,WAAW,IAAIF,UAAS;AAAA,UAC5B,wBAAwB,QAAQ;AAAA,UAChC,YAAY,KAAK;AAAA,UACjB,YAAY,KAAK;AAAA,UACjB,UAAU,KAAK;AAAA,UACf,YAAY,QAAQ;AAAA,UACpB,oBAAoB,QAAQ;AAAA,QAC9B,CAAC;AAED,aAAK,UAAU,IAAIC,QAAO,QAAQ,KAAK,aAAa,QAAQ,YAAY;AACxE,aAAK,YAAY;AACjB,aAAK,UAAU;AAEf,iBAAS,UAAU,IAAI;AACvB,eAAO,UAAU,IAAI;AAErB,iBAAS,GAAG,YAAY,kBAAkB;AAC1C,iBAAS,GAAG,SAAS,eAAe;AACpC,iBAAS,GAAG,SAAS,eAAe;AACpC,iBAAS,GAAG,WAAW,iBAAiB;AACxC,iBAAS,GAAG,QAAQ,cAAc;AAClC,iBAAS,GAAG,QAAQ,cAAc;AAKlC,YAAI,OAAO,WAAY,QAAO,WAAW,CAAC;AAC1C,YAAI,OAAO,WAAY,QAAO,WAAW;AAEzC,YAAI,KAAK,SAAS,EAAG,QAAO,QAAQ,IAAI;AAExC,eAAO,GAAG,SAAS,aAAa;AAChC,eAAO,GAAG,QAAQ,YAAY;AAC9B,eAAO,GAAG,OAAO,WAAW;AAC5B,eAAO,GAAG,SAAS,aAAa;AAEhC,aAAK,cAAc,WAAU;AAC7B,aAAK,KAAK,MAAM;AAAA,MAClB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,YAAY;AACV,YAAI,CAAC,KAAK,SAAS;AACjB,eAAK,cAAc,WAAU;AAC7B,eAAK,KAAK,SAAS,KAAK,YAAY,KAAK,aAAa;AACtD;AAAA,QACF;AAEA,YAAI,KAAK,YAAY,kBAAkB,aAAa,GAAG;AACrD,eAAK,YAAY,kBAAkB,aAAa,EAAE,QAAQ;AAAA,QAC5D;AAEA,aAAK,UAAU,mBAAmB;AAClC,aAAK,cAAc,WAAU;AAC7B,aAAK,KAAK,SAAS,KAAK,YAAY,KAAK,aAAa;AAAA,MACxD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAsBA,MAAM,MAAME,OAAM;AAChB,YAAI,KAAK,eAAe,WAAU,OAAQ;AAC1C,YAAI,KAAK,eAAe,WAAU,YAAY;AAC5C,gBAAM,MAAM;AACZ,yBAAe,MAAM,KAAK,MAAM,GAAG;AACnC;AAAA,QACF;AAEA,YAAI,KAAK,eAAe,WAAU,SAAS;AACzC,cACE,KAAK,oBACJ,KAAK,uBAAuB,KAAK,UAAU,eAAe,eAC3D;AACA,iBAAK,QAAQ,IAAI;AAAA,UACnB;AAEA;AAAA,QACF;AAEA,aAAK,cAAc,WAAU;AAC7B,aAAK,QAAQ,MAAM,MAAMA,OAAM,CAAC,KAAK,WAAW,CAAC,QAAQ;AAKvD,cAAI,IAAK;AAET,eAAK,kBAAkB;AAEvB,cACE,KAAK,uBACL,KAAK,UAAU,eAAe,cAC9B;AACA,iBAAK,QAAQ,IAAI;AAAA,UACnB;AAAA,QACF,CAAC;AAKD,aAAK,cAAc;AAAA,UACjB,KAAK,QAAQ,QAAQ,KAAK,KAAK,OAAO;AAAA,UACtC;AAAA,QACF;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,QAAQ;AACN,YACE,KAAK,eAAe,WAAU,cAC9B,KAAK,eAAe,WAAU,QAC9B;AACA;AAAA,QACF;AAEA,aAAK,UAAU;AACf,aAAK,QAAQ,MAAM;AAAA,MACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,KAAKA,OAAMC,OAAM,IAAI;AACnB,YAAI,KAAK,eAAe,WAAU,YAAY;AAC5C,gBAAM,IAAI,MAAM,kDAAkD;AAAA,QACpE;AAEA,YAAI,OAAOD,UAAS,YAAY;AAC9B,eAAKA;AACL,UAAAA,QAAOC,QAAO;AAAA,QAChB,WAAW,OAAOA,UAAS,YAAY;AACrC,eAAKA;AACL,UAAAA,QAAO;AAAA,QACT;AAEA,YAAI,OAAOD,UAAS,SAAU,CAAAA,QAAOA,MAAK,SAAS;AAEnD,YAAI,KAAK,eAAe,WAAU,MAAM;AACtC,yBAAe,MAAMA,OAAM,EAAE;AAC7B;AAAA,QACF;AAEA,YAAIC,UAAS,OAAW,CAAAA,QAAO,CAAC,KAAK;AACrC,aAAK,QAAQ,KAAKD,SAAQ,cAAcC,OAAM,EAAE;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,KAAKD,OAAMC,OAAM,IAAI;AACnB,YAAI,KAAK,eAAe,WAAU,YAAY;AAC5C,gBAAM,IAAI,MAAM,kDAAkD;AAAA,QACpE;AAEA,YAAI,OAAOD,UAAS,YAAY;AAC9B,eAAKA;AACL,UAAAA,QAAOC,QAAO;AAAA,QAChB,WAAW,OAAOA,UAAS,YAAY;AACrC,eAAKA;AACL,UAAAA,QAAO;AAAA,QACT;AAEA,YAAI,OAAOD,UAAS,SAAU,CAAAA,QAAOA,MAAK,SAAS;AAEnD,YAAI,KAAK,eAAe,WAAU,MAAM;AACtC,yBAAe,MAAMA,OAAM,EAAE;AAC7B;AAAA,QACF;AAEA,YAAIC,UAAS,OAAW,CAAAA,QAAO,CAAC,KAAK;AACrC,aAAK,QAAQ,KAAKD,SAAQ,cAAcC,OAAM,EAAE;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,SAAS;AACP,YACE,KAAK,eAAe,WAAU,cAC9B,KAAK,eAAe,WAAU,QAC9B;AACA;AAAA,QACF;AAEA,aAAK,UAAU;AACf,YAAI,CAAC,KAAK,UAAU,eAAe,UAAW,MAAK,QAAQ,OAAO;AAAA,MACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAiBA,KAAKD,OAAM,SAAS,IAAI;AACtB,YAAI,KAAK,eAAe,WAAU,YAAY;AAC5C,gBAAM,IAAI,MAAM,kDAAkD;AAAA,QACpE;AAEA,YAAI,OAAO,YAAY,YAAY;AACjC,eAAK;AACL,oBAAU,CAAC;AAAA,QACb;AAEA,YAAI,OAAOA,UAAS,SAAU,CAAAA,QAAOA,MAAK,SAAS;AAEnD,YAAI,KAAK,eAAe,WAAU,MAAM;AACtC,yBAAe,MAAMA,OAAM,EAAE;AAC7B;AAAA,QACF;AAEA,cAAM,OAAO;AAAA,UACX,QAAQ,OAAOA,UAAS;AAAA,UACxB,MAAM,CAAC,KAAK;AAAA,UACZ,UAAU;AAAA,UACV,KAAK;AAAA,UACL,GAAG;AAAA,QACL;AAEA,YAAI,CAAC,KAAK,YAAY,kBAAkB,aAAa,GAAG;AACtD,eAAK,WAAW;AAAA,QAClB;AAEA,aAAK,QAAQ,KAAKA,SAAQ,cAAc,MAAM,EAAE;AAAA,MAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOA,YAAY;AACV,YAAI,KAAK,eAAe,WAAU,OAAQ;AAC1C,YAAI,KAAK,eAAe,WAAU,YAAY;AAC5C,gBAAM,MAAM;AACZ,yBAAe,MAAM,KAAK,MAAM,GAAG;AACnC;AAAA,QACF;AAEA,YAAI,KAAK,SAAS;AAChB,eAAK,cAAc,WAAU;AAC7B,eAAK,QAAQ,QAAQ;AAAA,QACvB;AAAA,MACF;AAAA,IACF;AAMA,WAAO,eAAeD,YAAW,cAAc;AAAA,MAC7C,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,YAAY;AAAA,IACzC,CAAC;AAMD,WAAO,eAAeA,WAAU,WAAW,cAAc;AAAA,MACvD,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,YAAY;AAAA,IACzC,CAAC;AAMD,WAAO,eAAeA,YAAW,QAAQ;AAAA,MACvC,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,MAAM;AAAA,IACnC,CAAC;AAMD,WAAO,eAAeA,WAAU,WAAW,QAAQ;AAAA,MACjD,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,MAAM;AAAA,IACnC,CAAC;AAMD,WAAO,eAAeA,YAAW,WAAW;AAAA,MAC1C,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,SAAS;AAAA,IACtC,CAAC;AAMD,WAAO,eAAeA,WAAU,WAAW,WAAW;AAAA,MACpD,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,SAAS;AAAA,IACtC,CAAC;AAMD,WAAO,eAAeA,YAAW,UAAU;AAAA,MACzC,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,QAAQ;AAAA,IACrC,CAAC;AAMD,WAAO,eAAeA,WAAU,WAAW,UAAU;AAAA,MACnD,YAAY;AAAA,MACZ,OAAO,YAAY,QAAQ,QAAQ;AAAA,IACrC,CAAC;AAED;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,EAAE,QAAQ,CAAC,aAAa;AACtB,aAAO,eAAeA,WAAU,WAAW,UAAU,EAAE,YAAY,KAAK,CAAC;AAAA,IAC3E,CAAC;AAMD,KAAC,QAAQ,SAAS,SAAS,SAAS,EAAE,QAAQ,CAAC,WAAW;AACxD,aAAO,eAAeA,WAAU,WAAW,KAAK,MAAM,IAAI;AAAA,QACxD,YAAY;AAAA,QACZ,MAAM;AACJ,qBAAW,YAAY,KAAK,UAAU,MAAM,GAAG;AAC7C,gBAAI,SAAS,oBAAoB,EAAG,QAAO,SAAS,SAAS;AAAA,UAC/D;AAEA,iBAAO;AAAA,QACT;AAAA,QACA,IAAI,SAAS;AACX,qBAAW,YAAY,KAAK,UAAU,MAAM,GAAG;AAC7C,gBAAI,SAAS,oBAAoB,GAAG;AAClC,mBAAK,eAAe,QAAQ,QAAQ;AACpC;AAAA,YACF;AAAA,UACF;AAEA,cAAI,OAAO,YAAY,WAAY;AAEnC,eAAK,iBAAiB,QAAQ,SAAS;AAAA,YACrC,CAAC,oBAAoB,GAAG;AAAA,UAC1B,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,IAAAA,WAAU,UAAU,mBAAmB;AACvC,IAAAA,WAAU,UAAU,sBAAsB;AAE1C,IAAAP,QAAO,UAAUO;AAoCjB,aAAS,aAAa,WAAW,SAAS,WAAW,SAAS;AAC5D,YAAM,OAAO;AAAA,QACX,wBAAwB;AAAA,QACxB,UAAU;AAAA,QACV,iBAAiB,iBAAiB,CAAC;AAAA,QACnC,YAAY,MAAM,OAAO;AAAA,QACzB,oBAAoB;AAAA,QACpB,mBAAmB;AAAA,QACnB,iBAAiB;AAAA,QACjB,cAAc;AAAA,QACd,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAEA,gBAAU,YAAY,KAAK;AAE3B,UAAI,CAAC,iBAAiB,SAAS,KAAK,eAAe,GAAG;AACpD,cAAM,IAAI;AAAA,UACR,iCAAiC,KAAK,eAAe,yBAC3B,iBAAiB,KAAK,IAAI,CAAC;AAAA,QACvD;AAAA,MACF;AAEA,UAAI;AAEJ,UAAI,mBAAmB,KAAK;AAC1B,oBAAY;AAAA,MACd,OAAO;AACL,YAAI;AACF,sBAAY,IAAI,IAAI,OAAO;AAAA,QAC7B,SAAS,GAAG;AACV,gBAAM,IAAI,YAAY,gBAAgB,OAAO,EAAE;AAAA,QACjD;AAAA,MACF;AAEA,UAAI,UAAU,aAAa,SAAS;AAClC,kBAAU,WAAW;AAAA,MACvB,WAAW,UAAU,aAAa,UAAU;AAC1C,kBAAU,WAAW;AAAA,MACvB;AAEA,gBAAU,OAAO,UAAU;AAE3B,YAAM,WAAW,UAAU,aAAa;AACxC,YAAM,WAAW,UAAU,aAAa;AACxC,UAAI;AAEJ,UAAI,UAAU,aAAa,SAAS,CAAC,YAAY,CAAC,UAAU;AAC1D,4BACE;AAAA,MAEJ,WAAW,YAAY,CAAC,UAAU,UAAU;AAC1C,4BAAoB;AAAA,MACtB,WAAW,UAAU,MAAM;AACzB,4BAAoB;AAAA,MACtB;AAEA,UAAI,mBAAmB;AACrB,cAAM,MAAM,IAAI,YAAY,iBAAiB;AAE7C,YAAI,UAAU,eAAe,GAAG;AAC9B,gBAAM;AAAA,QACR,OAAO;AACL,4BAAkB,WAAW,GAAG;AAChC;AAAA,QACF;AAAA,MACF;AAEA,YAAM,cAAc,WAAW,MAAM;AACrC,YAAM,MAAMJ,aAAY,EAAE,EAAE,SAAS,QAAQ;AAC7C,YAAM,UAAU,WAAWF,OAAM,UAAUC,MAAK;AAChD,YAAM,cAAc,oBAAI,IAAI;AAC5B,UAAI;AAEJ,WAAK,mBACH,KAAK,qBAAqB,WAAW,aAAa;AACpD,WAAK,cAAc,KAAK,eAAe;AACvC,WAAK,OAAO,UAAU,QAAQ;AAC9B,WAAK,OAAO,UAAU,SAAS,WAAW,GAAG,IACzC,UAAU,SAAS,MAAM,GAAG,EAAE,IAC9B,UAAU;AACd,WAAK,UAAU;AAAA,QACb,GAAG,KAAK;AAAA,QACR,yBAAyB,KAAK;AAAA,QAC9B,qBAAqB;AAAA,QACrB,YAAY;AAAA,QACZ,SAAS;AAAA,MACX;AACA,WAAK,OAAO,UAAU,WAAW,UAAU;AAC3C,WAAK,UAAU,KAAK;AAEpB,UAAI,KAAK,mBAAmB;AAC1B,4BAAoB,IAAI;AAAA,UACtB,KAAK,sBAAsB,OAAO,KAAK,oBAAoB,CAAC;AAAA,UAC5D;AAAA,UACA,KAAK;AAAA,QACP;AACA,aAAK,QAAQ,0BAA0B,IAAI,OAAO;AAAA,UAChD,CAAC,kBAAkB,aAAa,GAAG,kBAAkB,MAAM;AAAA,QAC7D,CAAC;AAAA,MACH;AACA,UAAI,UAAU,QAAQ;AACpB,mBAAW,YAAY,WAAW;AAChC,cACE,OAAO,aAAa,YACpB,CAAC,iBAAiB,KAAK,QAAQ,KAC/B,YAAY,IAAI,QAAQ,GACxB;AACA,kBAAM,IAAI;AAAA,cACR;AAAA,YACF;AAAA,UACF;AAEA,sBAAY,IAAI,QAAQ;AAAA,QAC1B;AAEA,aAAK,QAAQ,wBAAwB,IAAI,UAAU,KAAK,GAAG;AAAA,MAC7D;AACA,UAAI,KAAK,QAAQ;AACf,YAAI,KAAK,kBAAkB,IAAI;AAC7B,eAAK,QAAQ,sBAAsB,IAAI,KAAK;AAAA,QAC9C,OAAO;AACL,eAAK,QAAQ,SAAS,KAAK;AAAA,QAC7B;AAAA,MACF;AACA,UAAI,UAAU,YAAY,UAAU,UAAU;AAC5C,aAAK,OAAO,GAAG,UAAU,QAAQ,IAAI,UAAU,QAAQ;AAAA,MACzD;AAEA,UAAI,UAAU;AACZ,cAAM,QAAQ,KAAK,KAAK,MAAM,GAAG;AAEjC,aAAK,aAAa,MAAM,CAAC;AACzB,aAAK,OAAO,MAAM,CAAC;AAAA,MACrB;AAEA,UAAI;AAEJ,UAAI,KAAK,iBAAiB;AACxB,YAAI,UAAU,eAAe,GAAG;AAC9B,oBAAU,eAAe;AACzB,oBAAU,kBAAkB;AAC5B,oBAAU,4BAA4B,WAClC,KAAK,aACL,UAAU;AAEd,gBAAM,UAAU,WAAW,QAAQ;AAMnC,oBAAU,EAAE,GAAG,SAAS,SAAS,CAAC,EAAE;AAEpC,cAAI,SAAS;AACX,uBAAW,CAACQ,MAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,sBAAQ,QAAQA,KAAI,YAAY,CAAC,IAAI;AAAA,YACvC;AAAA,UACF;AAAA,QACF,WAAW,UAAU,cAAc,UAAU,MAAM,GAAG;AACpD,gBAAM,aAAa,WACf,UAAU,eACR,KAAK,eAAe,UAAU,4BAC9B,QACF,UAAU,eACR,QACA,UAAU,SAAS,UAAU;AAEnC,cAAI,CAAC,cAAe,UAAU,mBAAmB,CAAC,UAAW;AAK3D,mBAAO,KAAK,QAAQ;AACpB,mBAAO,KAAK,QAAQ;AAEpB,gBAAI,CAAC,WAAY,QAAO,KAAK,QAAQ;AAErC,iBAAK,OAAO;AAAA,UACd;AAAA,QACF;AAOA,YAAI,KAAK,QAAQ,CAAC,QAAQ,QAAQ,eAAe;AAC/C,kBAAQ,QAAQ,gBACd,WAAW,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS,QAAQ;AAAA,QACvD;AAEA,cAAM,UAAU,OAAO,QAAQ,IAAI;AAEnC,YAAI,UAAU,YAAY;AAUxB,oBAAU,KAAK,YAAY,UAAU,KAAK,GAAG;AAAA,QAC/C;AAAA,MACF,OAAO;AACL,cAAM,UAAU,OAAO,QAAQ,IAAI;AAAA,MACrC;AAEA,UAAI,KAAK,SAAS;AAChB,YAAI,GAAG,WAAW,MAAM;AACtB,yBAAe,WAAW,KAAK,iCAAiC;AAAA,QAClE,CAAC;AAAA,MACH;AAEA,UAAI,GAAG,SAAS,CAAC,QAAQ;AACvB,YAAI,QAAQ,QAAQ,IAAI,QAAQ,EAAG;AAEnC,cAAM,UAAU,OAAO;AACvB,0BAAkB,WAAW,GAAG;AAAA,MAClC,CAAC;AAED,UAAI,GAAG,YAAY,CAAC,QAAQ;AAC1B,cAAM,WAAW,IAAI,QAAQ;AAC7B,cAAM,aAAa,IAAI;AAEvB,YACE,YACA,KAAK,mBACL,cAAc,OACd,aAAa,KACb;AACA,cAAI,EAAE,UAAU,aAAa,KAAK,cAAc;AAC9C,2BAAe,WAAW,KAAK,4BAA4B;AAC3D;AAAA,UACF;AAEA,cAAI,MAAM;AAEV,cAAI;AAEJ,cAAI;AACF,mBAAO,IAAI,IAAI,UAAU,OAAO;AAAA,UAClC,SAAS,GAAG;AACV,kBAAM,MAAM,IAAI,YAAY,gBAAgB,QAAQ,EAAE;AACtD,8BAAkB,WAAW,GAAG;AAChC;AAAA,UACF;AAEA,uBAAa,WAAW,MAAM,WAAW,OAAO;AAAA,QAClD,WAAW,CAAC,UAAU,KAAK,uBAAuB,KAAK,GAAG,GAAG;AAC3D;AAAA,YACE;AAAA,YACA;AAAA,YACA,+BAA+B,IAAI,UAAU;AAAA,UAC/C;AAAA,QACF;AAAA,MACF,CAAC;AAED,UAAI,GAAG,WAAW,CAAC,KAAK,QAAQ,SAAS;AACvC,kBAAU,KAAK,WAAW,GAAG;AAM7B,YAAI,UAAU,eAAeH,WAAU,WAAY;AAEnD,cAAM,UAAU,OAAO;AAEvB,cAAM,UAAU,IAAI,QAAQ;AAE5B,YAAI,YAAY,UAAa,QAAQ,YAAY,MAAM,aAAa;AAClE,yBAAe,WAAW,QAAQ,wBAAwB;AAC1D;AAAA,QACF;AAEA,cAAM,SAASH,YAAW,MAAM,EAC7B,OAAO,MAAM,IAAI,EACjB,OAAO,QAAQ;AAElB,YAAI,IAAI,QAAQ,sBAAsB,MAAM,QAAQ;AAClD,yBAAe,WAAW,QAAQ,qCAAqC;AACvE;AAAA,QACF;AAEA,cAAM,aAAa,IAAI,QAAQ,wBAAwB;AACvD,YAAI;AAEJ,YAAI,eAAe,QAAW;AAC5B,cAAI,CAAC,YAAY,MAAM;AACrB,wBAAY;AAAA,UACd,WAAW,CAAC,YAAY,IAAI,UAAU,GAAG;AACvC,wBAAY;AAAA,UACd;AAAA,QACF,WAAW,YAAY,MAAM;AAC3B,sBAAY;AAAA,QACd;AAEA,YAAI,WAAW;AACb,yBAAe,WAAW,QAAQ,SAAS;AAC3C;AAAA,QACF;AAEA,YAAI,WAAY,WAAU,YAAY;AAEtC,cAAM,yBAAyB,IAAI,QAAQ,0BAA0B;AAErE,YAAI,2BAA2B,QAAW;AACxC,cAAI,CAAC,mBAAmB;AACtB,kBAAM,UACJ;AAEF,2BAAe,WAAW,QAAQ,OAAO;AACzC;AAAA,UACF;AAEA,cAAI;AAEJ,cAAI;AACF,yBAAa,MAAM,sBAAsB;AAAA,UAC3C,SAAS,KAAK;AACZ,kBAAM,UAAU;AAChB,2BAAe,WAAW,QAAQ,OAAO;AACzC;AAAA,UACF;AAEA,gBAAM,iBAAiB,OAAO,KAAK,UAAU;AAE7C,cACE,eAAe,WAAW,KAC1B,eAAe,CAAC,MAAM,kBAAkB,eACxC;AACA,kBAAM,UAAU;AAChB,2BAAe,WAAW,QAAQ,OAAO;AACzC;AAAA,UACF;AAEA,cAAI;AACF,8BAAkB,OAAO,WAAW,kBAAkB,aAAa,CAAC;AAAA,UACtE,SAAS,KAAK;AACZ,kBAAM,UAAU;AAChB,2BAAe,WAAW,QAAQ,OAAO;AACzC;AAAA,UACF;AAEA,oBAAU,YAAY,kBAAkB,aAAa,IACnD;AAAA,QACJ;AAEA,kBAAU,UAAU,QAAQ,MAAM;AAAA,UAChC,wBAAwB,KAAK;AAAA,UAC7B,cAAc,KAAK;AAAA,UACnB,YAAY,KAAK;AAAA,UACjB,oBAAoB,KAAK;AAAA,QAC3B,CAAC;AAAA,MACH,CAAC;AAED,UAAI,KAAK,eAAe;AACtB,aAAK,cAAc,KAAK,SAAS;AAAA,MACnC,OAAO;AACL,YAAI,IAAI;AAAA,MACV;AAAA,IACF;AASA,aAAS,kBAAkB,WAAW,KAAK;AACzC,gBAAU,cAAcG,WAAU;AAClC,gBAAU,KAAK,SAAS,GAAG;AAC3B,gBAAU,UAAU;AAAA,IACtB;AASA,aAAS,WAAW,SAAS;AAC3B,cAAQ,OAAO,QAAQ;AACvB,aAAO,IAAI,QAAQ,OAAO;AAAA,IAC5B;AASA,aAAS,WAAW,SAAS;AAC3B,cAAQ,OAAO;AAEf,UAAI,CAAC,QAAQ,cAAc,QAAQ,eAAe,IAAI;AACpD,gBAAQ,aAAa,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,QAAQ;AAAA,MAC7D;AAEA,aAAO,IAAI,QAAQ,OAAO;AAAA,IAC5B;AAWA,aAAS,eAAe,WAAW,QAAQ,SAAS;AAClD,gBAAU,cAAcA,WAAU;AAElC,YAAM,MAAM,IAAI,MAAM,OAAO;AAC7B,YAAM,kBAAkB,KAAK,cAAc;AAE3C,UAAI,OAAO,WAAW;AACpB,eAAO,QAAQ,IAAI;AACnB,eAAO,MAAM;AAEb,YAAI,OAAO,UAAU,CAAC,OAAO,OAAO,WAAW;AAM7C,iBAAO,OAAO,QAAQ;AAAA,QACxB;AAEA,gBAAQ,SAAS,mBAAmB,WAAW,GAAG;AAAA,MACpD,OAAO;AACL,eAAO,QAAQ,GAAG;AAClB,eAAO,KAAK,SAAS,UAAU,KAAK,KAAK,WAAW,OAAO,CAAC;AAC5D,eAAO,KAAK,SAAS,UAAU,UAAU,KAAK,SAAS,CAAC;AAAA,MAC1D;AAAA,IACF;AAWA,aAAS,eAAe,WAAWC,OAAM,IAAI;AAC3C,UAAIA,OAAM;AACR,cAAM,SAAS,SAASA,KAAI,EAAE;AAQ9B,YAAI,UAAU,QAAS,WAAU,QAAQ,kBAAkB;AAAA,YACtD,WAAU,mBAAmB;AAAA,MACpC;AAEA,UAAI,IAAI;AACN,cAAM,MAAM,IAAI;AAAA,UACd,qCAAqC,UAAU,UAAU,KACnD,YAAY,UAAU,UAAU,CAAC;AAAA,QACzC;AACA,gBAAQ,SAAS,IAAI,GAAG;AAAA,MAC1B;AAAA,IACF;AASA,aAAS,mBAAmB,MAAM,QAAQ;AACxC,YAAM,YAAY,KAAK,UAAU;AAEjC,gBAAU,sBAAsB;AAChC,gBAAU,gBAAgB;AAC1B,gBAAU,aAAa;AAEvB,UAAI,UAAU,QAAQ,UAAU,MAAM,OAAW;AAEjD,gBAAU,QAAQ,eAAe,QAAQ,YAAY;AACrD,cAAQ,SAAS,QAAQ,UAAU,OAAO;AAE1C,UAAI,SAAS,KAAM,WAAU,MAAM;AAAA,UAC9B,WAAU,MAAM,MAAM,MAAM;AAAA,IACnC;AAOA,aAAS,kBAAkB;AACzB,YAAM,YAAY,KAAK,UAAU;AAEjC,UAAI,CAAC,UAAU,SAAU,WAAU,QAAQ,OAAO;AAAA,IACpD;AAQA,aAAS,gBAAgB,KAAK;AAC5B,YAAM,YAAY,KAAK,UAAU;AAEjC,UAAI,UAAU,QAAQ,UAAU,MAAM,QAAW;AAC/C,kBAAU,QAAQ,eAAe,QAAQ,YAAY;AAMrD,gBAAQ,SAAS,QAAQ,UAAU,OAAO;AAE1C,kBAAU,MAAM,IAAI,WAAW,CAAC;AAAA,MAClC;AAEA,gBAAU,KAAK,SAAS,GAAG;AAAA,IAC7B;AAOA,aAAS,mBAAmB;AAC1B,WAAK,UAAU,EAAE,UAAU;AAAA,IAC7B;AASA,aAAS,kBAAkBA,OAAM,UAAU;AACzC,WAAK,UAAU,EAAE,KAAK,WAAWA,OAAM,QAAQ;AAAA,IACjD;AAQA,aAAS,eAAeA,OAAM;AAC5B,YAAM,YAAY,KAAK,UAAU;AAEjC,UAAI,UAAU,UAAW,WAAU,KAAKA,OAAM,CAAC,KAAK,WAAW,IAAI;AACnE,gBAAU,KAAK,QAAQA,KAAI;AAAA,IAC7B;AAQA,aAAS,eAAeA,OAAM;AAC5B,WAAK,UAAU,EAAE,KAAK,QAAQA,KAAI;AAAA,IACpC;AAQA,aAAS,OAAO,QAAQ;AACtB,aAAO,OAAO;AAAA,IAChB;AAOA,aAAS,gBAAgB;AACvB,YAAM,YAAY,KAAK,UAAU;AAEjC,WAAK,eAAe,SAAS,aAAa;AAC1C,WAAK,eAAe,QAAQ,YAAY;AACxC,WAAK,eAAe,OAAO,WAAW;AAEtC,gBAAU,cAAcD,WAAU;AAElC,UAAI;AAWJ,UACE,CAAC,KAAK,eAAe,cACrB,CAAC,UAAU,uBACX,CAAC,UAAU,UAAU,eAAe,iBACnC,QAAQ,UAAU,QAAQ,KAAK,OAAO,MACvC;AACA,kBAAU,UAAU,MAAM,KAAK;AAAA,MACjC;AAEA,gBAAU,UAAU,IAAI;AAExB,WAAK,UAAU,IAAI;AAEnB,mBAAa,UAAU,WAAW;AAElC,UACE,UAAU,UAAU,eAAe,YACnC,UAAU,UAAU,eAAe,cACnC;AACA,kBAAU,UAAU;AAAA,MACtB,OAAO;AACL,kBAAU,UAAU,GAAG,SAAS,gBAAgB;AAChD,kBAAU,UAAU,GAAG,UAAU,gBAAgB;AAAA,MACnD;AAAA,IACF;AAQA,aAAS,aAAa,OAAO;AAC3B,UAAI,CAAC,KAAK,UAAU,EAAE,UAAU,MAAM,KAAK,GAAG;AAC5C,aAAK,MAAM;AAAA,MACb;AAAA,IACF;AAOA,aAAS,cAAc;AACrB,YAAM,YAAY,KAAK,UAAU;AAEjC,gBAAU,cAAcA,WAAU;AAClC,gBAAU,UAAU,IAAI;AACxB,WAAK,IAAI;AAAA,IACX;AAOA,aAAS,gBAAgB;AACvB,YAAM,YAAY,KAAK,UAAU;AAEjC,WAAK,eAAe,SAAS,aAAa;AAC1C,WAAK,GAAG,SAAS,IAAI;AAErB,UAAI,WAAW;AACb,kBAAU,cAAcA,WAAU;AAClC,aAAK,QAAQ;AAAA,MACf;AAAA,IACF;AAAA;AAAA;;;ACzzCA;AAAA,uCAAAI,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,WAAW,IAAI;AASvB,aAAS,MAAM,QAAQ;AACrB,YAAM,YAAY,oBAAI,IAAI;AAC1B,UAAI,QAAQ;AACZ,UAAI,MAAM;AACV,UAAI,IAAI;AAER,WAAK,GAAG,IAAI,OAAO,QAAQ,KAAK;AAC9B,cAAM,OAAO,OAAO,WAAW,CAAC;AAEhC,YAAI,QAAQ,MAAM,WAAW,IAAI,MAAM,GAAG;AACxC,cAAI,UAAU,GAAI,SAAQ;AAAA,QAC5B,WACE,MAAM,MACL,SAAS,MAAkB,SAAS,IACrC;AACA,cAAI,QAAQ,MAAM,UAAU,GAAI,OAAM;AAAA,QACxC,WAAW,SAAS,IAAgB;AAClC,cAAI,UAAU,IAAI;AAChB,kBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,UAC5D;AAEA,cAAI,QAAQ,GAAI,OAAM;AAEtB,gBAAMC,YAAW,OAAO,MAAM,OAAO,GAAG;AAExC,cAAI,UAAU,IAAIA,SAAQ,GAAG;AAC3B,kBAAM,IAAI,YAAY,QAAQA,SAAQ,6BAA6B;AAAA,UACrE;AAEA,oBAAU,IAAIA,SAAQ;AACtB,kBAAQ,MAAM;AAAA,QAChB,OAAO;AACL,gBAAM,IAAI,YAAY,iCAAiC,CAAC,EAAE;AAAA,QAC5D;AAAA,MACF;AAEA,UAAI,UAAU,MAAM,QAAQ,IAAI;AAC9B,cAAM,IAAI,YAAY,yBAAyB;AAAA,MACjD;AAEA,YAAM,WAAW,OAAO,MAAM,OAAO,CAAC;AAEtC,UAAI,UAAU,IAAI,QAAQ,GAAG;AAC3B,cAAM,IAAI,YAAY,QAAQ,QAAQ,6BAA6B;AAAA,MACrE;AAEA,gBAAU,IAAI,QAAQ;AACtB,aAAO;AAAA,IACT;AAEA,IAAAD,QAAO,UAAU,EAAE,MAAM;AAAA;AAAA;;;AC7DzB;AAAA,4CAAAE,UAAAC,SAAA;AAAA;AAIA,QAAM,eAAe,QAAQ,QAAQ;AACrC,QAAMC,QAAO,QAAQ,MAAM;AAC3B,QAAM,EAAE,OAAO,IAAI,QAAQ,QAAQ;AACnC,QAAM,EAAE,YAAAC,YAAW,IAAI,QAAQ,QAAQ;AAEvC,QAAM,YAAY;AAClB,QAAM,oBAAoB;AAC1B,QAAM,cAAc;AACpB,QAAMC,aAAY;AAClB,QAAM,EAAE,MAAM,WAAW,IAAI;AAE7B,QAAM,WAAW;AAEjB,QAAM,UAAU;AAChB,QAAM,UAAU;AAChB,QAAM,SAAS;AAOf,QAAMC,mBAAN,cAA8B,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAgCzC,YAAY,SAAS,UAAU;AAC7B,cAAM;AAEN,kBAAU;AAAA,UACR,wBAAwB;AAAA,UACxB,UAAU;AAAA,UACV,YAAY,MAAM,OAAO;AAAA,UACzB,oBAAoB;AAAA,UACpB,mBAAmB;AAAA,UACnB,iBAAiB;AAAA,UACjB,gBAAgB;AAAA,UAChB,cAAc;AAAA,UACd,UAAU;AAAA,UACV,SAAS;AAAA;AAAA,UACT,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAAD;AAAA,UACA,GAAG;AAAA,QACL;AAEA,YACG,QAAQ,QAAQ,QAAQ,CAAC,QAAQ,UAAU,CAAC,QAAQ,YACpD,QAAQ,QAAQ,SAAS,QAAQ,UAAU,QAAQ,aACnD,QAAQ,UAAU,QAAQ,UAC3B;AACA,gBAAM,IAAI;AAAA,YACR;AAAA,UAEF;AAAA,QACF;AAEA,YAAI,QAAQ,QAAQ,MAAM;AACxB,eAAK,UAAUF,MAAK,aAAa,CAAC,KAAK,QAAQ;AAC7C,kBAAM,OAAOA,MAAK,aAAa,GAAG;AAElC,gBAAI,UAAU,KAAK;AAAA,cACjB,kBAAkB,KAAK;AAAA,cACvB,gBAAgB;AAAA,YAClB,CAAC;AACD,gBAAI,IAAI,IAAI;AAAA,UACd,CAAC;AACD,eAAK,QAAQ;AAAA,YACX,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR;AAAA,UACF;AAAA,QACF,WAAW,QAAQ,QAAQ;AACzB,eAAK,UAAU,QAAQ;AAAA,QACzB;AAEA,YAAI,KAAK,SAAS;AAChB,gBAAM,iBAAiB,KAAK,KAAK,KAAK,MAAM,YAAY;AAExD,eAAK,mBAAmB,aAAa,KAAK,SAAS;AAAA,YACjD,WAAW,KAAK,KAAK,KAAK,MAAM,WAAW;AAAA,YAC3C,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO;AAAA,YACnC,SAAS,CAAC,KAAK,QAAQ,SAAS;AAC9B,mBAAK,cAAc,KAAK,QAAQ,MAAM,cAAc;AAAA,YACtD;AAAA,UACF,CAAC;AAAA,QACH;AAEA,YAAI,QAAQ,sBAAsB,KAAM,SAAQ,oBAAoB,CAAC;AACrE,YAAI,QAAQ,gBAAgB;AAC1B,eAAK,UAAU,oBAAI,IAAI;AACvB,eAAK,mBAAmB;AAAA,QAC1B;AAEA,aAAK,UAAU;AACf,aAAK,SAAS;AAAA,MAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,UAAU;AACR,YAAI,KAAK,QAAQ,UAAU;AACzB,gBAAM,IAAI,MAAM,4CAA4C;AAAA,QAC9D;AAEA,YAAI,CAAC,KAAK,QAAS,QAAO;AAC1B,eAAO,KAAK,QAAQ,QAAQ;AAAA,MAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,MAAM,IAAI;AACR,YAAI,KAAK,WAAW,QAAQ;AAC1B,cAAI,IAAI;AACN,iBAAK,KAAK,SAAS,MAAM;AACvB,iBAAG,IAAI,MAAM,2BAA2B,CAAC;AAAA,YAC3C,CAAC;AAAA,UACH;AAEA,kBAAQ,SAAS,WAAW,IAAI;AAChC;AAAA,QACF;AAEA,YAAI,GAAI,MAAK,KAAK,SAAS,EAAE;AAE7B,YAAI,KAAK,WAAW,QAAS;AAC7B,aAAK,SAAS;AAEd,YAAI,KAAK,QAAQ,YAAY,KAAK,QAAQ,QAAQ;AAChD,cAAI,KAAK,SAAS;AAChB,iBAAK,iBAAiB;AACtB,iBAAK,mBAAmB,KAAK,UAAU;AAAA,UACzC;AAEA,cAAI,KAAK,SAAS;AAChB,gBAAI,CAAC,KAAK,QAAQ,MAAM;AACtB,sBAAQ,SAAS,WAAW,IAAI;AAAA,YAClC,OAAO;AACL,mBAAK,mBAAmB;AAAA,YAC1B;AAAA,UACF,OAAO;AACL,oBAAQ,SAAS,WAAW,IAAI;AAAA,UAClC;AAAA,QACF,OAAO;AACL,gBAAM,SAAS,KAAK;AAEpB,eAAK,iBAAiB;AACtB,eAAK,mBAAmB,KAAK,UAAU;AAMvC,iBAAO,MAAM,MAAM;AACjB,sBAAU,IAAI;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MASA,aAAa,KAAK;AAChB,YAAI,KAAK,QAAQ,MAAM;AACrB,gBAAM,QAAQ,IAAI,IAAI,QAAQ,GAAG;AACjC,gBAAM,WAAW,UAAU,KAAK,IAAI,IAAI,MAAM,GAAG,KAAK,IAAI,IAAI;AAE9D,cAAI,aAAa,KAAK,QAAQ,KAAM,QAAO;AAAA,QAC7C;AAEA,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAWA,cAAc,KAAK,QAAQ,MAAM,IAAI;AACnC,eAAO,GAAG,SAAS,aAAa;AAEhC,cAAM,MAAM,IAAI,QAAQ,mBAAmB;AAC3C,cAAM,UAAU,IAAI,QAAQ;AAC5B,cAAMI,WAAU,CAAC,IAAI,QAAQ,uBAAuB;AAEpD,YAAI,IAAI,WAAW,OAAO;AACxB,gBAAM,UAAU;AAChB,4CAAkC,MAAM,KAAK,QAAQ,KAAK,OAAO;AACjE;AAAA,QACF;AAEA,YAAI,YAAY,UAAa,QAAQ,YAAY,MAAM,aAAa;AAClE,gBAAM,UAAU;AAChB,4CAAkC,MAAM,KAAK,QAAQ,KAAK,OAAO;AACjE;AAAA,QACF;AAEA,YAAI,QAAQ,UAAa,CAAC,SAAS,KAAK,GAAG,GAAG;AAC5C,gBAAM,UAAU;AAChB,4CAAkC,MAAM,KAAK,QAAQ,KAAK,OAAO;AACjE;AAAA,QACF;AAEA,YAAIA,aAAY,KAAKA,aAAY,IAAI;AACnC,gBAAM,UAAU;AAChB,4CAAkC,MAAM,KAAK,QAAQ,KAAK,OAAO;AACjE;AAAA,QACF;AAEA,YAAI,CAAC,KAAK,aAAa,GAAG,GAAG;AAC3B,yBAAe,QAAQ,GAAG;AAC1B;AAAA,QACF;AAEA,cAAM,uBAAuB,IAAI,QAAQ,wBAAwB;AACjE,YAAI,YAAY,oBAAI,IAAI;AAExB,YAAI,yBAAyB,QAAW;AACtC,cAAI;AACF,wBAAY,YAAY,MAAM,oBAAoB;AAAA,UACpD,SAAS,KAAK;AACZ,kBAAM,UAAU;AAChB,8CAAkC,MAAM,KAAK,QAAQ,KAAK,OAAO;AACjE;AAAA,UACF;AAAA,QACF;AAEA,cAAM,yBAAyB,IAAI,QAAQ,0BAA0B;AACrE,cAAM,aAAa,CAAC;AAEpB,YACE,KAAK,QAAQ,qBACb,2BAA2B,QAC3B;AACA,gBAAM,oBAAoB,IAAI;AAAA,YAC5B,KAAK,QAAQ;AAAA,YACb;AAAA,YACA,KAAK,QAAQ;AAAA,UACf;AAEA,cAAI;AACF,kBAAM,SAAS,UAAU,MAAM,sBAAsB;AAErD,gBAAI,OAAO,kBAAkB,aAAa,GAAG;AAC3C,gCAAkB,OAAO,OAAO,kBAAkB,aAAa,CAAC;AAChE,yBAAW,kBAAkB,aAAa,IAAI;AAAA,YAChD;AAAA,UACF,SAAS,KAAK;AACZ,kBAAM,UACJ;AACF,8CAAkC,MAAM,KAAK,QAAQ,KAAK,OAAO;AACjE;AAAA,UACF;AAAA,QACF;AAKA,YAAI,KAAK,QAAQ,cAAc;AAC7B,gBAAM,OAAO;AAAA,YACX,QACE,IAAI,QAAQ,GAAGA,aAAY,IAAI,yBAAyB,QAAQ,EAAE;AAAA,YACpE,QAAQ,CAAC,EAAE,IAAI,OAAO,cAAc,IAAI,OAAO;AAAA,YAC/C;AAAA,UACF;AAEA,cAAI,KAAK,QAAQ,aAAa,WAAW,GAAG;AAC1C,iBAAK,QAAQ,aAAa,MAAM,CAAC,UAAU,MAAM,SAAS,YAAY;AACpE,kBAAI,CAAC,UAAU;AACb,uBAAO,eAAe,QAAQ,QAAQ,KAAK,SAAS,OAAO;AAAA,cAC7D;AAEA,mBAAK;AAAA,gBACH;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA,YACF,CAAC;AACD;AAAA,UACF;AAEA,cAAI,CAAC,KAAK,QAAQ,aAAa,IAAI,EAAG,QAAO,eAAe,QAAQ,GAAG;AAAA,QACzE;AAEA,aAAK,gBAAgB,YAAY,KAAK,WAAW,KAAK,QAAQ,MAAM,EAAE;AAAA,MACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAeA,gBAAgB,YAAY,KAAK,WAAW,KAAK,QAAQ,MAAM,IAAI;AAIjE,YAAI,CAAC,OAAO,YAAY,CAAC,OAAO,SAAU,QAAO,OAAO,QAAQ;AAEhE,YAAI,OAAO,UAAU,GAAG;AACtB,gBAAM,IAAI;AAAA,YACR;AAAA,UAEF;AAAA,QACF;AAEA,YAAI,KAAK,SAAS,QAAS,QAAO,eAAe,QAAQ,GAAG;AAE5D,cAAM,SAASH,YAAW,MAAM,EAC7B,OAAO,MAAM,IAAI,EACjB,OAAO,QAAQ;AAElB,cAAM,UAAU;AAAA,UACd;AAAA,UACA;AAAA,UACA;AAAA,UACA,yBAAyB,MAAM;AAAA,QACjC;AAEA,cAAM,KAAK,IAAI,KAAK,QAAQ,UAAU,MAAM,QAAW,KAAK,OAAO;AAEnE,YAAI,UAAU,MAAM;AAIlB,gBAAM,WAAW,KAAK,QAAQ,kBAC1B,KAAK,QAAQ,gBAAgB,WAAW,GAAG,IAC3C,UAAU,OAAO,EAAE,KAAK,EAAE;AAE9B,cAAI,UAAU;AACZ,oBAAQ,KAAK,2BAA2B,QAAQ,EAAE;AAClD,eAAG,YAAY;AAAA,UACjB;AAAA,QACF;AAEA,YAAI,WAAW,kBAAkB,aAAa,GAAG;AAC/C,gBAAM,SAAS,WAAW,kBAAkB,aAAa,EAAE;AAC3D,gBAAM,QAAQ,UAAU,OAAO;AAAA,YAC7B,CAAC,kBAAkB,aAAa,GAAG,CAAC,MAAM;AAAA,UAC5C,CAAC;AACD,kBAAQ,KAAK,6BAA6B,KAAK,EAAE;AACjD,aAAG,cAAc;AAAA,QACnB;AAKA,aAAK,KAAK,WAAW,SAAS,GAAG;AAEjC,eAAO,MAAM,QAAQ,OAAO,MAAM,EAAE,KAAK,MAAM,CAAC;AAChD,eAAO,eAAe,SAAS,aAAa;AAE5C,WAAG,UAAU,QAAQ,MAAM;AAAA,UACzB,wBAAwB,KAAK,QAAQ;AAAA,UACrC,YAAY,KAAK,QAAQ;AAAA,UACzB,oBAAoB,KAAK,QAAQ;AAAA,QACnC,CAAC;AAED,YAAI,KAAK,SAAS;AAChB,eAAK,QAAQ,IAAI,EAAE;AACnB,aAAG,GAAG,SAAS,MAAM;AACnB,iBAAK,QAAQ,OAAO,EAAE;AAEtB,gBAAI,KAAK,oBAAoB,CAAC,KAAK,QAAQ,MAAM;AAC/C,sBAAQ,SAAS,WAAW,IAAI;AAAA,YAClC;AAAA,UACF,CAAC;AAAA,QACH;AAEA,WAAG,IAAI,GAAG;AAAA,MACZ;AAAA,IACF;AAEA,IAAAF,QAAO,UAAUI;AAYjB,aAAS,aAAa,QAAQ,KAAK;AACjC,iBAAW,SAAS,OAAO,KAAK,GAAG,EAAG,QAAO,GAAG,OAAO,IAAI,KAAK,CAAC;AAEjE,aAAO,SAAS,kBAAkB;AAChC,mBAAW,SAAS,OAAO,KAAK,GAAG,GAAG;AACpC,iBAAO,eAAe,OAAO,IAAI,KAAK,CAAC;AAAA,QACzC;AAAA,MACF;AAAA,IACF;AAQA,aAAS,UAAU,QAAQ;AACzB,aAAO,SAAS;AAChB,aAAO,KAAK,OAAO;AAAA,IACrB;AAOA,aAAS,gBAAgB;AACvB,WAAK,QAAQ;AAAA,IACf;AAWA,aAAS,eAAe,QAAQ,MAAM,SAAS,SAAS;AAStD,gBAAU,WAAWH,MAAK,aAAa,IAAI;AAC3C,gBAAU;AAAA,QACR,YAAY;AAAA,QACZ,gBAAgB;AAAA,QAChB,kBAAkB,OAAO,WAAW,OAAO;AAAA,QAC3C,GAAG;AAAA,MACL;AAEA,aAAO,KAAK,UAAU,OAAO,OAAO;AAEpC,aAAO;AAAA,QACL,YAAY,IAAI,IAAIA,MAAK,aAAa,IAAI,CAAC;AAAA,IACzC,OAAO,KAAK,OAAO,EAChB,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,EAAE,EAChC,KAAK,MAAM,IACd,aACA;AAAA,MACJ;AAAA,IACF;AAaA,aAAS,kCAAkC,QAAQ,KAAK,QAAQ,MAAM,SAAS;AAC7E,UAAI,OAAO,cAAc,eAAe,GAAG;AACzC,cAAM,MAAM,IAAI,MAAM,OAAO;AAC7B,cAAM,kBAAkB,KAAK,iCAAiC;AAE9D,eAAO,KAAK,iBAAiB,KAAK,QAAQ,GAAG;AAAA,MAC/C,OAAO;AACL,uBAAe,QAAQ,MAAM,OAAO;AAAA,MACtC;AAAA,IACF;AAAA;AAAA;;;AC3hBA;AAAA,0CAAAK,UAAA;AAAA;AA2BA,QAAM,oBAAoB;AAC1B,QAAM,wBAAN,MAAM,uBAAsB;AAAA,MACxB,OAAO,cAAcC,OAAM;AACvB,eAAO,OAAO,UAAU,SAAS,KAAKA,KAAI,MAAM;AAAA,MACpD;AAAA,MACA,OAAO,cAAcA,OAAM;AACvB,YAAI,KAAK,cAAcA,KAAI,GAAG;AAC1B,iBAAOA;AAAA,QACX;AACA,YAAIA,MAAK,eAAeA,MAAK,OAAO,YAAY;AAC5C,iBAAOA,MAAK;AAAA,QAChB;AACA,YAAIA,MAAK,eAAe,KAAKA,MAAK,eAAeA,MAAK,OAAO,YAAY;AACrE,iBAAOA,MAAK;AAAA,QAChB;AACA,eAAO,KAAK,aAAaA,MAAK,MAAM,EAC/B,MAAMA,MAAK,YAAYA,MAAK,aAAaA,MAAK,UAAU,EACxD;AAAA,MACT;AAAA,MACA,OAAO,aAAaA,OAAM;AACtB,eAAO,KAAK,OAAOA,OAAM,UAAU;AAAA,MACvC;AAAA,MACA,OAAO,OAAOA,OAAM,MAAM;AACtB,YAAIA,MAAK,gBAAgB,MAAM;AAC3B,iBAAOA;AAAA,QACX;AACA,YAAI,KAAK,cAAcA,KAAI,GAAG;AAC1B,iBAAO,IAAI,KAAKA,KAAI;AAAA,QACxB;AACA,YAAI,KAAK,kBAAkBA,KAAI,GAAG;AAC9B,iBAAO,IAAI,KAAKA,MAAK,QAAQA,MAAK,YAAYA,MAAK,UAAU;AAAA,QACjE;AACA,cAAM,IAAI,UAAU,sEAAsE;AAAA,MAC9F;AAAA,MACA,OAAO,eAAeA,OAAM;AACxB,eAAO,KAAK,kBAAkBA,KAAI,KAC3B,KAAK,cAAcA,KAAI;AAAA,MAClC;AAAA,MACA,OAAO,kBAAkBA,OAAM;AAC3B,eAAO,YAAY,OAAOA,KAAI,KACtBA,SAAQ,KAAK,cAAcA,MAAK,MAAM;AAAA,MAClD;AAAA,MACA,OAAO,QAAQ,GAAGC,IAAG;AACjB,cAAM,QAAQ,uBAAsB,aAAa,CAAC;AAClD,cAAM,QAAQ,uBAAsB,aAAaA,EAAC;AAClD,YAAI,MAAM,WAAW,MAAM,YAAY;AACnC,iBAAO;AAAA,QACX;AACA,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,cAAI,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG;AACvB,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,OAAO,UAAU,MAAM;AACnB,YAAI;AACJ,YAAI,MAAM,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,aAAa,WAAW;AAC1D,oBAAU,KAAK,CAAC;AAAA,QACpB,WACS,MAAM,QAAQ,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,aAAa,UAAU;AAC5D,oBAAU,KAAK,CAAC;AAAA,QACpB,OACK;AACD,cAAI,KAAK,KAAK,SAAS,CAAC,aAAa,UAAU;AAC3C,sBAAU,KAAK,MAAM,GAAG,KAAK,SAAS,CAAC;AAAA,UAC3C,OACK;AACD,sBAAU;AAAA,UACd;AAAA,QACJ;AACA,YAAI,OAAO;AACX,mBAAW,UAAU,SAAS;AAC1B,kBAAQ,OAAO;AAAA,QACnB;AACA,cAAM,MAAM,IAAI,WAAW,IAAI;AAC/B,YAAI,SAAS;AACb,mBAAW,UAAU,SAAS;AAC1B,gBAAM,OAAO,KAAK,aAAa,MAAM;AACrC,cAAI,IAAI,MAAM,MAAM;AACpB,oBAAU,KAAK;AAAA,QACnB;AACA,YAAI,KAAK,KAAK,SAAS,CAAC,aAAa,UAAU;AAC3C,iBAAO,KAAK,OAAO,KAAK,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,QACjD;AACA,eAAO,IAAI;AAAA,MACf;AAAA,IACJ;AAEA,QAAM,cAAc;AACpB,QAAM,YAAY;AAClB,QAAM,eAAe;AACrB,QAAM,kBAAkB;AACxB,QAAM,gBAAN,MAAoB;AAAA,MAChB,OAAO,WAAW,MAAM;AACpB,cAAM,IAAI,SAAS,mBAAmB,IAAI,CAAC;AAC3C,cAAM,YAAY,IAAI,WAAW,EAAE,MAAM;AACzC,iBAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAC/B,oBAAU,CAAC,IAAI,EAAE,WAAW,CAAC;AAAA,QACjC;AACA,eAAO,UAAU;AAAA,MACrB;AAAA,MACA,OAAO,SAAS,QAAQ;AACpB,cAAM,MAAM,sBAAsB,aAAa,MAAM;AACrD,YAAI,gBAAgB;AACpB,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,2BAAiB,OAAO,aAAa,IAAI,CAAC,CAAC;AAAA,QAC/C;AACA,cAAM,gBAAgB,mBAAmB,OAAO,aAAa,CAAC;AAC9D,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAM,iBAAN,MAAqB;AAAA,MACjB,OAAO,SAAS,QAAQ,eAAe,OAAO;AAC1C,cAAM,cAAc,sBAAsB,cAAc,MAAM;AAC9D,cAAM,WAAW,IAAI,SAAS,WAAW;AACzC,YAAI,MAAM;AACV,iBAAS,IAAI,GAAG,IAAI,YAAY,YAAY,KAAK,GAAG;AAChD,gBAAM,OAAO,SAAS,UAAU,GAAG,YAAY;AAC/C,iBAAO,OAAO,aAAa,IAAI;AAAA,QACnC;AACA,eAAO;AAAA,MACX;AAAA,MACA,OAAO,WAAW,MAAM,eAAe,OAAO;AAC1C,cAAM,MAAM,IAAI,YAAY,KAAK,SAAS,CAAC;AAC3C,cAAM,WAAW,IAAI,SAAS,GAAG;AACjC,iBAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,mBAAS,UAAU,IAAI,GAAG,KAAK,WAAW,CAAC,GAAG,YAAY;AAAA,QAC9D;AACA,eAAO;AAAA,MACX;AAAA,IACJ;AACA,QAAM,UAAN,MAAM,SAAQ;AAAA,MACV,OAAO,MAAMD,OAAM;AACf,eAAO,OAAOA,UAAS,eAChB,UAAU,KAAKA,KAAI;AAAA,MAC9B;AAAA,MACA,OAAO,SAASA,OAAM;AAClB,eAAO,OAAOA,UAAS,eAChB,aAAa,KAAKA,KAAI;AAAA,MACjC;AAAA,MACA,OAAO,YAAYA,OAAM;AACrB,eAAO,OAAOA,UAAS,eAChB,gBAAgB,KAAKA,KAAI;AAAA,MACpC;AAAA,MACA,OAAO,SAAS,QAAQ,MAAM,QAAQ;AAClC,cAAM,MAAM,sBAAsB,aAAa,MAAM;AACrD,gBAAQ,IAAI,YAAY,GAAG;AAAA,UACvB,KAAK;AACD,mBAAO,KAAK,aAAa,GAAG;AAAA,UAChC,KAAK;AACD,mBAAO,KAAK,SAAS,GAAG;AAAA,UAC5B,KAAK;AACD,mBAAO,KAAK,MAAM,GAAG;AAAA,UACzB,KAAK;AACD,mBAAO,KAAK,SAAS,GAAG;AAAA,UAC5B,KAAK;AACD,mBAAO,KAAK,YAAY,GAAG;AAAA,UAC/B,KAAK;AACD,mBAAO,eAAe,SAAS,KAAK,IAAI;AAAA,UAC5C,KAAK;AAAA,UACL,KAAK;AACD,mBAAO,eAAe,SAAS,GAAG;AAAA,UACtC;AACI,kBAAM,IAAI,MAAM,6BAA6B,GAAG,GAAG;AAAA,QAC3D;AAAA,MACJ;AAAA,MACA,OAAO,WAAW,KAAK,MAAM,QAAQ;AACjC,YAAI,CAAC,KAAK;AACN,iBAAO,IAAI,YAAY,CAAC;AAAA,QAC5B;AACA,gBAAQ,IAAI,YAAY,GAAG;AAAA,UACvB,KAAK;AACD,mBAAO,KAAK,eAAe,GAAG;AAAA,UAClC,KAAK;AACD,mBAAO,KAAK,WAAW,GAAG;AAAA,UAC9B,KAAK;AACD,mBAAO,KAAK,QAAQ,GAAG;AAAA,UAC3B,KAAK;AACD,mBAAO,KAAK,WAAW,GAAG;AAAA,UAC9B,KAAK;AACD,mBAAO,KAAK,cAAc,GAAG;AAAA,UACjC,KAAK;AACD,mBAAO,eAAe,WAAW,KAAK,IAAI;AAAA,UAC9C,KAAK;AAAA,UACL,KAAK;AACD,mBAAO,eAAe,WAAW,GAAG;AAAA,UACxC;AACI,kBAAM,IAAI,MAAM,6BAA6B,GAAG,GAAG;AAAA,QAC3D;AAAA,MACJ;AAAA,MACA,OAAO,SAAS,QAAQ;AACpB,cAAM,MAAM,sBAAsB,aAAa,MAAM;AACrD,YAAI,OAAO,SAAS,aAAa;AAC7B,gBAAM,SAAS,KAAK,SAAS,KAAK,QAAQ;AAC1C,iBAAO,KAAK,MAAM;AAAA,QACtB,OACK;AACD,iBAAO,OAAO,KAAK,GAAG,EAAE,SAAS,QAAQ;AAAA,QAC7C;AAAA,MACJ;AAAA,MACA,OAAO,WAAW,QAAQ;AACtB,cAAM,YAAY,KAAK,aAAa,MAAM;AAC1C,YAAI,CAAC,WAAW;AACZ,iBAAO,IAAI,YAAY,CAAC;AAAA,QAC5B;AACA,YAAI,CAAC,SAAQ,SAAS,SAAS,GAAG;AAC9B,gBAAM,IAAI,UAAU,6CAA6C;AAAA,QACrE;AACA,YAAI,OAAO,SAAS,aAAa;AAC7B,iBAAO,KAAK,WAAW,KAAK,SAAS,CAAC;AAAA,QAC1C,OACK;AACD,iBAAO,IAAI,WAAW,OAAO,KAAK,WAAW,QAAQ,CAAC,EAAE;AAAA,QAC5D;AAAA,MACJ;AAAA,MACA,OAAO,cAAc,WAAW;AAC5B,cAAM,YAAY,KAAK,aAAa,SAAS;AAC7C,YAAI,CAAC,WAAW;AACZ,iBAAO,IAAI,YAAY,CAAC;AAAA,QAC5B;AACA,YAAI,CAAC,SAAQ,YAAY,SAAS,GAAG;AACjC,gBAAM,IAAI,UAAU,+CAA+C;AAAA,QACvE;AACA,eAAO,KAAK,WAAW,KAAK,cAAc,UAAU,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,CAAC,CAAC;AAAA,MAChG;AAAA,MACA,OAAO,YAAYA,OAAM;AACrB,eAAO,KAAK,SAASA,KAAI,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAAA,MACxF;AAAA,MACA,OAAO,eAAe,MAAM,WAAW,SAAQ,uBAAuB;AAClE,gBAAQ,UAAU;AAAA,UACd,KAAK;AACD,mBAAO,KAAK,WAAW,IAAI;AAAA,UAC/B,KAAK;AACD,mBAAO,cAAc,WAAW,IAAI;AAAA,UACxC,KAAK;AAAA,UACL,KAAK;AACD,mBAAO,eAAe,WAAW,IAAI;AAAA,UACzC,KAAK;AAAA,UACL,KAAK;AACD,mBAAO,eAAe,WAAW,MAAM,IAAI;AAAA,UAC/C;AACI,kBAAM,IAAI,MAAM,6BAA6B,QAAQ,GAAG;AAAA,QAChE;AAAA,MACJ;AAAA,MACA,OAAO,aAAa,QAAQ,WAAW,SAAQ,uBAAuB;AAClE,gBAAQ,UAAU;AAAA,UACd,KAAK;AACD,mBAAO,KAAK,SAAS,MAAM;AAAA,UAC/B,KAAK;AACD,mBAAO,cAAc,SAAS,MAAM;AAAA,UACxC,KAAK;AAAA,UACL,KAAK;AACD,mBAAO,eAAe,SAAS,MAAM;AAAA,UACzC,KAAK;AAAA,UACL,KAAK;AACD,mBAAO,eAAe,SAAS,QAAQ,IAAI;AAAA,UAC/C;AACI,kBAAM,IAAI,MAAM,6BAA6B,QAAQ,GAAG;AAAA,QAChE;AAAA,MACJ;AAAA,MACA,OAAO,WAAW,MAAM;AACpB,cAAM,eAAe,KAAK;AAC1B,cAAM,aAAa,IAAI,WAAW,YAAY;AAC9C,iBAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACnC,qBAAW,CAAC,IAAI,KAAK,WAAW,CAAC;AAAA,QACrC;AACA,eAAO,WAAW;AAAA,MACtB;AAAA,MACA,OAAO,SAAS,QAAQ;AACpB,cAAM,MAAM,sBAAsB,aAAa,MAAM;AACrD,YAAI,MAAM;AACV,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,iBAAO,OAAO,aAAa,IAAI,CAAC,CAAC;AAAA,QACrC;AACA,eAAO;AAAA,MACX;AAAA,MACA,OAAO,MAAM,QAAQ;AACjB,cAAM,MAAM,sBAAsB,aAAa,MAAM;AACrD,YAAI,SAAS;AACb,cAAM,MAAM,IAAI;AAChB,iBAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,gBAAM,OAAO,IAAI,CAAC;AAClB,cAAI,OAAO,IAAI;AACX,sBAAU;AAAA,UACd;AACA,oBAAU,KAAK,SAAS,EAAE;AAAA,QAC9B;AACA,eAAO;AAAA,MACX;AAAA,MACA,OAAO,QAAQ,WAAW;AACtB,YAAI,YAAY,KAAK,aAAa,SAAS;AAC3C,YAAI,CAAC,WAAW;AACZ,iBAAO,IAAI,YAAY,CAAC;AAAA,QAC5B;AACA,YAAI,CAAC,SAAQ,MAAM,SAAS,GAAG;AAC3B,gBAAM,IAAI,UAAU,yCAAyC;AAAA,QACjE;AACA,YAAI,UAAU,SAAS,GAAG;AACtB,sBAAY,IAAI,SAAS;AAAA,QAC7B;AACA,cAAM,MAAM,IAAI,WAAW,UAAU,SAAS,CAAC;AAC/C,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,IAAI,GAAG;AAC7C,gBAAM,IAAI,UAAU,MAAM,GAAG,IAAI,CAAC;AAClC,cAAI,IAAI,CAAC,IAAI,SAAS,GAAG,EAAE;AAAA,QAC/B;AACA,eAAO,IAAI;AAAA,MACf;AAAA,MACA,OAAO,cAAc,QAAQ,eAAe,OAAO;AAC/C,eAAO,eAAe,SAAS,QAAQ,YAAY;AAAA,MACvD;AAAA,MACA,OAAO,gBAAgB,MAAM,eAAe,OAAO;AAC/C,eAAO,eAAe,WAAW,MAAM,YAAY;AAAA,MACvD;AAAA,MACA,OAAO,cAAc,QAAQ;AACzB,cAAM,WAAW,IAAK,OAAO,SAAS;AACtC,YAAI,WAAW,GAAG;AACd,mBAAS,IAAI,GAAG,IAAI,UAAU,KAAK;AAC/B,sBAAU;AAAA,UACd;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,OAAO,aAAaA,OAAM;AACtB,gBAAQA,UAAS,QAAQA,UAAS,SAAS,SAASA,MAAK,QAAQ,cAAc,EAAE,MAAM;AAAA,MAC3F;AAAA,IACJ;AACA,YAAQ,wBAAwB;AAEhC,aAAS,OAAO,WAAW,SAAS;AAChC,YAAM,MAAM,UAAU,CAAC;AACvB,eAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,cAAM,MAAM,UAAU,CAAC;AACvB,mBAAW,QAAQ,KAAK;AACpB,cAAI,IAAI,IAAI,IAAI,IAAI;AAAA,QACxB;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,aAAS,WAAW,KAAK;AACrB,YAAM,kBAAkB,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC,MAAM,QAAQ,OAAO,GAAG;AAC3F,YAAM,MAAM,IAAI,WAAW,eAAe;AAC1C,UAAI,aAAa;AACjB,UAAI,IAAI,CAAC,SAAS,IAAI,WAAW,IAAI,CAAC,EAAE,QAAQ,CAAC,QAAQ;AACrD,mBAAW,SAAS,KAAK;AACrB,cAAI,YAAY,IAAI;AAAA,QACxB;AAAA,MACJ,CAAC;AACD,aAAO,IAAI;AAAA,IACf;AACA,aAAS,QAAQ,QAAQE,SAAQ;AAC7B,UAAI,EAAE,UAAUA,UAAS;AACrB,eAAO;AAAA,MACX;AACA,UAAI,OAAO,eAAeA,QAAO,YAAY;AACzC,eAAO;AAAA,MACX;AACA,YAAM,KAAK,IAAI,WAAW,MAAM;AAChC,YAAM,KAAK,IAAI,WAAWA,OAAM;AAChC,eAAS,IAAI,GAAG,IAAI,OAAO,YAAY,KAAK;AACxC,YAAI,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG;AACjB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AAEA,IAAAH,SAAQ,wBAAwB;AAChC,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,SAAS;AACjB,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,UAAU;AAAA;AAAA;;;AC9YlB;AAAA,wCAAAI,UAAA;AAAA;AAMA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAE5D,aAAS,WAAW,MAAM;AACtB,aAAO,IAAI,KAAK,KAAK,QAAQ,IAAK,KAAK,kBAAkB,IAAI,GAAM;AAAA,IACvE;AACA,aAAS,mBAAmB,YAAY,MAAM,cAAc;AACxD,UAAIC;AACJ,UAAK,sBAAsB,WAAY,OAAO;AAC1C,eAAO;AAAA,MACX;AACA,cAAQA,MAAK,WAAW,IAAI,OAAO,QAAQA,QAAO,SAASA,MAAK;AAAA,IACpE;AACA,aAAS,iBAAiB,aAAa,cAAc,GAAG,cAAe,YAAY,aAAa,aAAc,cAAc,OAAO;AAC/H,UAAI,SAAS;AACb,iBAAW,QAAS,IAAI,WAAW,aAAa,aAAa,WAAW,GAAI;AACxE,cAAM,MAAM,KAAK,SAAS,EAAE,EAAE,YAAY;AAC1C,YAAI,IAAI,WAAW,GAAG;AAClB,oBAAU;AAAA,QACd;AACA,kBAAU;AACV,YAAI,aAAa;AACb,oBAAU;AAAA,QACd;AAAA,MACJ;AACA,aAAO,OAAO,KAAK;AAAA,IACvB;AACA,aAAS,kBAAkB,WAAW,aAAa,aAAa,aAAa;AACzE,UAAI,EAAE,uBAAuB,cAAc;AACvC,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAI,CAAC,YAAY,YAAY;AACzB,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAI,cAAc,GAAG;AACjB,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAI,cAAc,GAAG;AACjB,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAK,YAAY,aAAa,cAAc,cAAe,GAAG;AAC1D,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AACA,aAAS,aAAa,aAAa,WAAW;AAC1C,UAAI,SAAS;AACb,UAAI,YAAY,WAAW,GAAG;AAC1B,eAAO,YAAY,CAAC;AAAA,MACxB;AACA,eAAS,IAAK,YAAY,SAAS,GAAI,KAAK,GAAG,KAAK;AAChD,kBAAU,YAAa,YAAY,SAAS,IAAK,CAAC,IAAI,KAAK,IAAI,GAAG,YAAY,CAAC;AAAA,MACnF;AACA,aAAO;AAAA,IACX;AACA,aAAS,WAAW,OAAO,MAAM,WAAY,IAAK;AAC9C,YAAM,mBAAmB;AACzB,UAAI,gBAAgB;AACpB,UAAI,SAAS;AACb,UAAI,UAAU,KAAK,IAAI,GAAG,IAAI;AAC9B,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,YAAI,QAAQ,SAAS;AACjB,cAAI;AACJ,cAAI,mBAAmB,GAAG;AACtB,qBAAS,IAAI,YAAY,CAAC;AAC1B,qBAAS;AAAA,UACb,OACK;AACD,gBAAI,mBAAmB,GAAG;AACtB,qBAAQ,IAAI,YAAY,CAAC;AAAA,YAC7B;AACA,qBAAS,IAAI,YAAY,gBAAgB;AACzC,qBAAS;AAAA,UACb;AACA,gBAAM,UAAU,IAAI,WAAW,MAAM;AACrC,mBAAS,IAAK,IAAI,GAAI,KAAK,GAAG,KAAK;AAC/B,kBAAM,QAAQ,KAAK,IAAI,GAAG,IAAI,IAAI;AAClC,oBAAQ,SAAS,IAAI,CAAC,IAAI,KAAK,MAAM,gBAAgB,KAAK;AAC1D,6BAAkB,QAAQ,SAAS,IAAI,CAAC,IAAK;AAAA,UACjD;AACA,iBAAO;AAAA,QACX;AACA,mBAAW,KAAK,IAAI,GAAG,IAAI;AAAA,MAC/B;AACA,aAAO,IAAI,YAAY,CAAC;AAAA,IAC5B;AACA,aAAS,iBAAiB,SAAS;AAC/B,UAAI,eAAe;AACnB,UAAI,aAAa;AACjB,iBAAW,UAAU,SAAS;AAC1B,wBAAgB,OAAO;AAAA,MAC3B;AACA,YAAM,SAAS,IAAI,YAAY,YAAY;AAC3C,YAAM,UAAU,IAAI,WAAW,MAAM;AACrC,iBAAW,UAAU,SAAS;AAC1B,gBAAQ,IAAI,IAAI,WAAW,MAAM,GAAG,UAAU;AAC9C,sBAAc,OAAO;AAAA,MACzB;AACA,aAAO;AAAA,IACX;AACA,aAAS,kBAAkB,OAAO;AAC9B,UAAI,eAAe;AACnB,UAAI,aAAa;AACjB,iBAAW,QAAQ,OAAO;AACtB,wBAAgB,KAAK;AAAA,MACzB;AACA,YAAM,SAAS,IAAI,YAAY,YAAY;AAC3C,YAAM,UAAU,IAAI,WAAW,MAAM;AACrC,iBAAW,QAAQ,OAAO;AACtB,gBAAQ,IAAI,MAAM,UAAU;AAC5B,sBAAc,KAAK;AAAA,MACvB;AACA,aAAO;AAAA,IACX;AACA,aAAS,eAAe;AACpB,YAAM,MAAM,IAAI,WAAW,KAAK,QAAQ;AACxC,UAAI,KAAK,SAAS,cAAc,GAAG;AAC/B,cAAM,aAAc,IAAI,CAAC,MAAM,OAAU,IAAI,CAAC,IAAI;AAClD,cAAM,aAAc,IAAI,CAAC,MAAM,MAAW,IAAI,CAAC,IAAI,SAAU;AAC7D,YAAI,cAAc,YAAY;AAC1B,eAAK,SAAS,KAAK,wBAAwB;AAAA,QAC/C;AAAA,MACJ;AACA,YAAM,eAAe,IAAI,YAAY,KAAK,SAAS,UAAU;AAC7D,YAAM,aAAa,IAAI,WAAW,YAAY;AAC9C,eAAS,IAAI,GAAG,IAAI,KAAK,SAAS,YAAY,KAAK;AAC/C,mBAAW,CAAC,IAAI;AAAA,MACpB;AACA,iBAAW,CAAC,IAAK,IAAI,CAAC,IAAI;AAC1B,YAAM,SAAS,aAAa,YAAY,CAAC;AACzC,YAAM,iBAAiB,IAAI,YAAY,KAAK,SAAS,UAAU;AAC/D,YAAM,eAAe,IAAI,WAAW,cAAc;AAClD,eAAS,IAAI,GAAG,IAAI,KAAK,SAAS,YAAY,KAAK;AAC/C,qBAAa,CAAC,IAAI,IAAI,CAAC;AAAA,MAC3B;AACA,mBAAa,CAAC,KAAK;AACnB,YAAM,WAAW,aAAa,cAAc,CAAC;AAC7C,aAAQ,WAAW;AAAA,IACvB;AACA,aAAS,aAAa,OAAO;AACzB,YAAM,WAAY,QAAQ,IAAM,QAAS,KAAO;AAChD,UAAI,SAAS;AACb,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,YAAI,YAAY,QAAQ;AACpB,cAAI,QAAQ,GAAG;AACX,kBAAM,WAAW,SAAS;AAC1B,kBAAMC,UAAS,WAAW,UAAU,GAAG,CAAC;AACxC,kBAAMC,WAAU,IAAI,WAAWD,OAAM;AACrC,YAAAC,SAAQ,CAAC,KAAK;AACd,mBAAOD;AAAA,UACX;AACA,cAAI,SAAS,WAAW,UAAU,GAAG,CAAC;AACtC,cAAI,UAAU,IAAI,WAAW,MAAM;AACnC,cAAI,QAAQ,CAAC,IAAI,KAAM;AACnB,kBAAM,UAAU,OAAO,MAAM,CAAC;AAC9B,kBAAM,WAAW,IAAI,WAAW,OAAO;AACvC,qBAAS,IAAI,YAAY,OAAO,aAAa,CAAC;AAC9C,sBAAU,IAAI,WAAW,MAAM;AAC/B,qBAAS,IAAI,GAAG,IAAI,QAAQ,YAAY,KAAK;AACzC,sBAAQ,IAAI,CAAC,IAAI,SAAS,CAAC;AAAA,YAC/B;AACA,oBAAQ,CAAC,IAAI;AAAA,UACjB;AACA,iBAAO;AAAA,QACX;AACA,kBAAU,KAAK,IAAI,GAAG,CAAC;AAAA,MAC3B;AACA,aAAQ,IAAI,YAAY,CAAC;AAAA,IAC7B;AACA,aAAS,cAAc,cAAc,cAAc;AAC/C,UAAI,aAAa,eAAe,aAAa,YAAY;AACrD,eAAO;AAAA,MACX;AACA,YAAM,QAAQ,IAAI,WAAW,YAAY;AACzC,YAAM,QAAQ,IAAI,WAAW,YAAY;AACzC,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAI,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG;AACvB,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,aAAO;AAAA,IACX;AACA,aAAS,UAAU,aAAa,YAAY;AACxC,YAAM,MAAM,YAAY,SAAS,EAAE;AACnC,UAAI,aAAa,IAAI,QAAQ;AACzB,eAAO;AAAA,MACX;AACA,YAAM,MAAM,aAAa,IAAI;AAC7B,YAAME,WAAU,IAAI,MAAM,GAAG;AAC7B,eAAS,IAAI,GAAG,IAAI,KAAK,KAAK;AAC1B,QAAAA,SAAQ,CAAC,IAAI;AAAA,MACjB;AACA,YAAM,gBAAgBA,SAAQ,KAAK,EAAE;AACrC,aAAO,cAAc,OAAO,GAAG;AAAA,IACnC;AACA,QAAM,iBAAiB;AACvB,QAAM,oBAAoB;AAC1B,aAAS,SAAS,OAAO,iBAAiB,OAAO,cAAc,OAAO,mBAAmB,OAAO;AAC5F,UAAI,IAAI;AACR,UAAI,QAAQ;AACZ,UAAI,QAAQ;AACZ,UAAIC,UAAS;AACb,YAAM,WAAY,iBAAkB,oBAAoB;AACxD,UAAI,kBAAkB;AAClB,YAAI,kBAAkB;AACtB,iBAASC,KAAI,GAAGA,KAAI,MAAM,QAAQA,MAAK;AACnC,cAAI,MAAM,WAAWA,EAAC,MAAM,GAAG;AAC3B,8BAAkBA;AAClB;AAAA,UACJ;AAAA,QACJ;AACA,gBAAQ,MAAM,MAAM,eAAe;AAAA,MACvC;AACA,aAAO,IAAI,MAAM,QAAQ;AACrB,cAAM,OAAO,MAAM,WAAW,GAAG;AACjC,YAAI,KAAK,MAAM,QAAQ;AACnB,kBAAQ;AAAA,QACZ;AACA,cAAM,OAAO,MAAM,WAAW,GAAG;AACjC,YAAI,KAAK,MAAM,QAAQ;AACnB,kBAAQ;AAAA,QACZ;AACA,cAAM,OAAO,MAAM,WAAW,GAAG;AACjC,cAAM,OAAO,QAAQ;AACrB,cAAM,QAAS,OAAO,MAAS,IAAM,QAAQ;AAC7C,YAAI,QAAS,OAAO,OAAS,IAAM,QAAQ;AAC3C,YAAI,OAAO,OAAO;AAClB,YAAI,UAAU,GAAG;AACb,iBAAO,OAAO;AAAA,QAClB,OACK;AACD,cAAI,UAAU,GAAG;AACb,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,YAAI,aAAa;AACb,cAAI,SAAS,IAAI;AACb,YAAAD,WAAU,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC;AAAA,UAC9D,OACK;AACD,gBAAI,SAAS,IAAI;AACb,cAAAA,WAAU,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC;AAAA,YACtF,OACK;AACD,cAAAA,WAAU,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC;AAAA,YAC9G;AAAA,UACJ;AAAA,QACJ,OACK;AACD,UAAAA,WAAU,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,SAAS,OAAO,IAAI,CAAC;AAAA,QAC9G;AAAA,MACJ;AACA,aAAOA;AAAA,IACX;AACA,aAAS,WAAW,OAAO,iBAAiB,OAAO,eAAe,OAAO;AACrE,YAAM,WAAY,iBAAkB,oBAAoB;AACxD,eAAS,QAAQ,UAAU;AACvB,iBAASC,KAAI,GAAGA,KAAI,IAAIA,MAAK;AACzB,cAAI,SAAS,OAAOA,EAAC,MAAM;AACvB,mBAAOA;AAAA,QACf;AACA,eAAO;AAAA,MACX;AACA,eAAS,KAAK,UAAU;AACpB,eAAS,aAAa,KAAM,IAAO;AAAA,MACvC;AACA,UAAI,IAAI;AACR,UAAID,UAAS;AACb,aAAO,IAAI,MAAM,QAAQ;AACrB,cAAM,OAAO,QAAQ,MAAM,OAAO,GAAG,CAAC;AACtC,cAAM,OAAQ,KAAK,MAAM,SAAU,IAAO,QAAQ,MAAM,OAAO,GAAG,CAAC;AACnE,cAAM,OAAQ,KAAK,MAAM,SAAU,IAAO,QAAQ,MAAM,OAAO,GAAG,CAAC;AACnE,cAAM,OAAQ,KAAK,MAAM,SAAU,IAAO,QAAQ,MAAM,OAAO,GAAG,CAAC;AACnE,cAAM,OAAQ,KAAK,IAAI,KAAK,IAAM,KAAK,IAAI,KAAK;AAChD,cAAM,QAAS,KAAK,IAAI,IAAI,OAAS,IAAM,KAAK,IAAI,KAAK;AACzD,cAAM,QAAS,KAAK,IAAI,IAAI,MAAS,IAAK,KAAK,IAAI;AACnD,QAAAA,WAAU,OAAO,aAAa,IAAI;AAClC,YAAI,SAAS,IAAI;AACb,UAAAA,WAAU,OAAO,aAAa,IAAI;AAAA,QACtC;AACA,YAAI,SAAS,IAAI;AACb,UAAAA,WAAU,OAAO,aAAa,IAAI;AAAA,QACtC;AAAA,MACJ;AACA,UAAI,cAAc;AACd,cAAM,eAAeA,QAAO;AAC5B,YAAI,eAAgB;AACpB,iBAASC,KAAK,eAAe,GAAIA,MAAK,GAAGA,MAAK;AAC1C,cAAID,QAAO,WAAWC,EAAC,MAAM,GAAG;AAC5B,2BAAeA;AACf;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,iBAAkB,IAAK;AACvB,UAAAD,UAASA,QAAO,MAAM,GAAG,eAAe,CAAC;AAAA,QAC7C,OACK;AACD,UAAAA,UAAS;AAAA,QACb;AAAA,MACJ;AACA,aAAOA;AAAA,IACX;AACA,aAAS,oBAAoB,QAAQ;AACjC,UAAI,eAAe;AACnB,YAAM,OAAO,IAAI,WAAW,MAAM;AAClC,iBAAW,WAAW,MAAM;AACxB,wBAAgB,OAAO,aAAa,OAAO;AAAA,MAC/C;AACA,aAAO;AAAA,IACX;AACA,aAAS,oBAAoB,KAAK;AAC9B,YAAM,eAAe,IAAI;AACzB,YAAM,eAAe,IAAI,YAAY,YAAY;AACjD,YAAM,aAAa,IAAI,WAAW,YAAY;AAC9C,eAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACnC,mBAAW,CAAC,IAAI,IAAI,WAAW,CAAC;AAAA,MACpC;AACA,aAAO;AAAA,IACX;AACA,QAAM,OAAO,KAAK,IAAI,CAAC;AACvB,aAAS,gBAAgB,QAAQ;AAC7B,YAAM,OAAQ,KAAK,IAAI,MAAM,IAAI;AACjC,YAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,YAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,aAAS,UAAU,QAAS,QAAQ;AAAA,IACxC;AACA,aAAS,WAAWE,SAAQ,YAAY;AACpC,iBAAW,QAAQ,YAAY;AAC3B,eAAOA,QAAO,IAAI;AAAA,MACtB;AAAA,IACJ;AAEA,IAAAP,SAAQ,sBAAsB;AAC9B,IAAAA,SAAQ,mBAAmB;AAC3B,IAAAA,SAAQ,oBAAoB;AAC5B,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,qBAAqB;AAC7B,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,kBAAkB;AAC1B,IAAAA,SAAQ,YAAY;AACpB,IAAAA,SAAQ,sBAAsB;AAC9B,IAAAA,SAAQ,WAAW;AACnB,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,iBAAiB;AACzB,IAAAA,SAAQ,eAAe;AACvB,IAAAA,SAAQ,eAAe;AACvB,IAAAA,SAAQ,eAAe;AACvB,IAAAA,SAAQ,aAAa;AAAA;AAAA;;;ACvWrB,IAAAQ,iBAAA;AAAA,uCAAAC,UAAA;AAAA;AAoCA,WAAO,eAAeA,UAAS,cAAc,EAAE,OAAO,KAAK,CAAC;AAE5D,QAAI,YAAY;AAChB,QAAI,UAAU;AAEd,aAAS,kBAAkB,GAAG;AAC5B,UAAI,KAAK,EAAE,WAAY,QAAO;AAC9B,UAAIC,KAAI,uBAAO,OAAO,IAAI;AAC1B,UAAI,GAAG;AACL,eAAO,KAAK,CAAC,EAAE,QAAQ,SAAU,GAAG;AAClC,cAAI,MAAM,WAAW;AACnB,gBAAI,IAAI,OAAO,yBAAyB,GAAG,CAAC;AAC5C,mBAAO,eAAeA,IAAG,GAAG,EAAE,MAAM,IAAI;AAAA,cACtC,YAAY;AAAA,cACZ,KAAK,WAAY;AAAE,uBAAO,EAAE,CAAC;AAAA,cAAG;AAAA,YAClC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AACA,MAAAA,GAAE,SAAS,IAAI;AACf,aAAO,OAAO,OAAOA,EAAC;AAAA,IACxB;AAEA,QAAI,uBAAoC,kCAAkB,SAAS;AACnE,QAAI,qBAAkC,kCAAkB,OAAO;AAE/D,aAAS,eAAe;AACpB,UAAI,OAAO,WAAW,aAAa;AAC/B,cAAM,IAAI,MAAM,mEAAmE;AAAA,MACvF;AAAA,IACJ;AACA,aAASC,QAAO,SAAS;AACrB,UAAI,eAAe;AACnB,UAAI,aAAa;AACjB,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,cAAM,SAAS,QAAQ,CAAC;AACxB,wBAAgB,OAAO;AAAA,MAC3B;AACA,YAAM,UAAU,IAAI,WAAW,YAAY;AAC3C,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,cAAM,SAAS,QAAQ,CAAC;AACxB,gBAAQ,IAAI,IAAI,WAAW,MAAM,GAAG,UAAU;AAC9C,sBAAc,OAAO;AAAA,MACzB;AACA,aAAO,QAAQ;AAAA,IACnB;AACA,aAAS,kBAAkB,WAAW,aAAa,aAAa,aAAa;AACzE,UAAI,EAAE,uBAAuB,aAAa;AACtC,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAI,CAAC,YAAY,YAAY;AACzB,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAI,cAAc,GAAG;AACjB,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAI,cAAc,GAAG;AACjB,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,UAAK,YAAY,aAAa,cAAc,cAAe,GAAG;AAC1D,kBAAU,QAAQ;AAClB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,QAAM,aAAN,MAAiB;AAAA,MACb,cAAc;AACV,aAAK,QAAQ,CAAC;AAAA,MAClB;AAAA,MACA,MAAM,KAAK;AACP,aAAK,MAAM,KAAK,GAAG;AAAA,MACvB;AAAA,MACA,QAAQ;AACJ,eAAOA,QAAO,KAAK,KAAK;AAAA,MAC5B;AAAA,IACJ;AAEA,QAAM,UAAU,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AACpC,QAAM,eAAe;AACrB,QAAM,OAAO;AACb,QAAM,iBAAiB;AACvB,QAAM,cAAc;AACpB,QAAM,WAAW;AACjB,QAAM,YAAY;AAClB,QAAM,aAAa;AACnB,QAAM,iBAAiB;AACvB,QAAM,WAAW;AACjB,QAAM,SAAS;AACf,QAAM,QAAQ;AACd,QAAM,eAAe;AACrB,QAAM,eAAe,IAAI,YAAY,CAAC;AACtC,QAAM,aAAa,IAAI,WAAW,CAAC;AACnC,QAAM,sBAAsB;AAC5B,QAAM,oBAAoB;AAC1B,QAAM,kBAAkB;AAExB,aAAS,SAAS,WAAW;AACzB,UAAIC;AACJ,aAAOA,MAAK,MAAM,aAAa,UAAU;AAAA,QACjC,eAAe,MAAM;AACjB,cAAIA;AACJ,gBAAM,GAAG,IAAI;AACb,gBAAM,SAAS,KAAK,CAAC,KAAK,CAAC;AAC3B,eAAK,aAAaA,MAAK,OAAO,eAAe,QAAQA,QAAO,SAASA,MAAK;AAC1E,eAAK,eAAe,OAAO,WAAW,qBAAqB,sBAAsB,aAAa,OAAO,QAAQ,IAAI;AAAA,QACrH;AAAA,QACA,IAAI,WAAW;AACX,iBAAO,KAAK,aAAa,MAAM,EAAE;AAAA,QACrC;AAAA,QACA,IAAI,SAAS,OAAO;AAChB,eAAK,eAAe,IAAI,WAAW,KAAK;AAAA,QAC5C;AAAA,QACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,gBAAM,OAAO,uBAAuB,cAAc,IAAI,WAAW,WAAW,IAAI;AAChF,cAAI,CAAC,kBAAkB,MAAM,MAAM,aAAa,WAAW,GAAG;AAC1D,mBAAO;AAAA,UACX;AACA,gBAAM,YAAY,cAAc;AAChC,eAAK,eAAe,KAAK,SAAS,aAAa,SAAS;AACxD,cAAI,CAAC,KAAK,aAAa,QAAQ;AAC3B,iBAAK,SAAS,KAAK,oBAAoB;AACvC,mBAAO;AAAA,UACX;AACA,eAAK,cAAc;AACnB,iBAAO;AAAA,QACX;AAAA,QACA,MAAM,WAAW,OAAO;AACpB,cAAI,CAAC,KAAK,WAAW;AACjB,iBAAK,QAAQ;AACb,mBAAO;AAAA,UACX;AACA,cAAI,UAAU;AACV,mBAAO,IAAI,YAAY,KAAK,aAAa,UAAU;AAAA,UACvD;AACA,iBAAQ,KAAK,aAAa,eAAe,KAAK,aAAa,OAAO,aAC5D,KAAK,aAAa,SAClB,KAAK,aAAa,MAAM,EAAE;AAAA,QACpC;AAAA,QACA,SAAS;AACL,iBAAO;AAAA,YACH,GAAG,MAAM,OAAO;AAAA,YAChB,WAAW,KAAK;AAAA,YAChB,UAAU,qBAAqB,QAAQ,MAAM,KAAK,YAAY;AAAA,UAClE;AAAA,QACJ;AAAA,MACJ,GACAA,IAAG,OAAO,YACVA;AAAA,IACR;AAEA,QAAM,iBAAN,MAAqB;AAAA,MACjB,YAAY,EAAE,cAAc,GAAG,QAAQ,cAAc,WAAW,CAAC,GAAG,oBAAoB,WAAY,IAAI,CAAC,GAAG;AACxG,aAAK,cAAc;AACnB,aAAK,QAAQ;AACb,aAAK,WAAW;AAChB,aAAK,wBAAwB,qBAAqB,sBAAsB,aAAa,iBAAiB;AAAA,MAC1G;AAAA,MACA,OAAO,YAAY;AACf,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,IAAI,oBAAoB;AACpB,eAAO,KAAK,sBAAsB,MAAM,EAAE;AAAA,MAC9C;AAAA,MACA,IAAI,kBAAkB,OAAO;AACzB,aAAK,wBAAwB,IAAI,WAAW,KAAK;AAAA,MACrD;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,WAAW,KAAK,YAAY;AAAA,UAC5B,aAAa,KAAK;AAAA,UAClB,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK;AAAA,UACf,mBAAmB,qBAAqB,QAAQ,MAAM,KAAK,qBAAqB;AAAA,QACpF;AAAA,MACJ;AAAA,IACJ;AACA,mBAAe,OAAO;AAEtB,QAAM,aAAN,cAAyB,eAAe;AAAA,MACpC,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,UAAU,6EAA6E;AAAA,MACjG;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,cAAM,UAAU,6EAA6E;AAAA,MACjG;AAAA,IACJ;AACA,eAAW,OAAO;AAElB,QAAM,2BAAN,cAAuC,SAAS,cAAc,EAAE;AAAA,MAC5D,YAAY,EAAE,UAAU,CAAC,EAAG,IAAI,CAAC,GAAG;AAChC,YAAIA,KAAI,IAAI,IAAI;AAChB,cAAM;AACN,YAAI,SAAS;AACT,eAAK,aAAaA,MAAK,QAAQ,eAAe,QAAQA,QAAO,SAASA,MAAK;AAC3E,eAAK,eAAe,QAAQ,WAAW,qBAAqB,sBAAsB,aAAa,QAAQ,QAAQ,IAAI;AACnH,eAAK,YAAY,KAAK,QAAQ,cAAc,QAAQ,OAAO,SAAS,KAAK;AACzE,eAAK,aAAa,KAAK,QAAQ,eAAe,QAAQ,OAAO,SAAS,KAAK;AAC3E,eAAK,iBAAiB,KAAK,QAAQ,mBAAmB,QAAQ,OAAO,SAAS,KAAK;AAAA,QACvF,OACK;AACD,eAAK,WAAW;AAChB,eAAK,YAAY;AACjB,eAAK,gBAAgB;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,MAAM,WAAW,OAAO;AACpB,YAAI,aAAa;AACjB,gBAAQ,KAAK,UAAU;AAAA,UACnB,KAAK;AACD,0BAAc;AACd;AAAA,UACJ,KAAK;AACD,0BAAc;AACd;AAAA,UACJ,KAAK;AACD,0BAAc;AACd;AAAA,UACJ,KAAK;AACD,0BAAc;AACd;AAAA,UACJ;AACI,iBAAK,QAAQ;AACb,mBAAO;AAAA,QACf;AACA,YAAI,KAAK;AACL,wBAAc;AAClB,YAAI,KAAK,YAAY,MAAM,CAAC,KAAK,WAAW;AACxC,gBAAMC,WAAU,IAAI,WAAW,CAAC;AAChC,cAAI,CAAC,UAAU;AACX,gBAAIC,UAAS,KAAK;AAClB,YAAAA,WAAU;AACV,0BAAcA;AACd,YAAAD,SAAQ,CAAC,IAAI;AAAA,UACjB;AACA,iBAAOA,SAAQ;AAAA,QACnB;AACA,YAAI,CAAC,KAAK,WAAW;AACjB,gBAAM,aAAa,mBAAmB,WAAW,KAAK,WAAW,CAAC;AAClE,gBAAM,cAAc,IAAI,WAAW,UAAU;AAC7C,gBAAM,OAAO,WAAW;AACxB,gBAAMA,WAAU,IAAI,WAAW,OAAO,CAAC;AACvC,UAAAA,SAAQ,CAAC,IAAK,aAAa;AAC3B,cAAI,CAAC,UAAU;AACX,qBAAS,IAAI,GAAG,IAAK,OAAO,GAAI;AAC5B,cAAAA,SAAQ,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI;AACtC,YAAAA,SAAQ,IAAI,IAAI,YAAY,OAAO,CAAC;AAAA,UACxC;AACA,iBAAOA,SAAQ;AAAA,QACnB;AACA,cAAM,UAAU,IAAI,WAAW,KAAK,aAAa,aAAa,CAAC;AAC/D,gBAAQ,CAAC,IAAK,aAAa;AAC3B,YAAI,CAAC,UAAU;AACX,gBAAM,UAAU,KAAK;AACrB,mBAAS,IAAI,GAAG,IAAK,QAAQ,SAAS,GAAI;AACtC,oBAAQ,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI;AAClC,kBAAQ,KAAK,aAAa,UAAU,IAAI,QAAQ,QAAQ,SAAS,CAAC;AAAA,QACtE;AACA,eAAO,QAAQ;AAAA,MACnB;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,YAAY,qBAAqB,sBAAsB,aAAa,WAAW;AACrF,YAAI,CAAC,kBAAkB,MAAM,WAAW,aAAa,WAAW,GAAG;AAC/D,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,UAAU,SAAS,aAAa,cAAc,WAAW;AAC3E,YAAI,UAAU,WAAW,GAAG;AACxB,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,cAAM,eAAe,UAAU,CAAC,IAAI;AACpC,gBAAQ,cAAc;AAAA,UAClB,KAAK;AACD,iBAAK,WAAY;AACjB;AAAA,UACJ,KAAK;AACD,iBAAK,WAAY;AACjB;AAAA,UACJ,KAAK;AACD,iBAAK,WAAY;AACjB;AAAA,UACJ,KAAK;AACD,iBAAK,WAAY;AACjB;AAAA,UACJ;AACI,iBAAK,QAAQ;AACb,mBAAO;AAAA,QACf;AACA,aAAK,iBAAiB,UAAU,CAAC,IAAI,QAAU;AAC/C,aAAK,YAAY;AACjB,cAAM,gBAAgB,UAAU,CAAC,IAAI;AACrC,YAAI,kBAAkB,IAAM;AACxB,eAAK,YAAa;AAClB,eAAK,cAAc;AAAA,QACvB,OACK;AACD,cAAI,QAAQ;AACZ,cAAI,qBAAqB,KAAK,eAAe,IAAI,WAAW,GAAG;AAC/D,cAAI,2BAA2B;AAC/B,iBAAO,UAAU,KAAK,IAAI,KAAM;AAC5B,+BAAmB,QAAQ,CAAC,IAAI,UAAU,KAAK,IAAI;AACnD;AACA,gBAAI,SAAS,UAAU,QAAQ;AAC3B,mBAAK,QAAQ;AACb,qBAAO;AAAA,YACX;AACA,gBAAI,UAAU,0BAA0B;AACpC,0CAA4B;AAC5B,oBAAME,kBAAiB,IAAI,WAAW,wBAAwB;AAC9D,uBAAS,IAAI,GAAG,IAAI,mBAAmB,QAAQ;AAC3C,gBAAAA,gBAAe,CAAC,IAAI,mBAAmB,CAAC;AAC5C,mCAAqB,KAAK,eAAe,IAAI,WAAW,wBAAwB;AAAA,YACpF;AAAA,UACJ;AACA,eAAK,cAAe,QAAQ;AAC5B,6BAAmB,QAAQ,CAAC,IAAI,UAAU,KAAK,IAAI;AACnD,gBAAM,iBAAiB,IAAI,WAAW,KAAK;AAC3C,mBAAS,IAAI,GAAG,IAAI,OAAO;AACvB,2BAAe,CAAC,IAAI,mBAAmB,CAAC;AAC5C,+BAAqB,KAAK,eAAe,IAAI,WAAW,KAAK;AAC7D,6BAAmB,IAAI,cAAc;AACrC,cAAI,KAAK,eAAe;AACpB,iBAAK,YAAY,mBAAmB,aAAa,oBAAoB,CAAC;AAAA,eACrE;AACD,iBAAK,YAAY;AACjB,iBAAK,SAAS,KAAK,wCAAwC;AAAA,UAC/D;AAAA,QACJ;AACA,YAAM,KAAK,aAAa,KACnB,KAAK,eAAgB;AACtB,kBAAQ,KAAK,WAAW;AAAA,YACpB,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AAAA,YACL,KAAK;AACD,mBAAK,QAAQ;AACb,qBAAO;AAAA,UACf;AAAA,QACJ;AACA,eAAQ,cAAc,KAAK;AAAA,MAC/B;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,UAAU,KAAK;AAAA,UACf,WAAW,KAAK;AAAA,UAChB,eAAe,KAAK;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AACA,6BAAyB,OAAO;AAEhC,QAAM,mBAAN,cAA+B,eAAe;AAAA,MAC1C,YAAY,EAAE,WAAW,CAAC,EAAG,IAAI,CAAC,GAAG;AACjC,YAAIH,KAAI,IAAI;AACZ,cAAM;AACN,aAAK,oBAAoBA,MAAK,SAAS,sBAAsB,QAAQA,QAAO,SAASA,MAAK;AAC1F,aAAK,gBAAgB,KAAK,SAAS,kBAAkB,QAAQ,OAAO,SAAS,KAAK;AAClF,aAAK,UAAU,KAAK,SAAS,YAAY,QAAQ,OAAO,SAAS,KAAK;AAAA,MAC1E;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,OAAO,qBAAqB,sBAAsB,aAAa,WAAW;AAChF,YAAI,CAAC,kBAAkB,MAAM,MAAM,aAAa,WAAW,GAAG;AAC1D,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,KAAK,SAAS,aAAa,cAAc,WAAW;AACtE,YAAI,UAAU,WAAW,GAAG;AACxB,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,YAAI,UAAU,CAAC,MAAM,KAAM;AACvB,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,aAAK,mBAAmB,UAAU,CAAC,MAAM;AACzC,YAAI,KAAK,kBAAkB;AACvB,eAAK,cAAc;AACnB,iBAAQ,cAAc,KAAK;AAAA,QAC/B;AACA,aAAK,eAAe,CAAC,EAAE,UAAU,CAAC,IAAI;AACtC,YAAI,KAAK,iBAAiB,OAAO;AAC7B,eAAK,SAAU,UAAU,CAAC;AAC1B,eAAK,cAAc;AACnB,iBAAQ,cAAc,KAAK;AAAA,QAC/B;AACA,cAAM,QAAQ,UAAU,CAAC,IAAI;AAC7B,YAAI,QAAQ,GAAG;AACX,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,YAAK,QAAQ,IAAK,UAAU,QAAQ;AAChC,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,cAAc;AAChC,cAAM,mBAAmB,KAAK,SAAS,WAAW,YAAY,KAAK;AACnE,YAAI,iBAAiB,QAAQ,CAAC,MAAM;AAChC,eAAK,SAAS,KAAK,gCAAgC;AACvD,aAAK,SAAS,mBAAmB,aAAa,kBAAkB,CAAC;AACjE,YAAI,KAAK,gBAAiB,KAAK,UAAU;AACrC,eAAK,SAAS,KAAK,uCAAuC;AAC9D,aAAK,cAAc,QAAQ;AAC3B,eAAQ,cAAc,KAAK;AAAA,MAC/B;AAAA,MACA,MAAM,WAAW,OAAO;AACpB,YAAI;AACJ,YAAI;AACJ,YAAI,KAAK,SAAS;AACd,eAAK,eAAe;AACxB,YAAI,KAAK,kBAAkB;AACvB,mBAAS,IAAI,YAAY,CAAC;AAC1B,cAAI,aAAa,OAAO;AACpB,sBAAU,IAAI,WAAW,MAAM;AAC/B,oBAAQ,CAAC,IAAI;AAAA,UACjB;AACA,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,cAAc;AACnB,gBAAM,aAAa,mBAAmB,WAAW,KAAK,QAAQ,CAAC;AAC/D,cAAI,WAAW,aAAa,KAAK;AAC7B,iBAAK,QAAQ;AACb,mBAAQ;AAAA,UACZ;AACA,mBAAS,IAAI,YAAY,WAAW,aAAa,CAAC;AAClD,cAAI;AACA,mBAAO;AACX,gBAAM,cAAc,IAAI,WAAW,UAAU;AAC7C,oBAAU,IAAI,WAAW,MAAM;AAC/B,kBAAQ,CAAC,IAAI,WAAW,aAAa;AACrC,mBAAS,IAAI,GAAG,IAAI,WAAW,YAAY;AACvC,oBAAQ,IAAI,CAAC,IAAI,YAAY,CAAC;AAClC,iBAAO;AAAA,QACX;AACA,iBAAS,IAAI,YAAY,CAAC;AAC1B,YAAI,aAAa,OAAO;AACpB,oBAAU,IAAI,WAAW,MAAM;AAC/B,kBAAQ,CAAC,IAAI,KAAK;AAAA,QACtB;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,kBAAkB,KAAK;AAAA,UACvB,cAAc,KAAK;AAAA,UACnB,QAAQ,KAAK;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ;AACA,qBAAiB,OAAO;AAExB,QAAM,YAAY,CAAC;AAEnB,QAAM,YAAN,cAAwB,eAAe;AAAA,MACnC,YAAY,EAAE,OAAO,cAAc,WAAW,OAAO,iBAAiB,GAAG,WAAW,IAAI,CAAC,GAAG,gBAAgB;AACxG,cAAM,UAAU;AAChB,aAAK,OAAO;AACZ,aAAK,WAAW;AAChB,YAAI,iBAAiB;AACjB,eAAK,kBAAkB;AAAA,QAC3B;AACA,aAAK,UAAU,IAAI,yBAAyB,UAAU;AACtD,aAAK,WAAW,IAAI,iBAAiB,UAAU;AAC/C,aAAK,aAAa,iBAAiB,IAAI,eAAe,UAAU,IAAI,IAAI,WAAW,UAAU;AAAA,MACjG;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,eAAe,KAAK,WAAW,QAAQ,aAAa,aAAc,KAAK,SAAS,mBAAoB,cAAc,KAAK,SAAS,MAAM;AAC5I,YAAI,iBAAiB,IAAI;AACrB,eAAK,QAAQ,KAAK,WAAW;AAC7B,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,eAAK,eAAe,KAAK,QAAQ;AACrC,YAAI,CAAC,KAAK,SAAS,MAAM;AACrB,eAAK,eAAe,KAAK,SAAS;AACtC,YAAI,CAAC,KAAK,WAAW,MAAM;AACvB,eAAK,eAAe,KAAK,WAAW;AACxC,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,cAAM,UAAU,UAAU,IAAI,WAAW;AACzC,YAAI,CAAC,QAAQ;AACT,gCAAsB,IAAI;AAAA,QAC9B;AACA,cAAM,aAAa,KAAK,QAAQ,MAAM,QAAQ;AAC9C,gBAAQ,MAAM,UAAU;AACxB,YAAI,KAAK,SAAS,kBAAkB;AAChC,kBAAQ,MAAM,IAAI,WAAW,CAAC,GAAI,CAAC,EAAE,MAAM;AAC3C,eAAK,WAAW,MAAM,UAAU,OAAO;AACvC,kBAAQ,MAAM,IAAI,YAAY,CAAC,CAAC;AAAA,QACpC,OACK;AACD,gBAAM,gBAAgB,KAAK,WAAW,MAAM,QAAQ;AACpD,eAAK,SAAS,SAAS,cAAc;AACrC,gBAAM,cAAc,KAAK,SAAS,MAAM,QAAQ;AAChD,kBAAQ,MAAM,WAAW;AACzB,kBAAQ,MAAM,aAAa;AAAA,QAC/B;AACA,YAAI,CAAC,QAAQ;AACT,iBAAO,QAAQ,MAAM;AAAA,QACzB;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,cAAMI,UAAS;AAAA,UACX,GAAG,MAAM,OAAO;AAAA,UAChB,SAAS,KAAK,QAAQ,OAAO;AAAA,UAC7B,UAAU,KAAK,SAAS,OAAO;AAAA,UAC/B,YAAY,KAAK,WAAW,OAAO;AAAA,UACnC,MAAM,KAAK;AAAA,UACX,UAAU,KAAK;AAAA,QACnB;AACA,YAAI,KAAK;AACL,UAAAA,QAAO,kBAAkB,KAAK,gBAAgB,OAAO;AACzD,eAAOA;AAAA,MACX;AAAA,MACA,SAAS,WAAW,SAAS;AACzB,YAAI,aAAa,SAAS;AACtB,iBAAO,KAAK,gBAAgB;AAAA,QAChC;AACA,eAAO,qBAAqB,QAAQ,MAAM,KAAK,MAAM,CAAC;AAAA,MAC1D;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,qBAAqB,QAAQ,MAAM,KAAK,WAAW,qBAAqB,CAAC;AAAA,MAClH;AAAA,MACA,QAAQ,OAAO;AACX,YAAI,SAAS,OAAO;AAChB,iBAAO;AAAA,QACX;AACA,YAAI,EAAE,iBAAiB,KAAK,cAAc;AACtC,iBAAO;AAAA,QACX;AACA,cAAM,UAAU,KAAK,MAAM;AAC3B,cAAM,WAAW,MAAM,MAAM;AAC7B,eAAO,mBAAmB,cAAc,SAAS,QAAQ;AAAA,MAC7D;AAAA,IACJ;AACA,cAAU,OAAO;AACjB,aAAS,sBAAsB,WAAW;AACtC,UAAI,qBAAqB,UAAU,aAAa;AAC5C,mBAAW,SAAS,UAAU,WAAW,OAAO;AAC5C,cAAI,sBAAsB,KAAK,GAAG;AAC9B,sBAAU,SAAS,mBAAmB;AAAA,UAC1C;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,CAAC,CAAC,UAAU,SAAS;AAAA,IAChC;AAEA,QAAM,kBAAN,cAA8B,UAAU;AAAA,MACpC,YAAY,EAAE,QAAQ,cAAc,GAAG,WAAW,IAAI,CAAC,GAAG,sBAAsB;AAC5E,cAAM,YAAY,oBAAoB;AACtC,YAAI,OAAO;AACP,eAAK,WAAW,KAAK;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,WAAW;AACP,eAAO,KAAK,WAAW;AAAA,MAC3B;AAAA,MACA,SAAS,OAAO;AACZ,aAAK,WAAW,QAAQ;AAAA,MAC5B;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,eAAe,KAAK,WAAW,QAAQ,aAAa,aAAc,KAAK,SAAS,mBAAoB,cAAc,KAAK,SAAS,MAAM;AAC5I,YAAI,iBAAiB,IAAI;AACrB,eAAK,QAAQ,KAAK,WAAW;AAC7B,iBAAO;AAAA,QACX;AACA,aAAK,WAAW,KAAK,WAAW,YAAY;AAC5C,YAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,eAAK,eAAe,KAAK,QAAQ;AACrC,YAAI,CAAC,KAAK,SAAS,MAAM;AACrB,eAAK,eAAe,KAAK,SAAS;AACtC,YAAI,CAAC,KAAK,WAAW,MAAM;AACvB,eAAK,eAAe,KAAK,WAAW;AACxC,eAAO;AAAA,MACX;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,OAAO,KAAK,WAAW,KAAK;AAAA,MAC/D;AAAA,IACJ;AACA,oBAAgB,OAAO;AAEvB,QAAM,2BAAN,cAAuC,SAAS,UAAU,EAAE;AAAA,MACxD,YAAY,EAAE,YAAY,MAAM,GAAG,WAAW,IAAI,CAAC,GAAG;AAClD,cAAM,UAAU;AAChB,aAAK,YAAY;AAAA,MACrB;AAAA,IACJ;AACA,6BAAyB,OAAO;AAEhC,QAAI;AACJ,QAAMC,aAAN,cAAwB,UAAU;AAAA,MAC9B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,wBAAwB;AAC1C,aAAK,QAAQ,gBAAgB;AAAA,MACjC;AAAA,IACJ;AACA,WAAOA;AACP,KAAC,MAAM;AACH,gBAAU,YAAY;AAAA,IAC1B,GAAG;AACH,IAAAA,WAAU,OAAO;AAEjB,aAAS,gBAAgB,aAAa,SAAS;AAC3C,UAAI,uBAAuB,SAAS;AAChC,eAAO;AAAA,MACX;AACA,YAAM,YAAY,IAAI,QAAQ;AAC9B,gBAAU,UAAU,YAAY;AAChC,gBAAU,WAAW,YAAY;AACjC,gBAAU,WAAW,YAAY;AACjC,gBAAU,wBAAwB,YAAY;AAC9C,aAAO;AAAA,IACX;AACA,aAAS,aAAa,aAAa,cAAc,GAAG,cAAc,YAAY,QAAQ;AAClF,YAAM,iBAAiB;AACvB,UAAI,eAAe,IAAI,UAAU,CAAC,GAAG,UAAU;AAC/C,YAAM,YAAY,IAAI,eAAe;AACrC,UAAI,CAAC,kBAAkB,WAAW,aAAa,aAAa,WAAW,GAAG;AACtE,qBAAa,QAAQ,UAAU;AAC/B,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,YAAM,YAAY,YAAY,SAAS,aAAa,cAAc,WAAW;AAC7E,UAAI,CAAC,UAAU,QAAQ;AACnB,qBAAa,QAAQ;AACrB,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,eAAe,aAAa,QAAQ,QAAQ,aAAa,aAAa,WAAW;AACrF,UAAI,aAAa,QAAQ,SAAS,QAAQ;AACtC,qBAAa,SAAS,OAAO,aAAa,QAAQ,QAAQ;AAAA,MAC9D;AACA,UAAI,iBAAiB,IAAI;AACrB,qBAAa,QAAQ,aAAa,QAAQ;AAC1C,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,oBAAc;AACd,qBAAe,aAAa,QAAQ;AACpC,qBAAe,aAAa,SAAS,QAAQ,aAAa,aAAa,WAAW;AAClF,UAAI,aAAa,SAAS,SAAS,QAAQ;AACvC,qBAAa,SAAS,OAAO,aAAa,SAAS,QAAQ;AAAA,MAC/D;AACA,UAAI,iBAAiB,IAAI;AACrB,qBAAa,QAAQ,aAAa,SAAS;AAC3C,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,oBAAc;AACd,qBAAe,aAAa,SAAS;AACrC,UAAI,CAAC,aAAa,QAAQ,iBACtB,aAAa,SAAS,kBAAkB;AACxC,qBAAa,QAAQ;AACrB,eAAO;AAAA,UACH,QAAQ;AAAA,UACR,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,cAAc;AAClB,cAAQ,aAAa,QAAQ,UAAU;AAAA,QACnC,KAAK;AACD,cAAK,aAAa,QAAQ,aAAa,MAClC,aAAa,QAAQ,cAAc,OAAQ;AAC5C,yBAAa,QAAQ;AACrB,mBAAO;AAAA,cACH,QAAQ;AAAA,cACR,QAAQ;AAAA,YACZ;AAAA,UACJ;AACA,kBAAQ,aAAa,QAAQ,WAAW;AAAA,YACpC,KAAK;AACD,kBAAK,aAAa,QAAQ,iBACrB,aAAa,SAAS,SAAS,GAAI;AACpC,6BAAa,QAAQ;AACrB,uBAAO;AAAA,kBACH,QAAQ;AAAA,kBACR,QAAQ;AAAA,gBACZ;AAAA,cACJ;AACA,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,2BAAa,QAAQ;AACrB,qBAAO;AAAA,gBACH,QAAQ;AAAA,gBACR,QAAQ;AAAA,cACZ;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,KAAK;AACD,4BAAc,UAAU;AACxB;AAAA,YACJ,SAAS;AACL,oBAAM,YAAY,aAAa,QAAQ,gBACjC,IAAI,UAAU,YAAY,IAC1B,IAAI,UAAU,UAAU;AAC9B,wBAAU,UAAU,aAAa;AACjC,wBAAU,WAAW,aAAa;AAClC,wBAAU,WAAW,aAAa;AAClC,6BAAe;AAAA,YACnB;AAAA,UACJ;AACA;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,SAAS;AACL,wBAAc,aAAa,QAAQ,gBAC7B,UAAU,cACV,UAAU;AAAA,QACpB;AAAA,MACJ;AACA,qBAAe,gBAAgB,cAAc,WAAW;AACxD,qBAAe,aAAa,QAAQ,aAAa,aAAa,aAAa,SAAS,mBAAmB,cAAc,aAAa,SAAS,MAAM;AACjJ,mBAAa,wBAAwB,YAAY,SAAS,gBAAgB,iBAAiB,aAAa,WAAW;AACnH,aAAO;AAAA,QACH,QAAQ;AAAA,QACR,QAAQ;AAAA,MACZ;AAAA,IACJ;AACA,aAAS,QAAQ,aAAa;AAC1B,UAAI,CAAC,YAAY,YAAY;AACzB,cAAM,SAAS,IAAI,UAAU,CAAC,GAAG,UAAU;AAC3C,eAAO,QAAQ;AACf,eAAO;AAAA,UACH,QAAQ;AAAA,UACR;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,aAAa,qBAAqB,sBAAsB,aAAa,WAAW,EAAE,MAAM,GAAG,GAAG,YAAY,UAAU;AAAA,IAC/H;AAEA,aAAS,SAAS,kBAAkB,QAAQ;AACxC,UAAI,kBAAkB;AAClB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AACA,QAAM,6BAAN,cAAyC,WAAW;AAAA,MAChD,YAAY,EAAE,QAAQ,CAAC,GAAG,mBAAmB,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AACtE,cAAM,UAAU;AAChB,aAAK,QAAQ;AACb,aAAK,mBAAmB;AAAA,MAC5B;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,OAAO,qBAAqB,sBAAsB,aAAa,WAAW;AAChF,YAAI,CAAC,kBAAkB,MAAM,MAAM,aAAa,WAAW,GAAG;AAC1D,iBAAO;AAAA,QACX;AACA,aAAK,wBAAwB,KAAK,SAAS,aAAa,cAAc,WAAW;AACjF,YAAI,KAAK,sBAAsB,WAAW,GAAG;AACzC,eAAK,SAAS,KAAK,oBAAoB;AACvC,iBAAO;AAAA,QACX;AACA,YAAI,gBAAgB;AACpB,eAAO,SAAS,KAAK,kBAAkB,WAAW,IAAI,GAAG;AACrD,gBAAM,eAAe,aAAa,MAAM,eAAe,WAAW;AAClE,cAAI,aAAa,WAAW,IAAI;AAC5B,iBAAK,QAAQ,aAAa,OAAO;AACjC,iBAAK,SAAS,OAAO,aAAa,OAAO,QAAQ;AACjD,mBAAO;AAAA,UACX;AACA,0BAAgB,aAAa;AAC7B,eAAK,eAAe,aAAa,OAAO;AACxC,yBAAe,aAAa,OAAO;AACnC,eAAK,MAAM,KAAK,aAAa,MAAM;AACnC,cAAI,KAAK,oBAAoB,aAAa,OAAO,YAAY,SAAS,qBAAqB;AACvF;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,KAAK,kBAAkB;AACvB,cAAI,KAAK,MAAM,KAAK,MAAM,SAAS,CAAC,EAAE,YAAY,SAAS,qBAAqB;AAC5E,iBAAK,MAAM,IAAI;AAAA,UACnB,OACK;AACD,iBAAK,SAAS,KAAK,+BAA+B;AAAA,UACtD;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,cAAM,UAAU,UAAU,IAAI,WAAW;AACzC,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,eAAK,MAAM,CAAC,EAAE,MAAM,UAAU,OAAO;AAAA,QACzC;AACA,YAAI,CAAC,QAAQ;AACT,iBAAO,QAAQ,MAAM;AAAA,QACzB;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,cAAMD,UAAS;AAAA,UACX,GAAG,MAAM,OAAO;AAAA,UAChB,kBAAkB,KAAK;AAAA,UACvB,OAAO,CAAC;AAAA,QACZ;AACA,mBAAW,SAAS,KAAK,OAAO;AAC5B,UAAAA,QAAO,MAAM,KAAK,MAAM,OAAO,CAAC;AAAA,QACpC;AACA,eAAOA;AAAA,MACX;AAAA,IACJ;AACA,+BAA2B,OAAO;AAElC,QAAI;AACJ,QAAM,cAAN,cAA0B,UAAU;AAAA,MAChC,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,0BAA0B;AAC5C,aAAK,QAAQ,gBAAgB;AAAA,MACjC;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,aAAK,WAAW,mBAAmB,KAAK,SAAS;AACjD,cAAM,eAAe,KAAK,WAAW,QAAQ,aAAa,aAAc,KAAK,SAAS,mBAAoB,cAAc,KAAK,SAAS,MAAM;AAC5I,YAAI,iBAAiB,IAAI;AACrB,eAAK,QAAQ,KAAK,WAAW;AAC7B,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,eAAK,eAAe,KAAK,QAAQ;AACrC,YAAI,CAAC,KAAK,SAAS,MAAM;AACrB,eAAK,eAAe,KAAK,SAAS;AACtC,YAAI,CAAC,KAAK,WAAW,MAAM;AACvB,eAAK,eAAe,KAAK,WAAW;AACxC,eAAO;AAAA,MACX;AAAA,MACA,kBAAkB;AACd,cAAM,SAAS,CAAC;AAChB,mBAAW,SAAS,KAAK,WAAW,OAAO;AACvC,iBAAO,KAAK,MAAM,SAAS,OAAO,EAAE,MAAM,IAAI,EAAE,IAAI,OAAK,KAAK,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,QACjF;AACA,cAAM,YAAY,KAAK,QAAQ,aAAa,IACtC,IAAI,KAAK,QAAQ,SAAS,MAC1B,KAAK,YAAY;AACvB,eAAO,OAAO,SACR,GAAG,SAAS;AAAA,EAAO,OAAO,KAAK,IAAI,CAAC,KACpC,GAAG,SAAS;AAAA,MACtB;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,cAAc;AAAA,IAC5B,GAAG;AACH,gBAAY,OAAO;AAEnB,QAAM,8BAAN,cAA0C,WAAW;AAAA,MACjD,QAAQ,aAAa,aAAa,aAAa;AAC3C,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU;AACZ,eAAO;AAAA,MACX;AAAA,IACJ;AACA,gCAA4B,WAAW;AAEvC,QAAI;AACJ,QAAM,eAAN,cAA2B,UAAU;AAAA,MACjC,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,2BAA2B;AAC7C,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,eAAe;AAAA,IAC7B,GAAG;AACH,iBAAa,OAAO;AAEpB,QAAI;AACJ,QAAM,OAAN,cAAmB,UAAU;AAAA,MACzB,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,UAAU;AAC5B,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,KAAK,SAAS,SAAS;AACvB,eAAK,SAAS,KAAK,8CAA8C;AACrE,YAAI,CAAC,KAAK,QAAQ,MAAM;AACpB,eAAK,eAAe,KAAK,QAAQ;AACrC,YAAI,CAAC,KAAK,SAAS,MAAM;AACrB,eAAK,eAAe,KAAK,SAAS;AACtC,aAAK,eAAe;AACpB,YAAK,cAAc,cAAe,YAAY,YAAY;AACtD,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,eAAQ,cAAc;AAAA,MAC1B;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,cAAM,SAAS,IAAI,YAAY,CAAC;AAChC,YAAI,CAAC,UAAU;AACX,gBAAM,UAAU,IAAI,WAAW,MAAM;AACrC,kBAAQ,CAAC,IAAI;AACb,kBAAQ,CAAC,IAAI;AAAA,QACjB;AACA,YAAI,QAAQ;AACR,iBAAO,MAAM,MAAM;AAAA,QACvB;AACA,eAAO;AAAA,MACX;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI;AAAA,MACnC;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,OAAO;AAAA,IACrB,GAAG;AACH,SAAK,OAAO;AAEZ,QAAM,yBAAN,cAAqC,SAAS,UAAU,EAAE;AAAA,MACtD,YAAY,EAAE,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AACvC,cAAM,UAAU;AAChB,YAAI,WAAW,UAAU;AACrB,eAAK,eAAe,qBAAqB,sBAAsB,aAAa,WAAW,QAAQ;AAAA,QACnG,OACK;AACD,eAAK,eAAe,IAAI,WAAW,CAAC;AAAA,QACxC;AACA,YAAI,OAAO;AACP,eAAK,QAAQ;AAAA,QACjB;AAAA,MACJ;AAAA,MACA,IAAI,QAAQ;AACR,mBAAW,SAAS,KAAK,cAAc;AACnC,cAAI,QAAQ,GAAG;AACX,mBAAO;AAAA,UACX;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,IAAI,MAAM,OAAO;AACb,aAAK,aAAa,CAAC,IAAI,QAAQ,MAAO;AAAA,MAC1C;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,YAAY,qBAAqB,sBAAsB,aAAa,WAAW;AACrF,YAAI,CAAC,kBAAkB,MAAM,WAAW,aAAa,WAAW,GAAG;AAC/D,iBAAO;AAAA,QACX;AACA,aAAK,eAAe,UAAU,SAAS,aAAa,cAAc,WAAW;AAC7E,YAAI,cAAc;AACd,eAAK,SAAS,KAAK,4CAA4C;AACnE,aAAK,YAAY;AACjB,2BAAmB,aAAa,KAAK,IAAI;AACzC,aAAK,cAAc;AACnB,eAAQ,cAAc;AAAA,MAC1B;AAAA,MACA,QAAQ;AACJ,eAAO,KAAK,aAAa,MAAM;AAAA,MACnC;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,OAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ;AACA,2BAAuB,OAAO;AAE9B,QAAI;AACJ,QAAM,UAAN,cAAsB,UAAU;AAAA,MAC5B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,sBAAsB;AACxC,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,WAAW;AACP,eAAO,KAAK,WAAW;AAAA,MAC3B;AAAA,MACA,SAAS,OAAO;AACZ,aAAK,WAAW,QAAQ;AAAA,MAC5B;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,KAAK,QAAQ;AAAA,MACtD;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,UAAU;AAAA,IACxB,GAAG;AACH,YAAQ,OAAO;AAEf,QAAM,6BAAN,cAAyC,SAAS,0BAA0B,EAAE;AAAA,MAC1E,YAAY,EAAE,gBAAgB,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AACvD,cAAM,UAAU;AAChB,aAAK,gBAAgB;AAAA,MACzB;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,eAAe;AACnB,YAAI,KAAK,eAAe;AACpB,eAAK,YAAY;AACjB,yBAAe,2BAA2B,UAAU,QAAQ,KAAK,MAAM,aAAa,aAAa,WAAW;AAC5G,cAAI,iBAAiB;AACjB,mBAAO;AACX,mBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,kBAAM,mBAAmB,KAAK,MAAM,CAAC,EAAE,YAAY;AACnD,gBAAI,qBAAqB,qBAAqB;AAC1C,kBAAI,KAAK;AACL;AAAA,mBACC;AACD,qBAAK,QAAQ;AACb,uBAAO;AAAA,cACX;AAAA,YACJ;AACA,gBAAI,qBAAqB,mBAAmB;AACxC,mBAAK,QAAQ;AACb,qBAAO;AAAA,YACX;AAAA,UACJ;AAAA,QACJ,OACK;AACD,eAAK,YAAY;AACjB,yBAAe,MAAM,QAAQ,aAAa,aAAa,WAAW;AAClE,eAAK,cAAc;AAAA,QACvB;AACA,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,YAAI,KAAK;AACL,iBAAO,2BAA2B,UAAU,MAAM,KAAK,MAAM,UAAU,MAAM;AACjF,eAAO,WACD,IAAI,YAAY,KAAK,aAAa,UAAU,IAC5C,KAAK,aAAa,MAAM,EAAE;AAAA,MACpC;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,eAAe,KAAK;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AACA,+BAA2B,OAAO;AAElC,QAAI;AACJ,QAAME,eAAN,MAAM,qBAAoB,UAAU;AAAA,MAChC,YAAY,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG;AAC7D,YAAI,IAAI;AACR,SAAC,KAAK,WAAW,mBAAmB,QAAQ,OAAO,SAAS,KAAM,WAAW,gBAAgB,CAAC,GAAG,KAAK,WAAW,WAAW,QAAQ,OAAO,SAAS,SAAS,GAAG;AAChK,cAAM;AAAA,UACF,SAAS;AAAA,YACL,eAAe,WAAW;AAAA,YAC1B,GAAG;AAAA,UACP;AAAA,UACA,UAAU;AAAA,YACN,GAAG;AAAA,YACH,kBAAkB,CAAC,CAAC,WAAW;AAAA,UACnC;AAAA,UACA,GAAG;AAAA,QACP,GAAG,0BAA0B;AAC7B,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,aAAK,WAAW,gBAAgB,KAAK,QAAQ;AAC7C,aAAK,WAAW,mBAAmB,KAAK,SAAS;AACjD,YAAI,gBAAgB,GAAG;AACnB,cAAI,KAAK,QAAQ,MAAM,WAAW;AAC9B,iBAAK,eAAe,KAAK,QAAQ;AACrC,cAAI,KAAK,SAAS,MAAM,WAAW;AAC/B,iBAAK,eAAe,KAAK,SAAS;AACtC,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,WAAW,eAAe;AAChC,gBAAM,OAAO,uBAAuB,cAAc,IAAI,WAAW,WAAW,IAAI;AAChF,gBAAM,MAAM,KAAK,SAAS,aAAa,cAAc,WAAW;AAChE,cAAI;AACA,gBAAI,IAAI,YAAY;AAChB,oBAAM,MAAM,aAAa,KAAK,GAAG,IAAI,UAAU;AAC/C,kBAAI,IAAI,WAAW,MAAM,IAAI,WAAW,aAAa;AACjD,qBAAK,WAAW,QAAQ,CAAC,IAAI,MAAM;AAAA,cACvC;AAAA,YACJ;AAAA,UACJ,SACO,GAAG;AAAA,UACV;AAAA,QACJ;AACA,eAAO,MAAM,QAAQ,aAAa,aAAa,WAAW;AAAA,MAC9D;AAAA,MACA,kBAAkB;AACd,YAAI,KAAK,WAAW,iBAAkB,KAAK,WAAW,SAAS,KAAK,WAAW,MAAM,QAAS;AAC1F,iBAAO,YAAY,UAAU,gBAAgB,KAAK,IAAI;AAAA,QAC1D;AACA,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,qBAAqB,QAAQ,MAAM,KAAK,WAAW,YAAY,CAAC;AAAA,MACzG;AAAA,MACA,WAAW;AACP,YAAI,CAAC,KAAK,QAAQ,eAAe;AAC7B,iBAAO,KAAK,WAAW,aAAa,MAAM,EAAE;AAAA,QAChD;AACA,cAAM,QAAQ,CAAC;AACf,mBAAW,WAAW,KAAK,WAAW,OAAO;AACzC,cAAI,mBAAmB,cAAa;AAChC,kBAAM,KAAK,QAAQ,WAAW,YAAY;AAAA,UAC9C;AAAA,QACJ;AACA,eAAO,qBAAqB,sBAAsB,OAAO,KAAK;AAAA,MAClE;AAAA,IACJ;AACA,WAAOA;AACP,KAAC,MAAM;AACH,gBAAU,cAAc;AAAA,IAC5B,GAAG;AACH,IAAAA,aAAY,OAAO;AAEnB,QAAM,2BAAN,cAAuC,SAAS,0BAA0B,EAAE;AAAA,MACxE,YAAY,EAAE,aAAa,GAAG,gBAAgB,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AACvE,cAAM,UAAU;AAChB,aAAK,aAAa;AAClB,aAAK,gBAAgB;AACrB,aAAK,cAAc,KAAK,aAAa;AAAA,MACzC;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,CAAC,aAAa;AACd,iBAAO;AAAA,QACX;AACA,YAAI,eAAe;AACnB,YAAI,KAAK,eAAe;AACpB,yBAAe,2BAA2B,UAAU,QAAQ,KAAK,MAAM,aAAa,aAAa,WAAW;AAC5G,cAAI,iBAAiB;AACjB,mBAAO;AACX,qBAAW,SAAS,KAAK,OAAO;AAC5B,kBAAM,mBAAmB,MAAM,YAAY;AAC3C,gBAAI,qBAAqB,qBAAqB;AAC1C,kBAAI,KAAK;AACL;AAAA,mBACC;AACD,qBAAK,QAAQ;AACb,uBAAO;AAAA,cACX;AAAA,YACJ;AACA,gBAAI,qBAAqB,iBAAiB;AACtC,mBAAK,QAAQ;AACb,qBAAO;AAAA,YACX;AACA,kBAAM,aAAa,MAAM;AACzB,gBAAK,KAAK,aAAa,KAAO,WAAW,aAAa,GAAI;AACtD,mBAAK,QAAQ;AACb,qBAAO;AAAA,YACX;AACA,iBAAK,aAAa,WAAW;AAAA,UACjC;AACA,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,qBAAqB,sBAAsB,aAAa,WAAW;AACrF,YAAI,CAAC,kBAAkB,MAAM,WAAW,aAAa,WAAW,GAAG;AAC/D,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,UAAU,SAAS,aAAa,cAAc,WAAW;AAC3E,aAAK,aAAa,UAAU,CAAC;AAC7B,YAAI,KAAK,aAAa,GAAG;AACrB,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,YAAI,CAAC,KAAK,YAAY;AAClB,gBAAM,MAAM,UAAU,SAAS,CAAC;AAChC,cAAI;AACA,gBAAI,IAAI,YAAY;AAChB,oBAAM,MAAM,aAAa,KAAK,GAAG,IAAI,UAAU;AAC/C,kBAAI,IAAI,WAAW,MAAM,IAAI,WAAY,cAAc,GAAI;AACvD,qBAAK,QAAQ,CAAC,IAAI,MAAM;AAAA,cAC5B;AAAA,YACJ;AAAA,UACJ,SACO,GAAG;AAAA,UACV;AAAA,QACJ;AACA,aAAK,eAAe,UAAU,SAAS,CAAC;AACxC,aAAK,cAAc,UAAU;AAC7B,eAAQ,cAAc;AAAA,MAC1B;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,YAAI,KAAK,eAAe;AACpB,iBAAO,2BAA2B,UAAU,MAAM,KAAK,MAAM,UAAU,MAAM;AAAA,QACjF;AACA,YAAI,UAAU;AACV,iBAAO,IAAI,YAAY,KAAK,aAAa,aAAa,CAAC;AAAA,QAC3D;AACA,YAAI,CAAC,KAAK,aAAa,YAAY;AAC/B,iBAAO;AAAA,QACX;AACA,cAAM,UAAU,IAAI,WAAW,KAAK,aAAa,SAAS,CAAC;AAC3D,gBAAQ,CAAC,IAAI,KAAK;AAClB,gBAAQ,IAAI,KAAK,cAAc,CAAC;AAChC,eAAO,QAAQ;AAAA,MACnB;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,YAAY,KAAK;AAAA,UACjB,eAAe,KAAK;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AACA,6BAAyB,OAAO;AAEhC,QAAI;AACJ,QAAM,YAAN,cAAwB,UAAU;AAAA,MAC9B,YAAY,EAAE,UAAU,CAAC,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG;AAC7D,YAAI,IAAI;AACR,SAAC,KAAK,WAAW,mBAAmB,QAAQ,OAAO,SAAS,KAAM,WAAW,gBAAgB,CAAC,GAAG,KAAK,WAAW,WAAW,QAAQ,OAAO,SAAS,SAAS,GAAG;AAChK,cAAM;AAAA,UACF,SAAS;AAAA,YACL,eAAe,WAAW;AAAA,YAC1B,GAAG;AAAA,UACP;AAAA,UACA,UAAU;AAAA,YACN,GAAG;AAAA,YACH,kBAAkB,CAAC,CAAC,WAAW;AAAA,UACnC;AAAA,UACA,GAAG;AAAA,QACP,GAAG,wBAAwB;AAC3B,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,aAAK,WAAW,gBAAgB,KAAK,QAAQ;AAC7C,aAAK,WAAW,mBAAmB,KAAK,SAAS;AACjD,eAAO,MAAM,QAAQ,aAAa,aAAa,WAAW;AAAA,MAC9D;AAAA,MACA,kBAAkB;AACd,YAAI,KAAK,WAAW,iBAAkB,KAAK,WAAW,SAAS,KAAK,WAAW,MAAM,QAAS;AAC1F,iBAAO,YAAY,UAAU,gBAAgB,KAAK,IAAI;AAAA,QAC1D,OACK;AACD,gBAAM,OAAO,CAAC;AACd,gBAAM,WAAW,KAAK,WAAW;AACjC,qBAAW,QAAQ,UAAU;AACzB,iBAAK,KAAK,KAAK,SAAS,CAAC,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,UAC/C;AACA,gBAAM,UAAU,KAAK,KAAK,EAAE;AAC5B,iBAAO,GAAG,KAAK,YAAY,IAAI,MAAM,QAAQ,UAAU,GAAG,QAAQ,SAAS,KAAK,WAAW,UAAU,CAAC;AAAA,QAC1G;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,YAAY;AAAA,IAC1B,GAAG;AACH,cAAU,OAAO;AAEjB,QAAI;AACJ,aAAS,QAAQ,OAAO,QAAQ;AAC5B,YAAM,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;AAC5B,YAAM,YAAY,IAAI,WAAW,KAAK;AACtC,YAAM,aAAa,IAAI,WAAW,MAAM;AACxC,UAAI,gBAAgB,UAAU,MAAM,CAAC;AACrC,YAAM,sBAAsB,cAAc,SAAS;AACnD,YAAM,iBAAiB,WAAW,MAAM,CAAC;AACzC,YAAM,uBAAuB,eAAe,SAAS;AACrD,UAAI,QAAQ;AACZ,YAAM,MAAO,uBAAuB,sBAAuB,sBAAsB;AACjF,UAAI,UAAU;AACd,eAAS,IAAI,KAAK,KAAK,GAAG,KAAK,WAAW;AACtC,gBAAQ,MAAM;AAAA,UACV,KAAM,UAAU,eAAe;AAC3B,oBAAQ,cAAc,sBAAsB,OAAO,IAAI,eAAe,uBAAuB,OAAO,IAAI,EAAE,CAAC;AAC3G;AAAA,UACJ;AACI,oBAAQ,cAAc,sBAAsB,OAAO,IAAI,EAAE,CAAC;AAAA,QAClE;AACA,UAAE,CAAC,IAAI,QAAQ;AACf,gBAAQ,MAAM;AAAA,UACV,KAAM,WAAW,cAAc;AAC3B,4BAAgB,mBAAmB,eAAe,IAAI,WAAW,CAAC,QAAQ,EAAE,CAAC,GAAG,aAAa;AAC7F;AAAA,UACJ;AACI,0BAAc,sBAAsB,OAAO,IAAI,QAAQ;AAAA,QAC/D;AAAA,MACJ;AACA,UAAI,EAAE,CAAC,IAAI;AACP,wBAAgB,mBAAmB,eAAe,GAAG,aAAa;AACtE,aAAO;AAAA,IACX;AACA,aAAS,OAAOR,IAAG;AACf,UAAIA,MAAK,QAAQ,QAAQ;AACrB,iBAAS,IAAI,QAAQ,QAAQ,KAAKA,IAAG,KAAK;AACtC,gBAAM,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC;AAC5B,cAAI,SAAU,QAAQ,IAAI,CAAC,EAAG,MAAM,CAAC;AACrC,mBAAS,IAAK,OAAO,SAAS,GAAI,KAAK,GAAG,KAAK;AAC3C,kBAAM,WAAW,IAAI,WAAW,EAAE,OAAO,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;AACzD,cAAE,CAAC,IAAI,SAAS,CAAC,IAAI;AACrB,mBAAO,CAAC,IAAI,SAAS,CAAC,IAAI;AAAA,UAC9B;AACA,cAAI,EAAE,CAAC,IAAI;AACP,qBAAS,mBAAmB,eAAe,GAAG,MAAM;AACxD,kBAAQ,KAAK,MAAM;AAAA,QACvB;AAAA,MACJ;AACA,aAAO,QAAQA,EAAC;AAAA,IACpB;AACA,aAAS,QAAQ,OAAO,QAAQ;AAC5B,UAAIS,KAAI;AACR,YAAM,YAAY,IAAI,WAAW,KAAK;AACtC,YAAM,aAAa,IAAI,WAAW,MAAM;AACxC,YAAM,gBAAgB,UAAU,MAAM,CAAC;AACvC,YAAM,sBAAsB,cAAc,SAAS;AACnD,YAAM,iBAAiB,WAAW,MAAM,CAAC;AACzC,YAAM,uBAAuB,eAAe,SAAS;AACrD,UAAI;AACJ,UAAI,UAAU;AACd,eAAS,IAAI,sBAAsB,KAAK,GAAG,KAAK,WAAW;AACvD,gBAAQ,cAAc,sBAAsB,OAAO,IAAI,eAAe,uBAAuB,OAAO,IAAIA;AACxG,gBAAQ,MAAM;AAAA,UACV,KAAM,QAAQ;AACV,YAAAA,KAAI;AACJ,0BAAc,sBAAsB,OAAO,IAAI,QAAQ;AACvD;AAAA,UACJ;AACI,YAAAA,KAAI;AACJ,0BAAc,sBAAsB,OAAO,IAAI;AAAA,QACvD;AAAA,MACJ;AACA,UAAIA,KAAI,GAAG;AACP,iBAAS,IAAK,sBAAsB,uBAAuB,GAAI,KAAK,GAAG,KAAK,WAAW;AACnF,kBAAQ,cAAc,sBAAsB,OAAO,IAAIA;AACvD,cAAI,QAAQ,GAAG;AACX,YAAAA,KAAI;AACJ,0BAAc,sBAAsB,OAAO,IAAI,QAAQ;AAAA,UAC3D,OACK;AACD,YAAAA,KAAI;AACJ,0BAAc,sBAAsB,OAAO,IAAI;AAC/C;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AACA,aAAO,cAAc,MAAM;AAAA,IAC/B;AACA,QAAM,yBAAN,cAAqC,SAAS,UAAU,EAAE;AAAA,MACtD,YAAY,EAAE,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AACvC,cAAM,UAAU;AAChB,aAAK,YAAY;AACjB,YAAI,WAAW,UAAU;AACrB,eAAK,YAAY;AAAA,QACrB;AACA,YAAI,UAAU,QAAW;AACrB,eAAK,WAAW;AAAA,QACpB;AAAA,MACJ;AAAA,MACA,cAAc;AACV,YAAI,KAAK,aAAa,UAAU,GAAG;AAC/B,eAAK,SAAS,KAAK,wCAAwC;AAC3D,eAAK,YAAY;AACjB,eAAK,YAAY;AAAA,QACrB,OACK;AACD,eAAK,YAAY;AACjB,cAAI,KAAK,aAAa,SAAS,GAAG;AAC9B,iBAAK,YAAY,mBAAmB,aAAa,KAAK,IAAI;AAAA,UAC9D;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,IAAI,SAAS,GAAG;AACZ,aAAK,YAAY;AACjB,aAAK,YAAY;AACjB,aAAK,eAAe,IAAI,WAAW,mBAAmB,aAAa,CAAC,CAAC;AAAA,MACzE;AAAA,MACA,IAAI,WAAW;AACX,eAAO,KAAK;AAAA,MAChB;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa,iBAAiB,GAAG;AAC/D,cAAM,SAAS,KAAK,QAAQ,aAAa,aAAa,WAAW;AACjE,YAAI,WAAW;AACX,iBAAO;AACX,cAAM,OAAO,KAAK;AAClB,YAAK,KAAK,CAAC,MAAM,MAAW,KAAK,CAAC,IAAI,SAAU,GAAI;AAChD,eAAK,eAAe,KAAK,SAAS,CAAC;AAAA,QACvC,OACK;AACD,cAAI,mBAAmB,GAAG;AACtB,gBAAI,KAAK,SAAS,gBAAgB;AAC9B,kBAAK,iBAAiB,KAAK,SAAU;AACjC,iCAAiB,KAAK,SAAS;AACnC,mBAAK,eAAe,KAAK,SAAS,iBAAiB,KAAK,MAAM;AAAA,YAClE;AAAA,UACJ;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,MACA,MAAM,WAAW,OAAO;AACpB,cAAM,OAAO,KAAK;AAClB,gBAAQ,MAAM;AAAA,UACV,MAAO,KAAK,CAAC,IAAI,SAAU;AACvB;AACI,oBAAM,cAAc,IAAI,WAAW,KAAK,aAAa,SAAS,CAAC;AAC/D,0BAAY,CAAC,IAAI;AACjB,0BAAY,IAAI,MAAM,CAAC;AACvB,mBAAK,eAAe;AAAA,YACxB;AACA;AAAA,UACJ,MAAO,KAAK,CAAC,MAAM,MAAW,KAAK,CAAC,IAAI,SAAU;AAC9C;AACI,mBAAK,eAAe,KAAK,aAAa,SAAS,CAAC;AAAA,YACpD;AACA;AAAA,QACR;AACA,eAAO,KAAK,MAAM,QAAQ;AAAA,MAC9B;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,eAAe,MAAM,QAAQ,aAAa,aAAa,WAAW;AACxE,YAAI,iBAAiB,IAAI;AACrB,iBAAO;AAAA,QACX;AACA,aAAK,YAAY;AACjB,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU;AACZ,eAAO,WACD,IAAI,YAAY,KAAK,aAAa,MAAM,IACxC,KAAK,aAAa,MAAM,EAAE;AAAA,MACpC;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,UAAU,KAAK;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,WAAW;AACP,cAAM,WAAY,KAAK,aAAa,SAAS,IAAK;AAClD,YAAI,SAAS,IAAI,WAAY,KAAK,aAAa,SAAS,IAAK,CAAC;AAC9D,YAAI,YAAY;AAChB,YAAI;AACJ,cAAM,WAAW,KAAK;AACtB,YAAI,SAAS;AACb,YAAI,OAAO;AACX,iBAAS,aAAc,SAAS,aAAa,GAAI,cAAc,GAAG,cAAc;AAC5E,wBAAc,SAAS,UAAU;AACjC,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AACxB,iBAAK,cAAc,OAAO,GAAG;AACzB,sBAAQ,WAAW;AAAA,gBACf,KAAK;AACD,2BAAS,QAAQ,OAAO,SAAS,GAAG,MAAM;AAC1C,2BAAS;AACT;AAAA,gBACJ;AACI,2BAAS,QAAQ,QAAQ,OAAO,SAAS,CAAC;AAAA,cAClD;AAAA,YACJ;AACA;AACA,4BAAgB;AAAA,UACpB;AAAA,QACJ;AACA,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,cAAI,OAAO,CAAC;AACR,mBAAO;AACX,cAAI;AACA,sBAAU,aAAa,OAAO,OAAO,CAAC,CAAC;AAAA,QAC/C;AACA,YAAI,SAAS;AACT,oBAAU,aAAa,OAAO,CAAC;AACnC,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AACP,2BAAuB,OAAO;AAC9B,KAAC,MAAM;AACH,aAAO,eAAe,KAAK,WAAW,YAAY;AAAA,QAC9C,KAAK,SAAU,GAAG;AACd,eAAK,eAAe,IAAI,WAAW,CAAC;AACpC,eAAK,YAAY;AAAA,QACrB;AAAA,QACA,KAAK,WAAY;AACb,iBAAO,KAAK,aAAa,MAAM,EAAE;AAAA,QACrC;AAAA,MACJ,CAAC;AAAA,IACL,GAAG;AAEH,QAAI;AACJ,QAAMC,WAAN,MAAM,iBAAgB,UAAU;AAAA,MAC5B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,sBAAsB;AACxC,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,WAAW;AACP,qBAAa;AACb,eAAO,OAAO,KAAK,WAAW,SAAS,CAAC;AAAA,MAC5C;AAAA,MACA,OAAO,WAAW,OAAO;AACrB,qBAAa;AACb,cAAM,cAAc,OAAO,KAAK;AAChC,cAAM,SAAS,IAAI,WAAW;AAC9B,cAAMC,OAAM,YAAY,SAAS,EAAE,EAAE,QAAQ,MAAM,EAAE;AACrD,cAAM,OAAO,IAAI,WAAW,qBAAqB,QAAQ,QAAQA,IAAG,CAAC;AACrE,YAAI,cAAc,GAAG;AACjB,gBAAM,QAAQ,IAAI,WAAW,KAAK,UAAU,KAAK,CAAC,IAAI,MAAO,IAAI,EAAE;AACnE,gBAAM,CAAC,KAAK;AACZ,gBAAM,WAAW,OAAO,KAAK,qBAAqB,QAAQ,MAAM,KAAK,CAAC,EAAE;AACxE,gBAAM,YAAY,WAAW;AAC7B,gBAAM,SAAS,qBAAqB,sBAAsB,aAAa,qBAAqB,QAAQ,QAAQ,UAAU,SAAS,EAAE,CAAC,CAAC;AACnI,iBAAO,CAAC,KAAK;AACb,iBAAO,MAAM,MAAM;AAAA,QACvB,OACK;AACD,cAAI,KAAK,CAAC,IAAI,KAAM;AAChB,mBAAO,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;AAAA,UACpC;AACA,iBAAO,MAAM,IAAI;AAAA,QACrB;AACA,cAAM,MAAM,IAAI,SAAQ;AAAA,UACpB,UAAU,OAAO,MAAM;AAAA,QAC3B,CAAC;AACD,eAAO;AAAA,MACX;AAAA,MACA,eAAe;AACX,cAAM,UAAU,IAAI,SAAQ,EAAE,UAAU,KAAK,WAAW,aAAa,CAAC;AACtE,gBAAQ,WAAW,MAAM;AACzB,eAAO;AAAA,MACX;AAAA,MACA,iBAAiB;AACb,eAAO,IAAI,SAAQ;AAAA,UACf,UAAU,KAAK,WAAW,aAAa,CAAC,MAAM,IACxC,KAAK,WAAW,aAAa,SAAS,CAAC,IACvC,KAAK,WAAW;AAAA,QAC1B,CAAC;AAAA,MACL;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,KAAK,WAAW,SAAS,CAAC;AAAA,MACnE;AAAA,IACJ;AACA,WAAOD;AACP,KAAC,MAAM;AACH,gBAAU,UAAU;AAAA,IACxB,GAAG;AACH,IAAAA,SAAQ,OAAO;AAEf,QAAI;AACJ,QAAM,aAAN,cAAyBA,SAAQ;AAAA,MAC7B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,aAAa;AAAA,IAC3B,GAAG;AACH,eAAW,OAAO;AAElB,QAAM,qBAAN,cAAiC,SAAS,UAAU,EAAE;AAAA,MAClD,YAAY,EAAE,WAAW,IAAI,aAAa,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AACnE,cAAM,UAAU;AAChB,aAAK,WAAW;AAChB,aAAK,aAAa;AAAA,MACtB;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,CAAC,aAAa;AACd,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,qBAAqB,sBAAsB,aAAa,WAAW;AACrF,YAAI,CAAC,kBAAkB,MAAM,WAAW,aAAa,WAAW,GAAG;AAC/D,iBAAO;AAAA,QACX;AACA,cAAM,YAAY,UAAU,SAAS,aAAa,cAAc,WAAW;AAC3E,aAAK,eAAe,IAAI,WAAW,WAAW;AAC9C,iBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AAClC,eAAK,aAAa,CAAC,IAAI,UAAU,CAAC,IAAI;AACtC,eAAK;AACL,eAAK,UAAU,CAAC,IAAI,SAAU;AAC1B;AAAA,QACR;AACA,cAAM,WAAW,IAAI,WAAW,KAAK,WAAW;AAChD,iBAAS,IAAI,GAAG,IAAI,KAAK,aAAa,KAAK;AACvC,mBAAS,CAAC,IAAI,KAAK,aAAa,CAAC;AAAA,QACrC;AACA,aAAK,eAAe;AACpB,aAAK,UAAU,KAAK,cAAc,CAAC,IAAI,SAAU,GAAM;AACnD,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,aAAa,CAAC,MAAM;AACzB,eAAK,SAAS,KAAK,wCAAwC;AAC/D,YAAI,KAAK,eAAe;AACpB,eAAK,WAAW,mBAAmB,aAAa,KAAK,cAAc,CAAC;AAAA,aACnE;AACD,eAAK,YAAY;AACjB,eAAK,SAAS,KAAK,oCAAoC;AAAA,QAC3D;AACA,eAAQ,cAAc,KAAK;AAAA,MAC/B;AAAA,MACA,IAAI,YAAY,OAAO;AACnB,qBAAa;AACb,YAAI,OAAO,OAAO,KAAK,EAAE,SAAS,CAAC;AACnC,eAAO,KAAK,SAAS,GAAG;AACpB,iBAAO,MAAM;AAAA,QACjB;AACA,cAAME,SAAQ,IAAI,WAAW,KAAK,SAAS,CAAC;AAC5C,iBAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,UAAAA,OAAM,CAAC,IAAI,SAAS,KAAK,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,IAAIA,OAAM,SAAS,MAAO;AAAA,QAC1F;AACA,aAAK,QAAQA,OAAM,QAAQ,GAAGA,OAAM,MAAM;AAAA,MAC9C;AAAA,MACA,MAAM,UAAU;AACZ,YAAI,KAAK,WAAW;AAChB,cAAI;AACA,mBAAQ,IAAI,YAAY,KAAK,aAAa,UAAU;AACxD,gBAAM,UAAU,KAAK;AACrB,gBAAMT,WAAU,IAAI,WAAW,KAAK,WAAW;AAC/C,mBAAS,IAAI,GAAG,IAAK,KAAK,cAAc,GAAI;AACxC,YAAAA,SAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI;AAC9B,UAAAA,SAAQ,KAAK,cAAc,CAAC,IAAI,QAAQ,KAAK,cAAc,CAAC;AAC5D,iBAAOA,SAAQ;AAAA,QACnB;AACA,cAAM,aAAa,mBAAmB,WAAW,KAAK,UAAU,CAAC;AACjE,YAAI,WAAW,eAAe,GAAG;AAC7B,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,cAAM,UAAU,IAAI,WAAW,WAAW,UAAU;AACpD,YAAI,CAAC,UAAU;AACX,gBAAM,cAAc,IAAI,WAAW,UAAU;AAC7C,gBAAM,MAAM,WAAW,aAAa;AACpC,mBAAS,IAAI,GAAG,IAAI,KAAK;AACrB,oBAAQ,CAAC,IAAI,YAAY,CAAC,IAAI;AAClC,kBAAQ,GAAG,IAAI,YAAY,GAAG;AAAA,QAClC;AACA,eAAO;AAAA,MACX;AAAA,MACA,WAAW;AACP,YAAI,SAAS;AACb,YAAI,KAAK;AACL,mBAAS,qBAAqB,QAAQ,MAAM,KAAK,YAAY;AAAA,aAC5D;AACD,cAAI,KAAK,YAAY;AACjB,gBAAI,WAAW,KAAK;AACpB,gBAAI,KAAK,YAAY;AACjB,uBAAS;AAAA,iBACR;AACD,kBAAI,KAAK,YAAY,IAAI;AACrB,yBAAS;AACT,4BAAY;AAAA,cAChB,OACK;AACD,yBAAS;AACT,4BAAY;AAAA,cAChB;AAAA,YACJ;AACA,sBAAU,SAAS,SAAS;AAAA,UAChC;AAEI,qBAAS,KAAK,SAAS,SAAS;AAAA,QACxC;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,UAAU,KAAK;AAAA,UACf,YAAY,KAAK;AAAA,QACrB;AAAA,MACJ;AAAA,IACJ;AACA,uBAAmB,OAAO;AAE1B,QAAM,kCAAN,cAA8C,WAAW;AAAA,MACrD,YAAY,EAAE,QAAQ,cAAc,GAAG,WAAW,IAAI,CAAC,GAAG;AACtD,cAAM,UAAU;AAChB,aAAK,QAAQ,CAAC;AACd,YAAI,OAAO;AACP,eAAK,WAAW,KAAK;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,eAAe;AACnB,eAAO,cAAc,GAAG;AACpB,gBAAM,WAAW,IAAI,mBAAmB;AACxC,yBAAe,SAAS,QAAQ,aAAa,cAAc,WAAW;AACtE,cAAI,iBAAiB,IAAI;AACrB,iBAAK,cAAc;AACnB,iBAAK,QAAQ,SAAS;AACtB,mBAAO;AAAA,UACX;AACA,cAAI,KAAK,MAAM,WAAW;AACtB,qBAAS,aAAa;AAC1B,eAAK,eAAe,SAAS;AAC7B,yBAAe,SAAS;AACxB,eAAK,MAAM,KAAK,QAAQ;AAAA,QAC5B;AACA,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU;AACZ,cAAM,aAAa,CAAC;AACpB,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,gBAAM,WAAW,KAAK,MAAM,CAAC,EAAE,MAAM,QAAQ;AAC7C,cAAI,SAAS,eAAe,GAAG;AAC3B,iBAAK,QAAQ,KAAK,MAAM,CAAC,EAAE;AAC3B,mBAAO;AAAA,UACX;AACA,qBAAW,KAAK,QAAQ;AAAA,QAC5B;AACA,eAAOF,QAAO,UAAU;AAAA,MAC5B;AAAA,MACA,WAAW,QAAQ;AACf,aAAK,QAAQ,CAAC;AACd,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,MAAM;AACV,YAAI,OAAO;AACX,WAAG;AACC,iBAAO,OAAO,QAAQ,KAAK,IAAI;AAC/B,cAAI,SAAS;AACT,kBAAM,OAAO,UAAU,IAAI;AAAA;AAE3B,kBAAM,OAAO,UAAU,MAAM,IAAI;AACrC,iBAAO,OAAO;AACd,cAAI,MAAM;AACN,kBAAM,WAAW,KAAK,MAAM,CAAC;AAC7B,gBAAI,OAAO;AACX,oBAAQ,SAAS,UAAU;AAAA,cACvB,KAAK;AACD;AAAA,cACJ,KAAK;AACD,uBAAO;AACP;AAAA,cACJ,KAAK;AACD,uBAAO;AACP;AAAA,cACJ;AACI,qBAAK,QAAQ,CAAC;AACd;AAAA,YACR;AACA,kBAAM,YAAY,SAAS,KAAK,EAAE;AAClC,gBAAI,MAAM,SAAS;AACf;AACJ,qBAAS,WAAW,YAAY;AAChC,mBAAO;AAAA,UACX,OACK;AACD,kBAAM,WAAW,IAAI,mBAAmB;AACxC,gBAAI,MAAM,OAAO,kBAAkB;AAC/B,2BAAa;AACb,oBAAM,WAAW,OAAO,GAAG;AAC3B,uBAAS,cAAc;AAAA,YAC3B,OACK;AACD,uBAAS,WAAW,SAAS,KAAK,EAAE;AACpC,kBAAI,MAAM,SAAS,QAAQ;AACvB;AAAA,YACR;AACA,gBAAI,CAAC,KAAK,MAAM,QAAQ;AACpB,uBAAS,aAAa;AACtB,qBAAO;AAAA,YACX;AACA,iBAAK,MAAM,KAAK,QAAQ;AAAA,UAC5B;AAAA,QACJ,SAAS,SAAS;AAAA,MACtB;AAAA,MACA,WAAW;AACP,YAAI,SAAS;AACb,YAAI,YAAY;AAChB,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,sBAAY,KAAK,MAAM,CAAC,EAAE;AAC1B,cAAI,SAAS,KAAK,MAAM,CAAC,EAAE,SAAS;AACpC,cAAI,MAAM;AACN,qBAAS,GAAG,MAAM;AACtB,cAAI,WAAW;AACX,qBAAS,IAAI,MAAM;AACnB,gBAAI,KAAK,MAAM,CAAC,EAAE;AACd,uBAAS,MAAM,MAAM;AAAA;AAErB,wBAAU;AAAA,UAClB;AAEI,sBAAU;AAAA,QAClB;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,cAAMK,UAAS;AAAA,UACX,GAAG,MAAM,OAAO;AAAA,UAChB,OAAO,KAAK,SAAS;AAAA,UACrB,UAAU,CAAC;AAAA,QACf;AACA,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,UAAAA,QAAO,SAAS,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC;AAAA,QAC/C;AACA,eAAOA;AAAA,MACX;AAAA,IACJ;AACA,oCAAgC,OAAO;AAEvC,QAAI;AACJ,QAAM,mBAAN,cAA+B,UAAU;AAAA,MACrC,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,+BAA+B;AACjD,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,WAAW;AACP,eAAO,KAAK,WAAW,SAAS;AAAA,MACpC;AAAA,MACA,SAAS,OAAO;AACZ,aAAK,WAAW,WAAW,KAAK;AAAA,MACpC;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,KAAK,WAAW,SAAS,KAAK,OAAO;AAAA,MAC9E;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,OAAO,KAAK,SAAS;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,mBAAmB;AAAA,IACjC,GAAG;AACH,qBAAiB,OAAO;AAExB,QAAM,6BAAN,cAAyC,SAAS,cAAc,EAAE;AAAA,MAC9D,YAAY,EAAE,WAAW,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG;AAC9C,cAAM,UAAU;AAChB,aAAK,WAAW;AAAA,MACpB;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,gBAAgB;AAChB,iBAAO;AACX,cAAM,YAAY,qBAAqB,sBAAsB,aAAa,WAAW;AACrF,YAAI,CAAC,kBAAkB,MAAM,WAAW,aAAa,WAAW;AAC5D,iBAAO;AACX,cAAM,YAAY,UAAU,SAAS,aAAa,cAAc,WAAW;AAC3E,aAAK,eAAe,IAAI,WAAW,WAAW;AAC9C,iBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AAClC,eAAK,aAAa,CAAC,IAAI,UAAU,CAAC,IAAI;AACtC,eAAK;AACL,eAAK,UAAU,CAAC,IAAI,SAAU;AAC1B;AAAA,QACR;AACA,cAAM,WAAW,IAAI,WAAW,KAAK,WAAW;AAChD,iBAAS,IAAI,GAAG,IAAI,KAAK,aAAa;AAClC,mBAAS,CAAC,IAAI,KAAK,aAAa,CAAC;AACrC,aAAK,eAAe;AACpB,aAAK,UAAU,KAAK,cAAc,CAAC,IAAI,SAAU,GAAM;AACnD,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,YAAI,KAAK,aAAa,CAAC,MAAM;AACzB,eAAK,SAAS,KAAK,wCAAwC;AAC/D,YAAI,KAAK,eAAe;AACpB,eAAK,WAAW,mBAAmB,aAAa,KAAK,cAAc,CAAC;AAAA,aACnE;AACD,eAAK,YAAY;AACjB,eAAK,SAAS,KAAK,oCAAoC;AAAA,QAC3D;AACA,eAAQ,cAAc,KAAK;AAAA,MAC/B;AAAA,MACA,MAAM,UAAU;AACZ,YAAI,KAAK,WAAW;AAChB,cAAI;AACA,mBAAQ,IAAI,YAAY,KAAK,aAAa,UAAU;AACxD,gBAAM,UAAU,KAAK;AACrB,gBAAMH,WAAU,IAAI,WAAW,KAAK,WAAW;AAC/C,mBAAS,IAAI,GAAG,IAAK,KAAK,cAAc,GAAI;AACxC,YAAAA,SAAQ,CAAC,IAAI,QAAQ,CAAC,IAAI;AAC9B,UAAAA,SAAQ,KAAK,cAAc,CAAC,IAAI,QAAQ,KAAK,cAAc,CAAC;AAC5D,iBAAOA,SAAQ;AAAA,QACnB;AACA,cAAM,aAAa,mBAAmB,WAAW,KAAK,UAAU,CAAC;AACjE,YAAI,WAAW,eAAe,GAAG;AAC7B,eAAK,QAAQ;AACb,iBAAO;AAAA,QACX;AACA,cAAM,UAAU,IAAI,WAAW,WAAW,UAAU;AACpD,YAAI,CAAC,UAAU;AACX,gBAAM,cAAc,IAAI,WAAW,UAAU;AAC7C,gBAAM,MAAM,WAAW,aAAa;AACpC,mBAAS,IAAI,GAAG,IAAI,KAAK;AACrB,oBAAQ,CAAC,IAAI,YAAY,CAAC,IAAI;AAClC,kBAAQ,GAAG,IAAI,YAAY,GAAG;AAAA,QAClC;AACA,eAAO,QAAQ;AAAA,MACnB;AAAA,MACA,WAAW;AACP,YAAI,SAAS;AACb,YAAI,KAAK;AACL,mBAAS,qBAAqB,QAAQ,MAAM,KAAK,YAAY;AAAA,aAC5D;AACD,mBAAS,KAAK,SAAS,SAAS;AAAA,QACpC;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,UAAU,KAAK;AAAA,QACnB;AAAA,MACJ;AAAA,IACJ;AACA,+BAA2B,OAAO;AAElC,QAAM,0CAAN,cAAsD,WAAW;AAAA,MAC7D,YAAY,EAAE,QAAQ,cAAc,GAAG,WAAW,IAAI,CAAC,GAAG;AACtD,cAAM,UAAU;AAChB,aAAK,QAAQ,CAAC;AACd,YAAI,OAAO;AACP,eAAK,WAAW,KAAK;AAAA,QACzB;AAAA,MACJ;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,YAAI,eAAe;AACnB,eAAO,cAAc,GAAG;AACpB,gBAAM,WAAW,IAAI,2BAA2B;AAChD,yBAAe,SAAS,QAAQ,aAAa,cAAc,WAAW;AACtE,cAAI,iBAAiB,IAAI;AACrB,iBAAK,cAAc;AACnB,iBAAK,QAAQ,SAAS;AACtB,mBAAO;AAAA,UACX;AACA,eAAK,eAAe,SAAS;AAC7B,yBAAe,SAAS;AACxB,eAAK,MAAM,KAAK,QAAQ;AAAA,QAC5B;AACA,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU,QAAQ;AACpB,cAAM,aAAa,CAAC;AACpB,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,gBAAM,WAAW,KAAK,MAAM,CAAC,EAAE,MAAM,QAAQ;AAC7C,cAAI,SAAS,eAAe,GAAG;AAC3B,iBAAK,QAAQ,KAAK,MAAM,CAAC,EAAE;AAC3B,mBAAO;AAAA,UACX;AACA,qBAAW,KAAK,QAAQ;AAAA,QAC5B;AACA,eAAOF,QAAO,UAAU;AAAA,MAC5B;AAAA,MACA,WAAW,QAAQ;AACf,aAAK,QAAQ,CAAC;AACd,YAAI,OAAO;AACX,YAAI,OAAO;AACX,YAAI,MAAM;AACV,WAAG;AACC,iBAAO,OAAO,QAAQ,KAAK,IAAI;AAC/B,cAAI,SAAS;AACT,kBAAM,OAAO,UAAU,IAAI;AAAA;AAE3B,kBAAM,OAAO,UAAU,MAAM,IAAI;AACrC,iBAAO,OAAO;AACd,gBAAM,WAAW,IAAI,2BAA2B;AAChD,mBAAS,WAAW,SAAS,KAAK,EAAE;AACpC,cAAI,MAAM,SAAS,QAAQ;AACvB,mBAAO;AACX,eAAK,MAAM,KAAK,QAAQ;AAAA,QAC5B,SAAS,SAAS;AAClB,eAAO;AAAA,MACX;AAAA,MACA,WAAW;AACP,YAAI,SAAS;AACb,YAAI,YAAY;AAChB,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,KAAK;AACxC,sBAAY,KAAK,MAAM,CAAC,EAAE;AAC1B,cAAI,SAAS,KAAK,MAAM,CAAC,EAAE,SAAS;AACpC,cAAI,MAAM;AACN,qBAAS,GAAG,MAAM;AACtB,cAAI,WAAW;AACX,qBAAS,IAAI,MAAM;AACnB,sBAAU;AAAA,UACd;AAEI,sBAAU;AAAA,QAClB;AACA,eAAO;AAAA,MACX;AAAA,MACA,SAAS;AACL,cAAMK,UAAS;AAAA,UACX,GAAG,MAAM,OAAO;AAAA,UAChB,OAAO,KAAK,SAAS;AAAA,UACrB,UAAU,CAAC;AAAA,QACf;AACA,iBAAS,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ;AACnC,UAAAA,QAAO,SAAS,KAAK,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC;AAC/C,eAAOA;AAAA,MACX;AAAA,IACJ;AACA,4CAAwC,OAAO;AAE/C,QAAI;AACJ,QAAM,2BAAN,cAAuC,UAAU;AAAA,MAC7C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,YAAY,uCAAuC;AACzD,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,WAAW;AACP,eAAO,KAAK,WAAW,SAAS;AAAA,MACpC;AAAA,MACA,SAAS,OAAO;AACZ,aAAK,WAAW,WAAW,KAAK;AAAA,MACpC;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,KAAK,WAAW,SAAS,KAAK,OAAO;AAAA,MAC9E;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,OAAO,KAAK,SAAS;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,2BAA2B;AAAA,IACzC,GAAG;AACH,6BAAyB,OAAO;AAEhC,QAAI;AACJ,QAAMO,YAAN,cAAuB,YAAY;AAAA,MAC/B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAOA;AACP,KAAC,MAAM;AACH,gBAAU,WAAW;AAAA,IACzB,GAAG;AACH,IAAAA,UAAS,OAAO;AAEhB,QAAI;AACJ,QAAMC,OAAN,cAAkB,YAAY;AAAA,MAC1B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAOA;AACP,KAAC,MAAM;AACH,gBAAU,MAAM;AAAA,IACpB,GAAG;AACH,IAAAA,KAAI,OAAO;AAEX,QAAM,wBAAN,cAAoC,SAAS,UAAU,EAAE;AAAA,MACrD,YAAY,EAAE,GAAG,WAAW,IAAI,CAAC,GAAG;AAChC,cAAM,UAAU;AAChB,aAAK,YAAY;AACjB,aAAK,QAAQ;AAAA,MACjB;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,OAAO,KAAK;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ;AACA,0BAAsB,OAAO;AAE7B,QAAM,8BAAN,cAA0C,sBAAsB;AAAA,IAChE;AACA,gCAA4B,OAAO;AAEnC,QAAM,yBAAN,cAAqC,gBAAgB;AAAA,MACjD,YAAY,EAAE,GAAG,WAAW,IAAI,CAAC,GAAG;AAChC,cAAM,YAAY,2BAA2B;AAAA,MACjD;AAAA,MACA,WAAW,aAAa;AACpB,aAAK,WAAW,QAAQ,OAAO,aAAa,MAAM,MAAM,qBAAqB,sBAAsB,aAAa,WAAW,CAAC;AAAA,MAChI;AAAA,MACA,WAAW,aAAa;AACpB,cAAM,SAAS,YAAY;AAC3B,cAAM,OAAO,KAAK,WAAW,eAAe,IAAI,WAAW,MAAM;AACjE,iBAAS,IAAI,GAAG,IAAI,QAAQ;AACxB,eAAK,CAAC,IAAI,YAAY,WAAW,CAAC;AACtC,aAAK,WAAW,QAAQ;AAAA,MAC5B;AAAA,IACJ;AACA,2BAAuB,OAAO;AAE9B,QAAM,4BAAN,cAAwC,uBAAuB;AAAA,MAC3D,WAAW,aAAa;AACpB,aAAK,WAAW,eAAe,qBAAqB,sBAAsB,aAAa,WAAW;AAClG,YAAI;AACA,eAAK,WAAW,QAAQ,qBAAqB,QAAQ,aAAa,WAAW;AAAA,QACjF,SACO,IAAI;AACP,eAAK,SAAS,KAAK,sCAAsC,EAAE,oBAAoB;AAC/E,eAAK,WAAW,QAAQ,qBAAqB,QAAQ,SAAS,WAAW;AAAA,QAC7E;AAAA,MACJ;AAAA,MACA,WAAW,aAAa;AACpB,aAAK,WAAW,eAAe,IAAI,WAAW,qBAAqB,QAAQ,eAAe,WAAW,CAAC;AACtG,aAAK,WAAW,QAAQ;AAAA,MAC5B;AAAA,IACJ;AACA,8BAA0B,OAAO;AAEjC,QAAI;AACJ,QAAM,aAAN,cAAyB,0BAA0B;AAAA,MAC/C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,aAAa;AAAA,IAC3B,GAAG;AACH,eAAW,OAAO;AAElB,QAAM,2BAAN,cAAuC,uBAAuB;AAAA,MAC1D,WAAW,aAAa;AACpB,aAAK,WAAW,QAAQ,qBAAqB,QAAQ,cAAc,WAAW;AAC9E,aAAK,WAAW,eAAe,qBAAqB,sBAAsB,aAAa,WAAW;AAAA,MACtG;AAAA,MACA,WAAW,aAAa;AACpB,aAAK,WAAW,QAAQ;AACxB,aAAK,WAAW,eAAe,IAAI,WAAW,qBAAqB,QAAQ,gBAAgB,WAAW,CAAC;AAAA,MAC3G;AAAA,IACJ;AACA,6BAAyB,OAAO;AAEhC,QAAI;AACJ,QAAM,YAAN,cAAwB,yBAAyB;AAAA,MAC7C,YAAY,EAAE,GAAG,WAAW,IAAI,CAAC,GAAG;AAChC,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,YAAY;AAAA,IAC1B,GAAG;AACH,cAAU,OAAO;AAEjB,QAAM,iCAAN,cAA6C,uBAAuB;AAAA,MAChE,WAAW,aAAa;AACpB,cAAM,aAAa,YAAY,OAAO,WAAW,IAAI,YAAY,MAAM,EAAE,SAAS,YAAY,MAAM,CAAC;AACrG,cAAM,YAAY,IAAI,WAAW,UAAU;AAC3C,iBAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;AAC1C,oBAAU,CAAC,IAAI,UAAU,IAAI,CAAC;AAC9B,oBAAU,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC;AAClC,oBAAU,IAAI,CAAC,IAAI;AACnB,oBAAU,IAAI,CAAC,IAAI;AAAA,QACvB;AACA,aAAK,WAAW,QAAQ,OAAO,aAAa,MAAM,MAAM,IAAI,YAAY,UAAU,CAAC;AAAA,MACvF;AAAA,MACA,WAAW,aAAa;AACpB,cAAM,YAAY,YAAY;AAC9B,cAAM,eAAe,KAAK,WAAW,eAAe,IAAI,WAAW,YAAY,CAAC;AAChF,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,gBAAM,UAAU,mBAAmB,WAAW,YAAY,WAAW,CAAC,GAAG,CAAC;AAC1E,gBAAM,WAAW,IAAI,WAAW,OAAO;AACvC,cAAI,SAAS,SAAS;AAClB;AACJ,gBAAM,MAAM,IAAI,SAAS;AACzB,mBAAS,IAAK,SAAS,SAAS,GAAI,KAAK,GAAG;AACxC,yBAAa,IAAI,IAAI,IAAI,GAAG,IAAI,SAAS,CAAC;AAAA,QAClD;AACA,aAAK,WAAW,QAAQ;AAAA,MAC5B;AAAA,IACJ;AACA,mCAA+B,OAAO;AAEtC,QAAI;AACJ,QAAM,kBAAN,cAA8B,+BAA+B;AAAA,MACzD,YAAY,EAAE,GAAG,WAAW,IAAI,CAAC,GAAG;AAChC,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,kBAAkB;AAAA,IAChC,GAAG;AACH,oBAAgB,OAAO;AAEvB,QAAI;AACJ,QAAM,gBAAN,cAA4B,uBAAuB;AAAA,MAC/C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,gBAAgB;AAAA,IAC9B,GAAG;AACH,kBAAc,OAAO;AAErB,QAAI;AACJ,QAAM,kBAAN,cAA8B,uBAAuB;AAAA,MACjD,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,kBAAkB;AAAA,IAChC,GAAG;AACH,oBAAgB,OAAO;AAEvB,QAAI;AACJ,QAAM,gBAAN,cAA4B,uBAAuB;AAAA,MAC/C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,gBAAgB;AAAA,IAC9B,GAAG;AACH,kBAAc,OAAO;AAErB,QAAI;AACJ,QAAM,iBAAN,cAA6B,uBAAuB;AAAA,MAChD,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,iBAAiB;AAAA,IAC/B,GAAG;AACH,mBAAe,OAAO;AAEtB,QAAI;AACJ,QAAM,YAAN,cAAwB,uBAAuB;AAAA,MAC3C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,YAAY;AAAA,IAC1B,GAAG;AACH,cAAU,OAAO;AAEjB,QAAI;AACJ,QAAM,gBAAN,cAA4B,uBAAuB;AAAA,MAC/C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,gBAAgB;AAAA,IAC9B,GAAG;AACH,kBAAc,OAAO;AAErB,QAAI;AACJ,QAAM,gBAAN,cAA4B,uBAAuB;AAAA,MAC/C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,gBAAgB;AAAA,IAC9B,GAAG;AACH,kBAAc,OAAO;AAErB,QAAI;AACJ,QAAM,gBAAN,cAA4B,uBAAuB;AAAA,MAC/C,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,gBAAgB;AAAA,IAC9B,GAAG;AACH,kBAAc,OAAO;AAErB,QAAI;AACJ,QAAM,kBAAN,cAA8B,uBAAuB;AAAA,MACjD,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,kBAAkB;AAAA,IAChC,GAAG;AACH,oBAAgB,OAAO;AAEvB,QAAI;AACJ,QAAM,UAAN,cAAsB,cAAc;AAAA,MAChC,YAAY,EAAE,OAAO,WAAW,GAAG,WAAW,IAAI,CAAC,GAAG;AAClD,cAAM,UAAU;AAChB,aAAK,OAAO;AACZ,aAAK,QAAQ;AACb,aAAK,MAAM;AACX,aAAK,OAAO;AACZ,aAAK,SAAS;AACd,aAAK,SAAS;AACd,YAAI,OAAO;AACP,eAAK,WAAW,KAAK;AACrB,eAAK,WAAW,eAAe,IAAI,WAAW,MAAM,MAAM;AAC1D,mBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ;AAC9B,iBAAK,WAAW,aAAa,CAAC,IAAI,MAAM,WAAW,CAAC;AAAA,QAC5D;AACA,YAAI,WAAW;AACX,eAAK,SAAS,SAAS;AACvB,eAAK,WAAW,eAAe,IAAI,WAAW,KAAK,SAAS,CAAC;AAAA,QACjE;AACA,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,WAAW,aAAa;AACpB,aAAK,WAAW,OAAO,aAAa,MAAM,MAAM,qBAAqB,sBAAsB,aAAa,WAAW,CAAC,CAAC;AAAA,MACzH;AAAA,MACA,WAAW;AACP,cAAM,MAAM,KAAK,SAAS;AAC1B,cAAM,SAAS,IAAI,YAAY,IAAI,MAAM;AACzC,cAAM,OAAO,IAAI,WAAW,MAAM;AAClC,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAC5B,eAAK,CAAC,IAAI,IAAI,WAAW,CAAC;AAC9B,eAAO;AAAA,MACX;AAAA,MACA,SAAS,WAAW;AAChB,aAAK,OAAO,UAAU,eAAe;AACrC,aAAK,QAAQ,UAAU,YAAY,IAAI;AACvC,aAAK,MAAM,UAAU,WAAW;AAChC,aAAK,OAAO,UAAU,YAAY;AAClC,aAAK,SAAS,UAAU,cAAc;AACtC,aAAK,SAAS,UAAU,cAAc;AAAA,MAC1C;AAAA,MACA,SAAS;AACL,eAAQ,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,MAAM,CAAC;AAAA,MACvG;AAAA,MACA,WAAW,aAAa;AACpB,cAAM,SAAS;AACf,cAAM,cAAc,OAAO,KAAK,WAAW;AAC3C,YAAI,gBAAgB,MAAM;AACtB,eAAK,QAAQ;AACb;AAAA,QACJ;AACA,cAAM,OAAO,SAAS,YAAY,CAAC,GAAG,EAAE;AACxC,YAAI,QAAQ;AACR,eAAK,OAAO,OAAO;AAAA;AAEnB,eAAK,OAAO,MAAO;AACvB,aAAK,QAAQ,SAAS,YAAY,CAAC,GAAG,EAAE;AACxC,aAAK,MAAM,SAAS,YAAY,CAAC,GAAG,EAAE;AACtC,aAAK,OAAO,SAAS,YAAY,CAAC,GAAG,EAAE;AACvC,aAAK,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE;AACzC,aAAK,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE;AAAA,MAC7C;AAAA,MACA,SAAS,WAAW,OAAO;AACvB,YAAI,aAAa,OAAO;AACpB,gBAAM,cAAc,IAAI,MAAM,CAAC;AAC/B,sBAAY,CAAC,IAAI,mBAAmB,UAAY,KAAK,OAAO,MAAS,KAAK,OAAO,OAAS,KAAK,OAAO,KAAQ,CAAC;AAC/G,sBAAY,CAAC,IAAI,mBAAmB,UAAU,KAAK,OAAO,CAAC;AAC3D,sBAAY,CAAC,IAAI,mBAAmB,UAAU,KAAK,KAAK,CAAC;AACzD,sBAAY,CAAC,IAAI,mBAAmB,UAAU,KAAK,MAAM,CAAC;AAC1D,sBAAY,CAAC,IAAI,mBAAmB,UAAU,KAAK,QAAQ,CAAC;AAC5D,sBAAY,CAAC,IAAI,mBAAmB,UAAU,KAAK,QAAQ,CAAC;AAC5D,sBAAY,CAAC,IAAI;AACjB,iBAAO,YAAY,KAAK,EAAE;AAAA,QAC9B;AACA,eAAO,MAAM,SAAS,QAAQ;AAAA,MAClC;AAAA,MACA,kBAAkB;AACd,eAAO,GAAG,KAAK,YAAY,IAAI,MAAM,KAAK,OAAO,EAAE,YAAY,CAAC;AAAA,MACpE;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,MAAM,KAAK;AAAA,UACX,OAAO,KAAK;AAAA,UACZ,KAAK,KAAK;AAAA,UACV,MAAM,KAAK;AAAA,UACX,QAAQ,KAAK;AAAA,UACb,QAAQ,KAAK;AAAA,QACjB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,UAAU;AAAA,IACxB,GAAG;AACH,YAAQ,OAAO;AAEf,QAAI;AACJ,QAAM,kBAAN,cAA8B,QAAQ;AAAA,MAClC,YAAY,aAAa,CAAC,GAAG;AACzB,YAAI;AACJ,cAAM,UAAU;AAChB,SAAC,KAAK,KAAK,iBAAiB,QAAQ,OAAO,SAAS,KAAM,KAAK,cAAc;AAC7E,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,MACA,SAAS,WAAW;AAChB,cAAM,SAAS,SAAS;AACxB,aAAK,cAAc,UAAU,mBAAmB;AAAA,MACpD;AAAA,MACA,SAAS;AACL,eAAQ,IAAI,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK,WAAW,CAAC;AAAA,MACzH;AAAA,MACA,WAAW,aAAa;AACpB,YAAI,QAAQ;AACZ,YAAI,aAAa;AACjB,YAAI,iBAAiB;AACrB,YAAI,eAAe;AACnB,YAAI;AACJ,YAAI,iBAAiB;AACrB,YAAI,mBAAmB;AACvB,YAAI,YAAY,YAAY,SAAS,CAAC,MAAM,KAAK;AAC7C,uBAAa,YAAY,UAAU,GAAG,YAAY,SAAS,CAAC;AAC5D,kBAAQ;AAAA,QACZ,OACK;AACD,gBAAMV,UAAS,IAAI,OAAO,YAAY,YAAY,SAAS,CAAC,CAAC;AAC7D,cAAI,MAAMA,QAAO,QAAQ,CAAC;AACtB,kBAAM,IAAI,MAAM,mCAAmC;AACvD,uBAAa;AAAA,QACjB;AACA,YAAI,OAAO;AACP,cAAI,WAAW,QAAQ,GAAG,MAAM;AAC5B,kBAAM,IAAI,MAAM,mCAAmC;AACvD,cAAI,WAAW,QAAQ,GAAG,MAAM;AAC5B,kBAAM,IAAI,MAAM,mCAAmC;AAAA,QAC3D,OACK;AACD,cAAI,aAAa;AACjB,cAAI,qBAAqB,WAAW,QAAQ,GAAG;AAC/C,cAAI,mBAAmB;AACvB,cAAI,uBAAuB,IAAI;AAC3B,iCAAqB,WAAW,QAAQ,GAAG;AAC3C,yBAAa;AAAA,UACjB;AACA,cAAI,uBAAuB,IAAI;AAC3B,+BAAmB,WAAW,UAAU,qBAAqB,CAAC;AAC9D,yBAAa,WAAW,UAAU,GAAG,kBAAkB;AACvD,gBAAK,iBAAiB,WAAW,KAAO,iBAAiB,WAAW;AAChE,oBAAM,IAAI,MAAM,mCAAmC;AACvD,gBAAIA,UAAS,SAAS,iBAAiB,UAAU,GAAG,CAAC,GAAG,EAAE;AAC1D,gBAAI,MAAMA,QAAO,QAAQ,CAAC;AACtB,oBAAM,IAAI,MAAM,mCAAmC;AACvD,6BAAiB,aAAaA;AAC9B,gBAAI,iBAAiB,WAAW,GAAG;AAC/B,cAAAA,UAAS,SAAS,iBAAiB,UAAU,GAAG,CAAC,GAAG,EAAE;AACtD,kBAAI,MAAMA,QAAO,QAAQ,CAAC;AACtB,sBAAM,IAAI,MAAM,mCAAmC;AACvD,iCAAmB,aAAaA;AAAA,YACpC;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,wBAAwB,WAAW,QAAQ,GAAG;AAClD,YAAI,0BAA0B;AAC1B,kCAAwB,WAAW,QAAQ,GAAG;AAClD,YAAI,0BAA0B,IAAI;AAC9B,gBAAM,oBAAoB,IAAI,OAAO,IAAI,WAAW,UAAU,qBAAqB,CAAC,EAAE;AACtF,cAAI,MAAM,kBAAkB,QAAQ,CAAC;AACjC,kBAAM,IAAI,MAAM,mCAAmC;AACvD,yBAAe,kBAAkB,QAAQ;AACzC,2BAAiB,WAAW,UAAU,GAAG,qBAAqB;AAAA,QAClE;AAEI,2BAAiB;AACrB,gBAAQ,MAAM;AAAA,UACV,KAAM,eAAe,WAAW;AAC5B,qBAAS;AACT,gBAAI,0BAA0B;AAC1B,oBAAM,IAAI,MAAM,mCAAmC;AACvD;AAAA,UACJ,KAAM,eAAe,WAAW;AAC5B,qBAAS;AACT,gBAAI,0BAA0B,IAAI;AAC9B,kBAAI,iBAAiB,KAAK;AAC1B,mBAAK,SAAS,KAAK,MAAM,cAAc;AACvC,+BAAiB,MAAM,iBAAiB,KAAK;AAC7C,mBAAK,SAAS,KAAK,MAAM,cAAc;AACvC,+BAAiB,OAAQ,iBAAiB,KAAK;AAC/C,mBAAK,cAAc,KAAK,MAAM,cAAc;AAAA,YAChD;AACA;AAAA,UACJ,KAAM,eAAe,WAAW;AAC5B,qBAAS;AACT,gBAAI,0BAA0B,IAAI;AAC9B,kBAAI,iBAAiB,KAAK;AAC1B,mBAAK,SAAS,KAAK,MAAM,cAAc;AACvC,+BAAiB,OAAQ,iBAAiB,KAAK;AAC/C,mBAAK,cAAc,KAAK,MAAM,cAAc;AAAA,YAChD;AACA;AAAA,UACJ,KAAM,eAAe,WAAW;AAC5B,qBAAS;AACT,gBAAI,0BAA0B,IAAI;AAC9B,oBAAM,iBAAiB,MAAO;AAC9B,mBAAK,cAAc,KAAK,MAAM,cAAc;AAAA,YAChD;AACA;AAAA,UACJ;AACI,kBAAM,IAAI,MAAM,mCAAmC;AAAA,QAC3D;AACA,cAAM,cAAc,OAAO,KAAK,cAAc;AAC9C,YAAI,gBAAgB;AAChB,gBAAM,IAAI,MAAM,mCAAmC;AACvD,iBAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AACzC,kBAAQ,GAAG;AAAA,YACP,KAAK;AACD,mBAAK,OAAO,SAAS,YAAY,CAAC,GAAG,EAAE;AACvC;AAAA,YACJ,KAAK;AACD,mBAAK,QAAQ,SAAS,YAAY,CAAC,GAAG,EAAE;AACxC;AAAA,YACJ,KAAK;AACD,mBAAK,MAAM,SAAS,YAAY,CAAC,GAAG,EAAE;AACtC;AAAA,YACJ,KAAK;AACD,mBAAK,OAAO,SAAS,YAAY,CAAC,GAAG,EAAE,IAAI;AAC3C;AAAA,YACJ,KAAK;AACD,mBAAK,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE,IAAI;AAC7C;AAAA,YACJ,KAAK;AACD,mBAAK,SAAS,SAAS,YAAY,CAAC,GAAG,EAAE;AACzC;AAAA,YACJ;AACI,oBAAM,IAAI,MAAM,mCAAmC;AAAA,UAC3D;AAAA,QACJ;AACA,YAAI,UAAU,OAAO;AACjB,gBAAM,WAAW,IAAI,KAAK,KAAK,MAAM,KAAK,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,QAAQ,KAAK,QAAQ,KAAK,WAAW;AAChH,eAAK,OAAO,SAAS,eAAe;AACpC,eAAK,QAAQ,SAAS,YAAY;AAClC,eAAK,MAAM,SAAS,UAAU;AAC9B,eAAK,OAAO,SAAS,YAAY;AACjC,eAAK,SAAS,SAAS,cAAc;AACrC,eAAK,SAAS,SAAS,cAAc;AACrC,eAAK,cAAc,SAAS,mBAAmB;AAAA,QACnD;AAAA,MACJ;AAAA,MACA,SAAS,WAAW,OAAO;AACvB,YAAI,aAAa,OAAO;AACpB,gBAAM,cAAc,CAAC;AACrB,sBAAY,KAAK,mBAAmB,UAAU,KAAK,MAAM,CAAC,CAAC;AAC3D,sBAAY,KAAK,mBAAmB,UAAU,KAAK,OAAO,CAAC,CAAC;AAC5D,sBAAY,KAAK,mBAAmB,UAAU,KAAK,KAAK,CAAC,CAAC;AAC1D,sBAAY,KAAK,mBAAmB,UAAU,KAAK,MAAM,CAAC,CAAC;AAC3D,sBAAY,KAAK,mBAAmB,UAAU,KAAK,QAAQ,CAAC,CAAC;AAC7D,sBAAY,KAAK,mBAAmB,UAAU,KAAK,QAAQ,CAAC,CAAC;AAC7D,cAAI,KAAK,gBAAgB,GAAG;AACxB,wBAAY,KAAK,GAAG;AACpB,wBAAY,KAAK,mBAAmB,UAAU,KAAK,aAAa,CAAC,CAAC;AAAA,UACtE;AACA,sBAAY,KAAK,GAAG;AACpB,iBAAO,YAAY,KAAK,EAAE;AAAA,QAC9B;AACA,eAAO,MAAM,SAAS,QAAQ;AAAA,MAClC;AAAA,MACA,SAAS;AACL,eAAO;AAAA,UACH,GAAG,MAAM,OAAO;AAAA,UAChB,aAAa,KAAK;AAAA,QACtB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,kBAAkB;AAAA,IAChC,GAAG;AACH,oBAAgB,OAAO;AAEvB,QAAI;AACJ,QAAM,OAAN,cAAmB,WAAW;AAAA,MAC1B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,OAAO;AAAA,IACrB,GAAG;AACH,SAAK,OAAO;AAEZ,QAAI;AACJ,QAAM,YAAN,cAAwB,WAAW;AAAA,MAC/B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,YAAY;AAAA,IAC1B,GAAG;AACH,cAAU,OAAO;AAEjB,QAAI;AACJ,QAAM,WAAN,cAAuB,WAAW;AAAA,MAC9B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,WAAW;AAAA,IACzB,GAAG;AACH,aAAS,OAAO;AAEhB,QAAI;AACJ,QAAM,WAAN,cAAuB,WAAW;AAAA,MAC9B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,WAAO;AACP,KAAC,MAAM;AACH,gBAAU,WAAW;AAAA,IACzB,GAAG;AACH,aAAS,OAAO;AAEhB,QAAIF;AACJ,QAAM,OAAN,cAAmB,WAAW;AAAA,MAC1B,YAAY,aAAa,CAAC,GAAG;AACzB,cAAM,UAAU;AAChB,aAAK,QAAQ,WAAW;AACxB,aAAK,QAAQ,YAAY;AAAA,MAC7B;AAAA,IACJ;AACA,IAAAA,MAAK;AACL,KAAC,MAAM;AACH,gBAAU,OAAOA;AAAA,IACrB,GAAG;AACH,SAAK,OAAO;AAEZ,QAAM,MAAN,MAAU;AAAA,MACN,YAAY,EAAE,OAAO,cAAc,WAAW,MAAO,IAAI,CAAC,GAAG;AACzD,aAAK,OAAO;AACZ,aAAK,WAAW;AAAA,MACpB;AAAA,IACJ;AAEA,QAAM,SAAN,cAAqB,IAAI;AAAA,MACrB,YAAY,EAAE,QAAQ,CAAC,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG;AAC5C,cAAM,UAAU;AAChB,aAAK,QAAQ;AAAA,MACjB;AAAA,IACJ;AAEA,QAAM,WAAN,cAAuB,IAAI;AAAA,MACvB,YAAY,EAAE,QAAQ,IAAI,IAAI,GAAG,QAAQ,OAAO,GAAG,WAAW,IAAI,CAAC,GAAG;AAClE,cAAM,UAAU;AAChB,aAAK,QAAQ;AACb,aAAK,QAAQ;AAAA,MACjB;AAAA,IACJ;AAEA,QAAM,UAAN,MAAc;AAAA,MACV,YAAY,EAAE,MAAAa,QAAO,WAAW,IAAI,CAAC,GAAG;AACpC,aAAK,WAAW,qBAAqB,sBAAsB,aAAaA,KAAI;AAAA,MAChF;AAAA,MACA,IAAI,OAAO;AACP,eAAO,KAAK,SAAS,MAAM,EAAE;AAAA,MACjC;AAAA,MACA,IAAI,KAAK,OAAO;AACZ,aAAK,WAAW,qBAAqB,sBAAsB,aAAa,KAAK;AAAA,MACjF;AAAA,MACA,QAAQ,aAAa,aAAa,aAAa;AAC3C,cAAM,YAAY,cAAc;AAChC,aAAK,WAAW,qBAAqB,sBAAsB,aAAa,WAAW,EAAE,SAAS,aAAa,SAAS;AACpH,eAAO;AAAA,MACX;AAAA,MACA,MAAM,UAAU;AACZ,eAAO,KAAK,SAAS,MAAM,EAAE;AAAA,MACjC;AAAA,IACJ;AAEA,aAAS,cAAc,MAAM,WAAW,aAAa;AACjD,UAAI,uBAAuB,QAAQ;AAC/B,iBAAS,IAAI,GAAG,IAAI,YAAY,MAAM,QAAQ,KAAK;AAC/C,gBAAM,SAAS,cAAc,MAAM,WAAW,YAAY,MAAM,CAAC,CAAC;AAClE,cAAI,OAAO,UAAU;AACjB,mBAAO;AAAA,cACH,UAAU;AAAA,cACV,QAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AACA;AACI,gBAAM,UAAU;AAAA,YACZ,UAAU;AAAA,YACV,QAAQ;AAAA,cACJ,OAAO;AAAA,YACX;AAAA,UACJ;AACA,cAAI,YAAY,eAAe,IAAI;AAC/B,oBAAQ,OAAO,YAAY;AAC/B,iBAAO;AAAA,QACX;AAAA,MACJ;AACA,UAAI,uBAAuB,KAAK;AAC5B,YAAI,YAAY,eAAe,IAAI;AAC/B,eAAK,YAAY,IAAI,IAAI;AAC7B,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAK,gBAAgB,WAAY,OAAO;AACpC,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,oBAAoB;AAAA,QACzC;AAAA,MACJ;AACA,UAAK,qBAAqB,WAAY,OAAO;AACzC,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,mBAAmB;AAAA,QACxC;AAAA,MACJ;AACA,UAAK,uBAAuB,WAAY,OAAO;AAC3C,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAK,YAAY,gBAAiB,OAAO;AACrC,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAK,YAAY,YAAY,YAAa,OAAO;AAC7C,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAK,UAAU,YAAY,YAAa,OAAO;AAC3C,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,YAAM,YAAY,YAAY,QAAQ,MAAM,KAAK;AACjD,UAAI,UAAU,eAAe,GAAG;AAC5B,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,0CAA0C;AAAA,QAC/D;AAAA,MACJ;AACA,YAAM,gBAAgB,YAAY,QAAQ,QAAQ,WAAW,GAAG,UAAU,UAAU;AACpF,UAAI,kBAAkB,IAAI;AACtB,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,0CAA0C;AAAA,QAC/D;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,eAAe,SAAS,MAAM,OAAO;AACzD,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,aAAa,UAAU,QAAQ,UAAU;AAC7D,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,eAAe,UAAU,MAAM,OAAO;AAC1D,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,cAAc,UAAU,QAAQ,WAAW;AAC/D,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,eAAe,cAAc,MAAM,OAAO;AAC9D,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,kBAAkB,UAAU,QAAQ,eAAe;AACvE,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,EAAE,eAAe,YAAY,UAAU;AACvC,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,QAC1C;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,cAAc,UAAU,QAAQ,WAAW;AAC/D,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,YAAY,QAAQ,WAAW;AAC/B,YAAK,kBAAkB,YAAY,YAAa,OAAO;AACnD,iBAAO;AAAA,YACH,UAAU;AAAA,YACV,QAAQ,EAAE,OAAO,qBAAqB;AAAA,UAC1C;AAAA,QACJ;AACA,cAAM,aAAa,YAAY,QAAQ;AACvC,cAAM,WAAW,UAAU,QAAQ;AACnC,YAAI,WAAW,WAAW,SAAS,QAAQ;AACvC,iBAAO;AAAA,YACH,UAAU;AAAA,YACV,QAAQ;AAAA,UACZ;AAAA,QACJ;AACA,iBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;AACxC,cAAI,WAAW,CAAC,MAAM,SAAS,CAAC,GAAG;AAC/B,mBAAO;AAAA,cACH,UAAU;AAAA,cACV,QAAQ;AAAA,YACZ;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,YAAY,MAAM;AAClB,oBAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,YAAI,YAAY;AACZ,eAAK,YAAY,IAAI,IAAI;AAAA,MACjC;AACA,UAAI,uBAAuB,UAAU,aAAa;AAC9C,YAAI,YAAY;AAChB,YAAI,SAAS;AAAA,UACT,UAAU;AAAA,UACV,QAAQ;AAAA,YACJ,OAAO;AAAA,UACX;AAAA,QACJ;AACA,YAAI,YAAY,YAAY,WAAW,MAAM;AAC7C,YAAI,YAAY,GAAG;AACf,cAAI,YAAY,WAAW,MAAM,CAAC,aAAa,UAAU;AACrD,wBAAY,UAAU,WAAW,MAAM;AAAA,UAC3C;AAAA,QACJ;AACA,YAAI,cAAc,GAAG;AACjB,iBAAO;AAAA,YACH,UAAU;AAAA,YACV,QAAQ;AAAA,UACZ;AAAA,QACJ;AACA,YAAK,UAAU,WAAW,MAAM,WAAW,KACtC,YAAY,WAAW,MAAM,WAAW,GAAI;AAC7C,cAAI,YAAY;AAChB,mBAAS,IAAI,GAAG,IAAI,YAAY,WAAW,MAAM,QAAQ;AACrD,wBAAY,cAAc,YAAY,WAAW,MAAM,CAAC,EAAE,YAAY;AAC1E,cAAI,WAAW;AACX,mBAAO;AAAA,cACH,UAAU;AAAA,cACV,QAAQ;AAAA,YACZ;AAAA,UACJ;AACA,cAAI,YAAY,MAAM;AAClB,wBAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,gBAAI,YAAY;AACZ,qBAAO,KAAK,YAAY,IAAI;AAAA,UACpC;AACA,eAAK,QAAQ;AACb,iBAAO;AAAA,YACH,UAAU;AAAA,YACV,QAAQ;AAAA,UACZ;AAAA,QACJ;AACA,iBAAS,IAAI,GAAG,IAAI,WAAW,KAAK;AAChC,cAAK,IAAI,aAAc,UAAU,WAAW,MAAM,QAAQ;AACtD,gBAAI,YAAY,WAAW,MAAM,CAAC,EAAE,aAAa,OAAO;AACpD,oBAAM,UAAU;AAAA,gBACZ,UAAU;AAAA,gBACV,QAAQ;AAAA,cACZ;AACA,mBAAK,QAAQ;AACb,kBAAI,YAAY,MAAM;AAClB,4BAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,oBAAI,YAAY,MAAM;AAClB,yBAAO,KAAK,YAAY,IAAI;AAC5B,0BAAQ,OAAO,YAAY;AAAA,gBAC/B;AAAA,cACJ;AACA,qBAAO;AAAA,YACX;AAAA,UACJ,OACK;AACD,gBAAI,YAAY,WAAW,MAAM,CAAC,aAAa,UAAU;AACrD,uBAAS,cAAc,MAAM,UAAU,WAAW,MAAM,CAAC,GAAG,YAAY,WAAW,MAAM,CAAC,EAAE,KAAK;AACjG,kBAAI,OAAO,aAAa,OAAO;AAC3B,oBAAI,YAAY,WAAW,MAAM,CAAC,EAAE;AAChC;AAAA,qBACC;AACD,sBAAI,YAAY,MAAM;AAClB,gCAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,wBAAI,YAAY;AACZ,6BAAO,KAAK,YAAY,IAAI;AAAA,kBACpC;AACA,yBAAO;AAAA,gBACX;AAAA,cACJ;AACA,kBAAK,QAAQ,YAAY,WAAW,MAAM,CAAC,KAAO,YAAY,WAAW,MAAM,CAAC,EAAE,KAAK,SAAS,GAAI;AAChG,oBAAI,YAAY,CAAC;AACjB,oBAAK,SAAS,YAAY,WAAW,MAAM,CAAC,KAAO,YAAY,WAAW,MAAM,CAAC,EAAE;AAC/E,8BAAY;AAAA;AAEZ,8BAAY;AAChB,oBAAI,OAAO,UAAU,YAAY,WAAW,MAAM,CAAC,EAAE,IAAI,MAAM;AAC3D,4BAAU,YAAY,WAAW,MAAM,CAAC,EAAE,IAAI,IAAI,CAAC;AACvD,0BAAU,YAAY,WAAW,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,UAAU,WAAW,MAAM,CAAC,CAAC;AAAA,cACtF;AAAA,YACJ,OACK;AACD,uBAAS,cAAc,MAAM,UAAU,WAAW,MAAM,IAAI,SAAS,GAAG,YAAY,WAAW,MAAM,CAAC,CAAC;AACvG,kBAAI,OAAO,aAAa,OAAO;AAC3B,oBAAI,YAAY,WAAW,MAAM,CAAC,EAAE;AAChC;AAAA,qBACC;AACD,sBAAI,YAAY,MAAM;AAClB,gCAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,wBAAI,YAAY;AACZ,6BAAO,KAAK,YAAY,IAAI;AAAA,kBACpC;AACA,yBAAO;AAAA,gBACX;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ;AAAA,QACJ;AACA,YAAI,OAAO,aAAa,OAAO;AAC3B,gBAAM,UAAU;AAAA,YACZ,UAAU;AAAA,YACV,QAAQ;AAAA,UACZ;AACA,cAAI,YAAY,MAAM;AAClB,wBAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,gBAAI,YAAY,MAAM;AAClB,qBAAO,KAAK,YAAY,IAAI;AAC5B,sBAAQ,OAAO,YAAY;AAAA,YAC/B;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,QACZ;AAAA,MACJ;AACA,UAAI,YAAY,mBACX,kBAAkB,UAAU,YAAa;AAC1C,cAAM,OAAO,aAAa,UAAU,WAAW,YAAY;AAC3D,YAAI,KAAK,WAAW,IAAI;AACpB,gBAAM,UAAU;AAAA,YACZ,UAAU;AAAA,YACV,QAAQ,KAAK;AAAA,UACjB;AACA,cAAI,YAAY,MAAM;AAClB,wBAAY,OAAO,YAAY,KAAK,QAAQ,cAAc,YAAY;AACtE,gBAAI,YAAY,MAAM;AAClB,qBAAO,KAAK,YAAY,IAAI;AAC5B,sBAAQ,OAAO,YAAY;AAAA,YAC/B;AAAA,UACJ;AACA,iBAAO;AAAA,QACX;AACA,eAAO,cAAc,MAAM,KAAK,QAAQ,YAAY,eAAe;AAAA,MACvE;AACA,aAAO;AAAA,QACH,UAAU;AAAA,QACV,QAAQ;AAAA,MACZ;AAAA,IACJ;AACA,aAASC,cAAa,aAAa,aAAa;AAC5C,UAAK,uBAAuB,WAAY,OAAO;AAC3C,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,EAAE,OAAO,0BAA0B;AAAA,QAC/C;AAAA,MACJ;AACA,YAAM,OAAO,aAAa,qBAAqB,sBAAsB,aAAa,WAAW,CAAC;AAC9F,UAAI,KAAK,WAAW,IAAI;AACpB,eAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ,KAAK;AAAA,QACjB;AAAA,MACJ;AACA,aAAO,cAAc,KAAK,QAAQ,KAAK,QAAQ,WAAW;AAAA,IAC9D;AAEA,IAAAjB,SAAQ,MAAM;AACd,IAAAA,SAAQ,YAAY;AACpB,IAAAA,SAAQ,kBAAkB;AAC1B,IAAAA,SAAQ,YAAY;AACpB,IAAAA,SAAQ,YAAY;AACpB,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,kBAAkB;AAC1B,IAAAA,SAAQ,SAAS;AACjB,IAAAA,SAAQ,cAAc;AACtB,IAAAA,SAAQ,OAAO;AACf,IAAAA,SAAQ,WAAW;AACnB,IAAAA,SAAQ,WAAW;AACnB,IAAAA,SAAQ,eAAe;AACvB,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,kBAAkB;AAC1B,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,WAAW;AACnB,IAAAA,SAAQ,YAAY;AACpB,IAAAA,SAAQ,UAAUW;AAClB,IAAAX,SAAQ,OAAO;AACf,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,mBAAmB;AAC3B,IAAAA,SAAQ,cAAcS;AACtB,IAAAT,SAAQ,YAAYQ;AACpB,IAAAR,SAAQ,kBAAkB;AAC1B,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,2BAA2B;AACnC,IAAAA,SAAQ,WAAW;AACnB,IAAAA,SAAQ,WAAWc;AACnB,IAAAd,SAAQ,MAAMe;AACd,IAAAf,SAAQ,OAAO;AACf,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,YAAY;AACpB,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,kBAAkB;AAC1B,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,iBAAiB;AACzB,IAAAA,SAAQ,aAAa;AACrB,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,gBAAgB;AACxB,IAAAA,SAAQ,UAAU;AAClB,IAAAA,SAAQ,eAAeiB;AAAA;AAAA;;;AC3nGvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAAC,iBAAqB;;;ACErB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAAC;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBAAAC;EAAA;;;mBAAAC;EAAA,cAAAC;EAAA;gBAAAC;EAAA;;;;;;;;;;;;;;;;;;;mBAAAC;EAAA;;;;;ACGO,IAAM,UAAkB;;;ACC/B,SAAS,UAAU,OAAY,MAAc,MAAY;AACrD,QAAM,QAAQ,KAAK,MAAM,GAAG,EAAE,IAAI,OAAK,EAAE,KAAI,CAAE;AAC/C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAQ,MAAM;MACV,KAAK;AACD;MACJ,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;AACD,YAAI,OAAO,UAAW,MAAM;AAAE;;;;AAI1C,QAAM,QAAa,IAAI,MAAM,0BAA2B,IAAK,EAAE;AAC/D,QAAM,OAAO;AACb,QAAM,WAAW,SAAU,IAAK;AAChC,QAAM,QAAQ;AAEd,QAAM;AACV;AAMA,eAAsB,kBAAqB,OAAgD;AACvF,QAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,QAAM,UAAU,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC,MAAM,QAAQ,QAAQ,MAAe,CAAC,CAAC,CAAC,CAAC;AACrF,SAAO,QAAQ,OAAO,CAAC,OAAY,GAAG,UAAS;AAC3C,UAAM,KAAK,KAAK,CAAC,IAAI;AACrB,WAAO;EACX,GAA8B,CAAA,CAAG;AACrC;AAOM,SAAU,iBACf,QACA,QACA,OAAqC;AAElC,WAAS,OAAO,QAAQ;AACpB,QAAI,QAAQ,OAAO,GAAG;AAEtB,UAAM,OAAQ,QAAQ,MAAM,GAAG,IAAG;AAClC,QAAI,MAAM;AAAE,gBAAU,OAAO,MAAM,GAAG;;AAEtC,WAAO,eAAe,QAAQ,KAAK,EAAE,YAAY,MAAM,OAAO,UAAU,MAAK,CAAE;;AAEvF;;;AChCA,SAAS,UAAU,OAAU;AACzB,MAAI,SAAS,MAAM;AAAE,WAAO;;AAE5B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,WAAO,OAAQ,MAAM,IAAI,SAAS,EAAG,KAAK,IAAI,IAAI;;AAGtD,MAAI,iBAAiB,YAAY;AAC7B,UAAM,MAAM;AACZ,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,gBAAU,IAAI,MAAM,CAAC,KAAK,CAAC;AAC3B,gBAAU,IAAI,MAAM,CAAC,IAAI,EAAG;;AAEhC,WAAO;;AAGX,MAAI,OAAO,UAAW,YAAY,OAAO,MAAM,WAAY,YAAY;AACnE,WAAO,UAAU,MAAM,OAAM,CAAE;;AAGnC,UAAQ,OAAO,OAAQ;IACnB,KAAK;IAAW,KAAK;AACjB,aAAO,MAAM,SAAQ;IACzB,KAAK;AACD,aAAO,OAAO,KAAK,EAAE,SAAQ;IACjC,KAAK;AACD,aAAQ,MAAO,SAAQ;IAC3B,KAAK;AACD,aAAO,KAAK,UAAU,KAAK;IAC/B,KAAK,UAAU;AACX,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,WAAK,KAAI;AACT,aAAO,OAAO,KAAK,IAAI,CAAC,MAAM,GAAI,UAAU,CAAC,CAAE,KAAM,UAAU,MAAM,CAAC,CAAC,CAAE,EAAE,EAAE,KAAK,IAAI,IAAI;;;AAIlG,SAAO;AACX;AAyjBM,SAAU,QAA4D,OAAY,MAAO;AAC3F,SAAQ,SAAuB,MAAO,SAAS;AACnD;AAKM,SAAU,gBAAgB,OAAU;AACtC,SAAO,QAAQ,OAAO,gBAAgB;AAC1C;AAYM,SAAU,UAA8D,SAAiB,MAAS,MAAmB;AACvH,MAAI,eAAe;AAEnB;AACI,UAAM,UAAyB,CAAA;AAC/B,QAAI,MAAM;AACN,UAAI,aAAa,QAAQ,UAAU,QAAQ,UAAU,MAAM;AACvD,cAAM,IAAI,MAAM,0CAA2C,UAAU,IAAI,CAAE,EAAE;;AAEjF,iBAAW,OAAO,MAAM;AACpB,YAAI,QAAQ,gBAAgB;AAAE;;AAC9B,cAAM,QAAc,KAAyB,GAAG;AAE5C,gBAAQ,KAAK,MAAM,MAAM,UAAU,KAAK,CAAC;;;AAOrD,YAAQ,KAAK,QAAS,IAAK,EAAE;AAC7B,YAAQ,KAAK,WAAY,OAAQ,EAAE;AAEnC,QAAI,QAAQ,QAAQ;AAChB,iBAAW,OAAO,QAAQ,KAAK,IAAI,IAAI;;;AAI/C,MAAI;AACJ,UAAQ,MAAM;IACV,KAAK;AACD,cAAQ,IAAI,UAAU,OAAO;AAC7B;IACJ,KAAK;IACL,KAAK;AACD,cAAQ,IAAI,WAAW,OAAO;AAC9B;IACJ;AACI,cAAQ,IAAI,MAAM,OAAO;;AAGjC,mBAA2C,OAAO,EAAE,KAAI,CAAE;AAE1D,MAAI,MAAM;AAAE,WAAO,OAAO,OAAO,IAAI;;AAErC,MAAU,MAAO,gBAAgB,MAAM;AACnC,qBAA2C,OAAO,EAAE,aAAY,CAAE;;AAGtE,SAAU;AACd;AAQM,SAAU,OAA2D,OAAgB,SAAiB,MAAS,MAAmB;AACpI,MAAI,CAAC,OAAO;AAAE,UAAM,UAAU,SAAS,MAAM,IAAI;;AACrD;AAUM,SAAU,eAAe,OAAgB,SAAiB,MAAc,OAAc;AACxF,SAAO,OAAO,SAAS,oBAAoB,EAAE,UAAU,MAAM,MAAY,CAAE;AAC/E;AAEM,SAAU,oBAAoB,OAAe,eAAuB,SAAgB;AACtF,MAAI,WAAW,MAAM;AAAE,cAAU;;AACjC,MAAI,SAAS;AAAE,cAAU,OAAO;;AAEhC,SAAO,SAAS,eAAe,qBAAqB,SAAS,oBAAoB;IAC7E;IACA;GACH;AAED,SAAO,SAAS,eAAe,uBAAuB,SAAS,uBAAuB;IAClF;IACA;GACH;AACL;AAEA,IAAM,kBAAkB,CAAC,OAAO,OAAO,QAAQ,MAAM,EAAE,OAAO,CAAC,OAAO,SAAQ;AAC1E,MAAI;AAGA,QAAI,OAAO,UAAU,IAAI,MAAM,QAAQ;AAAE,YAAM,IAAI,MAAM,KAAK;;AAAI;AAGlE,QAAI,SAAS,OAAO;AAChB,YAAM,QAAQ,OAAO,aAAa,GAAI,EAAE,UAAU,KAAK;AACvD,YAAM,WAAW,OAAO,aAAa,KAAM,GAAM;AAEjD,UAAI,UAAU,UAAU;AAAE,cAAM,IAAI,MAAM,QAAQ;;;AAItD,UAAM,KAAK,IAAI;WACX,OAAO;EAAA;AAEf,SAAO;AACX,GAAkB,CAAA,CAAE;AAKd,SAAU,gBAAgB,MAAY;AACxC,SAAO,gBAAgB,QAAQ,IAAI,KAAK,GAAG,+CAA+C,yBAAyB;IAC/G,WAAW;IAA8B,MAAM,EAAE,KAAI;GACxD;AACL;AAQM,SAAU,cAAc,YAAiB,OAAY,WAAkB;AACzE,MAAI,aAAa,MAAM;AAAE,gBAAY;;AACrC,MAAI,eAAe,OAAO;AACtB,QAAI,SAAS,WAAW,YAAY;AACpC,QAAI,WAAW;AACX,gBAAU;AACV,mBAAa,MAAM;;AAEvB,WAAO,OAAO,4BAA6B,MAAO,iBAAiB,yBAAyB;MACxF;KACH;;AAET;;;AC7vBA,SAAS,UAAU,OAAkB,MAAeC,OAAc;AAC9D,MAAI,iBAAiB,YAAY;AAC7B,QAAIA,OAAM;AAAE,aAAO,IAAI,WAAW,KAAK;;AACvC,WAAO;;AAGX,MAAI,OAAO,UAAW,YAAY,MAAM,MAAM,4BAA4B,GAAG;AACzE,UAAM,SAAS,IAAI,YAAY,MAAM,SAAS,KAAK,CAAC;AACpD,QAAI,SAAS;AACb,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,aAAO,CAAC,IAAI,SAAS,MAAM,UAAU,QAAQ,SAAS,CAAC,GAAG,EAAE;AAC5D,gBAAU;;AAEd,WAAO;;AAGX,iBAAe,OAAO,2BAA2B,QAAQ,SAAS,KAAK;AAC3E;AASM,SAAU,SAAS,OAAkB,MAAa;AACpD,SAAO,UAAU,OAAO,MAAM,KAAK;AACvC;AASM,SAAU,aAAa,OAAkB,MAAa;AACxD,SAAO,UAAU,OAAO,MAAM,IAAI;AACtC;AAUM,SAAU,YAAY,OAAY,QAAyB;AAC7D,MAAI,OAAO,UAAW,YAAY,CAAC,MAAM,MAAM,kBAAkB,GAAG;AAChE,WAAO;;AAGX,MAAI,OAAO,WAAY,YAAY,MAAM,WAAW,IAAI,IAAI,QAAQ;AAAE,WAAO;;AAC7E,MAAI,WAAW,QAAS,MAAM,SAAS,MAAO,GAAG;AAAE,WAAO;;AAE1D,SAAO;AACX;AAMM,SAAU,YAAY,OAAU;AAClC,SAAQ,YAAY,OAAO,IAAI,KAAM,iBAAiB;AAC1D;AAEA,IAAM,gBAAwB;AAKxB,SAAU,QAAQC,OAAe;AACnC,QAAMC,SAAQ,SAASD,KAAI;AAE3B,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAIC,OAAM,QAAQ,KAAK;AACnC,UAAM,IAAIA,OAAM,CAAC;AACjB,cAAU,eAAe,IAAI,QAAS,CAAC,IAAI,cAAc,IAAI,EAAI;;AAErE,SAAO;AACX;AAMM,SAAU,OAAO,OAA+B;AAClD,SAAO,OAAO,MAAM,IAAI,CAAC,MAAM,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE;AACnE;AAKM,SAAU,WAAWD,OAAe;AACtC,MAAI,YAAYA,OAAM,IAAI,GAAG;AAAE,YAAQA,MAAK,SAAS,KAAK;;AAC1D,SAAO,SAASA,KAAI,EAAE;AAC1B;AAQM,SAAU,UAAUA,OAAiB,OAAgB,KAAY;AACnE,QAAMC,SAAQ,SAASD,KAAI;AAC3B,MAAI,OAAO,QAAQ,MAAMC,OAAM,QAAQ;AACnC,WAAO,OAAO,mCAAmC,kBAAkB;MAC/D,QAAQA;MAAO,QAAQA,OAAM;MAAQ,QAAQ;KAChD;;AAEL,SAAO,QAAQA,OAAM,MAAO,SAAS,OAAQ,IAAG,OAAQ,OAAO,OAAQA,OAAM,SAAQ,GAAG,CAAC;AAC7F;AAMM,SAAU,eAAeD,OAAe;AAC1C,MAAIC,SAAQ,QAAQD,KAAI,EAAE,UAAU,CAAC;AACrC,SAAOC,OAAM,WAAW,IAAI,GAAG;AAAE,IAAAA,SAAQA,OAAM,UAAU,CAAC;;AAC1D,SAAO,OAAOA;AAClB;AAEA,SAAS,QAAQD,OAAiB,QAAgB,MAAa;AAC3D,QAAMC,SAAQ,SAASD,KAAI;AAC3B,SAAO,UAAUC,OAAM,QAAQ,+BAA+B,kBAAkB;IAC5E,QAAQ,IAAI,WAAWA,MAAK;IAC5B;IACA,QAAQ,SAAS;GACpB;AAED,QAAM,SAAS,IAAI,WAAW,MAAM;AACpC,SAAO,KAAK,CAAC;AACb,MAAI,MAAM;AACN,WAAO,IAAIA,QAAO,SAASA,OAAM,MAAM;SACpC;AACH,WAAO,IAAIA,QAAO,CAAC;;AAGvB,SAAO,QAAQ,MAAM;AACzB;AAYM,SAAU,aAAaD,OAAiB,QAAc;AACxD,SAAO,QAAQA,OAAM,QAAQ,IAAI;AACrC;AAYM,SAAU,aAAaA,OAAiB,QAAc;AACxD,SAAO,QAAQA,OAAM,QAAQ,KAAK;AACtC;;;ACjLA,IAAM,OAAO,OAAO,CAAC;AACrB,IAAM,OAAO,OAAO,CAAC;AAMrB,IAAM,WAAW;AAQX,SAAU,SAASE,SAAsB,QAAe;AAC1D,QAAM,QAAQ,QAAQA,SAAQ,OAAO;AACrC,QAAM,QAAQ,OAAO,UAAU,QAAQ,OAAO,CAAC;AAE/C,SAAQ,SAAS,UAAW,MAAM,YAAY,iBAAiB;IAC3D,WAAW;IAAY,OAAO;IAAY,OAAOA;GACpD;AAGD,MAAI,SAAU,QAAQ,MAAO;AACzB,UAAMC,SAAQ,QAAQ,SAAS;AAC/B,WAAO,GAAI,CAAC,QAASA,SAAQ;;AAGjC,SAAO;AACX;AAQM,SAAU,OAAOD,SAAsB,QAAe;AACxD,MAAI,QAAQ,UAAUA,SAAQ,OAAO;AACrC,QAAM,QAAQ,OAAO,UAAU,QAAQ,OAAO,CAAC;AAE/C,QAAM,QAAS,QAAS,QAAQ;AAEhC,MAAI,QAAQ,MAAM;AACd,YAAQ,CAAC;AACT,WAAO,SAAS,OAAO,WAAW,iBAAiB;MAC/C,WAAW;MAAU,OAAO;MAAY,OAAOA;KAClD;AACD,UAAMC,SAAQ,QAAQ,SAAS;AAC/B,YAAS,CAAC,QAASA,SAAQ;SACxB;AACH,WAAO,QAAQ,OAAO,YAAY,iBAAiB;MAC/C,WAAW;MAAU,OAAO;MAAY,OAAOD;KAClD;;AAGL,SAAO;AACX;AAKM,SAAU,KAAKA,SAAsB,OAAc;AACrD,QAAM,QAAQ,QAAQA,SAAQ,OAAO;AACrC,QAAM,OAAO,OAAO,UAAU,OAAO,MAAM,CAAC;AAC5C,SAAO,SAAU,QAAQ,QAAQ;AACrC;AAMM,SAAU,UAAU,OAAqB,MAAa;AACxD,UAAQ,OAAO,OAAQ;IACnB,KAAK;AAAU,aAAO;IACtB,KAAK;AACD,qBAAe,OAAO,UAAU,KAAK,GAAG,aAAa,QAAQ,SAAS,KAAK;AAC3E,qBAAe,SAAS,CAAC,YAAY,SAAS,UAAU,YAAY,QAAQ,SAAS,KAAK;AAC1F,aAAO,OAAO,KAAK;IACvB,KAAK;AACD,UAAI;AACA,YAAI,UAAU,IAAI;AAAE,gBAAM,IAAI,MAAM,cAAc;;AAClD,YAAI,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,MAAM,KAAK;AACtC,iBAAO,CAAC,OAAO,MAAM,UAAU,CAAC,CAAC;;AAErC,eAAO,OAAO,KAAK;eACf,GAAQ;AACZ,uBAAe,OAAO,gCAAiC,EAAE,OAAQ,IAAI,QAAQ,SAAS,KAAK;;;AAGvG,iBAAe,OAAO,8BAA8B,QAAQ,SAAS,KAAK;AAC9E;AAMM,SAAU,QAAQ,OAAqB,MAAa;AACtD,QAAM,SAAS,UAAU,OAAO,IAAI;AACpC,SAAO,UAAU,MAAM,qCAAqC,iBAAiB;IACzE,OAAO;IAAY,WAAW;IAAW;GAC5C;AACD,SAAO;AACX;AAEA,IAAM,UAAU;AAMV,SAAU,SAAS,OAAgC;AACrD,MAAI,iBAAiB,YAAY;AAC7B,QAAI,SAAS;AACb,eAAW,KAAK,OAAO;AACnB,gBAAU,QAAQ,KAAK,CAAC;AACxB,gBAAU,QAAQ,IAAI,EAAI;;AAE9B,WAAO,OAAO,MAAM;;AAGxB,SAAO,UAAU,KAAK;AAC1B;AAMM,SAAU,UAAU,OAAqB,MAAa;AACxD,UAAQ,OAAO,OAAQ;IACnB,KAAK;AACD,qBAAe,SAAS,CAAC,YAAY,SAAS,UAAU,YAAY,QAAQ,SAAS,KAAK;AAC1F,aAAO,OAAO,KAAK;IACvB,KAAK;AACD,qBAAe,OAAO,UAAU,KAAK,GAAG,aAAa,QAAQ,SAAS,KAAK;AAC3E,qBAAe,SAAS,CAAC,YAAY,SAAS,UAAU,YAAY,QAAQ,SAAS,KAAK;AAC1F,aAAO;IACX,KAAK;AACD,UAAI;AACA,YAAI,UAAU,IAAI;AAAE,gBAAM,IAAI,MAAM,cAAc;;AAClD,eAAO,UAAU,OAAO,KAAK,GAAG,IAAI;eAChC,GAAQ;AACZ,uBAAe,OAAO,2BAA4B,EAAE,OAAQ,IAAI,QAAQ,SAAS,KAAK;;;AAGlG,iBAAe,OAAO,yBAAyB,QAAQ,SAAS,KAAK;AACzE;AAOM,SAAU,SAAS,OAAgC;AACrD,SAAO,UAAU,SAAS,KAAK,CAAC;AACpC;AAMM,SAAU,QAAQA,SAAsB,QAAgB;AAC1D,QAAM,QAAQ,QAAQA,SAAQ,OAAO;AAErC,MAAI,SAAS,MAAM,SAAS,EAAE;AAE9B,MAAI,UAAU,MAAM;AAEhB,QAAI,OAAO,SAAS,GAAG;AAAE,eAAS,MAAM;;SACrC;AACH,UAAM,QAAQ,UAAU,QAAQ,OAAO;AACvC,WAAO,QAAQ,KAAK,OAAO,QAAQ,wBAAyB,KAAM,WAAW,iBAAiB;MAC1F,WAAW;MACX,OAAO;MACP,OAAOA;KACV;AAGD,WAAO,OAAO,SAAU,QAAQ,GAAI;AAAE,eAAS,MAAM;;;AAIzD,SAAO,OAAO;AAClB;AAKM,SAAU,UAAUA,SAAoB;AAC1C,QAAM,QAAQ,QAAQA,SAAQ,OAAO;AAErC,MAAI,UAAU,MAAM;AAAE,WAAO,IAAI,WAAW,CAAA,CAAG;;AAE/C,MAAIE,OAAM,MAAM,SAAS,EAAE;AAC3B,MAAIA,KAAI,SAAS,GAAG;AAAE,IAAAA,OAAM,MAAMA;;AAElC,QAAM,SAAS,IAAI,WAAWA,KAAI,SAAS,CAAC;AAC5C,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACpC,UAAM,SAAS,IAAI;AACnB,WAAO,CAAC,IAAI,SAASA,KAAI,UAAU,QAAQ,SAAS,CAAC,GAAG,EAAE;;AAG9D,SAAO;AACX;AASM,SAAU,WAAW,OAA+B;AACtD,MAAI,SAAS,QAAQ,YAAY,KAAK,IAAI,QAAO,UAAU,KAAK,CAAC,EAAE,UAAU,CAAC;AAC9E,SAAO,OAAO,WAAW,GAAG,GAAG;AAAE,aAAS,OAAO,UAAU,CAAC;;AAC5D,MAAI,WAAW,IAAI;AAAE,aAAS;;AAC9B,SAAO,OAAO;AAClB;;;AC1NA,IAAM,WAAW;AACjB,IAAI,SAAwC;AAE5C,SAAS,SAAS,QAAc;AAC5B,MAAI,UAAU,MAAM;AAChB,aAAS,CAAA;AACT,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,aAAO,SAAS,CAAC,CAAC,IAAI,OAAO,CAAC;;;AAGtC,QAAM,SAAS,OAAO,MAAM;AAC5B,iBAAe,UAAU,MAAM,wBAAwB,UAAU,MAAM;AACvE,SAAO;AACX;AAGA,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAM,QAAQ,OAAO,EAAE;AAKjB,SAAU,aAAaC,SAAiB;AAC1C,QAAMC,SAAQ,SAASD,OAAM;AAE7B,MAAI,QAAQ,SAASC,MAAK;AAC1B,MAAI,SAAS;AACb,SAAO,OAAO;AACV,aAAS,SAAS,OAAO,QAAQ,KAAK,CAAC,IAAI;AAC3C,aAAS;;AAIb,WAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,QAAIA,OAAM,CAAC,GAAG;AAAE;;AAChB,aAAS,SAAS,CAAC,IAAI;;AAG3B,SAAO;AACX;AAKM,SAAU,aAAa,OAAa;AACtC,MAAI,SAASF;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,cAAU;AACV,cAAU,SAAS,MAAM,CAAC,CAAC;;AAE/B,SAAO;AACX;;;AC3CM,SAAU,aAAa,OAAa;AACtC,SAAO,aAAa,OAAO,KAAK,OAAO,QAAQ,CAAC;AACpD;AAsBM,SAAU,aAAaG,OAAe;AACxC,SAAO,OAAO,KAAK,SAASA,KAAI,CAAC,EAAE,SAAS,QAAQ;AACxD;;;ACvDA;AA2EM,IAAO,eAAP,MAAmB;;;;;EAiBrB,YAAY,SAA8B,UAA2B,QAAS;AAbrE;;;;AAKA;;;;AAEA;AAOL,uBAAK,WAAY;AACjB,qBAAoC,MAAM,EAAE,SAAS,OAAM,CAAE;EACjE;;;;EAKA,MAAM,iBAAc;AAChB,QAAI,mBAAK,cAAa,MAAM;AAAE;;AAC9B,UAAM,KAAK,QAAQ,IAAI,KAAK,QAAQ,mBAAK,UAAS;EACtD;;AAjBS;;;ACNb,SAAS,UAAU,QAAyB,QAAgBC,QAAmBC,SAAuB,cAAqB;AACvH,iBAAe,OAAO,+BAAgC,MAAO,KAAM,MAAO,IAAI,SAASD,MAAK;AAChG;AAEA,SAAS,WAAW,QAAyB,QAAgBA,QAAmBC,SAAuB,cAAqB;AAGxH,MAAI,WAAW,gBAAgB,WAAW,uBAAuB;AAC7D,QAAI,IAAI;AACR,aAAS,IAAI,SAAS,GAAG,IAAID,OAAM,QAAQ,KAAK;AAC5C,UAAIA,OAAM,CAAC,KAAK,MAAM,GAAM;AAAE;;AAC9B;;AAEJ,WAAO;;AAKX,MAAI,WAAW,WAAW;AACtB,WAAOA,OAAM,SAAS,SAAS;;AAInC,SAAO;AACX;AAEA,SAAS,YAAY,QAAyB,QAAgBA,QAAmBC,SAAuB,cAAqB;AAGzH,MAAI,WAAW,YAAY;AACvB,mBAAe,OAAO,iBAAkB,UAAU,0CAA0C,gBAAgB,YAAY;AACxH,IAAAA,QAAO,KAAK,YAAY;AACxB,WAAO;;AAIX,EAAAA,QAAO,KAAK,KAAM;AAGlB,SAAO,WAAW,QAAQ,QAAQD,QAAOC,SAAQ,YAAY;AACjE;AAiBO,IAAM,iBAAkF,OAAO,OAAO;EACzG,OAAO;EACP,QAAQ;EACR,SAAS;CACZ;AAGD,SAAS,kBAAkB,QAAmB,SAAuB;AACjE,MAAI,WAAW,MAAM;AAAE,cAAU,eAAe;;AAEhD,QAAMD,SAAQ,SAAS,QAAQ,OAAO;AAEtC,QAAM,SAAwB,CAAA;AAC9B,MAAI,IAAI;AAGR,SAAM,IAAIA,OAAM,QAAQ;AAEpB,UAAM,IAAIA,OAAM,GAAG;AAGnB,QAAI,KAAK,MAAM,GAAG;AACd,aAAO,KAAK,CAAC;AACb;;AAIJ,QAAI,cAA6B;AACjC,QAAI,eAA8B;AAGlC,SAAK,IAAI,SAAU,KAAM;AACrB,oBAAc;AACd,qBAAe;gBAGP,IAAI,SAAU,KAAM;AAC5B,oBAAc;AACd,qBAAe;gBAGP,IAAI,SAAU,KAAM;AAC5B,oBAAc;AACd,qBAAe;WAEZ;AACH,WAAK,IAAI,SAAU,KAAM;AACrB,aAAK,QAAQ,uBAAuB,IAAI,GAAGA,QAAO,MAAM;aACrD;AACH,aAAK,QAAQ,cAAc,IAAI,GAAGA,QAAO,MAAM;;AAEnD;;AAIJ,QAAI,IAAI,IAAI,eAAeA,OAAM,QAAQ;AACrC,WAAK,QAAQ,WAAW,IAAI,GAAGA,QAAO,MAAM;AAC5C;;AAIJ,QAAI,MAAqB,KAAM,KAAM,IAAI,cAAc,KAAM;AAE7D,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AAClC,UAAI,WAAWA,OAAM,CAAC;AAGtB,WAAK,WAAW,QAAS,KAAM;AAC3B,aAAK,QAAQ,oBAAoB,GAAGA,QAAO,MAAM;AACjD,cAAM;AACN;;AACH;AAED,YAAO,OAAO,IAAM,WAAW;AAC/B;;AAIJ,QAAI,QAAQ,MAAM;AAAE;;AAGpB,QAAI,MAAM,SAAU;AAChB,WAAK,QAAQ,gBAAgB,IAAI,IAAI,aAAaA,QAAO,QAAQ,GAAG;AACpE;;AAIJ,QAAI,OAAO,SAAU,OAAO,OAAQ;AAChC,WAAK,QAAQ,mBAAmB,IAAI,IAAI,aAAaA,QAAO,QAAQ,GAAG;AACvE;;AAIJ,QAAI,OAAO,cAAc;AACrB,WAAK,QAAQ,YAAY,IAAI,IAAI,aAAaA,QAAO,QAAQ,GAAG;AAChE;;AAGJ,WAAO,KAAK,GAAG;;AAGnB,SAAO;AACX;AASM,SAAU,YAAY,KAAa,MAA+B;AACpE,iBAAe,OAAO,QAAS,UAAU,wBAAwB,OAAO,GAAG;AAE3E,MAAI,QAAQ,MAAM;AACd,oBAAgB,IAAI;AACpB,UAAM,IAAI,UAAU,IAAI;;AAG5B,MAAI,SAAwB,CAAA;AAC5B,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACjC,UAAM,IAAI,IAAI,WAAW,CAAC;AAE1B,QAAI,IAAI,KAAM;AACV,aAAO,KAAK,CAAC;eAEN,IAAI,MAAO;AAClB,aAAO,KAAM,KAAK,IAAK,GAAI;AAC3B,aAAO,KAAM,IAAI,KAAQ,GAAI;gBAErB,IAAI,UAAW,OAAQ;AAC/B;AACA,YAAM,KAAK,IAAI,WAAW,CAAC;AAE3B,qBAAe,IAAI,IAAI,WAAY,KAAK,WAAY,OAChD,0BAA0B,OAAO,GAAG;AAGxC,YAAM,OAAO,UAAY,IAAI,SAAW,OAAO,KAAK;AACpD,aAAO,KAAM,QAAQ,KAAM,GAAI;AAC/B,aAAO,KAAO,QAAQ,KAAM,KAAQ,GAAI;AACxC,aAAO,KAAO,QAAQ,IAAK,KAAQ,GAAI;AACvC,aAAO,KAAM,OAAO,KAAQ,GAAI;WAE7B;AACH,aAAO,KAAM,KAAK,KAAM,GAAI;AAC5B,aAAO,KAAO,KAAK,IAAK,KAAQ,GAAI;AACpC,aAAO,KAAM,IAAI,KAAQ,GAAI;;;AAIrC,SAAO,IAAI,WAAW,MAAM;AAChC;AAGA,SAAS,cAAc,YAAyB;AAC5C,SAAO,WAAW,IAAI,CAAC,cAAa;AAChC,QAAI,aAAa,OAAQ;AACrB,aAAO,OAAO,aAAa,SAAS;;AAExC,iBAAa;AACb,WAAO,OAAO,cACP,aAAa,KAAM,QAAS,QAC7B,YAAY,QAAS,KAAO;EAEtC,CAAC,EAAE,KAAK,EAAE;AACd;AASM,SAAU,aAAaE,QAAkB,SAAuB;AAClE,SAAO,cAAc,kBAAkBA,QAAO,OAAO,CAAC;AAC1D;AAOM,SAAU,iBAAiB,KAAa,MAA+B;AACzE,SAAO,kBAAkB,YAAY,KAAK,IAAI,CAAC;AACnD;;;ACnUA,kBAAiB;AACjB,mBAAkB;AAClB,kBAA2B;AAYrB,SAAU,aAAa,SAA6B;AAEtD,iBAAe,OAAO,KAAmB,QAA0B;AAE/D,WAAO,UAAU,QAAQ,CAAC,OAAO,WAAW,oCAAoC,WAAW;AAE3F,UAAM,WAAW,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,YAAW;AAElD,WAAO,aAAa,UAAU,aAAa,SAAS,wBAAyB,QAAS,IAAI,yBAAyB;MAC/G,MAAM,EAAE,SAAQ;MAChB,WAAW;KACd;AAED,WAAO,aAAa,WAAW,CAAC,IAAI,eAAe,IAAI,6BAA6B,+CAA+C,yBAAyB;MACxJ,WAAW;KACd;AAED,UAAM,SAAS,IAAI;AACnB,UAAM,UAAU,OAAO,OAAO,CAAA,GAAK,IAAI,OAAO;AAE9C,UAAM,aAAkB,EAAE,QAAQ,QAAO;AACzC,QAAI,SAAS;AACT,UAAI,QAAQ,OAAO;AAAE,mBAAW,QAAQ,QAAQ;;;AAIpD,QAAI,QAAgC;AACpC,QAAI;AACA,cAAQ,IAAI,gBAAe;AAC3B,iBAAW,QAAQ,MAAM;aACpB,GAAG;AAAE,cAAQ,IAAI,CAAC;;AAE3B,UAAM,WAAY,aAAa,SAAU,YAAAC,UAAM,aAAAC,SAAO,QAAQ,IAAI,KAAK,UAAU;AAEjF,YAAQ,WAAW,IAAI,OAAO;AAE9B,UAAM,OAAO,IAAI;AACjB,QAAI,MAAM;AAAE,cAAQ,MAAM,OAAO,KAAK,IAAI,CAAC;;AAE3C,YAAQ,IAAG;AAEX,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AAEnC,UAAI,QAAQ;AACR,eAAO,YAAY,MAAK;AACpB,cAAI,OAAO;AAAE,kBAAM,MAAK;;AACxB,iBAAO,UAAU,qBAAqB,WAAW,CAAC;QACtD,CAAC;;AAGL,cAAQ,GAAG,WAAW,MAAK;AACvB,eAAO,UAAU,mBAAmB,SAAS,CAAC;MAClD,CAAC;AAED,cAAQ,KAAK,YAAY,CAAC,SAA8B;AACpD,cAAM,aAAa,KAAK,cAAc;AACtC,cAAM,gBAAgB,KAAK,iBAAiB;AAC5C,cAAMC,WAAU,OAAO,KAAK,KAAK,WAAW,CAAA,CAAE,EAAE,OAAO,CAAC,OAAO,SAAQ;AACnE,cAAI,QAAQ,KAAK,QAAQ,IAAI,KAAK;AAClC,cAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,oBAAQ,MAAM,KAAK,IAAI;;AAE3B,gBAAM,IAAI,IAAI;AACd,iBAAO;QACX,GAAiC,CAAA,CAAG;AAEpC,YAAIC,QAA0B;AAG9B,aAAK,GAAG,QAAQ,CAAC,UAAqB;AAClC,cAAI,QAAQ;AACR,gBAAI;AACA,qBAAO,YAAW;qBACb,OAAO;AACZ,qBAAO,OAAO,KAAK;;;AAI3B,cAAIA,SAAQ,MAAM;AACd,YAAAA,QAAO;iBACJ;AACH,kBAAM,UAAU,IAAI,WAAWA,MAAK,SAAS,MAAM,MAAM;AACzD,oBAAQ,IAAIA,OAAM,CAAC;AACnB,oBAAQ,IAAI,OAAOA,MAAK,MAAM;AAC9B,YAAAA,QAAO;;QAEf,CAAC;AAED,aAAK,GAAG,OAAO,MAAK;AAChB,cAAID,SAAQ,kBAAkB,MAAM,UAAUC,OAAM;AAChD,YAAAA,QAAO,aAAS,wBAAWA,KAAI,CAAC;;AAGpC,kBAAQ,EAAE,YAAY,eAAe,SAAAD,UAAS,MAAAC,MAAI,CAAE;QACxD,CAAC;AAED,aAAK,GAAG,SAAS,CAAC,UAAS;AAEjB,gBAAO,WAAW,EAAE,YAAY,eAAe,SAAAD,UAAS,MAAAC,MAAI;AAClE,iBAAO,KAAK;QAChB,CAAC;MACL,CAAC;AAED,cAAQ,GAAG,SAAS,CAAC,UAAS;AAAG,eAAO,KAAK;MAAG,CAAC;IACrD,CAAC;EACL;AAEA,SAAO;AACX;AAGA,IAAM,gBAAiC,aAAa,CAAA,CAAG;;;AClDvD,IAAM,eAAe;AACrB,IAAM,gBAAgB;AAGtB,IAAI,oBAAqC,aAAY;AAErD,IAAM,SAAS,IAAI,OAAO,mCAAmC,GAAG;AAChE,IAAM,SAAS,IAAI,OAAO,yBAA0B,GAAG;AAGvD,IAAI,SAAS;AAGb,eAAe,gBAAgB,KAAa,QAA0B;AAClE,MAAI;AACA,UAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,QAAI,CAAC,OAAO;AAAE,YAAM,IAAI,MAAM,cAAc;;AAC5C,WAAO,IAAI,cAAc,KAAK,MAAM;MAChC,gBAAiB,MAAM,CAAC,KAAK;OAC7B,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,CAAC,IAAG,UAAU,MAAM,CAAC,CAAC,CAAE;WACtD,OAAO;AACZ,WAAO,IAAI,cAAc,KAAK,mCAAmC,CAAA,GAAK,MAAM,IAAI,aAAa,GAAG,CAAC;;AAEzG;AAMA,SAAS,mBAAmB,SAAe;AACvC,iBAAe,YAAY,KAAa,QAA0B;AAC9D,QAAI;AACA,YAAM,QAAQ,IAAI,MAAM,MAAM;AAC9B,UAAI,CAAC,OAAO;AAAE,cAAM,IAAI,MAAM,cAAc;;AAC5C,aAAO,IAAI,aAAa,GAAI,OAAQ,GAAI,MAAM,CAAC,CAAE,EAAE;aAC9C,OAAO;AACZ,aAAO,IAAI,cAAc,KAAK,kCAAkC,CAAA,GAAK,MAAM,IAAI,aAAa,GAAG,CAAC;;EAExG;AAEA,SAAO;AACX;AAEA,IAAM,WAA6C;EAC/C,QAAQ;EACR,QAAQ,mBAAmB,+BAAgC;;AAG/D,IAAM,eAAkD,oBAAI,QAAO;AA3HnE;AAgIM,IAAO,oBAAP,MAAwB;EAI1B,YAAY,SAAqB;AAHjC;AACA;AAGI,uBAAK,YAAa,CAAA;AAClB,uBAAK,YAAa;AAElB,iBAAa,IAAI,SAAS,MAAK;AAC3B,UAAI,mBAAK,aAAY;AAAE;;AACvB,yBAAK,YAAa;AAElB,iBAAW,YAAY,mBAAK,aAAY;AACpC,mBAAW,MAAK;AAAG,mBAAQ;QAAI,GAAG,CAAC;;AAEvC,yBAAK,YAAa,CAAA;IACtB,CAAC;EACL;EAEA,YAAY,UAAoB;AAC5B,WAAO,CAAC,mBAAK,aAAY,4BAA4B,yBAAyB;MAC1E,WAAW;KACd;AACD,uBAAK,YAAW,KAAK,QAAQ;EACjC;EAEA,IAAI,YAAS;AAAc,WAAO,mBAAK;EAAY;EAEnD,cAAW;AACP,WAAO,CAAC,KAAK,WAAW,aAAa,aAAa,CAAA,CAAG;EACzD;;AA7BA;AACA;AAgCJ,SAAS,YAAY,QAA0B;AAC3C,MAAI,UAAU,MAAM;AAAE,UAAM,IAAI,MAAM,mCAAmC;;AACzE,SAAO,YAAW;AAClB,SAAO;AACX;AAtKA;AAsLM,IAAO,gBAAP,MAAO,cAAY;;;;;;;EAuRrB,YAAY,KAAW;AAvRrB;AACF;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;;AACA;AACA;AAEA;AAEA;AAEA;AAmQI,uBAAK,MAAO,OAAO,GAAG;AAEtB,uBAAK,gBAAiB;AACtB,uBAAK,OAAQ;AACb,uBAAK,UAAW,CAAA;AAChB,uBAAK,SAAU;AACf,uBAAK,UAAW;AAEhB,uBAAK,WAAY;MACb,cAAc;MACd,aAAa;;AAGjB,uBAAK,aAAc;EACvB;;;;EA5QA,IAAI,MAAG;AAAa,WAAO,mBAAK;EAAM;EACtC,IAAI,IAAI,KAAW;AACf,uBAAK,MAAO,OAAO,GAAG;EAC1B;;;;;;;;;;;;;;;;;;;;EAqBA,IAAI,OAAI;AACJ,QAAI,mBAAK,UAAS,MAAM;AAAE,aAAO;;AACjC,WAAO,IAAI,WAAW,mBAAK,MAAK;EACpC;EACA,IAAI,KAAK,MAA6D;AAClE,QAAI,QAAQ,MAAM;AACd,yBAAK,OAAQ;AACb,yBAAK,WAAY;eACV,OAAO,SAAU,UAAU;AAClC,yBAAK,OAAQ,YAAY,IAAI;AAC7B,yBAAK,WAAY;eACV,gBAAgB,YAAY;AACnC,yBAAK,OAAQ;AACb,yBAAK,WAAY;eACV,OAAO,SAAU,UAAU;AAClC,yBAAK,OAAQ,YAAY,KAAK,UAAU,IAAI,CAAC;AAC7C,yBAAK,WAAY;WACd;AACH,YAAM,IAAI,MAAM,cAAc;;EAEtC;;;;EAKA,UAAO;AACH,WAAQ,mBAAK,UAAS;EAC1B;;;;;;EAOA,IAAI,SAAM;AACN,QAAI,mBAAK,UAAS;AAAE,aAAO,mBAAK;;AAChC,QAAI,KAAK,QAAO,GAAI;AAAE,aAAO;;AAC7B,WAAO;EACX;EACA,IAAI,OAAO,QAAqB;AAC5B,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,uBAAK,SAAU,OAAO,MAAM,EAAE,YAAW;EAC7C;;;;;;;;;;EAWA,IAAI,UAAO;AACP,UAAM,UAAU,OAAO,OAAO,CAAA,GAAK,mBAAK,SAAQ;AAEhD,QAAI,mBAAK,SAAQ;AACb,cAAQ,eAAe,IAAI,SAAU,aAAa,YAAY,mBAAK,OAAM,CAAC,CAAE;;AAC/E;AAED,QAAI,KAAK,WAAW;AAChB,cAAQ,iBAAiB,IAAI;;AAGjC,QAAI,QAAQ,cAAc,KAAK,QAAQ,mBAAK,YAAW;AACnD,cAAQ,cAAc,IAAI,mBAAK;;AAEnC,QAAI,KAAK,MAAM;AAAE,cAAQ,gBAAgB,IAAI,OAAO,KAAK,KAAK,MAAM;;AAEpE,WAAO;EACX;;;;EAKA,UAAU,KAAW;AACjB,WAAO,KAAK,QAAQ,IAAI,YAAW,CAAE;EACzC;;;;;EAMA,UAAU,KAAa,OAAsB;AACzC,uBAAK,UAAS,OAAO,GAAG,EAAE,YAAW,CAAE,IAAI,OAAO,KAAK;EAC3D;;;;EAKA,eAAY;AACR,uBAAK,UAAW,CAAA;EACpB;EAEA,CAAC,OAAO,QAAQ,IAAC;AACb,UAAM,UAAU,KAAK;AACrB,UAAM,OAAO,OAAO,KAAK,OAAO;AAChC,QAAI,QAAQ;AACZ,WAAO;MACH,MAAM,MAAK;AACP,YAAI,QAAQ,KAAK,QAAQ;AACrB,gBAAM,MAAM,KAAK,OAAO;AACxB,iBAAO;YACH,OAAO,CAAE,KAAK,QAAQ,GAAG,CAAC;YAAI,MAAM;;;AAG5C,eAAO,EAAE,OAAO,QAAW,MAAM,KAAI;MACzC;;EAER;;;;;;EAOA,IAAI,cAAW;AACX,WAAO,mBAAK,WAAU;EAC1B;;;;EAKA,eAAe,UAAkB,UAAgB;AAC7C,mBAAe,CAAC,SAAS,MAAM,GAAG,GAAG,yCAAyC,YAAY,YAAY;AACtG,uBAAK,QAAS,GAAI,QAAS,IAAK,QAAS;EAC7C;;;;;EAMA,IAAI,YAAS;AACT,WAAO,mBAAK;EAChB;EACA,IAAI,UAAU,OAAc;AACxB,uBAAK,OAAQ,CAAC,CAAC;EACnB;;;;;EAMA,IAAI,8BAA2B;AAC3B,WAAO,CAAC,CAAC,mBAAK;EAClB;EACA,IAAI,4BAA4B,OAAc;AAC1C,uBAAK,gBAAiB,CAAC,CAAC;EAC5B;;;;;EAMA,IAAI,UAAO;AAAa,WAAO,mBAAK;EAAU;EAC9C,IAAI,QAAQ,SAAe;AACvB,mBAAe,WAAW,GAAG,4BAA4B,WAAW,OAAO;AAC3E,uBAAK,UAAW;EACpB;;;;;;;;EASA,IAAI,gBAAa;AACb,WAAO,mBAAK,eAAc;EAC9B;EACA,IAAI,cAAc,WAAoC;AAClD,uBAAK,YAAa;EACtB;;;;;;;;;;;EAYA,IAAI,cAAW;AACX,WAAO,mBAAK,aAAY;EAC5B;EACA,IAAI,YAAYC,UAAgC;AAC5C,uBAAK,UAAWA;EACpB;;;;EAKA,IAAI,YAAS;AACT,WAAO,mBAAK,WAAU;EAC1B;EACA,IAAI,UAAU,OAA4B;AACtC,uBAAK,QAAS;EAClB;;;;;;;;;;;;;;;;EAiBA,IAAI,aAAU;AACV,WAAO,mBAAK,gBAAe;EAC/B;EACA,IAAI,WAAW,OAA6B;AACxC,uBAAK,aAAc;EACvB;EAyBA,WAAQ;AACJ,WAAO,wBAAyB,KAAK,UAAU,KAAK,MAAM,CAAE,QAAS,KAAK,UAAU,KAAK,GAAG,CAAE,YAAa,KAAK,UAAU,KAAK,OAAO,CAAE,SAAU,mBAAK,SAAQ,QAAQ,mBAAK,MAAK,IAAG,MAAO;EAC/L;;;;;EAMA,kBAAkB,QAA2B;AACzC,QAAI,OAAO,gBAAgB,MAAM;AAC7B,yBAAK,WAAU,eAAe,OAAO;;AAEzC,QAAI,OAAO,eAAe,MAAM;AAC5B,yBAAK,WAAU,cAAc,OAAO;;EAE5C;;;;EAiGA,OAAI;AACA,WAAO,mBAAK,YAAW,MAAM,wBAAwB,yBAAyB,EAAE,WAAW,oBAAmB,CAAE;AAChH,uBAAK,SAAU,IAAI,kBAAkB,IAAI;AACzC,WAAO,sBAAK,kCAAL,WAAW,GAAG,QAAO,IAAK,KAAK,SAAS,GAAG,MAAM,IAAI,cAAc,GAAG,IAAI,CAAA,GAAK,MAAM,IAAI;EACpG;;;;;EAMA,SAAM;AACF,WAAO,mBAAK,YAAW,MAAM,6BAA6B,yBAAyB,EAAE,WAAW,sBAAqB,CAAE;AACvH,UAAM,SAAS,aAAa,IAAI,IAAI;AACpC,QAAI,CAAC,QAAQ;AAAE,YAAM,IAAI,MAAM,mCAAmC;;AAClE,WAAM;EACV;;;;;EAMA,SAAS,UAAgB;AAErB,UAAM,UAAU,KAAK,IAAI,MAAM,GAAG,EAAE,CAAC,EAAE,YAAW;AAClD,UAAM,SAAS,SAAS,MAAM,GAAG,EAAE,CAAC,EAAE,YAAW;AAMjD,WAAO,KAAK,WAAW,UAAU,YAAY,WAAW,WAAW,WAAW,SAAS,MAAM,UAAU,GAAG,wBAAwB,yBAAyB;MACvJ,WAAW,YAAa,KAAK,MAAO,IAAK,KAAK,UAAU,KAAK,GAAG,CAAE,OAAQ,KAAK,UAAU,QAAQ,CAAE;KACtG;AAGD,UAAM,MAAM,IAAI,cAAa,QAAQ;AACrC,QAAI,SAAS;AACb,QAAI,YAAY,KAAK;AACrB,QAAI,UAAU,KAAK;AACnB,sBAAI,UAAW,OAAO,OAAO,CAAA,GAAK,mBAAK,SAAQ;AAC/C,QAAI,mBAAK,QAAO;AAAE,wBAAI,OAAQ,IAAI,WAAW,mBAAK,MAAK;;AACvD,sBAAI,WAAY,mBAAK;AAOrB,WAAO;EACX;;;;EAKA,QAAK;AACD,UAAM,QAAQ,IAAI,cAAa,KAAK,GAAG;AAGvC,wBAAM,SAAU,mBAAK;AAGrB,QAAI,mBAAK,QAAO;AAAE,0BAAM,OAAQ,mBAAK;;AACrC,wBAAM,WAAY,mBAAK;AAGvB,wBAAM,UAAW,OAAO,OAAO,CAAA,GAAK,mBAAK,SAAQ;AAGjD,wBAAM,QAAS,mBAAK;AAEpB,QAAI,KAAK,WAAW;AAAE,YAAM,YAAY;;AAExC,UAAM,UAAU,KAAK;AACrB,QAAI,KAAK,6BAA6B;AAAE,YAAM,8BAA8B;;AAE5E,wBAAM,YAAa,mBAAK;AACxB,wBAAM,UAAW,mBAAK;AACtB,wBAAM,QAAS,mBAAK;AAEpB,wBAAM,WAAY,OAAO,OAAO,CAAA,GAAK,mBAAK,UAAS;AAEnD,wBAAM,aAAc,mBAAK;AAEzB,WAAO;EACX;;;;;EAMA,OAAO,aAAU;AACb,aAAS;EACb;;;;EAKA,OAAO,WAAW,QAAc;AAC5B,WAAO,SAAS,OAAO,YAAW,CAAE,KAAK;EAC7C;;;;;;;;;EAUA,OAAO,gBAAgB,QAAgB,MAAsB;AACzD,aAAS,OAAO,YAAW;AAC3B,QAAI,WAAW,UAAU,WAAW,SAAS;AACzC,YAAM,IAAI,MAAM,oBAAqB,MAAO,sBAAsB;;AAEtE,QAAI,QAAQ;AAAE,YAAM,IAAI,MAAM,iBAAiB;;AAC/C,aAAS,MAAM,IAAI;EACvB;;;;;;;;;EAUA,OAAO,eAAe,QAAuB;AACzC,QAAI,QAAQ;AAAE,YAAM,IAAI,MAAM,iBAAiB;;AAC/C,wBAAoB;EACxB;;;;;;;;;;;;EAaA,OAAO,iBAAiB,SAA6B;AACjD,WAAO,aAAa,OAAO;EAC/B;;;;;;;;;;EAWA,OAAO,oBAAiB;AACpB,WAAO;EACX;;;;;;;;EASA,OAAO,sBAAsB,SAAe;AACxC,WAAO,mBAAmB,OAAO;EACrC;;AA/jBA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAGA;AACA;AACA;AAEA;AAEA;AAEA;AArBE;AAyTI,UAAK,eAAC,SAAiB,SAAiB,OAAeC,WAAwB,WAAwB;AA/ejH,MAAAC,KAAA;AAgfQ,MAAI,WAAW,mBAAK,WAAU,aAAa;AACvC,WAAO,UAAU,gBAAgB,8BAA8B;;AAGnE,SAAO,QAAO,KAAM,SAAS,WAAW,WAAW;IAC/C,WAAW;IAAgB,QAAQ;IAAW,SAASD;GAC1D;AAED,MAAI,QAAQ,GAAG;AAAE,UAAM,KAAK,KAAK;;AAEjC,MAAI,MAAM,KAAK,MAAK;AACpB,QAAM,UAAU,IAAI,IAAI,MAAM,GAAG,EAAE,CAAC,KAAK,IAAI,YAAW;AAGxD,MAAI,UAAU,UAAU;AACpB,UAAM,SAAS,MAAM,SAAS,MAAM,EAAE,IAAI,KAAK,YAAY,aAAAA,WAAS,QAAO,CAAC;AAC5E,QAAI,kBAAkB,eAAe;AACjC,UAAIE,YAAW;AAEf,UAAI,KAAK,aAAa;AAClB,oBAAY,aAAAF,WAAS,QAAO;AAC5B,YAAI;AACA,UAAAE,YAAW,MAAM,KAAK,YAAY,KAAKA,SAAQ;iBAC1C,OAAY;AAGjB,cAAI,MAAM,YAAY,QAAQ,OAAO,MAAM,UAAW,UAAU;AAC5D,YAAAA,UAAS,gBAAgB,qCAAqC,KAAK,EAAE,SAAQ;;;;AAOzF,aAAOA;;AAEX,UAAM;;AAIV,MAAI,KAAK,eAAe;AAAE,UAAM,MAAM,KAAK,cAAc,GAAG;;AAE5D,QAAM,OAAO,MAAM,KAAK,WAAW,KAAK,YAAY,aAAAF,WAAS,QAAO,CAAC;AACrE,MAAI,WAAW,IAAI,cAAc,KAAK,YAAY,KAAK,eAAe,KAAK,SAAS,KAAK,MAAMA,SAAQ;AAEvG,MAAI,SAAS,eAAe,OAAO,SAAS,eAAe,KAAK;AAG5D,QAAI;AACA,YAAM,WAAW,SAAS,QAAQ,YAAY;AAC9C,aAAO,gBAAAC,MAAA,IAAI,SAAS,QAAQ,GAAE,kCAAvB,KAAAA,KAA6B,UAAU,GAAG,SAAS,GAAGD,WAAU;aAClE,OAAO;IAAA;AAGhB,WAAO;aAEA,SAAS,eAAe,KAAK;AAGpC,QAAI,KAAK,aAAa,QAAS,MAAM,KAAK,UAAU,KAAK,UAAU,OAAO,GAAI;AAC1E,YAAM,aAAa,SAAS,QAAQ,aAAa;AACjD,UAAIG,SAAQ,mBAAK,WAAU,eAAe,KAAK,MAAM,KAAK,OAAM,IAAK,KAAK,IAAI,GAAG,OAAO,CAAC;AACzF,UAAI,OAAO,eAAgB,YAAY,WAAW,MAAM,eAAe,GAAG;AACtE,QAAAA,SAAQ,SAAS,UAAU;;AAE/B,aAAO,yBAAI,MAAK,GAAG,kCAAZ,SAAkB,UAAU,GAAG,SAASA,QAAOH,WAAU;;;AAIxE,MAAI,KAAK,aAAa;AAClB,gBAAY,aAAAA,WAAS,QAAO;AAC5B,QAAI;AACA,iBAAW,MAAM,KAAK,YAAY,KAAK,QAAQ;aAC1C,OAAY;AAGjB,UAAI,MAAM,YAAY,QAAQ,OAAO,MAAM,UAAW,UAAU;AAC5D,iBAAS,gBAAgB,qCAAqC,KAAK,EAAE,SAAQ;;AAIjF,UAAIG,SAAQ,mBAAK,WAAU,eAAe,KAAK,MAAM,KAAK,OAAM,IAAK,KAAK,IAAI,GAAG,OAAO,CAAC;AAAE;AAC3F,UAAI,MAAM,SAAS,GAAG;AAAE,QAAAA,SAAQ,MAAM;;AAEtC,aAAO,yBAAI,MAAK,GAAG,kCAAZ,SAAkB,UAAU,GAAG,SAASA,QAAOH,WAAU;;;AAIxE,SAAO;AACX;AAnZE,IAAO,eAAP;AAtLN,iCAAAI,WAAAC,QAAA;AAkwBM,IAAO,iBAAP,MAAO,eAAa;EAoFtB,YAAY,YAAoB,eAAuB,SAA2C,MAAyB,SAAsB;AAnFjJ;AACA;AACA,uBAAAD;AACA,uBAAAC;AACA;AAEA;AA8EI,uBAAK,aAAc;AACnB,uBAAK,gBAAiB;AACtB,uBAAKD,WAAW,OAAO,KAAK,OAAO,EAAE,OAAO,CAAC,OAAO,MAAK;AACrD,YAAM,EAAE,YAAW,CAAE,IAAI,OAAO,QAAQ,CAAC,CAAC;AAC1C,aAAO;IACX,GAA2B,CAAA,CAAG;AAC9B,uBAAKC,QAAU,QAAQ,OAAQ,OAAM,IAAI,WAAW,IAAI;AACxD,uBAAK,UAAY,WAAW;AAE5B,uBAAK,QAAS,EAAE,SAAS,GAAE;EAC/B;EAtFA,WAAQ;AACJ,WAAO,yBAA0B,KAAK,UAAW,SAAU,mBAAKA,UAAQ,QAAQ,mBAAKA,OAAK,IAAG,MAAO;EACxG;;;;EAKA,IAAI,aAAU;AAAa,WAAO,mBAAK;EAAa;;;;EAKpD,IAAI,gBAAa;AAAa,WAAO,mBAAK;EAAgB;;;;EAK1D,IAAI,UAAO;AAA6B,WAAO,OAAO,OAAO,CAAA,GAAK,mBAAKD,UAAQ;EAAG;;;;EAKlF,IAAI,OAAI;AACJ,WAAQ,mBAAKC,WAAS,OAAQ,OAAM,IAAI,WAAW,mBAAKA,OAAK;EACjE;;;;;;;EAQA,IAAI,WAAQ;AACR,QAAI;AACA,aAAQ,mBAAKA,WAAS,OAAQ,KAAI,aAAa,mBAAKA,OAAK;aACpD,OAAO;AACZ,aAAO,OAAO,yCAAyC,yBAAyB;QAC5E,WAAW;QAAY,MAAM,EAAE,UAAU,KAAI;OAChD;;EAET;;;;;;;EAQA,IAAI,WAAQ;AACR,QAAI;AACA,aAAO,KAAK,MAAM,KAAK,QAAQ;aAC1B,OAAO;AACZ,aAAO,OAAO,mCAAmC,yBAAyB;QACtE,WAAW;QAAY,MAAM,EAAE,UAAU,KAAI;OAChD;;EAET;EAEA,CAAC,OAAO,QAAQ,IAAC;AACb,UAAM,UAAU,KAAK;AACrB,UAAM,OAAO,OAAO,KAAK,OAAO;AAChC,QAAI,QAAQ;AACZ,WAAO;MACH,MAAM,MAAK;AACP,YAAI,QAAQ,KAAK,QAAQ;AACrB,gBAAM,MAAM,KAAK,OAAO;AACxB,iBAAO;YACH,OAAO,CAAE,KAAK,QAAQ,GAAG,CAAC;YAAI,MAAM;;;AAG5C,eAAO,EAAE,OAAO,QAAW,MAAM,KAAI;MACzC;;EAER;;;;;;EAoBA,gBAAgB,SAAkB,OAAa;AAC3C,QAAI;AACJ,QAAI,CAAC,SAAS;AACV,gBAAU,GAAI,KAAK,UAAW,IAAK,KAAK,aAAc;AACtD,sBAAgB,kCAAmC,OAAQ;WACxD;AACH,sBAAgB,kCAAmC,KAAK,UAAW,IAAK,KAAK,aAAc,KAAM,OAAQ;;AAE7G,UAAM,WAAW,IAAI,eAAc,KAAK,eAAe,KAAK,SACxD,KAAK,MAAM,mBAAK,aAAY,MAAS;AACzC,2BAAS,QAAS,EAAE,SAAS,MAAK;AAClC,WAAO;EACX;;;;;;EAOA,mBAAmB,SAAkBC,QAAc;AAC/C,QAAIA,UAAS,MAAM;AACf,MAAAA,SAAQ;WACL;AACH,qBAAe,OAAO,UAAUA,MAAK,KAAKA,UAAS,GAAG,yBAAyB,SAASA,MAAK;;AAGjG,UAAM,QAAQ,IAAI,MAAM,WAAW,qBAAqB;AAExD,qBAAgC,OAAO,EAAE,OAAAA,QAAO,UAAU,KAAI,CAAE;AAEhE,UAAM;EACV;;;;EAKA,UAAU,KAAW;AACjB,WAAO,KAAK,QAAQ,IAAI,YAAW,CAAE;EACzC;;;;EAKA,UAAO;AACH,WAAQ,mBAAKD,WAAS;EAC1B;;;;EAKA,IAAI,UAAO;AAA0B,WAAO,mBAAK;EAAU;;;;EAK3D,KAAE;AACE,WAAQ,mBAAK,QAAO,YAAY,MAAM,KAAK,cAAc,OAAO,KAAK,aAAa;EACtF;;;;EAKA,WAAQ;AACJ,QAAI,KAAK,GAAE,GAAI;AAAE;;AACjB,QAAI,EAAE,SAAS,MAAK,IAAK,mBAAK;AAC9B,QAAI,YAAY,IAAI;AAChB,gBAAU,mBAAoB,KAAK,UAAW,IAAK,KAAK,aAAc;;AAG1E,QAAI,aAA4B;AAChC,QAAI,KAAK,SAAS;AAAE,mBAAa,KAAK,QAAQ;;AAE9C,QAAI,eAA8B;AAClC,QAAI;AACA,UAAI,mBAAKA,SAAO;AAAE,uBAAe,aAAa,mBAAKA,OAAK;;aACnD,GAAG;IAAA;AAEZ,WAAO,OAAO,SAAS,gBAAgB;MACnC,SAAU,KAAK,WAAW;MAAoB,UAAU;MAAM;MAC9D,MAAM;QACF;QAAY;QACZ,gBAAgB,GAAI,KAAK,UAAW,IAAK,KAAK,aAAc;;KACnE;EACL;;AAxLA;AACA;AACAD,YAAA;AACAC,SAAA;AACA;AAEA;AAPE,IAAO,gBAAP;AA6LN,SAAS,UAAO;AAAa,UAAQ,oBAAI,KAAI,GAAI,QAAO;AAAI;AAE5D,SAAS,UAAU,OAAa;AAC5B,SAAO,YAAY,MAAM,QAAQ,yBAAyB,CAAC,KAAK,SAAQ;AACpE,WAAO,OAAO,aAAa,SAAS,MAAM,EAAE,CAAC;EACjD,CAAC,CAAC;AACN;AAEA,SAAS,KAAK,OAAa;AACvB,SAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,KAAK,CAAC;AAC9D;;;ACt7BA,IAAM,QAAQ,OAAO,EAAE;AACvB,IAAME,QAAO,OAAO,CAAC;AACrB,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAM,OAAO,OAAO,CAAC;AAErB,IAAM,SAAS,CAAA;AAIf,IAAI,QAAQ;AACZ,OAAO,MAAM,SAAS,IAAI;AAAE,WAAS;;AAGrC,SAAS,QAAQ,UAAgB;AAC7B,MAAI,SAAS;AACb,SAAO,OAAO,SAAS,UAAU;AAAE,cAAU;;AAC7C,SAAO,OAAO,MAAM,OAAO,UAAU,GAAG,QAAQ,CAAC;AACrD;AAkDA,SAAS,WAAW,KAAa,QAAsB,QAAe;AAClE,QAAM,QAAQ,OAAO,OAAO,KAAK;AACjC,MAAI,OAAO,QAAQ;AACf,UAAM,QAASA,SAAS,QAAQA;AAChC,WAAO,UAAU,QAAS,OAAO,CAAC,SAAU,MAAM,OAAQ,YAAY,iBAAiB;MACnF,WAAmB;MAAQ,OAAO;MAAY,OAAO;KACxD;AAED,QAAI,MAAMD,OAAM;AACZ,YAAM,SAAS,KAAK,KAAK,KAAK,GAAG,KAAK;WACnC;AACH,YAAM,CAAC,SAAS,KAAK,CAAC,KAAK,KAAK,GAAG,KAAK;;SAGzC;AACH,UAAM,QAASC,SAAQ;AACvB,WAAO,UAAU,QAAS,OAAO,KAAK,MAAM,OAAQ,YAAY,iBAAiB;MAC7E,WAAmB;MAAQ,OAAO;MAAY,OAAO;KACxD;AACD,WAAS,MAAM,QAAS,SAAS,QAAU,QAAQA;;AAGvD,SAAO;AACX;AAIA,SAAS,UAAU,OAAmB;AAClC,MAAI,OAAO,UAAW,UAAU;AAAE,YAAQ,YAAY,KAAK;;AAE3D,MAAIC,UAAS;AACb,MAAI,QAAQ;AACZ,MAAI,WAAW;AAEf,MAAI,OAAO,UAAW,UAAU;AAE5B,QAAI,UAAU,SAAS;eAEZ,UAAU,UAAU;AAC3B,MAAAA,UAAS;WACN;AACH,YAAM,QAAQ,MAAM,MAAM,8BAA8B;AACxD,qBAAe,OAAO,wBAAwB,UAAU,KAAK;AAC7D,MAAAA,UAAU,MAAM,CAAC,MAAM;AACvB,cAAQ,SAAS,MAAM,CAAC,CAAC;AACzB,iBAAW,SAAS,MAAM,CAAC,CAAC;;aAEzB,OAAO;AAEd,UAAM,IAAS;AACf,UAAM,QAAQ,CAAC,KAAa,MAAc,iBAA0B;AAChE,UAAI,EAAE,GAAG,KAAK,MAAM;AAAE,eAAO;;AAC7B,qBAAe,OAAO,EAAE,GAAG,MAAO,MAC9B,2BAA2B,MAAM,UAAU,OAAM,KAAK,YAAY,KAAK,EAAE,GAAG,CAAC;AACjF,aAAO,EAAE,GAAG;IAChB;AACA,IAAAA,UAAS,MAAM,UAAU,WAAWA,OAAM;AAC1C,YAAQ,MAAM,SAAS,UAAU,KAAK;AACtC,eAAW,MAAM,YAAY,UAAU,QAAQ;;AAGnD,iBAAgB,QAAQ,MAAO,GAAG,gDAAgD,gBAAgB,KAAK;AACvG,iBAAe,YAAY,IAAI,4CAA4C,mBAAmB,QAAQ;AAEtG,QAAM,QAAQA,UAAS,KAAI,OAAO,UAAU,OAAO,KAAK,IAAI,MAAM,OAAO,QAAQ;AAEjF,SAAO,EAAE,QAAAA,SAAQ,OAAO,UAAU,KAAI;AAC1C;AAEA,SAAS,SAAS,KAAa,UAAgB;AAC3C,MAAI,WAAW;AACf,MAAI,MAAMF,OAAM;AACZ,eAAW;AACX,WAAO;;AAGX,MAAI,MAAM,IAAI,SAAQ;AAGtB,MAAI,aAAa,GAAG;AAAE,WAAQ,WAAW;;AAGzC,SAAO,IAAI,UAAU,UAAU;AAAE,UAAM,QAAQ;;AAG/C,QAAM,QAAQ,IAAI,SAAS;AAC3B,QAAM,IAAI,UAAU,GAAG,KAAK,IAAI,MAAM,IAAI,UAAU,KAAK;AAGzD,SAAO,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,MAAM,KAAK;AACrC,UAAM,IAAI,UAAU,CAAC;;AAIzB,SAAO,IAAI,IAAI,SAAS,CAAC,MAAM,OAAO,IAAI,IAAI,SAAS,CAAC,MAAM,KAAK;AAC/D,UAAM,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC;;AAGzC,SAAQ,WAAW;AACvB;AAzLA;AA+NM,IAAO,eAAP,MAAO,aAAW;;;;;;;EA6BpB,YAAY,OAAY,OAAe,QAAW;AA7BhD;AAKO;;;;AAEA;AAGT;;AAGS;;AAOA;;;;;;AAUL,kBAAc,OAAO,QAAQ,aAAa;AAE1C,uBAAK,MAAO;AAEZ,uBAAK,SAAU;AAEf,UAAMG,UAAS,SAAS,OAAO,OAAO,QAAQ;AAE9C,qBAA8B,MAAM,EAAE,QAAQ,OAAO,MAAM,QAAAA,QAAM,CAAE;AAEnE,uBAAK,OAAQ,QAAQ,OAAO,QAAQ;EACxC;;;;;EAMA,IAAI,SAAM;AAAc,WAAO,mBAAK,SAAQ;EAAQ;;;;EAKpD,IAAI,QAAK;AAAa,WAAO,mBAAK,SAAQ;EAAO;;;;EAKjD,IAAI,WAAQ;AAAa,WAAO,mBAAK,SAAQ;EAAU;;;;;EAMvD,IAAI,QAAK;AAAa,WAAO,mBAAK;EAAM;;;;;EA2CxC,UAAU,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU;EAAQ;;;;;;EAOtE,IAAI,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU,OAAO;EAAQ;;;;;EAWvE,UAAU,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU;EAAQ;;;;;;EAOtE,IAAI,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU,OAAO;EAAQ;;;;;EAWvE,UAAU,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU;EAAQ;;;;;;EAOtE,IAAI,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU,OAAO;EAAQ;;;;;;EAOvE,UAAU,OAAkB;AACxB,0BAAK,wCAAL,WAAkB;AAClB,UAAM,QAAQ,mBAAK,QAAO,oBAAM;AAChC,WAAQ,QAAQ,mBAAK,WAAWH,OAAM,wCAAwC,iBAAiB;MAC3F,WAAW;MAAa,OAAO;MAAa,OAAO;KACtD;AACD,WAAO,sBAAK,uCAAL,WAAiB,QAAQ,mBAAK,QAAO;EAChD;;;;;;EAeA,UAAU,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU;EAAQ;;;;;;EAOtE,IAAI,OAAkB;AAAiB,WAAO,sBAAK,gCAAL,WAAU,OAAO;EAAQ;;;;;;EAQvE,UAAU,OAAkB;AACxB,WAAO,oBAAM,UAASA,OAAM,oBAAoB,iBAAiB;MAC7D,WAAW;MAAO,OAAO;MAAkB,OAAO;KACrD;AACD,0BAAK,wCAAL,WAAkB;AAClB,UAAM,QAAS,mBAAK,QAAO,mBAAK;AAChC,WAAQ,QAAQ,oBAAM,UAAUA,OAAM,wCAAwC,iBAAiB;MAC3F,WAAW;MAAa,OAAO;MAAa,OAAO;KACtD;AACD,WAAO,sBAAK,uCAAL,WAAiB,QAAQ,oBAAM,OAAM;EAChD;;;;;;;;EASC,IAAI,OAAkB;AAClB,QAAI,IAAI,KAAK,OAAOI,KAAI,MAAM;AAG9B,UAAM,QAAQ,KAAK,WAAW,MAAM;AACpC,QAAI,QAAQ,GAAG;AACX,MAAAA,MAAK,QAAQ,KAAK;eACX,QAAQ,GAAG;AAClB,WAAK,QAAQ,CAAC,KAAK;;AAIvB,QAAI,IAAIA,IAAG;AAAE,aAAO;;AACpB,QAAI,IAAIA,IAAG;AAAE,aAAO;;AACpB,WAAO;EACX;;;;EAKA,GAAG,OAAkB;AAAa,WAAO,KAAK,IAAI,KAAK,MAAM;EAAG;;;;EAKhE,GAAG,OAAkB;AAAa,WAAO,KAAK,IAAI,KAAK,IAAI;EAAG;;;;EAK9D,IAAI,OAAkB;AAAa,WAAO,KAAK,IAAI,KAAK,KAAK;EAAG;;;;EAKhE,GAAG,OAAkB;AAAa,WAAO,KAAK,IAAI,KAAK,IAAI;EAAG;;;;EAK9D,IAAI,OAAkB;AAAa,WAAO,KAAK,IAAI,KAAK,KAAK;EAAG;;;;;;;EAQjE,QAAK;AACD,QAAI,MAAM,mBAAK;AACf,QAAI,mBAAK,QAAOJ,OAAM;AAAE,aAAO,mBAAK,SAAQC;;AAC5C,UAAO,mBAAK,QAAO,mBAAK,SAAS,mBAAK;AACtC,WAAO,sBAAK,uCAAL,WAAiB,KAAK;EACjC;;;;;;;EAQA,UAAO;AACH,QAAI,MAAM,mBAAK;AACf,QAAI,mBAAK,QAAOD,OAAM;AAAE,aAAO,mBAAK,SAAQC;;AAC5C,UAAO,mBAAK,QAAO,mBAAK,SAAS,mBAAK;AACtC,WAAO,sBAAK,uCAAL,WAAiB,KAAK;EACjC;;;;;EAMA,MAAM,UAAiB;AACnB,QAAI,YAAY,MAAM;AAAE,iBAAW;;AAGnC,QAAI,YAAY,KAAK,UAAU;AAAE,aAAO;;AAExC,UAAM,QAAQ,KAAK,WAAW;AAC9B,UAAM,OAAO,OAAO,QAAQ,QAAQ,CAAC;AAErC,QAAI,QAAQ,KAAK,QAAQ;AACzB,UAAM,OAAO,QAAQ,KAAK;AAC1B,YAAS,QAAQ,OAAQ;AAEzB,eAAW,OAAO,mBAAK,UAAS,OAAO;AAEvC,WAAO,IAAI,aAAY,QAAQ,OAAO,mBAAK,QAAO;EACtD;;;;EAKA,SAAM;AAAc,WAAQ,mBAAK,UAASD;EAAO;;;;EAKjD,aAAU;AAAc,WAAQ,mBAAK,QAAOA;EAAO;;;;EAKnD,WAAQ;AAAa,WAAO,KAAK;EAAQ;;;;;;;;EASzC,gBAAa;AAAa,WAAO,WAAW,KAAK,SAAQ,CAAE;EAAG;;;;;;;EAQ9D,SAAS,QAAmB;AACxB,WAAO,aAAY,WAAW,KAAK,SAAQ,GAAI,MAAM;EACzD;;;;;;;;;EAUA,OAAO,UAAUG,SAAsB,WAAqBE,UAAqB;AAC7E,UAAM,WAAY,aAAa,OAAQ,IAAG,UAAU,SAAS;AAC7D,UAAM,SAAS,UAAUA,QAAO;AAEhC,QAAI,QAAQ,UAAUF,SAAQ,OAAO;AACrC,UAAM,QAAQ,WAAW,OAAO;AAChC,QAAI,QAAQ,GAAG;AACX,YAAM,OAAO,QAAQ,KAAK;AAC1B,aAAQ,QAAQ,SAAUH,OAAM,oCAAoC,iBAAiB;QACjF,WAAW;QAAa,OAAO;QAAa,OAAOG;OACtD;AACD,eAAS;eACF,QAAQ,GAAG;AAClB,eAAS,QAAQ,CAAC,KAAK;;AAG3B,eAAW,OAAO,QAAQ,WAAW;AAErC,WAAO,IAAI,aAAY,QAAQ,OAAO,MAAM;EAChD;;;;;;;EAQA,OAAO,WAAWA,SAAgBE,UAAqB;AACnD,UAAM,QAAQF,QAAO,MAAM,2BAA2B;AACtD,mBAAe,SAAU,MAAM,CAAC,EAAE,SAAS,MAAM,CAAC,EAAE,SAAU,GAAG,oCAAoC,SAASA,OAAM;AAEpH,UAAM,SAAS,UAAUE,QAAO;AAEhC,QAAI,QAAS,MAAM,CAAC,KAAK,KAAM,UAAW,MAAM,CAAC,KAAK;AAGtD,WAAO,QAAQ,SAAS,OAAO,UAAU;AAAE,iBAAW;;AAGtD,WAAO,QAAQ,UAAU,OAAO,QAAQ,EAAE,MAAM,MAAM,GAAG,gCAAgC,iBAAiB;MACtG,WAAW;MAAc,OAAO;MAAa,OAAOF;KACvD;AAGD,cAAU,QAAQ,UAAU,GAAG,OAAO,QAAQ;AAE9C,UAAM,QAAQ,OAAO,MAAM,CAAC,IAAI,QAAQ,OAAO;AAE/C,eAAW,OAAO,QAAQ,YAAY;AAEtC,WAAO,IAAI,aAAY,QAAQ,OAAO,MAAM;EAChD;;;;;;;;EASA,OAAO,UAAUA,SAAmBE,UAAqB;AACrD,QAAI,QAAQ,SAAS,SAASF,SAAQ,OAAO,CAAC;AAC9C,UAAM,SAAS,UAAUE,QAAO;AAEhC,QAAI,OAAO,QAAQ;AAAE,cAAQ,SAAS,OAAO,OAAO,KAAK;;AAEzD,eAAW,OAAO,QAAQ,WAAW;AAErC,WAAO,IAAI,aAAY,QAAQ,OAAO,MAAM;EAChD;;AAtZS;AAGT;AAGS;AAbP;AAiEF,iBAAY,SAAC,OAAkB;AAC3B,iBAAe,KAAK,WAAW,MAAM,QACjC,iDAAiD,SAAS,KAAK;AACvE;AAEA,gBAAW,SAAC,KAAa,QAAe;AAuBpC,QAAM,WAAW,KAAK,mBAAK,UAAS,MAAM;AAC1C,SAAO,IAAI,aAAY,QAAQ,KAAK,mBAAK,QAAO;AACpD;AAEA,SAAI,SAAC,GAAgB,QAAe;AAChC,wBAAK,wCAAL,WAAkB;AAClB,SAAO,sBAAK,uCAAL,WAAiB,mBAAK,QAAO,gBAAE,OAAM;AAChD;AAeA,SAAI,SAAC,GAAgB,QAAe;AAChC,wBAAK,wCAAL,WAAkB;AAClB,SAAO,sBAAK,uCAAL,WAAiB,mBAAK,QAAO,gBAAE,OAAM;AAChD;AAeA,SAAI,SAAC,GAAgB,QAAe;AAChC,wBAAK,wCAAL,WAAkB;AAClB,SAAO,sBAAK,uCAAL,WAAkB,mBAAK,QAAO,gBAAE,QAAQ,mBAAK,QAAO;AAC/D;AA6BA,SAAI,SAAC,GAAgB,QAAe;AAChC,SAAO,gBAAE,UAASL,OAAM,oBAAoB,iBAAiB;IACzD,WAAW;IAAO,OAAO;IAAkB,OAAO;GACrD;AACD,wBAAK,wCAAL,WAAkB;AAClB,SAAO,sBAAK,uCAAL,WAAkB,mBAAK,QAAO,mBAAK,SAAS,gBAAE,OAAM;AAC/D;AA3KE,IAAO,cAAP;;;ACtNN,SAAS,YAAY,OAAa;AAC9B,MAAI,SAAS,MAAM,SAAS,EAAE;AAC9B,SAAO,OAAO,SAAS,GAAG;AAAE,aAAS,MAAM;;AAC3C,SAAO,OAAO;AAClB;AAEA,SAAS,kBAAkBM,OAAkB,QAAgB,QAAc;AACvE,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC7B,aAAU,SAAS,MAAOA,MAAK,SAAS,CAAC;;AAE7C,SAAO;AACX;AAOA,SAAS,gBAAgBA,OAAkB,QAAgB,aAAqB,QAAc;AAC1F,QAAM,SAAqB,CAAA;AAE3B,SAAO,cAAc,SAAS,IAAI,QAAQ;AACtC,UAAM,UAAU,QAAQA,OAAM,WAAW;AAEzC,WAAO,KAAK,QAAQ,MAAM;AAE1B,mBAAe,QAAQ;AACvB,WAAO,eAAe,SAAS,IAAI,QAAQ,wBAAwB,kBAAkB;MACjF,QAAQA;MAAM;MAAQ;KACzB;;AAGL,SAAO,EAAC,UAAW,IAAI,QAAS,OAAc;AAClD;AAGA,SAAS,QAAQA,OAAkB,QAAc;AAC7C,SAAOA,MAAK,WAAW,GAAG,kBAAkB,kBAAkB;IAC1D,QAAQA;IAAM,QAAQ;IAAG,QAAQ;GACpC;AAED,QAAM,cAAc,CAACC,YAAkB;AACnC,WAAOA,WAAUD,MAAK,QAAQ,gCAAgC,kBAAkB;MAC5E,QAAQA;MAAM,QAAQA,MAAK;MAAQ,QAAAC;KACtC;EACL;AAGA,MAAID,MAAK,MAAM,KAAK,KAAM;AACtB,UAAM,eAAeA,MAAK,MAAM,IAAI;AACpC,gBAAY,SAAS,IAAI,YAAY;AAErC,UAAM,SAAS,kBAAkBA,OAAM,SAAS,GAAG,YAAY;AAC/D,gBAAY,SAAS,IAAI,eAAe,MAAM;AAE9C,WAAO,gBAAgBA,OAAM,QAAQ,SAAS,IAAI,cAAc,eAAe,MAAM;aAE9EA,MAAK,MAAM,KAAK,KAAM;AAC7B,UAAM,SAASA,MAAK,MAAM,IAAI;AAC9B,gBAAY,SAAS,IAAI,MAAM;AAE/B,WAAO,gBAAgBA,OAAM,QAAQ,SAAS,GAAG,MAAM;aAEhDA,MAAK,MAAM,KAAK,KAAM;AAC7B,UAAM,eAAeA,MAAK,MAAM,IAAI;AACpC,gBAAY,SAAS,IAAI,YAAY;AAErC,UAAM,SAAS,kBAAkBA,OAAM,SAAS,GAAG,YAAY;AAC/D,gBAAY,SAAS,IAAI,eAAe,MAAM;AAE9C,UAAM,SAAS,QAAQA,MAAK,MAAM,SAAS,IAAI,cAAc,SAAS,IAAI,eAAe,MAAM,CAAC;AAChG,WAAO,EAAE,UAAW,IAAI,eAAe,QAAS,OAAc;aAEvDA,MAAK,MAAM,KAAK,KAAM;AAC7B,UAAM,SAASA,MAAK,MAAM,IAAI;AAC9B,gBAAY,SAAS,IAAI,MAAM;AAE/B,UAAM,SAAS,QAAQA,MAAK,MAAM,SAAS,GAAG,SAAS,IAAI,MAAM,CAAC;AAClE,WAAO,EAAE,UAAW,IAAI,QAAS,OAAc;;AAGnD,SAAO,EAAE,UAAU,GAAG,QAAQ,YAAYA,MAAK,MAAM,CAAC,EAAC;AAC3D;AAKM,SAAU,UAAUE,QAAgB;AACtC,QAAMF,QAAO,SAASE,QAAO,MAAM;AACnC,QAAM,UAAU,QAAQF,OAAM,CAAC;AAC/B,iBAAe,QAAQ,aAAaA,MAAK,QAAQ,qCAAqC,QAAQE,MAAK;AACnG,SAAO,QAAQ;AACnB;;;AC/FA,SAAS,gBAAgB,OAAa;AAClC,QAAM,SAAwB,CAAA;AAC9B,SAAO,OAAO;AACV,WAAO,QAAQ,QAAQ,GAAI;AAC3B,cAAU;;AAEd,SAAO;AACX;AAEA,SAAS,QAAQC,SAAwC;AACrD,MAAI,MAAM,QAAQA,OAAM,GAAG;AACvB,QAAI,UAAyB,CAAA;AAC7B,IAAAA,QAAO,QAAQ,SAAS,OAAK;AACzB,gBAAU,QAAQ,OAAO,QAAQ,KAAK,CAAC;IAC3C,CAAC;AAED,QAAI,QAAQ,UAAU,IAAI;AACtB,cAAQ,QAAQ,MAAO,QAAQ,MAAM;AACrC,aAAO;;AAGX,UAAMC,UAAS,gBAAgB,QAAQ,MAAM;AAC7C,IAAAA,QAAO,QAAQ,MAAOA,QAAO,MAAM;AAEnC,WAAOA,QAAO,OAAO,OAAO;;AAIhC,QAAMC,QAAsB,MAAM,UAAU,MAAM,KAAK,SAASF,SAAQ,QAAQ,CAAC;AAEjF,MAAIE,MAAK,WAAW,KAAKA,MAAK,CAAC,KAAK,KAAM;AACtC,WAAOA;aAEAA,MAAK,UAAU,IAAI;AAC1B,IAAAA,MAAK,QAAQ,MAAOA,MAAK,MAAM;AAC/B,WAAOA;;AAGX,QAAM,SAAS,gBAAgBA,MAAK,MAAM;AAC1C,SAAO,QAAQ,MAAO,OAAO,MAAM;AAEnC,SAAO,OAAO,OAAOA,KAAI;AAC7B;AAEA,IAAM,UAAU;AAKV,SAAU,UAAUF,SAA4B;AAClD,MAAI,SAAS;AACb,aAAW,KAAK,QAAQA,OAAM,GAAG;AAC7B,cAAU,QAAQ,KAAK,CAAC;AACxB,cAAU,QAAQ,IAAI,EAAG;;AAE7B,SAAO;AACX;;;ACnCA,IAAM,QAAQ;EACV;EACA;EACA;EACA;EACA;EACA;EACA;;AASE,SAAU,YAAY,OAAqB,MAAuB;AACpE,MAAI,WAAW;AACf,MAAI,OAAO,SAAU,UAAU;AAC3B,UAAM,QAAQ,MAAM,QAAQ,IAAI;AAChC,mBAAe,SAAS,GAAG,gBAAgB,QAAQ,IAAI;AACvD,eAAW,IAAI;aACR,QAAQ,MAAM;AACrB,eAAW,UAAU,MAAM,MAAM;;AAGrC,SAAO,YAAY,UAAU,OAAO,UAAU,EAAE,UAAU,OAAO,IAAG,CAAE,EAAE,SAAQ;AACpF;AAOM,SAAU,WAAW,OAAe,MAAuB;AAC7D,iBAAe,OAAO,UAAW,UAAU,0BAA0B,SAAS,KAAK;AAEnF,MAAI,WAAW;AACf,MAAI,OAAO,SAAU,UAAU;AAC3B,UAAM,QAAQ,MAAM,QAAQ,IAAI;AAChC,mBAAe,SAAS,GAAG,gBAAgB,QAAQ,IAAI;AACvD,eAAW,IAAI;aACR,QAAQ,MAAM;AACrB,eAAW,UAAU,MAAM,MAAM;;AAGrC,SAAO,YAAY,WAAW,OAAO,EAAE,UAAU,OAAO,IAAG,CAAE,EAAE;AACnE;AAKM,SAAU,YAAY,KAAiB;AACzC,SAAO,YAAY,KAAK,EAAE;AAC9B;AAMM,SAAU,WAAW,OAAa;AACpC,SAAO,WAAW,OAAO,EAAE;AAC/B;;;AC5EM,SAAU,OAAOG,cAAsB;AACzC,QAAMC,SAAQ,SAASD,cAAa,aAAa;AAIjD,EAAAC,OAAM,CAAC,IAAKA,OAAM,CAAC,IAAI,KAAQ;AAK/B,EAAAA,OAAM,CAAC,IAAKA,OAAM,CAAC,IAAI,KAAQ;AAE/B,QAAM,QAAQ,QAAQA,MAAK;AAE3B,SAAO;IACJ,MAAM,UAAU,GAAG,EAAE;IACrB,MAAM,UAAU,IAAI,EAAE;IACtB,MAAM,UAAU,IAAI,EAAE;IACtB,MAAM,UAAU,IAAI,EAAE;IACtB,MAAM,UAAU,IAAI,EAAE;IACvB,KAAK,GAAG;AACd;;;ACtBO,IAAM,WAAmB;AAChC,IAAM,UAAU,IAAI,WAAW,QAAQ;AAIvC,IAAM,iBAAiB,CAAE,MAAM;AAE/B,IAAMC,UAAS,CAAA;AAEf,IAAM,cAA6D,oBAAI,QAAO;AAE9E,SAAS,SAAS,QAAc;AAC5B,SAAO,YAAY,IAAI,MAAM;AACjC;AACA,SAAS,SAAS,QAAgBC,QAAmC;AACjE,cAAY,IAAI,QAAQA,MAAK;AACjC;AAEA,SAAS,WAAW,MAAc,OAAY;AAC1C,QAAM,UAAU,IAAI,MAAM,0DAA2D,IAAK,EAAE;AACtF,UAAS,QAAQ;AACvB,QAAM;AACV;AAEA,SAAS,SAASA,QAAqC,OAAe,MAAc;AAChF,MAAIA,OAAM,QAAQ,IAAI,KAAK,GAAG;AAC1B,WAAO,MAAM,IAAI,CAAC,MAAM,UAAS;AAC7B,UAAI,gBAAgB,QAAQ;AACxB,eAAO,SAAS,SAAS,IAAI,GAAG,MAAM,IAAI;;AAE9C,aAAO;IACX,CAAC;;AAGL,SAAuBA,OAAO,OAAO,CAAC,OAAO,MAAM,UAAS;AACxD,QAAI,OAAO,MAAM,SAAS,IAAI;AAC9B,QAAI,EAAE,QAAQ,QAAQ;AAClB,UAAI,QAAQ,gBAAgB,QAAQ;AAChC,eAAO,SAAS,SAAS,IAAI,GAAG,MAAM,IAAI;;AAE9C,YAAM,IAAI,IAAI;;AAElB,WAAO;EACX,GAAwB,CAAA,CAAG;AAC/B;AAxDA;AAkEM,IAAO,UAAP,MAAO,gBAAe,MAAU;;;;EAWlC,eAAe,MAAgB;AAQ3B,UAAM,QAAQ,KAAK,CAAC;AACpB,QAAI,QAAoB,KAAK,CAAC;AAC9B,QAAIA,UAA+B,KAAK,CAAC,KAAK,CAAA,GAAK,MAAK;AAExD,QAAI,OAAO;AACX,QAAI,UAAUD,SAAQ;AAClB,cAAQ;AACR,MAAAC,SAAQ,CAAA;AACR,aAAO;;AAKX,UAAM,MAAM,MAAM;AA5Bb;;;;AA6BL,UAAM,QAAQ,CAAC,MAAM,UAAS;AAAG,WAAK,KAAK,IAAI;IAAM,CAAC;AAGtD,UAAM,aAAaA,OAAM,OAAO,CAAC,OAAO,SAAQ;AAC5C,UAAI,OAAO,SAAU,UAAU;AAC3B,cAAM,IAAI,OAAO,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC;;AAE9C,aAAO;IACX,GAAyB,oBAAI,IAAG,CAAG;AAGnC,aAAS,MAAM,OAAO,OAAO,MAAM,IAAI,CAAC,MAAM,UAAS;AACnD,YAAM,OAAOA,OAAM,KAAK;AACxB,UAAI,QAAQ,QAAQ,WAAW,IAAI,IAAI,MAAM,GAAG;AAC5C,eAAO;;AAEX,aAAO;IACX,CAAC,CAAC,CAAC;AAGH,uBAAK,QAAS,CAAA;AACd,QAAI,mBAAK,WAAU,MAAM;AAAE,WAAK,mBAAK;;AAErC,QAAI,CAAC,MAAM;AAAE;;AAGb,WAAO,OAAO,IAAI;AAGlB,UAAM,QAAQ,IAAI,MAAM,MAAM;MAC1B,KAAK,CAAC,QAAQ,MAAM,aAAY;AAC5B,YAAI,OAAO,SAAU,UAAU;AAG3B,cAAI,KAAK,MAAM,UAAU,GAAG;AACxB,kBAAM,QAAQ,UAAU,MAAM,QAAQ;AACtC,gBAAI,QAAQ,KAAK,SAAS,KAAK,QAAQ;AACnC,oBAAM,IAAI,WAAW,qBAAqB;;AAG9C,kBAAM,OAAO,OAAO,KAAK;AACzB,gBAAI,gBAAgB,OAAO;AACvB,yBAAW,SAAU,KAAM,IAAI,IAAI;;AAEvC,mBAAO;;AAIX,cAAI,eAAe,QAAQ,IAAI,KAAK,GAAG;AACnC,mBAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;;AAG7C,gBAAM,QAAQ,OAAO,IAAI;AACzB,cAAI,iBAAiB,UAAU;AAG3B,mBAAO,YAAuBC,OAAgB;AAC1C,qBAAO,MAAM,MAAO,SAAS,WAAY,SAAQ,MAAMA,KAAI;YAC/D;qBAEO,EAAE,QAAQ,SAAS;AAE1B,mBAAO,OAAO,SAAS,MAAO,SAAS,WAAY,SAAQ,MAAM,CAAE,IAAI,CAAE;;;AAIjF,eAAO,QAAQ,IAAI,QAAQ,MAAM,QAAQ;MAC7C;KACH;AACD,aAAS,OAAO,SAAS,IAAI,CAAC;AAC9B,WAAO;EACX;;;;;;;;EASA,QAAQ,MAAc;AAClB,UAAM,SAAqB,CAAA;AAC3B,SAAK,QAAQ,CAAC,MAAM,UAAS;AACzB,UAAI,gBAAgB,OAAO;AAAE,mBAAW,SAAU,KAAM,IAAI,IAAI;;AAChE,UAAI,QAAQ,gBAAgB,SAAQ;AAChC,eAAO,KAAK,QAAQ,IAAI;;AAE5B,aAAO,KAAK,IAAI;IACpB,CAAC;AACD,WAAO;EACX;;;;;;;;;EAUA,SAAS,MAAc;AACnB,UAAMD,SAAQ,SAAS,IAAI;AAC3B,WAAOA,OAAM,OAAO,CAAC,OAAO,MAAM,UAAS;AAEvC,aAAO,QAAQ,MAAM,kBAAmB,KAAM,YAAY,yBAAyB;QAC/E,WAAW;OACd;AAED,aAAO,SAASA,QAAO,MAAM,IAAI;IACrC,GAAwB,CAAA,CAAE;EAC9B;;;;EAKA,MAAM,OAA4B,KAAwB;AACtD,QAAI,SAAS,MAAM;AAAE,cAAQ;;AAC7B,QAAI,QAAQ,GAAG;AACX,eAAS,KAAK;AACd,UAAI,QAAQ,GAAG;AAAE,gBAAQ;;;AAG7B,QAAI,OAAO,MAAM;AAAE,YAAM,KAAK;;AAC9B,QAAI,MAAM,GAAG;AACT,aAAO,KAAK;AACZ,UAAI,MAAM,GAAG;AAAE,cAAM;;;AAEzB,QAAI,MAAM,KAAK,QAAQ;AAAE,YAAM,KAAK;;AAEpC,UAAME,UAAS,SAAS,IAAI;AAE5B,UAAM,SAAqB,CAAA,GAAKF,SAA8B,CAAA;AAC9D,aAAS,IAAI,OAAO,IAAI,KAAK,KAAK;AAC9B,aAAO,KAAK,KAAK,CAAC,CAAC;AACnB,MAAAA,OAAM,KAAKE,QAAO,CAAC,CAAC;;AAGxB,WAAO,IAAI,QAAOH,SAAQ,QAAQC,MAAK;EAC3C;;;;EAKA,OAAO,UAA8D,SAAa;AAC9E,UAAME,UAAS,SAAS,IAAI;AAE5B,UAAM,SAAqB,CAAA,GAAKF,SAA8B,CAAA;AAC9D,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,YAAM,OAAO,KAAK,CAAC;AACnB,UAAI,gBAAgB,OAAO;AACvB,mBAAW,SAAU,CAAE,IAAI,IAAI;;AAGnC,UAAI,SAAS,KAAK,SAAS,MAAM,GAAG,IAAI,GAAG;AACvC,eAAO,KAAK,IAAI;AAChB,QAAAA,OAAM,KAAKE,QAAO,CAAC,CAAC;;;AAI5B,WAAO,IAAI,QAAOH,SAAQ,QAAQC,MAAK;EAC3C;;;;EAKA,IAAyB,UAAwD,SAAa;AAC1F,UAAM,SAAmB,CAAA;AACzB,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,YAAM,OAAO,KAAK,CAAC;AACnB,UAAI,gBAAgB,OAAO;AACvB,mBAAW,SAAU,CAAE,IAAI,IAAI;;AAGnC,aAAO,KAAK,SAAS,KAAK,SAAS,MAAM,GAAG,IAAI,CAAC;;AAGrD,WAAO;EACX;;;;;;;;;EAWA,SAAS,MAAY;AACjB,UAAM,QAAQ,SAAS,IAAI,EAAE,QAAQ,IAAI;AACzC,QAAI,UAAU,IAAI;AAAE,aAAO;;AAE3B,UAAM,QAAQ,KAAK,KAAK;AAExB,QAAI,iBAAiB,OAAO;AACxB,iBAAW,YAAa,KAAK,UAAU,IAAI,CAAE,IAAU,MAAO,KAAK;;AAGvE,WAAO;EACX;;;;;EAMA,OAAO,UAAU,OAAmB,MAA2B;AAC3D,WAAO,IAAI,QAAOD,SAAQ,OAAO,IAAI;EACzC;;AA5OS;AAJP,IAAO,SAAP;AAgQA,SAAU,kBAAkB,QAAc;AAE5C,QAAM,SAAgE,CAAA;AAEtE,QAAM,cAAc,SAAS,MAA8BI,SAAW;AAClE,QAAI,CAAC,MAAM,QAAQA,OAAM,GAAG;AAAE;;AAC9B,aAAS,OAAOA,SAAQ;AACpB,YAAM,YAAY,KAAK,MAAK;AAC5B,gBAAU,KAAK,GAAG;AAElB,UAAI;AACC,oBAAY,WAAWA,QAAO,GAAG,CAAC;eAC9B,OAAY;AACjB,eAAO,KAAK,EAAE,MAAM,WAAW,MAAY,CAAE;;;EAGzD;AACA,cAAY,CAAA,GAAK,MAAM;AAEvB,SAAO;AAEX;AAEA,SAAS,SAAS,OAAmB;AACjC,MAAIC,SAAQ,UAAU,KAAK;AAE3B,SAAQA,OAAM,UAAU,UAAU,uBAC9B,kBAAkB,EAAE,QAAQA,QAAO,QAAQ,UAAU,QAAQA,OAAM,OAAM,CAAE;AAE/E,MAAIA,OAAM,WAAW,UAAU;AAC3B,IAAAA,SAAQ,aAAa,OAAO,CAAE,QAAQ,MAAMA,OAAM,SAAS,QAAQ,GAAGA,MAAK,CAAE,CAAC;;AAGlF,SAAOA;AACX;AAKM,IAAgB,QAAhB,MAAqB;EAmBvB,YAAY,MAAc,MAAc,WAAmB,SAAgB;AAflE;;;AAIA;;;AAIA;;;AAKA;;;;AAGL,qBAAwB,MAAM,EAAE,MAAM,MAAM,WAAW,QAAO,GAAI;MAC9D,MAAM;MAAU,MAAM;MAAU,WAAW;MAAU,SAAS;KACjE;EACL;EAEA,YAAY,SAAiB,OAAU;AACnC,mBAAe,OAAO,SAAS,KAAK,WAAW,KAAK;EACxD;;AApYJ;AA+YM,IAAO,SAAP,MAAa;EAKf,cAAA;AALE;AAEF;;AACA;AAGI,uBAAK,OAAQ,CAAA;AACb,uBAAK,aAAc;EACvB;EAEA,IAAI,OAAI;AACJ,WAAO,OAAO,mBAAK,MAAK;EAC5B;EACA,IAAI,SAAM;AAAa,WAAO,mBAAK;EAAa;EAQhD,aAAa,QAAc;AACvB,WAAO,sBAAK,iCAAL,WAAgB,aAAa,OAAO,IAAI;EACnD;;EAGA,WAAW,OAAgB;AACvB,QAAIA,SAAQ,aAAa,KAAK;AAC9B,UAAM,gBAAgBA,OAAM,SAAS;AACrC,QAAI,eAAe;AACf,MAAAA,SAAQ,aAAa,OAAO,CAAEA,QAAO,QAAQ,MAAM,aAAa,CAAC,CAAE,CAAC;;AAExE,WAAO,sBAAK,iCAAL,WAAgBA;EAC3B;;EAGA,WAAW,OAAmB;AAC1B,WAAO,sBAAK,iCAAL,WAAgB,SAAS,KAAK;EACzC;;;EAIA,sBAAmB;AACf,UAAM,SAAS,mBAAK,OAAM;AAC1B,uBAAK,OAAM,KAAK,OAAO;AACvB,uBAAK,aAAL,mBAAK,eAAe;AACpB,WAAO,CAAC,UAAuB;AAC3B,yBAAK,OAAM,MAAM,IAAI,SAAS,KAAK;IACvC;EACJ;;AA/CA;AACA;AAHE;AAeF,eAAU,SAACC,OAAgB;AACvB,qBAAK,OAAM,KAAKA,KAAI;AACpB,qBAAK,aAAL,mBAAK,eAAeA,MAAK;AACzB,SAAOA,MAAK;AAChB;AAlaJ,IAAAC,QAAA;AAscM,IAAO,UAAP,MAAO,QAAM;EAcf,YAAYD,OAAiB,YAAsB,cAAqB;AAdtE;AAKO;;;;;AAEA,uBAAAC;AACT;AAEA;AACA;AACA;AAGI,qBAAyB,MAAM,EAAE,YAAY,CAAC,CAAC,WAAU,CAAE;AAE3D,uBAAKA,QAAQ,aAAaD,KAAI;AAC9B,uBAAK,YAAa;AAClB,uBAAK,SAAU;AACf,uBAAK,eAAiB,gBAAgB,OAAQ,eAAc;AAE5D,uBAAK,SAAU;EACnB;EAEA,IAAI,OAAI;AAAa,WAAO,QAAQ,mBAAKC,OAAK;EAAG;EACjD,IAAI,aAAU;AAAa,WAAO,mBAAKA,QAAM;EAAQ;EACrD,IAAI,WAAQ;AAAa,WAAO,mBAAK;EAAS;EAC9C,IAAI,QAAK;AAAiB,WAAO,IAAI,WAAW,mBAAKA,OAAK;EAAG;;EAkC7D,UAAU,QAAc;AACpB,UAAM,SAAS,IAAI,QAAO,mBAAKA,QAAM,MAAM,mBAAK,WAAU,MAAM,GAAG,KAAK,YAAY,mBAAK,cAAa;AACtG,yBAAO,SAAU;AACjB,WAAO;EACX;;EAGA,UAAU,QAAgB,OAAe;AACrC,QAAIF,SAAQ,sBAAK,iCAAL,WAAgB,GAAG,QAAQ,CAAC,CAAC;AACzC,0BAAK,0CAAL,WAAyB;AACzB,uBAAK,SAAL,mBAAK,WAAWA,OAAM;AAEtB,WAAOA,OAAM,MAAM,GAAG,MAAM;EAChC;;EAGA,YAAS;AACL,WAAO,SAAS,KAAK,UAAU,QAAQ,CAAC;EAC5C;EAEA,YAAS;AACL,WAAO,SAAS,KAAK,UAAU,QAAQ,CAAC;EAC5C;;AA7ESE,SAAA;AACT;AAEA;AACA;AACA;AAZE;AA8BF,wBAAmB,SAAC,OAAa;AAperC,MAAAC;AAqeQ,MAAI,mBAAK,UAAS;AAAE,WAAO,gBAAAA,MAAA,mBAAK,UAAQ,0CAAb,KAAAA,KAAiC;;AAE5D,qBAAK,YAAL,mBAAK,cAAc;AAGnB,SAAO,mBAAK,iBAAgB,KAAK,mBAAK,eAAc,mBAAK,iBAAgB,KAAK,YAAY,kDAAmD,mBAAK,cAAc,gEAAkE,kBAAkB;IAChP,QAAQ,aAAa,mBAAKD,OAAK;IAAG,QAAQ,mBAAK;IAC/C,QAAQ;IAAO,MAAM;MACjB,WAAW,mBAAK;MAChB,YAAY,KAAK;;GAExB;AACL;AAEA,eAAU,SAAC,QAAgB,QAAgB,OAAe;AACtD,MAAI,gBAAgB,KAAK,KAAK,SAAS,QAAQ,IAAI;AACnD,MAAI,mBAAK,WAAU,gBAAgB,mBAAKA,QAAM,QAAQ;AAClD,QAAI,KAAK,cAAc,SAAS,mBAAK,WAAU,UAAU,mBAAKA,QAAM,QAAQ;AACxE,sBAAgB;WACb;AACH,aAAO,OAAO,sBAAsB,kBAAkB;QAClD,QAAQ,aAAa,mBAAKA,OAAK;QAC/B,QAAQ,mBAAKA,QAAM;QACnB,QAAQ,mBAAK,WAAU;OAC1B;;;AAGT,SAAO,mBAAKA,QAAM,MAAM,mBAAK,UAAS,mBAAK,WAAU,aAAa;AACtE;AA3DE,IAAO,SAAP;;;ACtcN,oBAEO;;;ACWP,IAAIE,UAAS;AAEb,IAAM,eAAe,SAAS,WAAgC,KAAiBC,OAAgB;AAC3F,aAAO,0BAAW,WAAW,GAAG,EAAE,OAAOA,KAAI,EAAE,OAAM;AACzD;AAEA,IAAI,gBAAgB;AAmBd,SAAU,YAAY,WAAgC,MAAiBC,QAAgB;AACzF,QAAM,MAAM,SAAS,MAAM,KAAK;AAChC,QAAMD,QAAO,SAASC,QAAO,MAAM;AACnC,SAAO,QAAQ,cAAc,WAAW,KAAKD,KAAI,CAAC;AACtD;AACA,YAAY,IAAI;AAChB,YAAY,OAAQ,WAAA;AAAa,EAAAD,UAAS;AAAM;AAChD,YAAY,WAAW,SAAS,MAAsF;AAClH,MAAIA,SAAQ;AAAE,UAAM,IAAI,MAAM,uBAAuB;;AACrD,kBAAgB;AACpB;AACA,OAAO,OAAO,WAAW;;;AClDzB,SAAS,OAAOG,IAAS;AACvB,MAAI,CAAC,OAAO,cAAcA,EAAC,KAAKA,KAAI;AAAG,UAAM,IAAI,MAAM,2BAA2BA,EAAC,EAAE;AACvF;AAMA,SAAS,MAAMC,OAA8B,SAAiB;AAC5D,MAAI,EAAEA,cAAa;AAAa,UAAM,IAAI,MAAM,qBAAqB;AACrE,MAAI,QAAQ,SAAS,KAAK,CAAC,QAAQ,SAASA,GAAE,MAAM;AAClD,UAAM,IAAI,MAAM,iCAAiC,OAAO,mBAAmBA,GAAE,MAAM,EAAE;AACzF;AAQA,SAAS,KAAKC,OAAU;AACtB,MAAI,OAAOA,UAAS,cAAc,OAAOA,MAAK,WAAW;AACvD,UAAM,IAAI,MAAM,iDAAiD;AACnE,SAAOA,MAAK,SAAS;AACrB,SAAOA,MAAK,QAAQ;AACtB;AAEA,SAAS,OAAO,UAAe,gBAAgB,MAAI;AACjD,MAAI,SAAS;AAAW,UAAM,IAAI,MAAM,kCAAkC;AAC1E,MAAI,iBAAiB,SAAS;AAAU,UAAM,IAAI,MAAM,uCAAuC;AACjG;AACA,SAAS,OAAO,KAAU,UAAa;AACrC,QAAM,GAAG;AACT,QAAM,MAAM,SAAS;AACrB,MAAI,IAAI,SAAS,KAAK;AACpB,UAAM,IAAI,MAAM,yDAAyD,GAAG,EAAE;;AAElF;;;ACrCA,IAAM,aAA6B,uBAAO,KAAK,KAAK,CAAC;AACrD,IAAM,OAAuB,uBAAO,EAAE;AAGtC,SAAS,QAAQC,IAAW,KAAK,OAAK;AACpC,MAAI;AAAI,WAAO,EAAE,GAAG,OAAOA,KAAI,UAAU,GAAG,GAAG,OAAQA,MAAK,OAAQ,UAAU,EAAC;AAC/E,SAAO,EAAE,GAAG,OAAQA,MAAK,OAAQ,UAAU,IAAI,GAAG,GAAG,OAAOA,KAAI,UAAU,IAAI,EAAC;AACjF;AAEA,SAAS,MAAM,KAAe,KAAK,OAAK;AACtC,MAAI,KAAK,IAAI,YAAY,IAAI,MAAM;AACnC,MAAI,KAAK,IAAI,YAAY,IAAI,MAAM;AACnC,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,UAAM,EAAE,GAAG,EAAC,IAAK,QAAQ,IAAI,CAAC,GAAG,EAAE;AACnC,KAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;AAExB,SAAO,CAAC,IAAI,EAAE;AAChB;AAgBA,IAAM,SAAS,CAAC,GAAW,GAAW,MAAe,KAAK,IAAM,MAAO,KAAK;AAC5E,IAAM,SAAS,CAAC,GAAW,GAAW,MAAe,KAAK,IAAM,MAAO,KAAK;AAE5E,IAAM,SAAS,CAAC,GAAW,GAAW,MAAe,KAAM,IAAI,KAAQ,MAAO,KAAK;AACnF,IAAM,SAAS,CAAC,GAAW,GAAW,MAAe,KAAM,IAAI,KAAQ,MAAO,KAAK;;;ACjCnF,SAAoB;AACb,IAAMC,UACX,MAAM,OAAO,OAAO,YAAY,eAAe,KAAS,eAAoB;;;ACQ9E,IAAM,MAAM,CAAC,MAA4B,aAAa;AAG/C,IAAM,MAAM,CAAC,QAClB,IAAI,YAAY,IAAI,QAAQ,IAAI,YAAY,KAAK,MAAM,IAAI,aAAa,CAAC,CAAC;AAGrE,IAAM,aAAa,CAAC,QACzB,IAAI,SAAS,IAAI,QAAQ,IAAI,YAAY,IAAI,UAAU;AAGlD,IAAM,OAAO,CAAC,MAAc,UAAmB,QAAS,KAAK,QAAW,SAAS;AAIjF,IAAM,OAAO,IAAI,WAAW,IAAI,YAAY,CAAC,SAAU,CAAC,EAAE,MAAM,EAAE,CAAC,MAAM;AAChF,IAAI,CAAC;AAAM,QAAM,IAAI,MAAM,6CAA6C;AAuCjE,IAAM,WAAW,YAAW;AAAE;AAGrC,eAAsB,UAAU,OAAe,MAAc,IAAuB;AAClF,MAAI,KAAK,KAAK,IAAG;AACjB,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,OAAG,CAAC;AAEJ,UAAM,OAAO,KAAK,IAAG,IAAK;AAC1B,QAAI,QAAQ,KAAK,OAAO;AAAM;AAC9B,UAAM,SAAQ;AACd,UAAM;;AAEV;AASM,SAAU,YAAY,KAAW;AACrC,MAAI,OAAO,QAAQ;AAAU,UAAM,IAAI,MAAM,oCAAoC,OAAO,GAAG,EAAE;AAC7F,SAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAO,GAAG,CAAC;AACrD;AAQM,SAAU,QAAQC,OAAW;AACjC,MAAI,OAAOA,UAAS;AAAU,IAAAA,QAAO,YAAYA,KAAI;AACrD,MAAI,CAAC,IAAIA,KAAI;AAAG,UAAM,IAAI,MAAM,4BAA4B,OAAOA,KAAI,EAAE;AACzE,SAAOA;AACT;AAKM,SAAU,eAAe,QAAoB;AACjD,QAAM,IAAI,IAAI,WAAW,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrE,MAAI,MAAM;AACV,SAAO,QAAQ,CAAC,MAAK;AACnB,QAAI,CAAC,IAAI,CAAC;AAAG,YAAM,IAAI,MAAM,qBAAqB;AAClD,MAAE,IAAI,GAAG,GAAG;AACZ,WAAO,EAAE;EACX,CAAC;AACD,SAAO;AACT;AAGM,IAAgB,OAAhB,MAAoB;;EAsBxB,QAAK;AACH,WAAO,KAAK,WAAU;EACxB;;AAcF,IAAM,QAAQ,CAAA,EAAG;AAEX,SAAU,UACd,UACA,MAAS;AAET,MAAI,SAAS,UAAa,MAAM,KAAK,IAAI,MAAM;AAC7C,UAAM,IAAI,MAAM,uCAAuC;AACzD,QAAM,SAAS,OAAO,OAAO,UAAU,IAAI;AAC3C,SAAO;AACT;AAIM,SAAU,gBAAmC,UAAuB;AACxE,QAAM,QAAQ,CAAC,QAA2B,SAAQ,EAAG,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAM;AAChF,QAAM,MAAM,SAAQ;AACpB,QAAM,YAAY,IAAI;AACtB,QAAM,WAAW,IAAI;AACrB,QAAM,SAAS,MAAM,SAAQ;AAC7B,SAAO;AACT;AAaM,SAAU,2BACd,UAAkC;AAElC,QAAM,QAAQ,CAAC,KAAY,SAAyB,SAAS,IAAI,EAAE,OAAO,QAAQ,GAAG,CAAC,EAAE,OAAM;AAC9F,QAAM,MAAM,SAAS,CAAA,CAAO;AAC5B,QAAM,YAAY,IAAI;AACtB,QAAM,WAAW,IAAI;AACrB,QAAM,SAAS,CAAC,SAAY,SAAS,IAAI;AACzC,SAAO;AACT;AAKM,SAAUC,aAAY,cAAc,IAAE;AAC1C,MAAIC,WAAU,OAAOA,QAAO,oBAAoB,YAAY;AAC1D,WAAOA,QAAO,gBAAgB,IAAI,WAAW,WAAW,CAAC;;AAE3D,QAAM,IAAI,MAAM,wCAAwC;AAC1D;;;ACtMA,IAAM,CAAC,SAAS,WAAW,UAAU,IAAoC,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,CAAE;AACpF,IAAM,MAAsB,uBAAO,CAAC;AACpC,IAAM,MAAsB,uBAAO,CAAC;AACpC,IAAM,MAAsB,uBAAO,CAAC;AACpC,IAAM,MAAsB,uBAAO,CAAC;AACpC,IAAM,QAAwB,uBAAO,GAAG;AACxC,IAAM,SAAyB,uBAAO,GAAI;AAC1C,SAAS,QAAQ,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,QAAQ,IAAI,SAAS;AAE9D,GAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC;AAChC,UAAQ,KAAK,KAAK,IAAI,IAAI,EAAE;AAE5B,YAAU,MAAQ,QAAQ,MAAM,QAAQ,KAAM,IAAK,EAAE;AAErD,MAAI,IAAI;AACR,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAM,KAAK,OAAS,KAAK,OAAO,UAAW;AAC3C,QAAI,IAAI;AAAK,WAAK,QAAS,OAAuB,uBAAO,CAAC,KAAK;;AAEjE,aAAW,KAAK,CAAC;;AAEnB,IAAM,CAAC,aAAa,WAAW,IAAoB,sBAAM,YAAY,IAAI;AAGzE,IAAM,QAAQ,CAAC,GAAW,GAAW,MAAe,IAAI,KAAK,OAAO,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,CAAC;AAC7F,IAAM,QAAQ,CAAC,GAAW,GAAW,MAAe,IAAI,KAAK,OAAO,GAAG,GAAG,CAAC,IAAI,OAAO,GAAG,GAAG,CAAC;AAGvF,SAAU,QAAQ,GAAgB,SAAiB,IAAE;AACzD,QAAM,IAAI,IAAI,YAAY,IAAI,CAAC;AAE/B,WAAS,QAAQ,KAAK,QAAQ,QAAQ,IAAI,SAAS;AAEjD,aAAS,IAAI,GAAG,IAAI,IAAI;AAAK,QAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACvF,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC9B,YAAM,QAAQ,IAAI,KAAK;AACvB,YAAM,QAAQ,IAAI,KAAK;AACvB,YAAM,KAAK,EAAE,IAAI;AACjB,YAAM,KAAK,EAAE,OAAO,CAAC;AACrB,YAAM,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI;AACpC,YAAM,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;AACxC,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI;AAC/B,UAAE,IAAI,CAAC,KAAK;AACZ,UAAE,IAAI,IAAI,CAAC,KAAK;;;AAIpB,QAAI,OAAO,EAAE,CAAC;AACd,QAAI,OAAO,EAAE,CAAC;AACd,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,QAAQ,UAAU,CAAC;AACzB,YAAM,KAAK,MAAM,MAAM,MAAM,KAAK;AAClC,YAAM,KAAK,MAAM,MAAM,MAAM,KAAK;AAClC,YAAM,KAAK,QAAQ,CAAC;AACpB,aAAO,EAAE,EAAE;AACX,aAAO,EAAE,KAAK,CAAC;AACf,QAAE,EAAE,IAAI;AACR,QAAE,KAAK,CAAC,IAAI;;AAGd,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI;AAC/B,eAAS,IAAI,GAAG,IAAI,IAAI;AAAK,UAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AAC3C,eAAS,IAAI,GAAG,IAAI,IAAI;AAAK,UAAE,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,EAAE,IAAI,GAAG,IAAI,KAAK,EAAE;;AAG5E,MAAE,CAAC,KAAK,YAAY,KAAK;AACzB,MAAE,CAAC,KAAK,YAAY,KAAK;;AAE3B,IAAE,KAAK,CAAC;AACV;AAEM,IAAO,SAAP,MAAO,gBAAe,KAAY;;EAQtC,YACS,UACA,QACA,WACG,YAAY,OACZ,SAAiB,IAAE;AAE7B,UAAK;AANE,SAAA,WAAA;AACA,SAAA,SAAA;AACA,SAAA,YAAA;AACG,SAAA,YAAA;AACA,SAAA,SAAA;AAXF,SAAA,MAAM;AACN,SAAA,SAAS;AACT,SAAA,WAAW;AAEX,SAAA,YAAY;AAWpB,WAAO,SAAS;AAEhB,QAAI,KAAK,KAAK,YAAY,KAAK,YAAY;AACzC,YAAM,IAAI,MAAM,0CAA0C;AAC5D,SAAK,QAAQ,IAAI,WAAW,GAAG;AAC/B,SAAK,UAAU,IAAI,KAAK,KAAK;EAC/B;EACU,SAAM;AACd,YAAQ,KAAK,SAAS,KAAK,MAAM;AACjC,SAAK,SAAS;AACd,SAAK,MAAM;EACb;EACA,OAAOC,OAAW;AAChB,WAAO,IAAI;AACX,UAAM,EAAE,UAAU,MAAK,IAAK;AAC5B,IAAAA,QAAO,QAAQA,KAAI;AACnB,UAAM,MAAMA,MAAK;AACjB,aAAS,MAAM,GAAG,MAAM,OAAO;AAC7B,YAAM,OAAO,KAAK,IAAI,WAAW,KAAK,KAAK,MAAM,GAAG;AACpD,eAAS,IAAI,GAAG,IAAI,MAAM;AAAK,cAAM,KAAK,KAAK,KAAKA,MAAK,KAAK;AAC9D,UAAI,KAAK,QAAQ;AAAU,aAAK,OAAM;;AAExC,WAAO;EACT;EACU,SAAM;AACd,QAAI,KAAK;AAAU;AACnB,SAAK,WAAW;AAChB,UAAM,EAAE,OAAO,QAAQ,KAAK,SAAQ,IAAK;AAEzC,UAAM,GAAG,KAAK;AACd,SAAK,SAAS,SAAU,KAAK,QAAQ,WAAW;AAAG,WAAK,OAAM;AAC9D,UAAM,WAAW,CAAC,KAAK;AACvB,SAAK,OAAM;EACb;EACU,UAAU,KAAe;AACjC,WAAO,MAAM,KAAK;AAClB,UAAM,GAAG;AACT,SAAK,OAAM;AACX,UAAM,YAAY,KAAK;AACvB,UAAM,EAAE,SAAQ,IAAK;AACrB,aAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,MAAM,OAAO;AAC/C,UAAI,KAAK,UAAU;AAAU,aAAK,OAAM;AACxC,YAAM,OAAO,KAAK,IAAI,WAAW,KAAK,QAAQ,MAAM,GAAG;AACvD,UAAI,IAAI,UAAU,SAAS,KAAK,QAAQ,KAAK,SAAS,IAAI,GAAG,GAAG;AAChE,WAAK,UAAU;AACf,aAAO;;AAET,WAAO;EACT;EACA,QAAQ,KAAe;AAErB,QAAI,CAAC,KAAK;AAAW,YAAM,IAAI,MAAM,uCAAuC;AAC5E,WAAO,KAAK,UAAU,GAAG;EAC3B;EACA,IAAIC,QAAa;AACf,WAAOA,MAAK;AACZ,WAAO,KAAK,QAAQ,IAAI,WAAWA,MAAK,CAAC;EAC3C;EACA,WAAW,KAAe;AACxB,WAAO,KAAK,IAAI;AAChB,QAAI,KAAK;AAAU,YAAM,IAAI,MAAM,6BAA6B;AAChE,SAAK,UAAU,GAAG;AAClB,SAAK,QAAO;AACZ,WAAO;EACT;EACA,SAAM;AACJ,WAAO,KAAK,WAAW,IAAI,WAAW,KAAK,SAAS,CAAC;EACvD;EACA,UAAO;AACL,SAAK,YAAY;AACjB,SAAK,MAAM,KAAK,CAAC;EACnB;EACA,WAAW,IAAW;AACpB,UAAM,EAAE,UAAU,QAAQ,WAAW,QAAQ,UAAS,IAAK;AAC3D,WAAA,KAAO,IAAI,QAAO,UAAU,QAAQ,WAAW,WAAW,MAAM;AAChE,OAAG,QAAQ,IAAI,KAAK,OAAO;AAC3B,OAAG,MAAM,KAAK;AACd,OAAG,SAAS,KAAK;AACjB,OAAG,WAAW,KAAK;AACnB,OAAG,SAAS;AAEZ,OAAG,SAAS;AACZ,OAAG,YAAY;AACf,OAAG,YAAY;AACf,OAAG,YAAY,KAAK;AACpB,WAAO;EACT;;AAGF,IAAM,MAAM,CAAC,QAAgB,UAAkB,cAC7C,gBAAgB,MAAM,IAAI,OAAO,UAAU,QAAQ,SAAS,CAAC;AAExD,IAAM,WAA2B,oBAAI,GAAM,KAAK,MAAM,CAAC;AAKvD,IAAM,WAA2B,oBAAI,GAAM,KAAK,MAAM,CAAC;AACvD,IAAM,WAA2B,oBAAI,GAAM,KAAK,MAAM,CAAC;AACvD,IAAM,WAA2B,oBAAI,GAAM,IAAI,MAAM,CAAC;AACtD,IAAM,aAA6B,oBAAI,GAAM,KAAK,MAAM,CAAC;AAKzD,IAAM,aAA6B,oBAAI,GAAM,KAAK,MAAM,CAAC;AACzD,IAAM,aAA6B,oBAAI,GAAM,KAAK,MAAM,CAAC;AACzD,IAAM,aAA6B,oBAAI,GAAM,IAAI,MAAM,CAAC;AAI/D,IAAM,WAAW,CAAC,QAAgB,UAAkB,cAClD,2BACE,CAAC,OAAkB,CAAA,MACjB,IAAI,OAAO,UAAU,QAAQ,KAAK,UAAU,SAAY,YAAY,KAAK,OAAO,IAAI,CAAC;AAGpF,IAAM,WAA2B,yBAAS,IAAM,KAAK,MAAM,CAAC;AAC5D,IAAM,WAA2B,yBAAS,IAAM,KAAK,MAAM,CAAC;;;ACjNnE,IAAIC,UAAS;AAEb,IAAM,aAAa,SAASC,OAAgB;AACxC,SAAO,WAAWA,KAAI;AAC1B;AAEA,IAAI,cAA+C;AAwB7C,SAAU,UAAUC,QAAgB;AACtC,QAAMD,QAAO,SAASC,QAAO,MAAM;AACnC,SAAO,QAAQ,YAAYD,KAAI,CAAC;AACpC;AACA,UAAU,IAAI;AACd,UAAU,OAAO,WAAA;AAAmB,EAAAD,UAAS;AAAM;AACnD,UAAU,WAAW,SAAS,MAAqC;AAC/D,MAAIA,SAAQ;AAAE,UAAM,IAAI,UAAU,qBAAqB;;AACvD,gBAAc;AAClB;AACA,OAAO,OAAO,SAAS;;;ACjDvB,SAAS,aAAa,MAAgB,YAAoB,OAAeG,OAAa;AACpF,MAAI,OAAO,KAAK,iBAAiB;AAAY,WAAO,KAAK,aAAa,YAAY,OAAOA,KAAI;AAC7F,QAAMC,QAAO,OAAO,EAAE;AACtB,QAAM,WAAW,OAAO,UAAU;AAClC,QAAM,KAAK,OAAQ,SAASA,QAAQ,QAAQ;AAC5C,QAAM,KAAK,OAAO,QAAQ,QAAQ;AAClC,QAAM,IAAID,QAAO,IAAI;AACrB,QAAM,IAAIA,QAAO,IAAI;AACrB,OAAK,UAAU,aAAa,GAAG,IAAIA,KAAI;AACvC,OAAK,UAAU,aAAa,GAAG,IAAIA,KAAI;AACzC;AAGM,IAAgB,OAAhB,cAAgD,KAAO;EAc3D,YACW,UACF,WACE,WACAA,OAAa;AAEtB,UAAK;AALI,SAAA,WAAA;AACF,SAAA,YAAA;AACE,SAAA,YAAA;AACA,SAAA,OAAAA;AATD,SAAA,WAAW;AACX,SAAA,SAAS;AACT,SAAA,MAAM;AACN,SAAA,YAAY;AASpB,SAAK,SAAS,IAAI,WAAW,QAAQ;AACrC,SAAK,OAAO,WAAW,KAAK,MAAM;EACpC;EACA,OAAOE,OAAW;AAChB,WAAO,IAAI;AACX,UAAM,EAAE,MAAM,QAAQ,SAAQ,IAAK;AACnC,IAAAA,QAAO,QAAQA,KAAI;AACnB,UAAM,MAAMA,MAAK;AACjB,aAAS,MAAM,GAAG,MAAM,OAAO;AAC7B,YAAM,OAAO,KAAK,IAAI,WAAW,KAAK,KAAK,MAAM,GAAG;AAEpD,UAAI,SAAS,UAAU;AACrB,cAAM,WAAW,WAAWA,KAAI;AAChC,eAAO,YAAY,MAAM,KAAK,OAAO;AAAU,eAAK,QAAQ,UAAU,GAAG;AACzE;;AAEF,aAAO,IAAIA,MAAK,SAAS,KAAK,MAAM,IAAI,GAAG,KAAK,GAAG;AACnD,WAAK,OAAO;AACZ,aAAO;AACP,UAAI,KAAK,QAAQ,UAAU;AACzB,aAAK,QAAQ,MAAM,CAAC;AACpB,aAAK,MAAM;;;AAGf,SAAK,UAAUA,MAAK;AACpB,SAAK,WAAU;AACf,WAAO;EACT;EACA,WAAW,KAAe;AACxB,WAAO,IAAI;AACX,WAAO,KAAK,IAAI;AAChB,SAAK,WAAW;AAIhB,UAAM,EAAE,QAAQ,MAAM,UAAU,MAAAF,MAAI,IAAK;AACzC,QAAI,EAAE,IAAG,IAAK;AAEd,WAAO,KAAK,IAAI;AAChB,SAAK,OAAO,SAAS,GAAG,EAAE,KAAK,CAAC;AAEhC,QAAI,KAAK,YAAY,WAAW,KAAK;AACnC,WAAK,QAAQ,MAAM,CAAC;AACpB,YAAM;;AAGR,aAAS,IAAI,KAAK,IAAI,UAAU;AAAK,aAAO,CAAC,IAAI;AAIjD,iBAAa,MAAM,WAAW,GAAG,OAAO,KAAK,SAAS,CAAC,GAAGA,KAAI;AAC9D,SAAK,QAAQ,MAAM,CAAC;AACpB,UAAM,QAAQ,WAAW,GAAG;AAC5B,UAAM,MAAM,KAAK;AAEjB,QAAI,MAAM;AAAG,YAAM,IAAI,MAAM,6CAA6C;AAC1E,UAAM,SAAS,MAAM;AACrB,UAAM,QAAQ,KAAK,IAAG;AACtB,QAAI,SAAS,MAAM;AAAQ,YAAM,IAAI,MAAM,oCAAoC;AAC/E,aAAS,IAAI,GAAG,IAAI,QAAQ;AAAK,YAAM,UAAU,IAAI,GAAG,MAAM,CAAC,GAAGA,KAAI;EACxE;EACA,SAAM;AACJ,UAAM,EAAE,QAAQ,UAAS,IAAK;AAC9B,SAAK,WAAW,MAAM;AACtB,UAAM,MAAM,OAAO,MAAM,GAAG,SAAS;AACrC,SAAK,QAAO;AACZ,WAAO;EACT;EACA,WAAW,IAAM;AACf,WAAA,KAAO,IAAK,KAAK,YAAmB;AACpC,OAAG,IAAI,GAAG,KAAK,IAAG,CAAE;AACpB,UAAM,EAAE,UAAU,QAAQ,QAAQ,UAAU,WAAW,IAAG,IAAK;AAC/D,OAAG,SAAS;AACZ,OAAG,MAAM;AACT,OAAG,WAAW;AACd,OAAG,YAAY;AACf,QAAI,SAAS;AAAU,SAAG,OAAO,IAAI,MAAM;AAC3C,WAAO;EACT;;;;AC/GF,IAAM,MAAsB,oBAAI,WAAW,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;AACjG,IAAM,KAAqB,2BAAW,KAAK,EAAE,QAAQ,GAAE,GAAI,CAAC,GAAG,MAAM,CAAC;AACtE,IAAM,KAAqB,mBAAG,IAAI,CAAC,OAAO,IAAI,IAAI,KAAK,EAAE;AACzD,IAAI,OAAO,CAAC,EAAE;AACd,IAAI,OAAO,CAAC,EAAE;AACd,SAAS,IAAI,GAAG,IAAI,GAAG;AAAK,WAAS,KAAK,CAAC,MAAM,IAAI;AAAG,MAAE,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAEtF,IAAM,SAAyB;EAC7B,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;EACvD,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;EACvD,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;EACvD,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;EACvD,CAAC,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,GAAG,CAAC;EACvD,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,CAAC;AAC9B,IAAM,UAA0B,qBAAK,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,IAAM,UAA0B,qBAAK,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;AACjF,IAAM,KAAqB,oBAAI,YAAY;EACzC;EAAY;EAAY;EAAY;EAAY;CACjD;AACD,IAAM,KAAqB,oBAAI,YAAY;EACzC;EAAY;EAAY;EAAY;EAAY;CACjD;AAED,IAAM,OAAO,CAAC,MAAc,UAAmB,QAAQ,QAAU,SAAU,KAAK;AAEhF,SAAS,EAAE,OAAe,GAAW,GAAW,GAAS;AACvD,MAAI,UAAU;AAAG,WAAO,IAAI,IAAI;WACvB,UAAU;AAAG,WAAQ,IAAI,IAAM,CAAC,IAAI;WACpC,UAAU;AAAG,YAAQ,IAAI,CAAC,KAAK;WAC/B,UAAU;AAAG,WAAQ,IAAI,IAAM,IAAI,CAAC;;AACxC,WAAO,KAAK,IAAI,CAAC;AACxB;AAEA,IAAM,MAAsB,oBAAI,YAAY,EAAE;AACxC,IAAO,YAAP,cAAyB,KAAe;EAO5C,cAAA;AACE,UAAM,IAAI,IAAI,GAAG,IAAI;AAPf,SAAA,KAAK,aAAa;AAClB,SAAA,KAAK,aAAa;AAClB,SAAA,KAAK,aAAa;AAClB,SAAA,KAAK,YAAa;AAClB,SAAA,KAAK,aAAa;EAI1B;EACU,MAAG;AACX,UAAM,EAAE,IAAI,IAAI,IAAI,IAAI,GAAE,IAAK;AAC/B,WAAO,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE;EAC5B;EACU,IAAI,IAAY,IAAY,IAAY,IAAY,IAAU;AACtE,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,KAAK;AACf,SAAK,KAAK,KAAK;EACjB;EACU,QAAQ,MAAgB,QAAc;AAC9C,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,UAAU;AAAG,UAAI,CAAC,IAAI,KAAK,UAAU,QAAQ,IAAI;AAE9E,QAAI,KAAK,KAAK,KAAK,GAAG,KAAK,IACvB,KAAK,KAAK,KAAK,GAAG,KAAK,IACvB,KAAK,KAAK,KAAK,GAAG,KAAK,IACvB,KAAK,KAAK,KAAK,GAAG,KAAK,IACvB,KAAK,KAAK,KAAK,GAAG,KAAK;AAI3B,aAAS,QAAQ,GAAG,QAAQ,GAAG,SAAS;AACtC,YAAM,SAAS,IAAI;AACnB,YAAM,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK;AACrC,YAAM,KAAK,KAAK,KAAK,GAAG,KAAK,KAAK,KAAK;AACvC,YAAM,KAAK,QAAQ,KAAK,GAAG,KAAK,QAAQ,KAAK;AAC7C,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,cAAM,KAAM,KAAK,KAAK,EAAE,OAAO,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAM;AAC9E,aAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK;;AAGzD,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,cAAM,KAAM,KAAK,KAAK,EAAE,QAAQ,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,IAAI,KAAM;AAC/E,aAAK,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,GAAG,KAAK,IAAI,KAAK;;;AAI3D,SAAK,IACF,KAAK,KAAK,KAAK,KAAM,GACrB,KAAK,KAAK,KAAK,KAAM,GACrB,KAAK,KAAK,KAAK,KAAM,GACrB,KAAK,KAAK,KAAK,KAAM,GACrB,KAAK,KAAK,KAAK,KAAM,CAAC;EAE3B;EACU,aAAU;AAClB,QAAI,KAAK,CAAC;EACZ;EACA,UAAO;AACL,SAAK,YAAY;AACjB,SAAK,OAAO,KAAK,CAAC;AAClB,SAAK,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;EACxB;;AAOK,IAAM,YAA4B,gCAAgB,MAAM,IAAI,UAAS,CAAE;;;ACtG9E,IAAIG,UAAS;AAEb,IAAM,aAAa,SAASC,OAAgB;AACxC,SAAO,UAAgBA,KAAI;AAC/B;AAEA,IAAI,cAA+C;AAmB7C,SAAUC,WAAUC,QAAgB;AACtC,QAAMF,QAAO,SAASE,QAAO,MAAM;AACnC,SAAO,QAAQ,YAAYF,KAAI,CAAC;AACpC;AACAC,WAAU,IAAI;AACdA,WAAU,OAAO,WAAA;AAAmB,EAAAF,UAAS;AAAM;AACnDE,WAAU,WAAW,SAAS,MAAqC;AAC/D,MAAIF,SAAQ;AAAE,UAAM,IAAI,UAAU,qBAAqB;;AACvD,gBAAc;AAClB;AACA,OAAO,OAAOE,UAAS;;;AC3BvB,IAAIE,UAAS;AAEb,IAAM,UAAU,SAAS,UAAsB,MAAkB,YAAoB,QAAgB,MAAyB;AAC1H,aAAO,0BAAW,UAAU,MAAM,YAAY,QAAQ,IAAI;AAC9D;AAEA,IAAI,WAAW;AAsBT,SAAU,OAAO,WAAsB,OAAkB,YAAoB,QAAgB,MAAyB;AACxH,QAAM,WAAW,SAAS,WAAW,UAAU;AAC/C,QAAM,OAAO,SAAS,OAAO,MAAM;AACnC,SAAO,QAAQ,SAAS,UAAU,MAAM,YAAY,QAAQ,IAAI,CAAC;AACrE;AACA,OAAO,IAAI;AACX,OAAO,OAAO,WAAA;AAAmB,EAAAA,UAAS;AAAM;AAChD,OAAO,WAAW,SAAS,MAA0H;AACjJ,MAAIA,SAAQ;AAAE,UAAM,IAAI,MAAM,kBAAkB;;AAChD,aAAW;AACf;AACA,OAAO,OAAO,MAAM;;;AC5CpB,IAAIC,UAAS;AAEb,IAAM,eAAe,SAAS,QAAc;AACxC,SAAO,IAAI,eAAW,2BAAc,MAAM,CAAC;AAC/C;AAEA,IAAI,gBAAgB;AASd,SAAUC,aAAY,QAAc;AACtC,SAAO,cAAc,MAAM;AAC/B;AAEAA,aAAY,IAAI;AAChBA,aAAY,OAAO,WAAA;AAAmB,EAAAD,UAAS;AAAM;AACrDC,aAAY,WAAW,SAAS,MAAoC;AAChE,MAAID,SAAQ;AAAE,UAAM,IAAI,MAAM,uBAAuB;;AACrD,kBAAgB;AACpB;AACA,OAAO,OAAOC,YAAW;;;AC5BzB,IAAM,MAAM,CAAC,GAAWC,IAAW,MAAe,IAAIA,KAAM,CAAC,IAAI;AAEjE,IAAM,MAAM,CAAC,GAAWA,IAAW,MAAe,IAAIA,KAAM,IAAI,IAAMA,KAAI;AAK1E,IAAM,WAA0B,oBAAI,YAAY;EAC9C;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EACpF;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;CACrF;AAID,IAAM,KAAoB,oBAAI,YAAY;EACxC;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;EAAY;CACrF;AAID,IAAM,WAA2B,oBAAI,YAAY,EAAE;AACnD,IAAM,SAAN,cAAqB,KAAY;EAY/B,cAAA;AACE,UAAM,IAAI,IAAI,GAAG,KAAK;AAVxB,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;AACZ,SAAA,IAAI,GAAG,CAAC,IAAI;EAIZ;EACU,MAAG;AACX,UAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAC,IAAK;AACnC,WAAO,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAChC;;EAEU,IACR,GAAW,GAAW,GAAW,GAAW,GAAW,GAAW,GAAW,GAAS;AAEtF,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;AACb,SAAK,IAAI,IAAI;EACf;EACU,QAAQ,MAAgB,QAAc;AAE9C,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK,UAAU;AAAG,eAAS,CAAC,IAAI,KAAK,UAAU,QAAQ,KAAK;AACpF,aAAS,IAAI,IAAI,IAAI,IAAI,KAAK;AAC5B,YAAM,MAAM,SAAS,IAAI,EAAE;AAC3B,YAAM,KAAK,SAAS,IAAI,CAAC;AACzB,YAAM,KAAK,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,IAAK,QAAQ;AACnD,YAAM,KAAK,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,EAAE,IAAK,OAAO;AACjD,eAAS,CAAC,IAAK,KAAK,SAAS,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,EAAE,IAAK;;AAGjE,QAAI,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EAAC,IAAK;AACjC,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,YAAM,SAAS,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AACpD,YAAMC,MAAM,IAAI,SAAS,IAAI,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,IAAI,SAAS,CAAC,IAAK;AACrE,YAAM,SAAS,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,GAAG,EAAE;AACpD,YAAMC,MAAM,SAAS,IAAI,GAAG,GAAG,CAAC,IAAK;AACrC,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAK,IAAID,MAAM;AACf,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAKA,MAAKC,MAAM;;AAGlB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,QAAK,IAAI,KAAK,IAAK;AACnB,SAAK,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EACjC;EACU,aAAU;AAClB,aAAS,KAAK,CAAC;EACjB;EACA,UAAO;AACL,SAAK,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC/B,SAAK,OAAO,KAAK,CAAC;EACpB;;AAsBK,IAAM,SAAyB,gCAAgB,MAAM,IAAI,OAAM,CAAE;;;AChIlE,IAAO,OAAP,cAAuC,KAAa;EAQxD,YAAYC,OAAa,MAAW;AAClC,UAAK;AAJC,SAAA,WAAW;AACX,SAAA,YAAY;AAIlB,SAAWA,KAAI;AACf,UAAM,MAAM,QAAQ,IAAI;AACxB,SAAK,QAAQA,MAAK,OAAM;AACxB,QAAI,OAAO,KAAK,MAAM,WAAW;AAC/B,YAAM,IAAI,MAAM,qDAAqD;AACvE,SAAK,WAAW,KAAK,MAAM;AAC3B,SAAK,YAAY,KAAK,MAAM;AAC5B,UAAM,WAAW,KAAK;AACtB,UAAM,MAAM,IAAI,WAAW,QAAQ;AAEnC,QAAI,IAAI,IAAI,SAAS,WAAWA,MAAK,OAAM,EAAG,OAAO,GAAG,EAAE,OAAM,IAAK,GAAG;AACxE,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,UAAI,CAAC,KAAK;AAC/C,SAAK,MAAM,OAAO,GAAG;AAErB,SAAK,QAAQA,MAAK,OAAM;AAExB,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ;AAAK,UAAI,CAAC,KAAK,KAAO;AACtD,SAAK,MAAM,OAAO,GAAG;AACrB,QAAI,KAAK,CAAC;EACZ;EACA,OAAO,KAAU;AACf,WAAa,IAAI;AACjB,SAAK,MAAM,OAAO,GAAG;AACrB,WAAO;EACT;EACA,WAAW,KAAe;AACxB,WAAa,IAAI;AACjB,UAAY,KAAK,KAAK,SAAS;AAC/B,SAAK,WAAW;AAChB,SAAK,MAAM,WAAW,GAAG;AACzB,SAAK,MAAM,OAAO,GAAG;AACrB,SAAK,MAAM,WAAW,GAAG;AACzB,SAAK,QAAO;EACd;EACA,SAAM;AACJ,UAAM,MAAM,IAAI,WAAW,KAAK,MAAM,SAAS;AAC/C,SAAK,WAAW,GAAG;AACnB,WAAO;EACT;EACA,WAAW,IAAY;AAErB,WAAA,KAAO,OAAO,OAAO,OAAO,eAAe,IAAI,GAAG,CAAA,CAAE;AACpD,UAAM,EAAE,OAAO,OAAO,UAAU,WAAW,UAAU,UAAS,IAAK;AACnE,SAAK;AACL,OAAG,WAAW;AACd,OAAG,YAAY;AACf,OAAG,WAAW;AACd,OAAG,YAAY;AACf,OAAG,QAAQ,MAAM,WAAW,GAAG,KAAK;AACpC,OAAG,QAAQ,MAAM,WAAW,GAAG,KAAK;AACpC,WAAO;EACT;EACA,UAAO;AACL,SAAK,YAAY;AACjB,SAAK,MAAM,QAAO;AAClB,SAAK,MAAM,QAAO;EACpB;;AASK,IAAM,OAAO,CAACA,OAAa,KAAY,YAC5C,IAAI,KAAUA,OAAM,GAAG,EAAE,OAAO,OAAO,EAAE,OAAM;AACjD,KAAK,SAAS,CAACA,OAAa,QAAe,IAAI,KAAUA,OAAM,GAAG;;;ACrElE,SAAS,WAAWC,OAAa,WAAkB,OAAc,OAAgB;AAC/E,OAAWA,KAAI;AACf,QAAM,OAAO,UAAU,EAAE,OAAO,IAAI,WAAW,GAAE,GAAI,KAAK;AAC1D,QAAM,EAAE,GAAG,OAAO,UAAS,IAAK;AAChC,SAAa,CAAC;AACd,SAAa,KAAK;AAClB,SAAa,SAAS;AACtB,MAAI,IAAI;AAAG,UAAM,IAAI,MAAM,uCAAuC;AAClE,QAAM,WAAW,QAAQ,SAAS;AAClC,QAAM,OAAO,QAAQ,KAAK;AAE1B,QAAM,KAAK,IAAI,WAAW,KAAK;AAE/B,QAAM,MAAM,KAAK,OAAOA,OAAM,QAAQ;AACtC,QAAM,UAAU,IAAI,WAAU,EAAG,OAAO,IAAI;AAC5C,SAAO,EAAE,GAAG,OAAO,WAAW,IAAI,KAAK,QAAO;AAChD;AAEA,SAAS,aACP,KACA,SACA,IACA,MACA,GAAa;AAEb,MAAI,QAAO;AACX,UAAQ,QAAO;AACf,MAAI;AAAM,SAAK,QAAO;AACtB,IAAE,KAAK,CAAC;AACR,SAAO;AACT;AASM,SAAUC,QAAOD,OAAa,UAAiB,MAAa,MAAe;AAC/E,QAAM,EAAE,GAAG,OAAO,IAAI,KAAK,QAAO,IAAK,WAAWA,OAAM,UAAU,MAAM,IAAI;AAC5E,MAAI;AACJ,QAAM,MAAM,IAAI,WAAW,CAAC;AAC5B,QAAM,OAAO,WAAW,GAAG;AAC3B,QAAM,IAAI,IAAI,WAAW,IAAI,SAAS;AAEtC,WAAS,KAAK,GAAG,MAAM,GAAG,MAAM,OAAO,MAAM,OAAO,IAAI,WAAW;AAEjE,UAAM,KAAK,GAAG,SAAS,KAAK,MAAM,IAAI,SAAS;AAC/C,SAAK,SAAS,GAAG,IAAI,KAAK;AAG1B,KAAC,OAAO,QAAQ,WAAW,IAAI,GAAG,OAAO,GAAG,EAAE,WAAW,CAAC;AAC1D,OAAG,IAAI,EAAE,SAAS,GAAG,GAAG,MAAM,CAAC;AAC/B,aAAS,KAAK,GAAG,KAAK,GAAG,MAAM;AAE7B,UAAI,WAAW,IAAI,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC;AAC3C,eAAS,IAAI,GAAG,IAAI,GAAG,QAAQ;AAAK,WAAG,CAAC,KAAK,EAAE,CAAC;;;AAGpD,SAAO,aAAa,KAAK,SAAS,IAAI,MAAM,CAAC;AAC/C;;;AChEA,IAAME,QAAO,CAAC,GAAWC,OAAe,KAAKA,KAAM,MAAO,KAAKA;AAK/D,SAAS,YACP,MACA,IACA,OACA,IACA,KACA,IAAU;AAIV,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AACjE,MAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;AAEjE,MAAI,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KACvC,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KACvC,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KACvC,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM;AAE3C,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;AAC7B,WAAOD,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAI,CAAC;AAC7D,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;AAAG,WAAOA,MAAK,MAAM,MAAM,GAAG,EAAE;;AAG/D,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACvD,MAAI,IAAI,IAAK,MAAM,MAAO;AAAG,MAAI,IAAI,IAAK,MAAM,MAAO;AACzD;AAEA,SAAS,SAAS,OAAoB,IAAY,KAAkB,IAAY,GAAS;AAEvF,MAAI,OAAO,KAAK;AAChB,MAAI,OAAO,KAAK,KAAK;AACrB,WAAS,IAAI,GAAG,IAAI,IAAI;AAAK,QAAI,OAAO,CAAC,IAAI,MAAM,MAAM,IAAI,IAAI,KAAK,KAAK,CAAC;AAC5E,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,MAAM,IAAI;AAEhD,gBAAY,KAAK,MAAM,OAAO,IAAI,KAAK,IAAI;AAC3C,QAAI,IAAI;AAAG,cAAQ;AACnB,gBAAY,KAAK,MAAM,OAAQ,MAAM,IAAK,KAAK,IAAI;;AAEvD;AAaA,SAAS,WAAW,UAAiB,MAAa,OAAkB;AAElE,QAAM,OAAO,UACX;IACE,OAAO;IACP,WAAW;IACX,QAAQ,QAAQ,IAAI;KAEtB,KAAK;AAEP,QAAM,EAAE,GAAAE,IAAG,GAAG,GAAG,OAAO,WAAW,QAAQ,WAAU,IAAK;AAC1D,SAAaA,EAAC;AACd,SAAa,CAAC;AACd,SAAa,CAAC;AACd,SAAa,KAAK;AAClB,SAAa,SAAS;AACtB,SAAa,MAAM;AACnB,MAAI,eAAe,UAAa,OAAO,eAAe;AACpD,UAAM,IAAI,MAAM,+BAA+B;AACjD,QAAM,YAAY,MAAM;AACxB,QAAM,cAAc,YAAY;AAChC,MAAIA,MAAK,MAAMA,KAAKA,KAAI,OAAQ,KAAKA,MAAK,MAAM,YAAY,MAAMA,KAAI,KAAK,IAAI;AAG7E,UAAM,IAAI,MACR,6FAA6F;;AAGjG,MAAI,IAAI,KAAK,KAAM,KAAK,KAAK,KAAK,KAAM,WAAW;AACjD,UAAM,IAAI,MACR,0FAA0F;;AAG9F,MAAI,QAAQ,KAAK,SAAS,KAAK,KAAK,KAAK,IAAI;AAC3C,UAAM,IAAI,MACR,gFAAgF;;AAGpF,QAAM,UAAU,aAAaA,KAAI;AACjC,MAAI,UAAU,QAAQ;AACpB,UAAM,IAAI,MACR,iCAAiC,OAAO,0BAA0B,MAAM,WAAW;;AAKvF,QAAM,IAAIC,QAAO,QAAQ,UAAU,MAAM,EAAE,GAAG,GAAG,OAAO,YAAY,EAAC,CAAE;AACvE,QAAM,MAAM,IAAI,CAAC;AAEjB,QAAM,IAAI,IAAI,IAAI,WAAW,YAAYD,EAAC,CAAC;AAC3C,QAAM,MAAM,IAAI,IAAI,WAAW,SAAS,CAAC;AACzC,MAAI,aAAa,MAAK;EAAE;AACxB,MAAI,YAAY;AACd,UAAM,gBAAgB,IAAIA,KAAI;AAG9B,UAAM,cAAc,KAAK,IAAI,KAAK,MAAM,gBAAgB,GAAK,GAAG,CAAC;AACjE,QAAI,cAAc;AAClB,iBAAa,MAAK;AAChB;AACA,UAAI,eAAe,EAAE,cAAc,gBAAgB,gBAAgB;AACjE,mBAAW,cAAc,aAAa;IAC1C;;AAEF,SAAO,EAAE,GAAAA,IAAG,GAAG,GAAG,OAAO,aAAa,GAAG,KAAK,GAAG,KAAK,YAAY,UAAS;AAC7E;AAEA,SAAS,aACP,UACA,OACA,GACA,GACA,KAAgB;AAEhB,QAAM,MAAMC,QAAO,QAAQ,UAAU,GAAG,EAAE,GAAG,GAAG,MAAK,CAAE;AACvD,IAAE,KAAK,CAAC;AACR,IAAE,KAAK,CAAC;AACR,MAAI,KAAK,CAAC;AACV,SAAO;AACT;AAgBM,SAAU,OAAO,UAAiB,MAAa,MAAgB;AACnE,QAAM,EAAE,GAAAD,IAAG,GAAG,GAAG,OAAO,aAAa,GAAG,KAAK,GAAG,KAAK,WAAU,IAAK,WAClE,UACA,MACA,IAAI;AAEN,WAAS,KAAK,GAAG,KAAK,GAAG,MAAM;AAC7B,UAAME,MAAK,cAAc;AACzB,aAAS,IAAI,GAAG,IAAI,aAAa;AAAK,QAAE,CAAC,IAAI,IAAIA,MAAK,CAAC;AACvD,aAAS,IAAI,GAAG,MAAM,GAAG,IAAIF,KAAI,GAAG,KAAK;AACvC,eAAS,GAAG,KAAK,GAAI,OAAO,aAAc,CAAC;AAC3C,iBAAU;;AAEZ,aAAS,IAAIA,KAAI,KAAK,aAAa,KAAKE,KAAI,CAAC;AAC7C,eAAU;AACV,aAAS,IAAI,GAAG,IAAIF,IAAG,KAAK;AAE1B,YAAM,IAAI,IAAIE,MAAK,cAAc,EAAE,IAAIF;AACvC,eAAS,IAAI,GAAG,IAAI,aAAa;AAAK,YAAI,CAAC,IAAI,IAAIE,MAAK,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC;AAClF,eAAS,KAAK,GAAG,KAAKA,KAAI,CAAC;AAC3B,iBAAU;;;AAGd,SAAO,aAAa,UAAU,OAAO,GAAG,GAAG,GAAG;AAChD;AAKA,eAAsB,YAAY,UAAiB,MAAa,MAAgB;AAC9E,QAAM,EAAE,GAAAF,IAAG,GAAG,GAAG,OAAO,aAAa,GAAG,KAAK,GAAG,KAAK,YAAY,UAAS,IAAK,WAC7E,UACA,MACA,IAAI;AAEN,WAAS,KAAK,GAAG,KAAK,GAAG,MAAM;AAC7B,UAAME,MAAK,cAAc;AACzB,aAAS,IAAI,GAAG,IAAI,aAAa;AAAK,QAAE,CAAC,IAAI,IAAIA,MAAK,CAAC;AACvD,QAAI,MAAM;AACV,UAAM,UAAUF,KAAI,GAAG,WAAW,MAAK;AACrC,eAAS,GAAG,KAAK,GAAI,OAAO,aAAc,CAAC;AAC3C,iBAAU;IACZ,CAAC;AACD,aAAS,IAAIA,KAAI,KAAK,aAAa,KAAKE,KAAI,CAAC;AAC7C,eAAU;AACV,UAAM,UAAUF,IAAG,WAAW,MAAK;AAEjC,YAAM,IAAI,IAAIE,MAAK,cAAc,EAAE,IAAIF;AACvC,eAAS,IAAI,GAAG,IAAI,aAAa;AAAK,YAAI,CAAC,IAAI,IAAIE,MAAK,CAAC,IAAI,EAAE,IAAI,cAAc,CAAC;AAClF,eAAS,KAAK,GAAG,KAAKA,KAAI,CAAC;AAC3B,iBAAU;IACZ,CAAC;;AAEH,SAAO,aAAa,UAAU,OAAO,GAAG,GAAG,GAAG;AAChD;;;AC9NA,IAAI,aAAa;AAAjB,IAAwB,cAAc;AAEtC,IAAM,eAAe,eAAe,QAAoB,MAAkBC,IAAW,GAAW,GAAW,OAAe,YAA6B;AACnJ,SAAO,MAAM,YAAY,QAAQ,MAAM,EAAE,GAAAA,IAAG,GAAG,GAAG,OAAO,WAAU,CAAE;AACzE;AACA,IAAM,cAAc,SAAS,QAAoB,MAAkBA,IAAW,GAAW,GAAW,OAAa;AAC7G,SAAO,OAAW,QAAQ,MAAM,EAAE,GAAAA,IAAG,GAAG,GAAG,MAAK,CAAE;AACtD;AAEA,IAAI,gBAA6J;AACjK,IAAI,eAAoH;AAwCxH,eAAsBC,QAAO,SAAoB,OAAkBD,IAAW,GAAW,GAAW,OAAe,UAA2B;AAC1I,QAAM,SAAS,SAAS,SAAS,QAAQ;AACzC,QAAM,OAAO,SAAS,OAAO,MAAM;AACnC,SAAO,QAAE,MAAM,cAAc,QAAQ,MAAMA,IAAG,GAAG,GAAG,OAAO,QAAQ,CAAC;AACxE;AACAC,QAAO,IAAI;AACXA,QAAO,OAAO,WAAA;AAAmB,gBAAc;AAAM;AACrDA,QAAO,WAAW,SAAS,MAA+I;AACtK,MAAI,aAAa;AAAE,UAAM,IAAI,MAAM,kBAAkB;;AACrD,kBAAgB;AACpB;AACA,OAAO,OAAOA,OAAM;AAwBd,SAAU,WAAW,SAAoB,OAAkBD,IAAW,GAAW,GAAW,OAAa;AAC3G,QAAM,SAAS,SAAS,SAAS,QAAQ;AACzC,QAAM,OAAO,SAAS,OAAO,MAAM;AACnC,SAAO,QAAE,aAAa,QAAQ,MAAMA,IAAG,GAAG,GAAG,KAAK,CAAC;AACvD;AACA,WAAW,IAAI;AACf,WAAW,OAAO,WAAA;AAAmB,eAAa;AAAM;AACxD,WAAW,WAAW,SAAS,MAAyG;AACpI,MAAI,YAAY;AAAE,UAAM,IAAI,MAAM,sBAAsB;;AACxD,iBAAe;AACnB;AACA,OAAO,OAAO,UAAU;;;AC1GxB,IAAM,UAAU,SAASE,OAAgB;AACrC,aAAO,0BAAW,QAAQ,EAAE,OAAOA,KAAI,EAAE,OAAM;AACnD;AAEA,IAAM,UAAU,SAASA,OAAgB;AACrC,aAAO,0BAAW,QAAQ,EAAE,OAAOA,KAAI,EAAE,OAAM;AACnD;AAEA,IAAI,WAA4C;AAChD,IAAI,WAA4C;AAEhD,IAAI,YAAY;AAAhB,IAAuB,YAAY;AAoB7B,SAAUC,QAAOC,QAAgB;AACnC,QAAMF,QAAO,SAASE,QAAO,MAAM;AACnC,SAAO,QAAQ,SAASF,KAAI,CAAC;AACjC;AACAC,QAAO,IAAI;AACXA,QAAO,OAAO,WAAA;AAAmB,cAAY;AAAM;AACnDA,QAAO,WAAW,SAAS,MAAqC;AAC5D,MAAI,WAAW;AAAE,UAAM,IAAI,MAAM,kBAAkB;;AACnD,aAAW;AACf;AACA,OAAO,OAAOA,OAAM;AAmBd,SAAU,OAAOC,QAAgB;AACnC,QAAMF,QAAO,SAASE,QAAO,MAAM;AACnC,SAAO,QAAQ,SAASF,KAAI,CAAC;AACjC;AACA,OAAO,IAAI;AACX,OAAO,OAAO,WAAA;AAAmB,cAAY;AAAM;AACnD,OAAO,WAAW,SAAS,MAAqC;AAC5D,MAAI,WAAW;AAAE,UAAM,IAAI,MAAM,kBAAkB;;AACnD,aAAW;AACf;AACA,OAAO,OAAOC,OAAM;;;AC7EpB;;;;;;;;;qBAAAE;EAAA;;;;;;;;;qBAAAC;EAAA;;AAKA,IAAMC,OAAM,OAAO,CAAC;AACpB,IAAMC,OAAM,OAAO,CAAC;AACpB,IAAMC,OAAM,OAAO,CAAC;AACpB,IAAMC,OAAM,CAAC,MAA4B,aAAa;AAWtD,IAAM,QAAwB,sBAAM,KAAK,EAAE,QAAQ,IAAG,GAAI,CAAC,GAAG,MAC5D,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAK3B,SAAU,WAAWC,QAAiB;AAC1C,MAAI,CAACD,KAAIC,MAAK;AAAG,UAAM,IAAI,MAAM,qBAAqB;AAEtD,MAAIC,OAAM;AACV,WAAS,IAAI,GAAG,IAAID,OAAM,QAAQ,KAAK;AACrC,IAAAC,QAAO,MAAMD,OAAM,CAAC,CAAC;;AAEvB,SAAOC;AACT;AAEM,SAAU,oBAAoB,KAAoB;AACtD,QAAMA,OAAM,IAAI,SAAS,EAAE;AAC3B,SAAOA,KAAI,SAAS,IAAI,IAAIA,IAAG,KAAKA;AACtC;AAEM,SAAU,YAAYA,MAAW;AACrC,MAAI,OAAOA,SAAQ;AAAU,UAAM,IAAI,MAAM,8BAA8B,OAAOA,IAAG;AAErF,SAAO,OAAOA,SAAQ,KAAK,MAAM,KAAKA,IAAG,EAAE;AAC7C;AAKM,SAAU,WAAWA,MAAW;AACpC,MAAI,OAAOA,SAAQ;AAAU,UAAM,IAAI,MAAM,8BAA8B,OAAOA,IAAG;AACrF,QAAM,MAAMA,KAAI;AAChB,MAAI,MAAM;AAAG,UAAM,IAAI,MAAM,4DAA4D,GAAG;AAC5F,QAAM,QAAQ,IAAI,WAAW,MAAM,CAAC;AACpC,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,IAAI,IAAI;AACd,UAAM,UAAUA,KAAI,MAAM,GAAG,IAAI,CAAC;AAClC,UAAM,OAAO,OAAO,SAAS,SAAS,EAAE;AACxC,QAAI,OAAO,MAAM,IAAI,KAAK,OAAO;AAAG,YAAM,IAAI,MAAM,uBAAuB;AAC3E,UAAM,CAAC,IAAI;;AAEb,SAAO;AACT;AAGM,SAAU,gBAAgBD,QAAiB;AAC/C,SAAO,YAAY,WAAWA,MAAK,CAAC;AACtC;AACM,SAAU,gBAAgBA,QAAiB;AAC/C,MAAI,CAACD,KAAIC,MAAK;AAAG,UAAM,IAAI,MAAM,qBAAqB;AACtD,SAAO,YAAY,WAAW,WAAW,KAAKA,MAAK,EAAE,QAAO,CAAE,CAAC;AACjE;AAEM,SAAU,gBAAgBE,IAAoB,KAAW;AAC7D,SAAO,WAAWA,GAAE,SAAS,EAAE,EAAE,SAAS,MAAM,GAAG,GAAG,CAAC;AACzD;AACM,SAAU,gBAAgBA,IAAoB,KAAW;AAC7D,SAAO,gBAAgBA,IAAG,GAAG,EAAE,QAAO;AACxC;AAEM,SAAU,mBAAmBA,IAAkB;AACnD,SAAO,WAAW,oBAAoBA,EAAC,CAAC;AAC1C;AAWM,SAAU,YAAY,OAAeD,MAAU,gBAAuB;AAC1E,MAAI;AACJ,MAAI,OAAOA,SAAQ,UAAU;AAC3B,QAAI;AACF,YAAM,WAAWA,IAAG;aACb,GAAG;AACV,YAAM,IAAI,MAAM,GAAG,KAAK,mCAAmCA,IAAG,aAAa,CAAC,EAAE;;aAEvEF,KAAIE,IAAG,GAAG;AAGnB,UAAM,WAAW,KAAKA,IAAG;SACpB;AACL,UAAM,IAAI,MAAM,GAAG,KAAK,mCAAmC;;AAE7D,QAAM,MAAM,IAAI;AAChB,MAAI,OAAO,mBAAmB,YAAY,QAAQ;AAChD,UAAM,IAAI,MAAM,GAAG,KAAK,aAAa,cAAc,eAAe,GAAG,EAAE;AACzE,SAAO;AACT;AAKM,SAAUP,gBAAe,QAAoB;AACjD,QAAM,IAAI,IAAI,WAAW,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrE,MAAI,MAAM;AACV,SAAO,QAAQ,CAAC,MAAK;AACnB,QAAI,CAACK,KAAI,CAAC;AAAG,YAAM,IAAI,MAAM,qBAAqB;AAClD,MAAE,IAAI,GAAG,GAAG;AACZ,WAAO,EAAE;EACX,CAAC;AACD,SAAO;AACT;AAEM,SAAU,WAAW,IAAgB,IAAc;AAEvD,MAAI,GAAG,WAAW,GAAG;AAAQ,WAAO;AACpC,WAAS,IAAI,GAAG,IAAI,GAAG,QAAQ;AAAK,QAAI,GAAG,CAAC,MAAM,GAAG,CAAC;AAAG,aAAO;AAChE,SAAO;AACT;AASM,SAAUJ,aAAY,KAAW;AACrC,MAAI,OAAO,QAAQ;AAAU,UAAM,IAAI,MAAM,oCAAoC,OAAO,GAAG,EAAE;AAC7F,SAAO,IAAI,WAAW,IAAI,YAAW,EAAG,OAAO,GAAG,CAAC;AACrD;AAQM,SAAU,OAAOO,IAAS;AAC9B,MAAI;AACJ,OAAK,MAAM,GAAGA,KAAIN,MAAKM,OAAML,MAAK,OAAO;AAAE;AAC3C,SAAO;AACT;AAOM,SAAU,OAAOK,IAAW,KAAW;AAC3C,SAAQA,MAAK,OAAO,GAAG,IAAKL;AAC9B;AAKO,IAAM,SAAS,CAACK,IAAW,KAAa,UAAkB;AAC/D,SAAOA,MAAM,QAAQL,OAAMD,SAAQ,OAAO,GAAG;AAC/C;AAMO,IAAM,UAAU,CAACM,QAAeJ,QAAO,OAAOI,KAAI,CAAC,KAAKL;AAI/D,IAAM,MAAM,CAACM,UAAe,IAAI,WAAWA,KAAI;AAC/C,IAAM,OAAO,CAAC,QAAa,WAAW,KAAK,GAAG;AASxC,SAAU,eACd,SACA,UACA,QAAkE;AAElE,MAAI,OAAO,YAAY,YAAY,UAAU;AAAG,UAAM,IAAI,MAAM,0BAA0B;AAC1F,MAAI,OAAO,aAAa,YAAY,WAAW;AAAG,UAAM,IAAI,MAAM,2BAA2B;AAC7F,MAAI,OAAO,WAAW;AAAY,UAAM,IAAI,MAAM,2BAA2B;AAE7E,MAAI,IAAI,IAAI,OAAO;AACnB,MAAI,IAAI,IAAI,OAAO;AACnB,MAAI,IAAI;AACR,QAAM,QAAQ,MAAK;AACjB,MAAE,KAAK,CAAC;AACR,MAAE,KAAK,CAAC;AACR,QAAI;EACN;AACA,QAAM,IAAI,IAAIC,OAAoB,OAAO,GAAG,GAAG,GAAGA,EAAC;AACnD,QAAM,SAAS,CAAC,OAAO,IAAG,MAAM;AAE9B,QAAI,EAAE,KAAK,CAAC,CAAI,CAAC,GAAG,IAAI;AACxB,QAAI,EAAC;AACL,QAAI,KAAK,WAAW;AAAG;AACvB,QAAI,EAAE,KAAK,CAAC,CAAI,CAAC,GAAG,IAAI;AACxB,QAAI,EAAC;EACP;AACA,QAAMC,OAAM,MAAK;AAEf,QAAI,OAAO;AAAM,YAAM,IAAI,MAAM,yBAAyB;AAC1D,QAAI,MAAM;AACV,UAAM,MAAoB,CAAA;AAC1B,WAAO,MAAM,UAAU;AACrB,UAAI,EAAC;AACL,YAAM,KAAK,EAAE,MAAK;AAClB,UAAI,KAAK,EAAE;AACX,aAAO,EAAE;;AAEX,WAAOX,aAAY,GAAG,GAAG;EAC3B;AACA,QAAM,WAAW,CAAC,MAAkB,SAAoB;AACtD,UAAK;AACL,WAAO,IAAI;AACX,QAAI,MAAqB;AACzB,WAAO,EAAE,MAAM,KAAKW,KAAG,CAAE;AAAI,aAAM;AACnC,UAAK;AACL,WAAO;EACT;AACA,SAAO;AACT;AAIA,IAAM,eAAe;EACnB,QAAQ,CAAC,QAAa,OAAO,QAAQ;EACrC,UAAU,CAAC,QAAa,OAAO,QAAQ;EACvC,SAAS,CAAC,QAAa,OAAO,QAAQ;EACtC,QAAQ,CAAC,QAAa,OAAO,QAAQ;EACrC,oBAAoB,CAAC,QAAa,OAAO,QAAQ,YAAY,eAAe;EAC5E,eAAe,CAAC,QAAa,OAAO,cAAc,GAAG;EACrD,OAAO,CAAC,QAAa,MAAM,QAAQ,GAAG;EACtC,OAAO,CAAC,KAAUC,YAAiBA,QAAe,GAAG,QAAQ,GAAG;EAChE,MAAM,CAAC,QAAa,OAAO,QAAQ,cAAc,OAAO,cAAc,IAAI,SAAS;;AAM/E,SAAU,eACdA,SACA,YACA,gBAA2B,CAAA,GAAE;AAE7B,QAAM,aAAa,CAAC,WAAoB,MAAiB,eAAuB;AAC9E,UAAM,WAAW,aAAa,IAAI;AAClC,QAAI,OAAO,aAAa;AACtB,YAAM,IAAI,MAAM,sBAAsB,IAAI,sBAAsB;AAElE,UAAM,MAAMA,QAAO,SAAgC;AACnD,QAAI,cAAc,QAAQ;AAAW;AACrC,QAAI,CAAC,SAAS,KAAKA,OAAM,GAAG;AAC1B,YAAM,IAAI,MACR,iBAAiB,OAAO,SAAS,CAAC,IAAI,GAAG,KAAK,OAAO,GAAG,eAAe,IAAI,EAAE;;EAGnF;AACA,aAAW,CAAC,WAAW,IAAI,KAAK,OAAO,QAAQ,UAAU;AAAG,eAAW,WAAW,MAAO,KAAK;AAC9F,aAAW,CAAC,WAAW,IAAI,KAAK,OAAO,QAAQ,aAAa;AAAG,eAAW,WAAW,MAAO,IAAI;AAChG,SAAOA;AACT;;;AC7QA,IAAMC,OAAM,OAAO,CAAC;AAApB,IAAuBC,OAAM,OAAO,CAAC;AAArC,IAAwCC,OAAM,OAAO,CAAC;AAAtD,IAAyD,MAAM,OAAO,CAAC;AAEvE,IAAM,MAAM,OAAO,CAAC;AAApB,IAAuB,MAAM,OAAO,CAAC;AAArC,IAAwC,MAAM,OAAO,CAAC;AAEtD,IAAM,MAAM,OAAO,CAAC;AAApB,IAAuB,OAAO,OAAO,EAAE;AAGjC,SAAU,IAAI,GAAWC,IAAS;AACtC,QAAM,SAAS,IAAIA;AACnB,SAAO,UAAUH,OAAM,SAASG,KAAI;AACtC;AAQM,SAAU,IAAI,KAAa,OAAe,QAAc;AAC5D,MAAI,UAAUH,QAAO,QAAQA;AAAK,UAAM,IAAI,MAAM,2BAA2B;AAC7E,MAAI,WAAWC;AAAK,WAAOD;AAC3B,MAAI,MAAMC;AACV,SAAO,QAAQD,MAAK;AAClB,QAAI,QAAQC;AAAK,YAAO,MAAM,MAAO;AACrC,UAAO,MAAM,MAAO;AACpB,cAAUA;;AAEZ,SAAO;AACT;AAGM,SAAU,KAAK,GAAW,OAAe,QAAc;AAC3D,MAAI,MAAM;AACV,SAAO,UAAUD,MAAK;AACpB,WAAO;AACP,WAAO;;AAET,SAAO;AACT;AAGM,SAAU,OAAOI,SAAgB,QAAc;AACnD,MAAIA,YAAWJ,QAAO,UAAUA,MAAK;AACnC,UAAM,IAAI,MAAM,6CAA6CI,OAAM,QAAQ,MAAM,EAAE;;AAIrF,MAAI,IAAI,IAAIA,SAAQ,MAAM;AAC1B,MAAID,KAAI;AAER,MAAI,IAAIH,MAAK,IAAIC,MAAK,IAAIA,MAAK,IAAID;AACnC,SAAO,MAAMA,MAAK;AAEhB,UAAM,IAAIG,KAAI;AACd,UAAM,IAAIA,KAAI;AACd,UAAM,IAAI,IAAI,IAAI;AAClB,UAAME,KAAI,IAAI,IAAI;AAElB,IAAAF,KAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAIE;;AAEzC,QAAM,MAAMF;AACZ,MAAI,QAAQF;AAAK,UAAM,IAAI,MAAM,wBAAwB;AACzD,SAAO,IAAI,GAAG,MAAM;AACtB;AAUM,SAAU,cAAc,GAAS;AAMrC,QAAM,aAAa,IAAIA,QAAOC;AAE9B,MAAI,GAAWI,IAAW;AAG1B,OAAK,IAAI,IAAIL,MAAKK,KAAI,GAAG,IAAIJ,SAAQF,MAAK,KAAKE,MAAKI;AAAI;AAGxD,OAAK,IAAIJ,MAAK,IAAI,KAAK,IAAI,GAAG,WAAW,CAAC,MAAM,IAAID,MAAK;AAAI;AAG7D,MAAIK,OAAM,GAAG;AACX,UAAM,UAAU,IAAIL,QAAO;AAC3B,WAAO,SAAS,YAAeM,KAAeF,IAAI;AAChD,YAAM,OAAOE,IAAG,IAAIF,IAAG,MAAM;AAC7B,UAAI,CAACE,IAAG,IAAIA,IAAG,IAAI,IAAI,GAAGF,EAAC;AAAG,cAAM,IAAI,MAAM,yBAAyB;AACvE,aAAO;IACT;;AAIF,QAAM,UAAU,IAAIJ,QAAOC;AAC3B,SAAO,SAAS,YAAeK,KAAeF,IAAI;AAEhD,QAAIE,IAAG,IAAIF,IAAG,SAAS,MAAME,IAAG,IAAIA,IAAG,GAAG;AAAG,YAAM,IAAI,MAAM,yBAAyB;AACtF,QAAI,IAAID;AAER,QAAI,IAAIC,IAAG,IAAIA,IAAG,IAAIA,IAAG,KAAK,CAAC,GAAG,CAAC;AACnC,QAAI,IAAIA,IAAG,IAAIF,IAAG,MAAM;AACxB,QAAIF,KAAII,IAAG,IAAIF,IAAG,CAAC;AAEnB,WAAO,CAACE,IAAG,IAAIJ,IAAGI,IAAG,GAAG,GAAG;AACzB,UAAIA,IAAG,IAAIJ,IAAGI,IAAG,IAAI;AAAG,eAAOA,IAAG;AAElC,UAAI,IAAI;AACR,eAAS,KAAKA,IAAG,IAAIJ,EAAC,GAAG,IAAI,GAAG,KAAK;AACnC,YAAII,IAAG,IAAI,IAAIA,IAAG,GAAG;AAAG;AACxB,aAAKA,IAAG,IAAI,EAAE;;AAGhB,YAAM,KAAKA,IAAG,IAAI,GAAGN,QAAO,OAAO,IAAI,IAAI,CAAC,CAAC;AAC7C,UAAIM,IAAG,IAAI,EAAE;AACb,UAAIA,IAAG,IAAI,GAAG,EAAE;AAChB,MAAAJ,KAAII,IAAG,IAAIJ,IAAG,CAAC;AACf,UAAI;;AAEN,WAAO;EACT;AACF;AAEM,SAAU,OAAO,GAAS;AAM9B,MAAI,IAAI,QAAQ,KAAK;AAKnB,UAAM,UAAU,IAAIF,QAAO;AAC3B,WAAO,SAAS,UAAaM,KAAeF,IAAI;AAC9C,YAAM,OAAOE,IAAG,IAAIF,IAAG,MAAM;AAE7B,UAAI,CAACE,IAAG,IAAIA,IAAG,IAAI,IAAI,GAAGF,EAAC;AAAG,cAAM,IAAI,MAAM,yBAAyB;AACvE,aAAO;IACT;;AAIF,MAAI,IAAI,QAAQ,KAAK;AACnB,UAAM,MAAM,IAAI,OAAO;AACvB,WAAO,SAAS,UAAaE,KAAeF,IAAI;AAC9C,YAAMG,MAAKD,IAAG,IAAIF,IAAGH,IAAG;AACxB,YAAM,IAAIK,IAAG,IAAIC,KAAI,EAAE;AACvB,YAAM,KAAKD,IAAG,IAAIF,IAAG,CAAC;AACtB,YAAM,IAAIE,IAAG,IAAIA,IAAG,IAAI,IAAIL,IAAG,GAAG,CAAC;AACnC,YAAM,OAAOK,IAAG,IAAI,IAAIA,IAAG,IAAI,GAAGA,IAAG,GAAG,CAAC;AACzC,UAAI,CAACA,IAAG,IAAIA,IAAG,IAAI,IAAI,GAAGF,EAAC;AAAG,cAAM,IAAI,MAAM,yBAAyB;AACvE,aAAO;IACT;;AAIF,MAAI,IAAI,SAAS,KAAK;;AAuBtB,SAAO,cAAc,CAAC;AACxB;AAgDA,IAAM,eAAe;EACnB;EAAU;EAAW;EAAO;EAAO;EAAO;EAAQ;EAClD;EAAO;EAAO;EAAO;EAAO;EAAO;EACnC;EAAQ;EAAQ;EAAQ;;AAEpB,SAAU,cAAiB,OAAgB;AAC/C,QAAM,UAAU;IACd,OAAO;IACP,MAAM;IACN,OAAO;IACP,MAAM;;AAER,QAAM,OAAO,aAAa,OAAO,CAAC,KAAK,QAAe;AACpD,QAAI,GAAG,IAAI;AACX,WAAO;EACT,GAAG,OAAO;AACV,SAAO,eAAe,OAAO,IAAI;AACnC;AAQM,SAAU,MAASI,IAAc,KAAQ,OAAa;AAG1D,MAAI,QAAQC;AAAK,UAAM,IAAI,MAAM,oBAAoB;AACrD,MAAI,UAAUA;AAAK,WAAOD,GAAE;AAC5B,MAAI,UAAUE;AAAK,WAAO;AAC1B,MAAI,IAAIF,GAAE;AACV,MAAI,IAAI;AACR,SAAO,QAAQC,MAAK;AAClB,QAAI,QAAQC;AAAK,UAAIF,GAAE,IAAI,GAAG,CAAC;AAC/B,QAAIA,GAAE,IAAI,CAAC;AACX,cAAUE;;AAEZ,SAAO;AACT;AAMM,SAAU,cAAiBF,IAAc,MAAS;AACtD,QAAM,MAAM,IAAI,MAAM,KAAK,MAAM;AAEjC,QAAM,iBAAiB,KAAK,OAAO,CAAC,KAAK,KAAK,MAAK;AACjD,QAAIA,GAAE,IAAI,GAAG;AAAG,aAAO;AACvB,QAAI,CAAC,IAAI;AACT,WAAOA,GAAE,IAAI,KAAK,GAAG;EACvB,GAAGA,GAAE,GAAG;AAER,QAAM,WAAWA,GAAE,IAAI,cAAc;AAErC,OAAK,YAAY,CAAC,KAAK,KAAK,MAAK;AAC/B,QAAIA,GAAE,IAAI,GAAG;AAAG,aAAO;AACvB,QAAI,CAAC,IAAIA,GAAE,IAAI,KAAK,IAAI,CAAC,CAAC;AAC1B,WAAOA,GAAE,IAAI,KAAK,GAAG;EACvB,GAAG,QAAQ;AACX,SAAO;AACT;AAgBM,SAAU,QAAQG,IAAW,YAAmB;AAEpD,QAAM,cAAc,eAAe,SAAY,aAAaA,GAAE,SAAS,CAAC,EAAE;AAC1E,QAAM,cAAc,KAAK,KAAK,cAAc,CAAC;AAC7C,SAAO,EAAE,YAAY,aAAa,YAAW;AAC/C;AAeM,SAAU,MACd,OACAC,SACAC,QAAO,OACP,QAAiC,CAAA,GAAE;AAEnC,MAAI,SAASC;AAAK,UAAM,IAAI,MAAM,iCAAiC,KAAK,EAAE;AAC1E,QAAM,EAAE,YAAY,MAAM,aAAa,MAAK,IAAK,QAAQ,OAAOF,OAAM;AACtE,MAAI,QAAQ;AAAM,UAAM,IAAI,MAAM,iDAAiD;AACnF,QAAM,QAAQ,OAAO,KAAK;AAC1B,QAAMG,KAAuB,OAAO,OAAO;IACzC;IACA;IACA;IACA,MAAM,QAAQ,IAAI;IAClB,MAAMD;IACN,KAAKE;IACL,QAAQ,CAAC,QAAQ,IAAI,KAAK,KAAK;IAC/B,SAAS,CAAC,QAAO;AACf,UAAI,OAAO,QAAQ;AACjB,cAAM,IAAI,MAAM,+CAA+C,OAAO,GAAG,EAAE;AAC7E,aAAOF,QAAO,OAAO,MAAM;IAC7B;IACA,KAAK,CAAC,QAAQ,QAAQA;IACtB,OAAO,CAAC,SAAS,MAAME,UAASA;IAChC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,KAAK;IAC7B,KAAK,CAAC,KAAK,QAAQ,QAAQ;IAE3B,KAAK,CAAC,QAAQ,IAAI,MAAM,KAAK,KAAK;IAClC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK;IACvC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK;IACvC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,KAAK,KAAK;IACvC,KAAK,CAAC,KAAK,UAAU,MAAMD,IAAG,KAAK,KAAK;IACxC,KAAK,CAAC,KAAK,QAAQ,IAAI,MAAM,OAAO,KAAK,KAAK,GAAG,KAAK;;IAGtD,MAAM,CAAC,QAAQ,MAAM;IACrB,MAAM,CAAC,KAAK,QAAQ,MAAM;IAC1B,MAAM,CAAC,KAAK,QAAQ,MAAM;IAC1B,MAAM,CAAC,KAAK,QAAQ,MAAM;IAE1B,KAAK,CAAC,QAAQ,OAAO,KAAK,KAAK;IAC/B,MAAM,MAAM,SAAS,CAACJ,OAAM,MAAMI,IAAGJ,EAAC;IACtC,aAAa,CAAC,QAAQ,cAAcI,IAAG,GAAG;;;IAG1C,MAAM,CAAC,GAAGE,IAAG,MAAO,IAAIA,KAAI;IAC5B,SAAS,CAAC,QAASJ,QAAO,gBAAgB,KAAK,KAAK,IAAI,gBAAgB,KAAK,KAAK;IAClF,WAAW,CAACK,WAAS;AACnB,UAAIA,OAAM,WAAW;AACnB,cAAM,IAAI,MAAM,0BAA0B,KAAK,SAASA,OAAM,MAAM,EAAE;AACxE,aAAOL,QAAO,gBAAgBK,MAAK,IAAI,gBAAgBA,MAAK;IAC9D;GACU;AACZ,SAAO,OAAO,OAAOH,EAAC;AACxB;AAwCM,SAAU,oBAAoB,YAAkB;AACpD,MAAI,OAAO,eAAe;AAAU,UAAM,IAAI,MAAM,4BAA4B;AAChF,QAAM,YAAY,WAAW,SAAS,CAAC,EAAE;AACzC,SAAO,KAAK,KAAK,YAAY,CAAC;AAChC;AASM,SAAU,iBAAiB,YAAkB;AACjD,QAAM,SAAS,oBAAoB,UAAU;AAC7C,SAAO,SAAS,KAAK,KAAK,SAAS,CAAC;AACtC;AAeM,SAAU,eAAe,KAAiB,YAAoBI,QAAO,OAAK;AAC9E,QAAM,MAAM,IAAI;AAChB,QAAM,WAAW,oBAAoB,UAAU;AAC/C,QAAM,SAAS,iBAAiB,UAAU;AAE1C,MAAI,MAAM,MAAM,MAAM,UAAU,MAAM;AACpC,UAAM,IAAI,MAAM,YAAY,MAAM,6BAA6B,GAAG,EAAE;AACtE,QAAM,MAAMA,QAAO,gBAAgB,GAAG,IAAI,gBAAgB,GAAG;AAE7D,QAAM,UAAU,IAAI,KAAK,aAAaC,IAAG,IAAIA;AAC7C,SAAOD,QAAO,gBAAgB,SAAS,QAAQ,IAAI,gBAAgB,SAAS,QAAQ;AACtF;;;AC/dA,IAAME,OAAM,OAAO,CAAC;AACpB,IAAMC,OAAM,OAAO,CAAC;AAiCd,SAAU,KAAyB,GAAwB,MAAY;AAC3E,QAAM,kBAAkB,CAAC,WAAoB,SAAc;AACzD,UAAM,MAAM,KAAK,OAAM;AACvB,WAAO,YAAY,MAAM;EAC3B;AACA,QAAM,OAAO,CAAC,MAAa;AACzB,UAAM,UAAU,KAAK,KAAK,OAAO,CAAC,IAAI;AACtC,UAAM,aAAa,MAAM,IAAI;AAC7B,WAAO,EAAE,SAAS,WAAU;EAC9B;AACA,SAAO;IACL;;IAEA,aAAa,KAAQC,IAAS;AAC5B,UAAI,IAAI,EAAE;AACV,UAAI,IAAO;AACX,aAAOA,KAAIF,MAAK;AACd,YAAIE,KAAID;AAAK,cAAI,EAAE,IAAI,CAAC;AACxB,YAAI,EAAE,OAAM;AACZ,QAAAC,OAAMD;;AAER,aAAO;IACT;;;;;;;;;;;IAYA,iBAAiB,KAAQ,GAAS;AAChC,YAAM,EAAE,SAAS,WAAU,IAAK,KAAK,CAAC;AACtC,YAAM,SAAc,CAAA;AACpB,UAAI,IAAO;AACX,UAAI,OAAO;AACX,eAAS,SAAS,GAAG,SAAS,SAAS,UAAU;AAC/C,eAAO;AACP,eAAO,KAAK,IAAI;AAEhB,iBAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,iBAAO,KAAK,IAAI,CAAC;AACjB,iBAAO,KAAK,IAAI;;AAElB,YAAI,KAAK,OAAM;;AAEjB,aAAO;IACT;;;;;;;;IASA,KAAK,GAAW,aAAkBC,IAAS;AAGzC,YAAM,EAAE,SAAS,WAAU,IAAK,KAAK,CAAC;AAEtC,UAAI,IAAI,EAAE;AACV,UAAIC,KAAI,EAAE;AAEV,YAAMC,QAAO,OAAO,KAAK,IAAI,CAAC;AAC9B,YAAM,YAAY,KAAK;AACvB,YAAM,UAAU,OAAO,CAAC;AAExB,eAAS,SAAS,GAAG,SAAS,SAAS,UAAU;AAC/C,cAAM,SAAS,SAAS;AAExB,YAAI,QAAQ,OAAOF,KAAIE,KAAI;AAG3B,QAAAF,OAAM;AAIN,YAAI,QAAQ,YAAY;AACtB,mBAAS;AACT,UAAAA,MAAKD;;AAWP,cAAM,UAAU;AAChB,cAAM,UAAU,SAAS,KAAK,IAAI,KAAK,IAAI;AAC3C,cAAM,QAAQ,SAAS,MAAM;AAC7B,cAAM,QAAQ,QAAQ;AACtB,YAAI,UAAU,GAAG;AAEf,UAAAE,KAAIA,GAAE,IAAI,gBAAgB,OAAO,YAAY,OAAO,CAAC,CAAC;eACjD;AACL,cAAI,EAAE,IAAI,gBAAgB,OAAO,YAAY,OAAO,CAAC,CAAC;;;AAQ1D,aAAO,EAAE,GAAG,GAAAA,GAAC;IACf;IAEA,WAAW,GAAM,gBAA6BD,IAAW,WAAoB;AAE3E,YAAM,IAAY,EAAE,gBAAgB;AAEpC,UAAI,OAAO,eAAe,IAAI,CAAC;AAC/B,UAAI,CAAC,MAAM;AACT,eAAO,KAAK,iBAAiB,GAAG,CAAC;AACjC,YAAI,MAAM,GAAG;AACX,yBAAe,IAAI,GAAG,UAAU,IAAI,CAAC;;;AAGzC,aAAO,KAAK,KAAK,GAAG,MAAMA,EAAC;IAC7B;;AAEJ;AAgBM,SAAU,cAAqB,OAAyB;AAC5D,gBAAc,MAAM,EAAE;AACtB,iBACE,OACA;IACE,GAAG;IACH,GAAG;IACH,IAAI;IACJ,IAAI;KAEN;IACE,YAAY;IACZ,aAAa;GACd;AAGH,SAAO,OAAO,OAAO;IACnB,GAAG,QAAQ,MAAM,GAAG,MAAM,UAAU;IACpC,GAAG;IACH,GAAG,EAAE,GAAG,MAAM,GAAG,MAAK;GACd;AACZ;;;AChHA,SAAS,kBAAqB,OAAyB;AACrD,QAAM,OAAO,cAAc,KAAK;AAChC,EAAG,eACD,MACA;IACE,GAAG;IACH,GAAG;KAEL;IACE,0BAA0B;IAC1B,gBAAgB;IAChB,eAAe;IACf,eAAe;IACf,oBAAoB;IACpB,WAAW;IACX,SAAS;GACV;AAEH,QAAM,EAAE,MAAM,IAAAG,KAAI,EAAC,IAAK;AACxB,MAAI,MAAM;AACR,QAAI,CAACA,IAAG,IAAI,GAAGA,IAAG,IAAI,GAAG;AACvB,YAAM,IAAI,MAAM,mEAAmE;;AAErF,QACE,OAAO,SAAS,YAChB,OAAO,KAAK,SAAS,YACrB,OAAO,KAAK,gBAAgB,YAC5B;AACA,YAAM,IAAI,MAAM,mEAAmE;;;AAGvF,SAAO,OAAO,OAAO,EAAE,GAAG,KAAI,CAAW;AAC3C;AAUA,IAAM,EAAE,iBAAiB,KAAK,YAAY,IAAG,IAAK;AAC3C,IAAM,MAAM;;EAEjB,KAAK,MAAM,eAAe,MAAK;IAC7B,YAAY,IAAI,IAAE;AAChB,YAAM,CAAC;IACT;;EAEF,UAAUC,OAAgB;AACxB,UAAM,EAAE,KAAK,EAAC,IAAK;AACnB,QAAIA,MAAK,SAAS,KAAKA,MAAK,CAAC,MAAM;AAAM,YAAM,IAAI,EAAE,+BAA+B;AACpF,UAAM,MAAMA,MAAK,CAAC;AAClB,UAAM,MAAMA,MAAK,SAAS,GAAG,MAAM,CAAC;AACpC,QAAI,CAAC,OAAO,IAAI,WAAW;AAAK,YAAM,IAAI,EAAE,yCAAyC;AAKrF,QAAI,IAAI,CAAC,IAAI;AAAY,YAAM,IAAI,EAAE,qCAAqC;AAC1E,QAAI,IAAI,CAAC,MAAM,KAAQ,EAAE,IAAI,CAAC,IAAI;AAChC,YAAM,IAAI,EAAE,qDAAqD;AACnE,WAAO,EAAE,GAAG,IAAI,GAAG,GAAG,GAAGA,MAAK,SAAS,MAAM,CAAC,EAAC;EACjD;EACA,MAAMC,MAAwB;AAE5B,UAAM,EAAE,KAAK,EAAC,IAAK;AACnB,UAAMD,QAAO,OAAOC,SAAQ,WAAW,IAAIA,IAAG,IAAIA;AAClD,QAAI,EAAED,iBAAgB;AAAa,YAAM,IAAI,MAAM,eAAe;AAClE,QAAI,IAAIA,MAAK;AACb,QAAI,IAAI,KAAKA,MAAK,CAAC,KAAK;AAAM,YAAM,IAAI,EAAE,uBAAuB;AACjE,QAAIA,MAAK,CAAC,MAAM,IAAI;AAAG,YAAM,IAAI,EAAE,qCAAqC;AACxE,UAAM,EAAE,GAAG,GAAG,GAAG,OAAM,IAAK,IAAI,UAAUA,MAAK,SAAS,CAAC,CAAC;AAC1D,UAAM,EAAE,GAAG,GAAG,GAAG,WAAU,IAAK,IAAI,UAAU,MAAM;AACpD,QAAI,WAAW;AAAQ,YAAM,IAAI,EAAE,6CAA6C;AAChF,WAAO,EAAE,GAAG,EAAC;EACf;EACA,WAAW,KAA6B;AAEtC,UAAM,QAAQ,CAACE,OAAuB,OAAO,SAASA,GAAE,CAAC,GAAG,EAAE,IAAI,IAAS,OAAOA,KAAIA;AACtF,UAAM,IAAI,CAAC,QAAwB;AACjC,YAAMD,OAAM,IAAI,SAAS,EAAE;AAC3B,aAAOA,KAAI,SAAS,IAAI,IAAIA,IAAG,KAAKA;IACtC;AACA,UAAM,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;AACxB,UAAM,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;AACxB,UAAM,MAAM,EAAE,SAAS;AACvB,UAAM,MAAM,EAAE,SAAS;AACvB,UAAM,KAAK,EAAE,GAAG;AAChB,UAAM,KAAK,EAAE,GAAG;AAChB,WAAO,KAAK,EAAE,MAAM,MAAM,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;EACpD;;AAKF,IAAME,OAAM,OAAO,CAAC;AAApB,IAAuBC,OAAM,OAAO,CAAC;AAArC,IAAwCC,OAAM,OAAO,CAAC;AAAtD,IAAyDC,OAAM,OAAO,CAAC;AAAvE,IAA0EC,OAAM,OAAO,CAAC;AAElF,SAAU,kBAAqB,MAAwB;AAC3D,QAAM,QAAQ,kBAAkB,IAAI;AACpC,QAAM,EAAE,IAAAR,IAAE,IAAK;AAEf,QAAMS,WACJ,MAAM,YACL,CAAC,IAAwB,OAAyB,kBAA0B;AAC3E,UAAM,IAAI,MAAM,SAAQ;AACxB,WAAUC,aAAY,WAAW,KAAK,CAAC,CAAI,CAAC,GAAGV,IAAG,QAAQ,EAAE,CAAC,GAAGA,IAAG,QAAQ,EAAE,CAAC,CAAC;EACjF;AACF,QAAM,YACJ,MAAM,cACL,CAACW,WAAqB;AAErB,UAAM,OAAOA,OAAM,SAAS,CAAC;AAE7B,UAAM,IAAIX,IAAG,UAAU,KAAK,SAAS,GAAGA,IAAG,KAAK,CAAC;AACjD,UAAM,IAAIA,IAAG,UAAU,KAAK,SAASA,IAAG,OAAO,IAAIA,IAAG,KAAK,CAAC;AAC5D,WAAO,EAAE,GAAG,EAAC;EACf;AAMF,WAAS,oBAAoB,GAAI;AAC/B,UAAM,EAAE,GAAG,GAAAY,GAAC,IAAK;AACjB,UAAM,KAAKZ,IAAG,IAAI,CAAC;AACnB,UAAM,KAAKA,IAAG,IAAI,IAAI,CAAC;AACvB,WAAOA,IAAG,IAAIA,IAAG,IAAI,IAAIA,IAAG,IAAI,GAAG,CAAC,CAAC,GAAGY,EAAC;EAC3C;AAKA,MAAI,CAACZ,IAAG,IAAIA,IAAG,IAAI,MAAM,EAAE,GAAG,oBAAoB,MAAM,EAAE,CAAC;AACzD,UAAM,IAAI,MAAM,6CAA6C;AAG/D,WAAS,mBAAmB,KAAW;AACrC,WAAO,OAAO,QAAQ,YAAYI,OAAM,OAAO,MAAM,MAAM;EAC7D;AACA,WAAS,SAAS,KAAW;AAC3B,QAAI,CAAC,mBAAmB,GAAG;AAAG,YAAM,IAAI,MAAM,6CAA6C;EAC7F;AAGA,WAAS,uBAAuB,KAAY;AAC1C,UAAM,EAAE,0BAA0B,SAAS,aAAa,gBAAgB,GAAAS,GAAC,IAAK;AAC9E,QAAI,WAAW,OAAO,QAAQ,UAAU;AACtC,UAAI,eAAe;AAAY,cAAS,WAAW,GAAG;AAEtD,UAAI,OAAO,QAAQ,YAAY,CAAC,QAAQ,SAAS,IAAI,MAAM;AAAG,cAAM,IAAI,MAAM,aAAa;AAC3F,YAAM,IAAI,SAAS,cAAc,GAAG,GAAG;;AAEzC,QAAI;AACJ,QAAI;AACF,YACE,OAAO,QAAQ,WACX,MACG,gBAAgB,YAAY,eAAe,KAAK,WAAW,CAAC;aAC9D,OAAO;AACd,YAAM,IAAI,MAAM,uBAAuB,WAAW,8BAA8B,OAAO,GAAG,EAAE;;AAE9F,QAAI;AAAgB,YAAU,IAAI,KAAKA,EAAC;AACxC,aAAS,GAAG;AACZ,WAAO;EACT;AAEA,QAAMC,oBAAmB,oBAAI,IAAG;AAChC,WAAS,eAAe,OAAc;AACpC,QAAI,EAAE,iBAAiBC;AAAQ,YAAM,IAAI,MAAM,0BAA0B;EAC3E;EAMA,MAAMA,OAAK;IAIT,YAAqB,IAAgB,IAAgB,IAAK;AAArC,WAAA,KAAA;AAAgB,WAAA,KAAA;AAAgB,WAAA,KAAA;AACnD,UAAI,MAAM,QAAQ,CAACf,IAAG,QAAQ,EAAE;AAAG,cAAM,IAAI,MAAM,YAAY;AAC/D,UAAI,MAAM,QAAQ,CAACA,IAAG,QAAQ,EAAE;AAAG,cAAM,IAAI,MAAM,YAAY;AAC/D,UAAI,MAAM,QAAQ,CAACA,IAAG,QAAQ,EAAE;AAAG,cAAM,IAAI,MAAM,YAAY;IACjE;;;IAIA,OAAO,WAAW,GAAiB;AACjC,YAAM,EAAE,GAAG,EAAC,IAAK,KAAK,CAAA;AACtB,UAAI,CAAC,KAAK,CAACA,IAAG,QAAQ,CAAC,KAAK,CAACA,IAAG,QAAQ,CAAC;AAAG,cAAM,IAAI,MAAM,sBAAsB;AAClF,UAAI,aAAae;AAAO,cAAM,IAAI,MAAM,8BAA8B;AACtE,YAAM,MAAM,CAAC,MAASf,IAAG,IAAI,GAAGA,IAAG,IAAI;AAEvC,UAAI,IAAI,CAAC,KAAK,IAAI,CAAC;AAAG,eAAOe,OAAM;AACnC,aAAO,IAAIA,OAAM,GAAG,GAAGf,IAAG,GAAG;IAC/B;IAEA,IAAI,IAAC;AACH,aAAO,KAAK,SAAQ,EAAG;IACzB;IACA,IAAI,IAAC;AACH,aAAO,KAAK,SAAQ,EAAG;IACzB;;;;;;;IAQA,OAAO,WAAW,QAAe;AAC/B,YAAM,QAAQA,IAAG,YAAY,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AACpD,aAAO,OAAO,IAAI,CAAC,GAAG,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE,IAAIe,OAAM,UAAU;IACxE;;;;;IAMA,OAAO,QAAQb,MAAQ;AACrB,YAAM,IAAIa,OAAM,WAAW,UAAU,YAAY,YAAYb,IAAG,CAAC,CAAC;AAClE,QAAE,eAAc;AAChB,aAAO;IACT;;IAGA,OAAO,eAAe,YAAmB;AACvC,aAAOa,OAAM,KAAK,SAAS,uBAAuB,UAAU,CAAC;IAC/D;;IAQA,eAAe,YAAkB;AAC/B,WAAK,eAAe;AACpB,MAAAD,kBAAiB,OAAO,IAAI;IAC9B;;IAGA,iBAAc;AACZ,UAAI,KAAK,IAAG,GAAI;AAId,YAAI,MAAM,sBAAsB,CAACd,IAAG,IAAI,KAAK,EAAE;AAAG;AAClD,cAAM,IAAI,MAAM,iBAAiB;;AAGnC,YAAM,EAAE,GAAG,EAAC,IAAK,KAAK,SAAQ;AAE9B,UAAI,CAACA,IAAG,QAAQ,CAAC,KAAK,CAACA,IAAG,QAAQ,CAAC;AAAG,cAAM,IAAI,MAAM,0BAA0B;AAChF,YAAM,OAAOA,IAAG,IAAI,CAAC;AACrB,YAAM,QAAQ,oBAAoB,CAAC;AACnC,UAAI,CAACA,IAAG,IAAI,MAAM,KAAK;AAAG,cAAM,IAAI,MAAM,mCAAmC;AAC7E,UAAI,CAAC,KAAK,cAAa;AAAI,cAAM,IAAI,MAAM,wCAAwC;IACrF;IACA,WAAQ;AACN,YAAM,EAAE,EAAC,IAAK,KAAK,SAAQ;AAC3B,UAAIA,IAAG;AAAO,eAAO,CAACA,IAAG,MAAM,CAAC;AAChC,YAAM,IAAI,MAAM,6BAA6B;IAC/C;;;;IAKA,OAAO,OAAY;AACjB,qBAAe,KAAK;AACpB,YAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,IAAK;AACnC,YAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,IAAK;AACnC,YAAMgB,MAAKhB,IAAG,IAAIA,IAAG,IAAI,IAAI,EAAE,GAAGA,IAAG,IAAI,IAAI,EAAE,CAAC;AAChD,YAAMiB,MAAKjB,IAAG,IAAIA,IAAG,IAAI,IAAI,EAAE,GAAGA,IAAG,IAAI,IAAI,EAAE,CAAC;AAChD,aAAOgB,OAAMC;IACf;;;;IAKA,SAAM;AACJ,aAAO,IAAIF,OAAM,KAAK,IAAIf,IAAG,IAAI,KAAK,EAAE,GAAG,KAAK,EAAE;IACpD;;;;;IAMA,SAAM;AACJ,YAAM,EAAE,GAAG,GAAAY,GAAC,IAAK;AACjB,YAAM,KAAKZ,IAAG,IAAIY,IAAGL,IAAG;AACxB,YAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,IAAK;AACnC,UAAI,KAAKP,IAAG,MAAM,KAAKA,IAAG,MAAM,KAAKA,IAAG;AACxC,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,GAAG,EAAE;AACjB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,GAAG,EAAE;AACjB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,GAAG,EAAE;AACjB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,aAAO,IAAIe,OAAM,IAAI,IAAI,EAAE;IAC7B;;;;;IAMA,IAAI,OAAY;AACd,qBAAe,KAAK;AACpB,YAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,IAAK;AACnC,YAAM,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE,IAAK;AACnC,UAAI,KAAKf,IAAG,MAAM,KAAKA,IAAG,MAAM,KAAKA,IAAG;AACxC,YAAM,IAAI,MAAM;AAChB,YAAM,KAAKA,IAAG,IAAI,MAAM,GAAGO,IAAG;AAC9B,UAAI,KAAKP,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,UAAI,KAAKA,IAAG,IAAI,IAAI,EAAE;AACtB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,GAAG,EAAE;AACjB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,GAAG,EAAE;AACjB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,GAAG,EAAE;AACjB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,WAAKA,IAAG,IAAI,IAAI,EAAE;AAClB,aAAO,IAAIe,OAAM,IAAI,IAAI,EAAE;IAC7B;IAEA,SAAS,OAAY;AACnB,aAAO,KAAK,IAAI,MAAM,OAAM,CAAE;IAChC;IAEQ,MAAG;AACT,aAAO,KAAK,OAAOA,OAAM,IAAI;IAC/B;IACQ,KAAKF,IAAS;AACpB,aAAO,KAAK,WAAW,MAAMC,mBAAkBD,IAAG,CAAC,SAAiB;AAClE,cAAM,QAAQb,IAAG,YAAY,KAAK,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAClD,eAAO,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,CAAC,EAAE,IAAIe,OAAM,UAAU;MACtE,CAAC;IACH;;;;;;IAOA,eAAeF,IAAS;AACtB,YAAM,IAAIE,OAAM;AAChB,UAAIF,OAAMT;AAAK,eAAO;AACtB,eAASS,EAAC;AACV,UAAIA,OAAMR;AAAK,eAAO;AACtB,YAAM,EAAE,KAAI,IAAK;AACjB,UAAI,CAAC;AAAM,eAAO,KAAK,aAAa,MAAMQ,EAAC;AAG3C,UAAI,EAAE,OAAO,IAAI,OAAO,GAAE,IAAK,KAAK,YAAYA,EAAC;AACjD,UAAI,MAAM;AACV,UAAI,MAAM;AACV,UAAI,IAAW;AACf,aAAO,KAAKT,QAAO,KAAKA,MAAK;AAC3B,YAAI,KAAKC;AAAK,gBAAM,IAAI,IAAI,CAAC;AAC7B,YAAI,KAAKA;AAAK,gBAAM,IAAI,IAAI,CAAC;AAC7B,YAAI,EAAE,OAAM;AACZ,eAAOA;AACP,eAAOA;;AAET,UAAI;AAAO,cAAM,IAAI,OAAM;AAC3B,UAAI;AAAO,cAAM,IAAI,OAAM;AAC3B,YAAM,IAAIU,OAAMf,IAAG,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE;AACzD,aAAO,IAAI,IAAI,GAAG;IACpB;;;;;;;;;;IAWA,SAAS,QAAc;AACrB,eAAS,MAAM;AACf,UAAIa,KAAI;AACR,UAAI,OAAc;AAClB,YAAM,EAAE,KAAI,IAAK;AACjB,UAAI,MAAM;AACR,cAAM,EAAE,OAAO,IAAI,OAAO,GAAE,IAAK,KAAK,YAAYA,EAAC;AACnD,YAAI,EAAE,GAAG,KAAK,GAAG,IAAG,IAAK,KAAK,KAAK,EAAE;AACrC,YAAI,EAAE,GAAG,KAAK,GAAG,IAAG,IAAK,KAAK,KAAK,EAAE;AACrC,cAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,cAAM,KAAK,gBAAgB,OAAO,GAAG;AACrC,cAAM,IAAIE,OAAMf,IAAG,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,EAAE;AACzD,gBAAQ,IAAI,IAAI,GAAG;AACnB,eAAO,IAAI,IAAI,GAAG;aACb;AACL,cAAM,EAAE,GAAG,GAAAkB,GAAC,IAAK,KAAK,KAAKL,EAAC;AAC5B,gBAAQ;AACR,eAAOK;;AAGT,aAAOH,OAAM,WAAW,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC;IAC1C;;;;;;;IAQA,qBAAqB,GAAU,GAAWH,IAAS;AACjD,YAAM,IAAIG,OAAM;AAChB,YAAM,MAAM,CACV,GACAI,OACIA,OAAMf,QAAOe,OAAMd,QAAO,CAAC,EAAE,OAAO,CAAC,IAAI,EAAE,eAAec,EAAC,IAAI,EAAE,SAASA,EAAC;AACjF,YAAM,MAAM,IAAI,MAAM,CAAC,EAAE,IAAI,IAAI,GAAGP,EAAC,CAAC;AACtC,aAAO,IAAI,IAAG,IAAK,SAAY;IACjC;;;;IAKA,SAAS,IAAM;AACb,YAAM,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,EAAC,IAAK;AAChC,YAAM,MAAM,KAAK,IAAG;AAGpB,UAAI,MAAM;AAAM,aAAK,MAAMZ,IAAG,MAAMA,IAAG,IAAI,CAAC;AAC5C,YAAM,KAAKA,IAAG,IAAI,GAAG,EAAE;AACvB,YAAM,KAAKA,IAAG,IAAI,GAAG,EAAE;AACvB,YAAM,KAAKA,IAAG,IAAI,GAAG,EAAE;AACvB,UAAI;AAAK,eAAO,EAAE,GAAGA,IAAG,MAAM,GAAGA,IAAG,KAAI;AACxC,UAAI,CAACA,IAAG,IAAI,IAAIA,IAAG,GAAG;AAAG,cAAM,IAAI,MAAM,kBAAkB;AAC3D,aAAO,EAAE,GAAG,IAAI,GAAG,GAAE;IACvB;IACA,gBAAa;AACX,YAAM,EAAE,GAAG,UAAU,cAAa,IAAK;AACvC,UAAI,aAAaK;AAAK,eAAO;AAC7B,UAAI;AAAe,eAAO,cAAcU,QAAO,IAAI;AACnD,YAAM,IAAI,MAAM,8DAA8D;IAChF;IACA,gBAAa;AACX,YAAM,EAAE,GAAG,UAAU,cAAa,IAAK;AACvC,UAAI,aAAaV;AAAK,eAAO;AAC7B,UAAI;AAAe,eAAO,cAAcU,QAAO,IAAI;AACnD,aAAO,KAAK,eAAe,MAAM,CAAC;IACpC;IAEA,WAAW,eAAe,MAAI;AAC5B,WAAK,eAAc;AACnB,aAAON,SAAQM,QAAO,MAAM,YAAY;IAC1C;IAEA,MAAM,eAAe,MAAI;AACvB,aAAU,WAAW,KAAK,WAAW,YAAY,CAAC;IACpD;;AA9UgB,EAAAA,OAAA,OAAO,IAAIA,OAAM,MAAM,IAAI,MAAM,IAAIf,IAAG,GAAG;AAC3C,EAAAe,OAAA,OAAO,IAAIA,OAAMf,IAAG,MAAMA,IAAG,KAAKA,IAAG,IAAI;AA+U3D,QAAM,QAAQ,MAAM;AACpB,QAAM,OAAO,KAAKe,QAAO,MAAM,OAAO,KAAK,KAAK,QAAQ,CAAC,IAAI,KAAK;AAElE,SAAO;IACL;IACA,iBAAiBA;IACjB;IACA;IACA;;AAEJ;AAwCA,SAAS,aAAa,OAAgB;AACpC,QAAM,OAAO,cAAc,KAAK;AAChC,EAAG,eACD,MACA;IACE,MAAM;IACN,MAAM;IACN,aAAa;KAEf;IACE,UAAU;IACV,eAAe;IACf,MAAM;GACP;AAEH,SAAO,OAAO,OAAO,EAAE,MAAM,MAAM,GAAG,KAAI,CAAW;AACvD;AAkBM,SAAU,YAAY,UAAmB;AAC7C,QAAM,QAAQ,aAAa,QAAQ;AACnC,QAAM,EAAE,IAAAf,KAAI,GAAG,YAAW,IAAK;AAC/B,QAAM,gBAAgBA,IAAG,QAAQ;AACjC,QAAM,kBAAkB,IAAIA,IAAG,QAAQ;AAEvC,WAAS,oBAAoB,KAAW;AACtC,WAAOI,OAAM,OAAO,MAAMJ,IAAG;EAC/B;AACA,WAAS,KAAK,GAAS;AACrB,WAAW,IAAI,GAAG,WAAW;EAC/B;AACA,WAAS,KAAK,GAAS;AACrB,WAAW,OAAO,GAAG,WAAW;EAClC;AAEA,QAAM,EACJ,iBAAiBe,QACjB,wBACA,qBACA,mBAAkB,IAChB,kBAAkB;IACpB,GAAG;IACH,QAAQ,IAAI,OAAO,cAAqB;AACtC,YAAM,IAAI,MAAM,SAAQ;AACxB,YAAM,IAAIf,IAAG,QAAQ,EAAE,CAAC;AACxB,YAAM,MAASU;AACf,UAAI,cAAc;AAChB,eAAO,IAAI,WAAW,KAAK,CAAC,MAAM,SAAQ,IAAK,IAAO,CAAI,CAAC,GAAG,CAAC;aAC1D;AACL,eAAO,IAAI,WAAW,KAAK,CAAC,CAAI,CAAC,GAAG,GAAGV,IAAG,QAAQ,EAAE,CAAC,CAAC;;IAE1D;IACA,UAAUW,QAAiB;AACzB,YAAM,MAAMA,OAAM;AAClB,YAAM,OAAOA,OAAM,CAAC;AACpB,YAAM,OAAOA,OAAM,SAAS,CAAC;AAE7B,UAAI,QAAQ,kBAAkB,SAAS,KAAQ,SAAS,IAAO;AAC7D,cAAM,IAAO,gBAAgB,IAAI;AACjC,YAAI,CAAC,oBAAoB,CAAC;AAAG,gBAAM,IAAI,MAAM,uBAAuB;AACpE,cAAM,KAAK,oBAAoB,CAAC;AAChC,YAAI,IAAIX,IAAG,KAAK,EAAE;AAClB,cAAM,UAAU,IAAIK,UAASA;AAE7B,cAAM,aAAa,OAAO,OAAO;AACjC,YAAI,cAAc;AAAQ,cAAIL,IAAG,IAAI,CAAC;AACtC,eAAO,EAAE,GAAG,EAAC;iBACJ,QAAQ,mBAAmB,SAAS,GAAM;AACnD,cAAM,IAAIA,IAAG,UAAU,KAAK,SAAS,GAAGA,IAAG,KAAK,CAAC;AACjD,cAAM,IAAIA,IAAG,UAAU,KAAK,SAASA,IAAG,OAAO,IAAIA,IAAG,KAAK,CAAC;AAC5D,eAAO,EAAE,GAAG,EAAC;aACR;AACL,cAAM,IAAI,MACR,mBAAmB,GAAG,0BAA0B,aAAa,wBAAwB,eAAe,qBAAqB;;IAG/H;GACD;AACD,QAAM,gBAAgB,CAAC,QAClB,WAAc,gBAAgB,KAAK,MAAM,WAAW,CAAC;AAE1D,WAAS,sBAAsBoB,SAAc;AAC3C,UAAM,OAAO,eAAef;AAC5B,WAAOe,UAAS;EAClB;AAEA,WAAS,WAAW,GAAS;AAC3B,WAAO,sBAAsB,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;EAC/C;AAEA,QAAM,SAAS,CAACR,IAAe,MAAc,OAAkB,gBAAgBA,GAAE,MAAM,MAAM,EAAE,CAAC;EAKhG,MAAMS,WAAS;IACb,YAAqB,GAAoB,GAAoB,UAAiB;AAAzD,WAAA,IAAA;AAAoB,WAAA,IAAA;AAAoB,WAAA,WAAA;AAC3D,WAAK,eAAc;IACrB;;IAGA,OAAO,YAAYnB,MAAQ;AACzB,YAAM,IAAI,MAAM;AAChB,MAAAA,OAAM,YAAY,oBAAoBA,MAAK,IAAI,CAAC;AAChD,aAAO,IAAImB,WAAU,OAAOnB,MAAK,GAAG,CAAC,GAAG,OAAOA,MAAK,GAAG,IAAI,CAAC,CAAC;IAC/D;;;IAIA,OAAO,QAAQA,MAAQ;AACrB,YAAM,EAAE,GAAG,EAAC,IAAK,IAAI,MAAM,YAAY,OAAOA,IAAG,CAAC;AAClD,aAAO,IAAImB,WAAU,GAAG,CAAC;IAC3B;IAEA,iBAAc;AAEZ,UAAI,CAAC,mBAAmB,KAAK,CAAC;AAAG,cAAM,IAAI,MAAM,2BAA2B;AAC5E,UAAI,CAAC,mBAAmB,KAAK,CAAC;AAAG,cAAM,IAAI,MAAM,2BAA2B;IAC9E;IAEA,eAAe,UAAgB;AAC7B,aAAO,IAAIA,WAAU,KAAK,GAAG,KAAK,GAAG,QAAQ;IAC/C;IAEA,iBAAiB,SAAY;AAC3B,YAAM,EAAE,GAAG,GAAG,UAAU,IAAG,IAAK;AAChC,YAAM,IAAI,cAAc,YAAY,WAAW,OAAO,CAAC;AACvD,UAAI,OAAO,QAAQ,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,SAAS,GAAG;AAAG,cAAM,IAAI,MAAM,qBAAqB;AACrF,YAAM,OAAO,QAAQ,KAAK,QAAQ,IAAI,IAAI,MAAM,IAAI;AACpD,UAAI,QAAQrB,IAAG;AAAO,cAAM,IAAI,MAAM,4BAA4B;AAClE,YAAM,UAAU,MAAM,OAAO,IAAI,OAAO;AACxC,YAAM,IAAIe,OAAM,QAAQ,SAAS,cAAc,IAAI,CAAC;AACpD,YAAM,KAAK,KAAK,IAAI;AACpB,YAAM,KAAK,KAAK,CAAC,IAAI,EAAE;AACvB,YAAM,KAAK,KAAK,IAAI,EAAE;AACtB,YAAM,IAAIA,OAAM,KAAK,qBAAqB,GAAG,IAAI,EAAE;AACnD,UAAI,CAAC;AAAG,cAAM,IAAI,MAAM,mBAAmB;AAC3C,QAAE,eAAc;AAChB,aAAO;IACT;;IAGA,WAAQ;AACN,aAAO,sBAAsB,KAAK,CAAC;IACrC;IAEA,aAAU;AACR,aAAO,KAAK,SAAQ,IAAK,IAAIM,WAAU,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI;IACjF;;IAGA,gBAAa;AACX,aAAU,WAAW,KAAK,SAAQ,CAAE;IACtC;IACA,WAAQ;AACN,aAAO,IAAI,WAAW,EAAE,GAAG,KAAK,GAAG,GAAG,KAAK,EAAC,CAAE;IAChD;;IAGA,oBAAiB;AACf,aAAU,WAAW,KAAK,aAAY,CAAE;IAC1C;IACA,eAAY;AACV,aAAO,cAAc,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC;IACrD;;AAIF,QAAM,QAAQ;IACZ,kBAAkB,YAAmB;AACnC,UAAI;AACF,+BAAuB,UAAU;AACjC,eAAO;eACA,OAAO;AACd,eAAO;;IAEX;IACA;;;;;IAMA,kBAAkB,MAAiB;AACjC,YAAM,SAAa,iBAAiB,MAAM,CAAC;AAC3C,aAAW,eAAe,MAAM,YAAY,MAAM,GAAG,MAAM,CAAC;IAC9D;;;;;;;;;IAUA,WAAW,aAAa,GAAG,QAAQN,OAAM,MAAI;AAC3C,YAAM,eAAe,UAAU;AAC/B,YAAM,SAAS,OAAO,CAAC,CAAC;AACxB,aAAO;IACT;;AASF,WAAS,aAAa,YAAqB,eAAe,MAAI;AAC5D,WAAOA,OAAM,eAAe,UAAU,EAAE,WAAW,YAAY;EACjE;AAKA,WAAS,UAAU,MAAsB;AACvC,UAAM,MAAM,gBAAgB;AAC5B,UAAM,MAAM,OAAO,SAAS;AAC5B,UAAM,OAAO,OAAO,QAAS,KAAa;AAC1C,QAAI;AAAK,aAAO,QAAQ,iBAAiB,QAAQ;AACjD,QAAI;AAAK,aAAO,QAAQ,IAAI,iBAAiB,QAAQ,IAAI;AACzD,QAAI,gBAAgBA;AAAO,aAAO;AAClC,WAAO;EACT;AAYA,WAAS,gBAAgB,UAAmB,SAAc,eAAe,MAAI;AAC3E,QAAI,UAAU,QAAQ;AAAG,YAAM,IAAI,MAAM,+BAA+B;AACxE,QAAI,CAAC,UAAU,OAAO;AAAG,YAAM,IAAI,MAAM,+BAA+B;AACxE,UAAMH,KAAIG,OAAM,QAAQ,OAAO;AAC/B,WAAOH,GAAE,SAAS,uBAAuB,QAAQ,CAAC,EAAE,WAAW,YAAY;EAC7E;AAMA,QAAM,WACJ,MAAM,YACN,SAAUD,QAAiB;AAGzB,UAAM,MAAS,gBAAgBA,MAAK;AACpC,UAAM,QAAQA,OAAM,SAAS,IAAI,MAAM;AACvC,WAAO,QAAQ,IAAI,OAAO,OAAO,KAAK,IAAI;EAC5C;AACF,QAAM,gBACJ,MAAM,iBACN,SAAUA,QAAiB;AACzB,WAAO,KAAK,SAASA,MAAK,CAAC;EAC7B;AAEF,QAAM,aAAgB,QAAQ,MAAM,UAAU;AAI9C,WAAS,WAAW,KAAW;AAC7B,QAAI,OAAO,QAAQ;AAAU,YAAM,IAAI,MAAM,iBAAiB;AAC9D,QAAI,EAAEP,QAAO,OAAO,MAAM;AACxB,YAAM,IAAI,MAAM,uBAAuB,MAAM,UAAU,EAAE;AAE3D,WAAU,gBAAgB,KAAK,MAAM,WAAW;EAClD;AAOA,WAAS,QAAQ,SAAc,YAAqB,OAAO,gBAAc;AACvE,QAAI,CAAC,aAAa,WAAW,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI;AAClD,YAAM,IAAI,MAAM,qCAAqC;AACvD,UAAM,EAAE,MAAAkB,OAAM,aAAAC,aAAW,IAAK;AAC9B,QAAI,EAAE,MAAM,SAAS,cAAc,IAAG,IAAK;AAC3C,QAAI,QAAQ;AAAM,aAAO;AACzB,cAAU,YAAY,WAAW,OAAO;AACxC,QAAI;AAAS,gBAAU,YAAY,qBAAqBD,MAAK,OAAO,CAAC;AAKrE,UAAM,QAAQ,cAAc,OAAO;AACnC,UAAM,IAAI,uBAAuB,UAAU;AAC3C,UAAM,WAAW,CAAC,WAAW,CAAC,GAAG,WAAW,KAAK,CAAC;AAElD,QAAI,OAAO,MAAM;AAEf,YAAM,IAAI,QAAQ,OAAOC,aAAYvB,IAAG,KAAK,IAAI;AACjD,eAAS,KAAK,YAAY,gBAAgB,CAAC,CAAC;;AAE9C,UAAM,OAAUU,aAAY,GAAG,QAAQ;AACvC,UAAM,IAAI;AAEV,aAAS,MAAM,QAAkB;AAE/B,YAAM,IAAI,SAAS,MAAM;AACzB,UAAI,CAAC,mBAAmB,CAAC;AAAG;AAC5B,YAAM,KAAK,KAAK,CAAC;AACjB,YAAM,IAAIK,OAAM,KAAK,SAAS,CAAC,EAAE,SAAQ;AACzC,YAAM,IAAI,KAAK,EAAE,CAAC;AAClB,UAAI,MAAMX;AAAK;AAIf,YAAM,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC;AACnC,UAAI,MAAMA;AAAK;AACf,UAAI,YAAY,EAAE,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE,IAAIC,IAAG;AACrD,UAAI,QAAQ;AACZ,UAAI,QAAQ,sBAAsB,CAAC,GAAG;AACpC,gBAAQ,WAAW,CAAC;AACpB,oBAAY;;AAEd,aAAO,IAAIgB,WAAU,GAAG,OAAO,QAAQ;IACzC;AACA,WAAO,EAAE,MAAM,MAAK;EACtB;AACA,QAAM,iBAA2B,EAAE,MAAM,MAAM,MAAM,SAAS,MAAK;AACnE,QAAM,iBAA0B,EAAE,MAAM,MAAM,MAAM,SAAS,MAAK;AAelE,WAAS,KAAK,SAAc,SAAkB,OAAO,gBAAc;AACjE,UAAM,EAAE,MAAM,MAAK,IAAK,QAAQ,SAAS,SAAS,IAAI;AACtD,UAAM,IAAI;AACV,UAAM,OAAU,eAAmC,EAAE,KAAK,WAAW,EAAE,aAAa,EAAE,IAAI;AAC1F,WAAO,KAAK,MAAM,KAAK;EACzB;AAGA,EAAAN,OAAM,KAAK,eAAe,CAAC;AAgB3B,WAAS,OACP,WACA,SACA,WACA,OAAO,gBAAc;AAErB,UAAM,KAAK;AACX,cAAU,YAAY,WAAW,OAAO;AACxC,gBAAY,YAAY,aAAa,SAAS;AAC9C,QAAI,YAAY;AAAM,YAAM,IAAI,MAAM,oCAAoC;AAC1E,UAAM,EAAE,MAAM,QAAO,IAAK;AAE1B,QAAIS,QAA8B;AAClC,QAAI;AACJ,QAAI;AACF,UAAI,OAAO,OAAO,YAAY,cAAc,YAAY;AAGtD,YAAI;AACF,UAAAA,QAAOH,WAAU,QAAQ,EAAE;iBACpB,UAAU;AACjB,cAAI,EAAE,oBAAoB,IAAI;AAAM,kBAAM;AAC1C,UAAAG,QAAOH,WAAU,YAAY,EAAE;;iBAExB,OAAO,OAAO,YAAY,OAAO,GAAG,MAAM,YAAY,OAAO,GAAG,MAAM,UAAU;AACzF,cAAM,EAAE,GAAAI,IAAG,GAAAtB,GAAC,IAAK;AACjB,QAAAqB,QAAO,IAAIH,WAAUI,IAAGtB,EAAC;aACpB;AACL,cAAM,IAAI,MAAM,OAAO;;AAEzB,UAAIY,OAAM,QAAQ,SAAS;aACpB,OAAO;AACd,UAAK,MAAgB,YAAY;AAC/B,cAAM,IAAI,MAAM,gEAAgE;AAClF,aAAO;;AAET,QAAI,QAAQS,MAAK,SAAQ;AAAI,aAAO;AACpC,QAAI;AAAS,gBAAU,MAAM,KAAK,OAAO;AACzC,UAAM,EAAE,GAAG,EAAC,IAAKA;AACjB,UAAM,IAAI,cAAc,OAAO;AAC/B,UAAM,KAAK,KAAK,CAAC;AACjB,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,KAAK,KAAK,IAAI,EAAE;AACtB,UAAM,IAAIT,OAAM,KAAK,qBAAqB,GAAG,IAAI,EAAE,GAAG,SAAQ;AAC9D,QAAI,CAAC;AAAG,aAAO;AACf,UAAM,IAAI,KAAK,EAAE,CAAC;AAClB,WAAO,MAAM;EACf;AACA,SAAO;IACL;IACA;IACA;IACA;IACA;IACA,iBAAiBA;IACjB,WAAAM;IACA;;AAEJ;;;AC9jCM,SAAU,QAAQK,OAAW;AACjC,SAAO;IACL,MAAAA;IACA,MAAM,CAAC,QAAoB,SAAuB,KAAKA,OAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IACtF,aAAAC;;AAEJ;AAGM,SAAU,YAAY,UAAoB,SAAc;AAC5D,QAAM,SAAS,CAACD,UAAgB,YAAY,EAAE,GAAG,UAAU,GAAG,QAAQA,KAAI,EAAC,CAAE;AAC7E,SAAO,OAAO,OAAO,EAAE,GAAG,OAAO,OAAO,GAAG,OAAM,CAAE;AACrD;;;ACTA,IAAM,aAAa,OAAO,oEAAoE;AAC9F,IAAM,aAAa,OAAO,oEAAoE;AAC9F,IAAME,OAAM,OAAO,CAAC;AACpB,IAAMC,OAAM,OAAO,CAAC;AACpB,IAAM,aAAa,CAAC,GAAWC,QAAe,IAAIA,KAAID,QAAOC;AAM7D,SAAS,QAAQ,GAAS;AACxB,QAAM,IAAI;AAEV,QAAMC,OAAM,OAAO,CAAC,GAAGC,OAAM,OAAO,CAAC,GAAG,OAAO,OAAO,EAAE,GAAG,OAAO,OAAO,EAAE;AAE3E,QAAM,OAAO,OAAO,EAAE,GAAG,OAAO,OAAO,EAAE,GAAG,OAAO,OAAO,EAAE;AAC5D,QAAM,KAAM,IAAI,IAAI,IAAK;AACzB,QAAM,KAAM,KAAK,KAAK,IAAK;AAC3B,QAAM,KAAM,KAAK,IAAID,MAAK,CAAC,IAAI,KAAM;AACrC,QAAM,KAAM,KAAK,IAAIA,MAAK,CAAC,IAAI,KAAM;AACrC,QAAM,MAAO,KAAK,IAAIF,MAAK,CAAC,IAAI,KAAM;AACtC,QAAM,MAAO,KAAK,KAAK,MAAM,CAAC,IAAI,MAAO;AACzC,QAAM,MAAO,KAAK,KAAK,MAAM,CAAC,IAAI,MAAO;AACzC,QAAM,MAAO,KAAK,KAAK,MAAM,CAAC,IAAI,MAAO;AACzC,QAAM,OAAQ,KAAK,KAAK,MAAM,CAAC,IAAI,MAAO;AAC1C,QAAM,OAAQ,KAAK,MAAM,MAAM,CAAC,IAAI,MAAO;AAC3C,QAAM,OAAQ,KAAK,MAAME,MAAK,CAAC,IAAI,KAAM;AACzC,QAAM,KAAM,KAAK,MAAM,MAAM,CAAC,IAAI,MAAO;AACzC,QAAM,KAAM,KAAK,IAAIC,MAAK,CAAC,IAAI,KAAM;AACrC,QAAM,OAAO,KAAK,IAAIH,MAAK,CAAC;AAC5B,MAAI,CAAC,GAAG,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC;AAAG,UAAM,IAAI,MAAM,yBAAyB;AACvE,SAAO;AACT;AAEA,IAAM,KAAK,MAAM,YAAY,QAAW,QAAW,EAAE,MAAM,QAAO,CAAE;AAE7D,IAAM,YAAY,YACvB;EACE,GAAG,OAAO,CAAC;EACX,GAAG,OAAO,CAAC;EACX;EACA,GAAG;;EAEH,IAAI,OAAO,+EAA+E;EAC1F,IAAI,OAAO,+EAA+E;EAC1F,GAAG,OAAO,CAAC;EACX,MAAM;;;;;;;EAON,MAAM;IACJ,MAAM,OAAO,oEAAoE;IACjF,aAAa,CAAC,MAAa;AACzB,YAAMI,KAAI;AACV,YAAM,KAAK,OAAO,oCAAoC;AACtD,YAAM,KAAK,CAACL,OAAM,OAAO,oCAAoC;AAC7D,YAAM,KAAK,OAAO,qCAAqC;AACvD,YAAM,KAAK;AACX,YAAM,YAAY,OAAO,qCAAqC;AAE9D,YAAM,KAAK,WAAW,KAAK,GAAGK,EAAC;AAC/B,YAAM,KAAK,WAAW,CAAC,KAAK,GAAGA,EAAC;AAChC,UAAI,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,IAAIA,EAAC;AACrC,UAAI,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,IAAIA,EAAC;AAClC,YAAM,QAAQ,KAAK;AACnB,YAAM,QAAQ,KAAK;AACnB,UAAI;AAAO,aAAKA,KAAI;AACpB,UAAI;AAAO,aAAKA,KAAI;AACpB,UAAI,KAAK,aAAa,KAAK,WAAW;AACpC,cAAM,IAAI,MAAM,yCAAyC,CAAC;;AAE5D,aAAO,EAAE,OAAO,IAAI,OAAO,GAAE;IAC/B;;GAGJ,MAAM;AAKR,IAAMC,OAAM,OAAO,CAAC;AAoBpB,IAAM,QAAQ,UAAU;;;AC3GjB,IAAM,cAAsB;;;ACD5B,IAAM,WAAmB;;;ACCzB,IAAM,IAAY,OAAO,oEAAoE;AAO7F,IAAM,cAAsB,OAAO,qBAAqB;AAOxD,IAAM,aAAqB,OAAO,oEAAoE;AAOtG,IAAM,YAAoB,OAAO,oEAAoE,IAAI,OAAO,EAAE;AAOlH,IAAM,YAAoB,OAAO,oEAAoE;;;AC3BrG,IAAM,cAAsB;AAQ5B,IAAM,gBAAwB;;;ACDrC,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAM,OAAO,OAAO,CAAC;AACrB,IAAM,QAAQ,OAAO,EAAE;AACvB,IAAM,QAAQ,OAAO,EAAE;AACvB,IAAM,QAAQ,OAAO,EAAE;AAGvB,IAAMC,UAAS,CAAA;AA6Bf,SAAS,UAAU,OAAmB;AAClC,SAAO,aAAa,UAAU,KAAK,GAAG,EAAE;AAC5C;AApDA;AA4DM,IAAO,aAAP,MAAO,WAAS;;;;EAmGlB,YAAY,OAAY,GAAW,GAAW,GAAU;AAlGxD;AACA;AACA;AACA;AAgGI,kBAAc,OAAOA,SAAQ,WAAW;AACxC,uBAAK,IAAK;AACV,uBAAK,IAAK;AACV,uBAAK,IAAK;AACV,uBAAK,WAAY;EACrB;;;;;;;EA7FA,IAAI,IAAC;AAAa,WAAO,mBAAK;EAAI;EAClC,IAAI,EAAE,OAAgB;AAClB,mBAAe,WAAW,KAAK,MAAM,IAAI,aAAa,SAAS,KAAK;AACpE,uBAAK,IAAK,QAAQ,KAAK;EAC3B;;;;EAKA,IAAI,IAAC;AAAa,WAAO,mBAAK;EAAI;EAClC,IAAI,EAAEC,SAAiB;AACnB,mBAAe,WAAWA,OAAM,MAAM,IAAI,aAAa,SAASA,OAAM;AACtE,UAAM,QAAQ,QAAQA,OAAM;AAC5B,mBAAe,SAAS,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,GAAG,mBAAmB,SAAS,KAAK;AACrF,uBAAK,IAAK;EACd;;;;;;;;;;;EAYA,IAAI,IAAC;AAAc,WAAO,mBAAK;EAAI;EACnC,IAAI,EAAE,OAAmB;AACrB,UAAM,IAAI,UAAU,OAAO,OAAO;AAClC,mBAAe,MAAM,MAAM,MAAM,IAAI,aAAa,KAAK,KAAK;AAC5D,uBAAK,IAAK;EACd;;;;;EAMA,IAAI,WAAQ;AAAoB,WAAO,mBAAK;EAAW;;;;;EAMvD,IAAI,gBAAa;AACb,UAAM,IAAI,KAAK;AACf,QAAI,KAAK,MAAM;AAAE,aAAO;;AACxB,WAAO,WAAU,WAAW,CAAC;EACjC;;;;;;EAOA,IAAI,UAAO;AACP,WAAQ,KAAK,MAAM,KAAM,IAAG;EAChC;;;;;EAMA,IAAI,cAAW;AAEX,UAAM,cAAc,SAAS,KAAK,CAAC;AACnC,QAAI,KAAK,SAAS;AAAE,kBAAY,CAAC,KAAK;;AACtC,WAAO,QAAQ,WAAW;EAC9B;;;;EAKA,IAAI,oBAAiB;AACjB,WAAO,OAAO,CAAE,KAAK,GAAG,KAAK,WAAW,CAAE;EAC9C;;;;EAKA,IAAI,aAAU;AACV,WAAO,OAAO,CAAE,KAAK,GAAG,KAAK,GAAI,KAAK,UAAU,SAAQ,MAAO,CAAE;EACrE;EAaA,CAAC,OAAO,IAAI,4BAA4B,CAAC,IAAC;AACtC,WAAO,mBAAoB,KAAK,CAAE,UAAW,KAAK,CAAE,eAAgB,KAAK,OAAQ,eAAgB,KAAK,QAAS;EACnH;;;;EAKA,QAAK;AACD,UAAM,QAAQ,IAAI,WAAUD,SAAQ,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAC1D,QAAI,KAAK,UAAU;AAAE,0BAAM,WAAY,KAAK;;AAC5C,WAAO;EACX;;;;EAKA,SAAM;AACF,UAAM,WAAW,KAAK;AACtB,WAAO;MACH,OAAO;MACP,UAAY,YAAY,OAAQ,SAAS,SAAQ,IAAI;MACrD,GAAG,KAAK;MAAG,GAAG,KAAK;MAAG,GAAG,KAAK;;EAEtC;;;;;;;;;;;EAYA,OAAO,WAAW,GAAe;AAC7B,UAAM,KAAK,UAAU,GAAG,GAAG;AAG3B,QAAK,MAAM,SAAW,MAAM,OAAQ;AAAE,aAAOF;;AAG7C,mBAAe,MAAM,OAAO,qBAAqB,KAAK,CAAC;AAEvD,YAAQ,KAAK,SAAS;EAC1B;;;;;;;;;;;;;;;EAgBA,OAAO,YAAY,SAAuB,GAAU;AAChD,WAAQ,UAAU,OAAO,IAAI,OAAQ,OAAO,KAAK,IAAI,EAAE;EAC3D;;;;;;;;;;;;;;;;;;;;;;EAuBA,OAAO,eAAe,GAAe;AACjC,UAAM,KAAK,UAAU,CAAC;AAEtB,QAAI,OAAOA,SAAQ,OAAO,OAAO;AAAE,aAAO;;AAC1C,QAAI,OAAOC,SAAQ,OAAO,OAAO;AAAE,aAAO;;AAE1C,mBAAe,MAAM,OAAO,aAAa,KAAK,CAAC;AAG/C,WAAQ,KAAKA,QAAQ,KAAI;EAC7B;;;;;;;;;EAUA,OAAO,KAAK,KAAmB;AAC3B,aAAS,YAAY,OAAgB,SAAe;AAChD,qBAAe,OAAO,SAAS,aAAa,GAAG;IACnD;AAAC;AAED,QAAI,OAAO,MAAM;AACb,aAAO,IAAI,WAAUC,SAAQ,UAAU,UAAU,EAAE;;AAGvD,QAAI,OAAO,QAAS,UAAU;AAC1B,YAAME,SAAQ,SAAS,KAAK,WAAW;AACvC,UAAIA,OAAM,WAAW,IAAI;AACrB,cAAMC,KAAI,QAAQD,OAAM,MAAM,GAAG,EAAE,CAAC;AACpC,cAAME,KAAIF,OAAM,MAAM,IAAI,EAAE;AAC5B,cAAMG,KAAKD,GAAE,CAAC,IAAI,MAAQ,KAAI;AAC9B,QAAAA,GAAE,CAAC,KAAK;AACR,eAAO,IAAI,WAAUJ,SAAQG,IAAG,QAAQC,EAAC,GAAGC,EAAC;;AAGjD,UAAIH,OAAM,WAAW,IAAI;AACrB,cAAMC,KAAI,QAAQD,OAAM,MAAM,GAAG,EAAE,CAAC;AACpC,cAAME,KAAIF,OAAM,MAAM,IAAI,EAAE;AAC5B,qBAAaE,GAAE,CAAC,IAAI,SAAU,GAAG,iBAAiB;AAClD,cAAMC,KAAI,WAAU,eAAeH,OAAM,EAAE,CAAC;AAC5C,eAAO,IAAI,WAAUF,SAAQG,IAAG,QAAQC,EAAC,GAAGC,EAAC;;AAGjD,kBAAY,OAAO,8BAA8B;;AAGrD,QAAI,eAAe,YAAW;AAAE,aAAO,IAAI,MAAK;;AAGhD,UAAMC,MAAK,IAAI;AACf,gBAAYA,OAAM,MAAM,WAAW;AACnC,UAAM,IAAI,UAAUA,GAAE;AAGtB,UAAM,IAAK,SAASF,IAAY,aAAoB;AAChD,UAAIA,MAAK,MAAM;AAAE,eAAO,UAAUA,EAAC;;AAEnC,UAAI,eAAe,MAAM;AACrB,oBAAY,YAAY,aAAa,EAAE,GAAG,qBAAqB;AAC/D,cAAMF,SAAQ,SAAS,WAAW;AAClC,QAAAA,OAAM,CAAC,KAAK;AACZ,eAAO,QAAQA,MAAK;;AAGxB,kBAAY,OAAO,WAAW;IAClC,EAAG,IAAI,GAAG,IAAI,WAAW;AACzB,iBAAa,SAAS,CAAC,EAAE,CAAC,IAAI,QAAS,GAAG,iBAAiB;AAG3D,UAAM,EAAE,UAAU,EAAC,IAAM,SAASK,KAAmB,aAAsB,SAAiB;AACxF,UAAIA,OAAM,MAAM;AACZ,cAAMF,KAAI,UAAUE,GAAE;AACtB,eAAO;UACH,UAAYF,MAAK,QAASA,KAAG;UAC7B,GAAG,WAAU,eAAeA,EAAC;;;AAIrC,UAAI,eAAe,MAAM;AACrB,oBAAY,YAAY,aAAa,EAAE,GAAG,qBAAqB;AAC/D,eAAO,EAAE,GAAK,SAAS,WAAW,EAAE,CAAC,IAAI,MAAQ,KAAI,GAAG;;AAG5D,UAAI,WAAW,MAAM;AACjB,gBAAQ,UAAU,SAAS,aAAa,GAAG;UACvC,KAAK;AAAG,mBAAO,EAAE,GAAG,GAAE;UACtB,KAAK;AAAG,mBAAO,EAAE,GAAG,GAAE;;AAE1B,oBAAY,OAAO,iBAAiB;;AAGxC,kBAAY,OAAO,WAAW;IAClC,EAAG,IAAI,GAAG,IAAI,aAAa,IAAI,OAAO;AAEtC,UAAM,SAAS,IAAI,WAAUL,SAAQ,GAAG,GAAG,CAAC;AAC5C,QAAI,UAAU;AAAE,2BAAO,WAAa;;AAGpC,gBAAY,IAAI,WAAW,QAAQ,UAAU,IAAI,SAAS,aAAa,MAAM,OAAO,SAAS,kBAAkB;AAC/G,gBAAY,IAAI,eAAe,QAAQ,IAAI,gBAAgB,OAAO,aAAa,sBAAsB;AAErG,WAAO;EACX;;AA1SA;AACA;AACA;AACA;AAJE,IAAO,YAAP;;;AC7DN;AAwBM,IAAO,cAAP,MAAO,YAAU;;;;EAMnB,YAAY,YAAqB;AALjC;AAMI,mBAAe,WAAW,UAAU,MAAM,IAAI,uBAAuB,cAAc,YAAY;AAC/F,uBAAK,aAAc,QAAQ,UAAU;EACzC;;;;EAKA,IAAI,aAAU;AAAa,WAAO,mBAAK;EAAa;;;;;;;EAQpD,IAAI,YAAS;AAAa,WAAO,YAAW,iBAAiB,mBAAK,YAAW;EAAG;;;;;;;;EAShF,IAAI,sBAAmB;AAAa,WAAO,YAAW,iBAAiB,mBAAK,cAAa,IAAI;EAAG;;;;EAKhG,KAAK,QAAiB;AAClB,mBAAe,WAAW,MAAM,MAAM,IAAI,yBAAyB,UAAU,MAAM;AAEnF,UAAM,MAAM,UAAU,KAAK,aAAa,MAAM,GAAG,aAAa,mBAAK,YAAW,GAAG;MAC7E,MAAM;KACT;AAED,WAAO,UAAU,KAAK;MAClB,GAAG,QAAQ,IAAI,GAAG,EAAE;MACpB,GAAG,QAAQ,IAAI,GAAG,EAAE;MACpB,GAAI,IAAI,WAAW,KAAM;KAC5B;EACL;;;;;;;;;;;;;;;;;;;;;;;EAwBA,oBAAoB,OAAgB;AAChC,UAAM,SAAS,YAAW,iBAAiB,KAAK;AAChD,WAAO,QAAQ,UAAU,gBAAgB,aAAa,mBAAK,YAAW,GAAG,SAAS,MAAM,GAAG,KAAK,CAAC;EACrG;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BA,OAAO,iBAAiB,KAAgB,YAAoB;AACxD,QAAIQ,SAAQ,SAAS,KAAK,KAAK;AAG/B,QAAIA,OAAM,WAAW,IAAI;AACrB,YAAM,SAAS,UAAU,aAAaA,QAAO,CAAC,CAAC,UAAU;AACzD,aAAO,QAAQ,MAAM;;AAIzB,QAAIA,OAAM,WAAW,IAAI;AACrB,YAAM,MAAM,IAAI,WAAW,EAAE;AAC7B,UAAI,CAAC,IAAI;AACT,UAAI,IAAIA,QAAO,CAAC;AAChB,MAAAA,SAAQ;;AAGZ,UAAM,QAAQ,UAAU,gBAAgB,QAAQA,MAAK;AACrD,WAAO,QAAQ,MAAM,WAAW,UAAU,CAAC;EAC/C;;;;;;;;;;;;;;;;;;;EAoBA,OAAO,iBAAiB,QAAmB,WAAwB;AAC/D,mBAAe,WAAW,MAAM,MAAM,IAAI,yBAAyB,UAAU,MAAM;AAEnF,UAAM,MAAM,UAAU,KAAK,SAAS;AAEpC,QAAI,UAAU,UAAU,UAAU,YAAY,aAAa,OAAO,CAAE,IAAI,GAAG,IAAI,CAAC,CAAE,CAAC,CAAC;AACpF,cAAU,QAAQ,eAAe,IAAI,OAAO;AAE5C,UAAM,SAAS,QAAQ,iBAAiB,aAAa,MAAM,CAAC;AAC5D,mBAAe,UAAU,MAAM,gCAAgC,aAAa,SAAS;AAErF,WAAO,OAAO,OAAO,MAAM,KAAK;EACpC;;;;;;;;;;;EAYA,OAAO,UAAU,IAAe,IAAe,YAAoB;AAC/D,UAAM,OAAO,UAAU,gBAAgB,QAAQ,YAAW,iBAAiB,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3F,UAAM,OAAO,UAAU,gBAAgB,QAAQ,YAAW,iBAAiB,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3F,WAAO,OAAO,KAAK,IAAI,IAAI,EAAE,MAAM,CAAC,CAAC,UAAU;EACnD;;AAxKA;AADE,IAAO,aAAP;;;ACcN,SAAS,OAAI;AACT,cAAY,KAAI;AAChB,YAAU,KAAI;AACd,SAAO,KAAI;AACX,EAAAC,aAAY,KAAI;AAChB,EAAAC,WAAU,KAAI;AACd,EAAAC,QAAO,KAAI;AACX,aAAW,KAAI;AACf,EAAAC,QAAO,KAAI;AACX,SAAO,KAAI;AACX,EAAAH,aAAY,KAAI;AACpB;;;AC7CA,IAAMI,QAAO,OAAO,CAAC;AACrB,IAAM,QAAQ,OAAO,EAAE;AAEvB,SAAS,mBAAmB,SAAe;AAKvC,YAAU,QAAQ,YAAW;AAE7B,QAAM,QAAQ,QAAQ,UAAU,CAAC,EAAE,MAAM,EAAE;AAE3C,QAAM,WAAW,IAAI,WAAW,EAAE;AAClC,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,aAAS,CAAC,IAAI,MAAM,CAAC,EAAE,WAAW,CAAC;;AAGvC,QAAM,SAAS,SAAS,UAAU,QAAQ,CAAC;AAE3C,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;AAC5B,QAAK,OAAO,KAAK,CAAC,KAAK,KAAM,GAAG;AAC5B,YAAM,CAAC,IAAI,MAAM,CAAC,EAAE,YAAW;;AAEnC,SAAK,OAAO,KAAK,CAAC,IAAI,OAAS,GAAG;AAC9B,YAAM,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,YAAW;;;AAI/C,SAAO,OAAO,MAAM,KAAK,EAAE;AAC/B;AAKA,IAAM,aAA8C,CAAA;AACpD,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAAE,aAAW,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC;;AAC/D,SAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAAE,aAAW,OAAO,aAAa,KAAK,CAAC,CAAC,IAAI,OAAO,KAAK,CAAC;;AAItF,IAAM,aAAa;AAEnB,SAAS,aAAa,SAAe;AACjC,YAAU,QAAQ,YAAW;AAC7B,YAAU,QAAQ,UAAU,CAAC,IAAI,QAAQ,UAAU,GAAG,CAAC,IAAI;AAE3D,MAAI,WAAW,QAAQ,MAAM,EAAE,EAAE,IAAI,CAAC,MAAK;AAAG,WAAO,WAAW,CAAC;EAAG,CAAC,EAAE,KAAK,EAAE;AAG9E,SAAO,SAAS,UAAU,YAAW;AACjC,QAAI,QAAQ,SAAS,UAAU,GAAG,UAAU;AAC5C,eAAW,SAAS,OAAO,EAAE,IAAI,KAAK,SAAS,UAAU,MAAM,MAAM;;AAGzE,MAAIC,YAAW,OAAO,KAAM,SAAS,UAAU,EAAE,IAAI,EAAG;AACxD,SAAOA,UAAS,SAAS,GAAG;AAAE,IAAAA,YAAW,MAAMA;;AAE/C,SAAOA;AACX;AAEA,IAAM,SAAU,WAAA;AAAY;AACxB,QAAM,SAAiC,CAAA;AACvC,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AACzB,UAAM,MAAM,uCAAuC,CAAC;AACpD,WAAO,GAAG,IAAI,OAAO,CAAC;;AAE1B,SAAO;AACX,EAAE;AAEF,SAAS,WAAW,OAAa;AAC7B,UAAQ,MAAM,YAAW;AAEzB,MAAI,SAASC;AACb,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,aAAS,SAAS,QAAQ,OAAO,MAAM,CAAC,CAAC;;AAE7C,SAAO;AACX;AAqCM,SAAU,WAAW,SAAe;AAEtC,iBAAe,OAAO,YAAa,UAAU,mBAAmB,WAAW,OAAO;AAElF,MAAI,QAAQ,MAAM,wBAAwB,GAAG;AAGzC,QAAI,CAAC,QAAQ,WAAW,IAAI,GAAG;AAAE,gBAAU,OAAO;;AAElD,UAAM,SAAS,mBAAmB,OAAO;AAGzC,mBAAe,CAAC,QAAQ,MAAM,+BAA+B,KAAK,WAAW,SACzE,wBAAwB,WAAW,OAAO;AAE9C,WAAO;;AAIX,MAAI,QAAQ,MAAM,gCAAgC,GAAG;AAEjD,mBAAe,QAAQ,UAAU,GAAG,CAAC,MAAM,aAAa,OAAO,GAAG,qBAAqB,WAAW,OAAO;AAEzG,QAAI,SAAS,WAAW,QAAQ,UAAU,CAAC,CAAC,EAAE,SAAS,EAAE;AACzD,WAAO,OAAO,SAAS,IAAI;AAAE,eAAS,MAAM;;AAC5C,WAAQ,mBAAmB,OAAO,MAAM;;AAG5C,iBAAe,OAAO,mBAAmB,WAAW,OAAO;AAC/D;AAoBM,SAAU,eAAe,SAAe;AAE1C,MAAI,SAAS,OAAO,WAAW,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,YAAW;AACjE,SAAO,OAAO,SAAS,IAAI;AAAE,aAAS,MAAM;;AAC5C,SAAO,OAAO,aAAa,SAAS,MAAM,IAAI;AAClD;;;AC9IM,SAAU,iBAAiB,IAAyC;AACtE,QAAM,OAAO,WAAW,GAAG,IAAI;AAC/B,QAAM,QAAQ,UAAU,GAAG,OAAO,UAAU;AAE5C,MAAI,WAAW,MAAM,SAAS,EAAE;AAChC,MAAI,aAAa,KAAK;AAClB,eAAW;aACJ,SAAS,SAAS,GAAG;AAC5B,eAAW,QAAQ;SAChB;AACH,eAAW,OAAO;;AAGtB,SAAO,WAAW,UAAU,UAAU,UAAU,CAAE,MAAM,QAAQ,CAAE,CAAC,GAAG,EAAE,CAAC;AAC7E;AAyBM,SAAU,kBAAkB,OAAe,OAAkB,eAAwB;AACvF,QAAM,OAAO,WAAW,KAAK;AAC7B,QAAM,OAAO,SAAS,OAAO,MAAM;AACnC,QAAM,eAAe,SAAS,eAAe,cAAc;AAE3D,iBAAe,KAAK,WAAW,IAAI,yBAAyB,QAAQ,KAAK;AAEzE,iBAAe,aAAa,WAAW,IAAI,iCAAiC,gBAAgB,aAAa;AAEzG,SAAO,WAAW,UAAU,UAAU,OAAO,CAAE,QAAQ,MAAM,MAAM,YAAY,CAAE,CAAC,GAAG,EAAE,CAAC;AAC5F;;;AC1DM,SAAU,cAAc,OAAU;AACpC,SAAQ,SAAS,OAAO,MAAM,eAAgB;AAClD;AA2BM,SAAU,UAAU,OAAU;AAChC,MAAI;AACA,eAAW,KAAK;AAChB,WAAO;WACF,OAAO;EAAA;AAChB,SAAO;AACX;AAEA,eAAe,aAAa,QAAa,SAA+B;AACpE,QAAM,SAAS,MAAM;AACrB,MAAI,UAAU,QAAQ,WAAW,8CAA8C;AAC3E,WAAO,OAAO,WAAY,UAAU,qBAAqB,qBAAqB,EAAE,OAAO,OAAM,CAAE;AAC/F,mBAAe,OAAO,iEAAiE,UAAU,MAAM;;AAE3G,SAAO,WAAW,MAAM;AAC5B;AAuCM,SAAU,eAAe,QAAqB,UAA8B;AAE9E,MAAI,OAAO,WAAY,UAAU;AAC7B,QAAI,OAAO,MAAM,mBAAmB,GAAG;AAAE,aAAO,WAAW,MAAM;;AAEjE,WAAO,YAAY,MAAM,sCACrB,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAEzD,WAAO,aAAa,QAAQ,SAAS,YAAY,MAAM,CAAC;aAEjD,cAAc,MAAM,GAAG;AAC9B,WAAO,aAAa,QAAQ,OAAO,WAAU,CAAE;aAExC,UAAU,OAAO,OAAO,SAAU,YAAY;AACrD,WAAO,aAAa,QAAQ,MAAM;;AAGtC,iBAAe,OAAO,iCAAiC,UAAU,MAAM;AAC3E;;;ACpGA,IAAM,SAAS,CAAA;AAEf,SAAS,EAAE,OAAqB,OAAa;AACzC,MAAIC,UAAS;AACb,MAAI,QAAQ,GAAG;AACX,IAAAA,UAAS;AACT,aAAS;;AAIb,SAAO,IAAI,MAAM,QAAQ,GAAIA,UAAS,KAAI,GAAI,MAAO,KAAM,IAAI,OAAO,EAAE,QAAAA,SAAQ,MAAK,CAAE;AAC3F;AAEA,SAAS,EAAE,OAAkB,MAAa;AAEtC,SAAO,IAAI,MAAM,QAAQ,QAAU,OAAQ,OAAM,EAAG,IAAI,OAAO,EAAE,KAAI,CAAE;AAC3E;AAoEA,IAAM,eAAe,OAAO,IAAI,eAAe;AA1G/C;AA+GM,IAAO,SAAP,MAAO,OAAK;;;;EAsBd,YAAY,OAAY,MAAc,OAAY,SAAa;AAjBtD;;;;AAKA;;;;AAEA;AAKA;;;;AAML,QAAI,WAAW,MAAM;AAAE,gBAAU;;AACjC,kBAAc,QAAQ,OAAO,OAAO;AACpC,qBAAwB,MAAM,EAAE,cAAc,MAAM,MAAK,CAAE;AAC3D,uBAAK,UAAW;AAGhB,SAAK,OAAM;EACf;;;;EAKA,SAAM;AACF,QAAI,KAAK,SAAS,SAAS;AACvB,YAAM,IAAI,MAAM,EAAE;eACX,KAAK,SAAS,gBAAgB;AACrC,YAAM,IAAI,MAAM,EAAE;eACX,KAAK,SAAS,SAAS;AAC9B,aAAO,SAAU,KAAK,MAAM,IAAI,CAAC,MAAa,EAAE,OAAM,CAAE,EAAE,KAAK,GAAG,CAAE;;AAGxE,WAAO,KAAK;EAChB;;;;EAKA,eAAY;AACR,WAAO;EACX;;;;EAKA,WAAQ;AACJ,WAAO;EACX;;;;EAKA,WAAQ;AACJ,WAAO;EACX;;;;EAKA,WAAQ;AACJ,WAAO,CAAC,CAAE,KAAK,KAAK,MAAM,eAAe;EAC7C;;;;EAKA,SAAM;AACF,WAAO,KAAK,KAAK,WAAW,OAAO;EACvC;;;;EAKA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;EAKA,IAAI,YAAS;AACT,QAAI,KAAK,SAAS,SAAS;AAAE,YAAM,UAAU,aAAa;;AAC1D,WAAO,mBAAK;EAChB;;;;;;;;;;EAYA,IAAI,cAAW;AACX,QAAI,KAAK,SAAS,SAAS;AAAE,YAAM,UAAU,cAAc;;AAC3D,QAAI,mBAAK,cAAa,MAAM;AAAE,aAAO;;AACrC,QAAI,mBAAK,cAAa,OAAO;AAAE,aAAqB,KAAK,MAAQ;;AACjE,WAAO;EACX;;;;EAKA,OAAO,KAAK,MAAc,OAAU;AAChC,WAAO,IAAI,OAAM,QAAQ,MAAM,KAAK;EACxC;;;;EAKA,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKvD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKzD,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,QAAQ,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAK3D,OAAO,KAAK,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKxD,OAAO,KAAK,GAAe;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,MAAM,GAAe;AAAW,WAAO,EAAE,GAAG,GAAG;EAAG;;;;EAKzD,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,OAAO,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAK3D,OAAO,IAAI,GAAe;AAAW,WAAO,EAAE,GAAG,IAAI;EAAG;;;;EAKxD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,OAAO,GAAY;AAAW,WAAO,EAAE,GAAG,CAAC;EAAG;;;;EAKrD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAKvD,OAAO,QAAQ,GAAY;AAAW,WAAO,EAAE,GAAG,EAAE;EAAG;;;;EAMvD,OAAO,QAAQ,GAAuB;AAAW,WAAO,IAAI,OAAM,QAAQ,WAAW,CAAC;EAAG;;;;EAKzF,OAAO,KAAK,GAAM;AAAW,WAAO,IAAI,OAAM,QAAQ,QAAQ,CAAC,CAAC,CAAC;EAAG;;;;EAKpE,OAAO,MAAM,GAAY;AAAW,WAAO,IAAI,OAAM,QAAQ,SAAS,CAAC;EAAG;;;;EAK1E,OAAO,OAAO,GAAS;AAAW,WAAO,IAAI,OAAM,QAAQ,UAAU,CAAC;EAAG;;;;EAMzE,OAAO,MAAM,GAAuB,SAAwB;AACxD,UAAM,IAAI,MAAM,qBAAqB;AACrC,WAAO,IAAI,OAAM,QAAQ,SAAS,GAAG,OAAO;EAChD;;;;EAMA,OAAO,MAAM,GAAqD,MAAa;AAC3E,UAAM,IAAI,MAAM,qBAAqB;AACrC,WAAO,IAAI,OAAM,QAAQ,SAAS,GAAG,IAAI;EAC7C;;;;EAMA,OAAO,UAAU,GAAsB;AACnC,WAAO,IAAI,OAAM,QAAQ,aAAa,OAAO,OAAO,CAAA,GAAK,CAAC,CAAC;EAC/D;;;;EAKA,OAAO,QAAQ,OAAU;AACrB,WAAQ,SACD,OAAO,UAAW,YAClB,kBAAkB,SAClB,MAAM,iBAAiB;EAClC;;;;;;;;EASA,OAAO,YAAe,OAAkB,MAAY;AAChD,QAAI,OAAM,QAAQ,KAAK,GAAG;AACtB,UAAI,MAAM,SAAS,MAAM;AACrB,cAAM,IAAI,MAAM,0BAA2B,IAAK,SAAU,MAAM,IAAK,EAAE;;AAE3E,aAAO,MAAM;;AAEjB,WAAO;EACX;;AA/pBS;AAZP,IAAO,QAAP;;;ACnGA,IAAO,eAAP,cAA4B,MAAK;EAEnC,YAAY,WAAiB;AACzB,UAAM,WAAW,WAAW,WAAW,KAAK;EAChD;EAEA,eAAY;AACR,WAAO;EACX;EAEA,OAAO,QAAgBC,SAAsB;AACzC,QAAI,QAAQ,MAAM,YAAYA,SAAQ,QAAQ;AAC9C,QAAI;AACA,cAAQ,WAAW,KAAK;aACnB,OAAY;AACjB,aAAO,KAAK,YAAY,MAAM,SAASA,OAAM;;AAEjD,WAAO,OAAO,WAAW,KAAK;EAClC;EAEA,OAAO,QAAc;AACjB,WAAO,WAAW,QAAQ,OAAO,UAAS,GAAI,EAAE,CAAC;EACrD;;;;ACzBE,IAAO,iBAAP,cAA8B,MAAK;EAGrC,YAAY,OAAY;AACpB,UAAM,MAAM,MAAM,MAAM,MAAM,KAAK,MAAM,OAAO;AAH5C;AAIJ,SAAK,QAAQ;EACjB;EAEA,eAAY;AACR,WAAO,KAAK,MAAM,aAAY;EAClC;EAEA,OAAO,QAAgB,OAAU;AAC7B,WAAO,KAAK,MAAM,OAAO,QAAQ,KAAK;EAC1C;EAEA,OAAO,QAAc;AACjB,WAAO,KAAK,MAAM,OAAO,MAAM;EACnC;;;;ACbE,SAAU,KAAK,QAAgB,QAA8B,QAA8C;AAC7G,MAAI,cAA0B,CAAA;AAE9B,MAAI,MAAM,QAAQ,MAAM,GAAG;AACxB,kBAAc;aAEN,UAAU,OAAO,WAAY,UAAU;AAC9C,QAAI,SAAwC,CAAA;AAE5C,kBAAc,OAAO,IAAI,CAAC,UAAS;AAC/B,YAAM,OAAO,MAAM;AACnB,aAAO,MAAM,yDACT,oBAAoB,EAAE,UAAU,UAAU,MAAM,EAAE,MAAK,GAAI,OAAO,OAAM,CAAE;AAE9E,aAAO,CAAC,OAAO,IAAI,GAAG,2DAClB,oBAAoB,EAAE,UAAU,UAAU,MAAM,EAAE,MAAK,GAAI,OAAO,OAAM,CAAE;AAE9E,aAAO,IAAI,IAAI;AAEf,aAAO,OAAO,IAAI;IACtB,CAAC;SAEE;AACH,mBAAe,OAAO,uBAAuB,SAAS,MAAM;;AAGhE,iBAAe,OAAO,WAAW,YAAY,QAAQ,+BAA+B,SAAS,MAAM;AAEnG,MAAI,eAAe,IAAI,OAAM;AAC7B,MAAI,gBAAgB,IAAI,OAAM;AAE9B,MAAI,cAAmD,CAAA;AACvD,SAAO,QAAQ,CAAC,OAAO,UAAS;AAC5B,QAAI,QAAQ,YAAY,KAAK;AAE7B,QAAI,MAAM,SAAS;AAEf,UAAI,gBAAgB,cAAc;AAGlC,YAAM,OAAO,eAAe,KAAK;AAGjC,UAAI,aAAa,aAAa,oBAAmB;AACjD,kBAAY,KAAK,CAAC,eAAsB;AACpC,mBAAW,aAAa,aAAa;MACzC,CAAC;WAEE;AACH,YAAM,OAAO,cAAc,KAAK;;EAExC,CAAC;AAGD,cAAY,QAAQ,CAAC,SAAQ;AAAG,SAAK,aAAa,MAAM;EAAG,CAAC;AAE5D,MAAI,SAAS,OAAO,aAAa,YAAY;AAC7C,YAAU,OAAO,aAAa,aAAa;AAC3C,SAAO;AACX;AAKM,SAAU,OAAO,QAAgB,QAA4B;AAC/D,MAAI,SAAqB,CAAA;AACzB,MAAI,OAA6B,CAAA;AAGjC,MAAI,aAAa,OAAO,UAAU,CAAC;AAEnC,SAAO,QAAQ,CAAC,UAAS;AACrB,QAAI,QAAa;AAEjB,QAAI,MAAM,SAAS;AACf,UAAI,SAAS,OAAO,UAAS;AAC7B,UAAI,eAAe,WAAW,UAAU,MAAM;AAC9C,UAAI;AACA,gBAAQ,MAAM,OAAO,YAAY;eAC5B,OAAY;AAEjB,YAAI,QAAQ,OAAO,gBAAgB,GAAG;AAClC,gBAAM;;AAGV,gBAAQ;AACR,cAAM,WAAW,MAAM;AACvB,cAAM,OAAO,MAAM;AACnB,cAAM,OAAO,MAAM;;WAGpB;AACH,UAAI;AACA,gBAAQ,MAAM,OAAO,MAAM;eACtB,OAAY;AAEjB,YAAI,QAAQ,OAAO,gBAAgB,GAAG;AAClC,gBAAM;;AAGV,gBAAQ;AACR,cAAM,WAAW,MAAM;AACvB,cAAM,OAAO,MAAM;AACnB,cAAM,OAAO,MAAM;;;AAI3B,QAAI,SAAS,QAAW;AACpB,YAAM,IAAI,MAAM,aAAa;;AAGjC,WAAO,KAAK,KAAK;AACjB,SAAK,KAAK,MAAM,aAAa,IAAI;EACrC,CAAC;AAED,SAAO,OAAO,UAAU,QAAQ,IAAI;AACxC;AAKM,IAAO,aAAP,cAA0B,MAAK;EAIjC,YAAY,OAAc,QAAgB,WAAiB;AACvD,UAAM,OAAQ,MAAM,OAAO,OAAO,UAAU,IAAI,SAAQ,MAAM;AAC9D,UAAM,UAAW,WAAW,MAAM,MAAM;AACxC,UAAM,SAAS,MAAM,WAAW,OAAO;AANlC;AACA;AAML,qBAA6B,MAAM,EAAE,OAAO,OAAM,CAAE;EACxD;EAEA,eAAY;AAER,UAAM,eAAe,KAAK,MAAM,aAAY;AAE5C,UAAM,SAAqB,CAAA;AAC3B,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,aAAO,KAAK,YAAY;;AAE5B,WAAO;EACX;EAEA,OAAO,QAAgBC,SAA0B;AAC7C,UAAM,QAAQ,MAAM,YAAYA,SAAQ,OAAO;AAE/C,QAAG,CAAC,MAAM,QAAQ,KAAK,GAAG;AACtB,WAAK,YAAY,wBAAwB,KAAK;;AAGlD,QAAI,QAAQ,KAAK;AAEjB,QAAI,UAAU,IAAI;AACd,cAAQ,MAAM;AACd,aAAO,WAAW,MAAM,MAAM;;AAGlC,wBAAoB,MAAM,QAAQ,OAAO,iBAAiB,KAAK,YAAY,MAAK,KAAK,YAAY,GAAG;AAEpG,QAAI,SAAuB,CAAA;AAC3B,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AAAE,aAAO,KAAK,KAAK,KAAK;;AAE/D,WAAO,KAAK,QAAQ,QAAQ,KAAK;EACrC;EAEA,OAAO,QAAc;AACjB,QAAI,QAAQ,KAAK;AACjB,QAAI,UAAU,IAAI;AACd,cAAQ,OAAO,UAAS;AAOxB,aAAO,QAAQ,YAAY,OAAO,YAAY,4BAC1C,kBAAkB,EAAE,QAAQ,OAAO,OAAO,QAAQ,QAAQ,UAAU,QAAQ,OAAO,WAAU,CAAE;;AAEvG,QAAI,SAAuB,CAAA;AAC3B,aAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAAE,aAAO,KAAK,IAAI,eAAe,KAAK,KAAK,CAAC;;AAE5E,WAAO,OAAO,QAAQ,MAAM;EAChC;;;;AC5LE,IAAO,eAAP,cAA4B,MAAK;EAEnC,YAAY,WAAiB;AACzB,UAAM,QAAQ,QAAQ,WAAW,KAAK;EAC1C;EAEA,eAAY;AACR,WAAO;EACX;EAEA,OAAO,QAAgBC,SAAuB;AAC1C,UAAM,QAAQ,MAAM,YAAYA,SAAQ,MAAM;AAC9C,WAAO,OAAO,WAAW,QAAQ,IAAG,CAAC;EACzC;EAEA,OAAO,QAAc;AACjB,WAAO,CAAC,CAAC,OAAO,UAAS;EAC7B;;;;ACfE,IAAO,oBAAP,cAAiC,MAAK;EACxC,YAAY,MAAc,WAAiB;AACxC,UAAM,MAAM,MAAM,WAAW,IAAI;EACpC;EAEA,eAAY;AACR,WAAO;EACX;EAEA,OAAO,QAAgB,OAAU;AAC7B,YAAQ,aAAa,KAAK;AAC1B,QAAI,SAAS,OAAO,WAAW,MAAM,MAAM;AAC3C,cAAU,OAAO,WAAW,KAAK;AACjC,WAAO;EACX;EAEA,OAAO,QAAc;AACjB,WAAO,OAAO,UAAU,OAAO,UAAS,GAAI,IAAI;EACpD;;AAME,IAAO,aAAP,cAA0B,kBAAiB;EAC7C,YAAY,WAAiB;AACzB,UAAM,SAAS,SAAS;EAC5B;EAEA,OAAO,QAAc;AACjB,WAAO,QAAQ,MAAM,OAAO,MAAM,CAAC;EACvC;;;;AC3BE,IAAO,kBAAP,cAA+B,MAAK;EAGtC,YAAY,MAAc,WAAiB;AACvC,QAAI,OAAO,UAAU,OAAO,IAAI;AAChC,UAAM,MAAM,MAAM,WAAW,KAAK;AAJ7B;AAKL,qBAAkC,MAAM,EAAE,KAAI,GAAI,EAAE,MAAM,SAAQ,CAAE;EACxE;EAEA,eAAY;AACR,WAAQ,qEAAsE,UAAU,GAAG,IAAI,KAAK,OAAO,CAAC;EAChH;EAEA,OAAO,QAAgBC,SAAyB;AAC5C,QAAIC,QAAO,aAAa,MAAM,YAAYD,SAAQ,KAAK,IAAI,CAAC;AAC5D,QAAIC,MAAK,WAAW,KAAK,MAAM;AAAE,WAAK,YAAY,yBAAyBD,OAAM;;AACjF,WAAO,OAAO,WAAWC,KAAI;EACjC;EAEA,OAAO,QAAc;AACjB,WAAO,QAAQ,OAAO,UAAU,KAAK,IAAI,CAAC;EAC9C;;;;AChCJ,IAAM,QAAQ,IAAI,WAAW,CAAA,CAAG;AAK1B,IAAO,YAAP,cAAyB,MAAK;EAEhC,YAAY,WAAiB;AACzB,UAAM,QAAQ,IAAI,WAAW,KAAK;EACtC;EAEA,eAAY;AACR,WAAO;EACX;EAEA,OAAO,QAAgB,OAAU;AAC7B,QAAI,SAAS,MAAM;AAAE,WAAK,YAAY,YAAY,KAAK;;AACvD,WAAO,OAAO,WAAW,KAAK;EAClC;EAEA,OAAO,QAAc;AACjB,WAAO,UAAU,CAAC;AAClB,WAAO;EACX;;;;ACdJ,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAM,iBAAiB,OAAO,oEAAoE;AAK5F,IAAO,cAAP,cAA2B,MAAK;EAIlC,YAAY,MAAcC,SAAiB,WAAiB;AACxD,UAAM,QAASA,UAAS,QAAO,UAAW,OAAO;AACjD,UAAM,MAAM,MAAM,WAAW,KAAK;AAL7B;AACA;AAML,qBAA8B,MAAM,EAAE,MAAM,QAAAA,QAAM,GAAI,EAAE,MAAM,UAAU,QAAQ,UAAS,CAAE;EAC/F;EAEA,eAAY;AACR,WAAO;EACX;EAEA,OAAO,QAAgBC,SAA4B;AAC/C,QAAI,QAAQ,UAAU,MAAM,YAAYA,SAAQ,KAAK,IAAI,CAAC;AAG1D,QAAI,eAAe,KAAK,gBAAgB,WAAW,CAAC;AACpD,QAAI,KAAK,QAAQ;AACb,UAAI,SAAS,KAAK,cAAe,KAAK,OAAO,IAAK,CAAC;AACnD,UAAI,QAAQ,UAAU,QAAQ,EAAE,SAASF,QAAO;AAC5C,aAAK,YAAY,uBAAuBE,OAAM;;AAElD,cAAQ,OAAO,OAAO,IAAI,QAAQ;eAC3B,QAAQH,SAAQ,QAAQ,KAAK,cAAc,KAAK,OAAO,CAAC,GAAG;AAClE,WAAK,YAAY,uBAAuBG,OAAM;;AAGlD,WAAO,OAAO,WAAW,KAAK;EAClC;EAEA,OAAO,QAAc;AACjB,QAAI,QAAQ,KAAK,OAAO,UAAS,GAAI,KAAK,OAAO,CAAC;AAElD,QAAI,KAAK,QAAQ;AACb,cAAQ,SAAS,OAAO,KAAK,OAAO,CAAC;;AAGzC,WAAO;EACX;;;;ACjDE,IAAO,cAAP,cAA2B,kBAAiB;EAE9C,YAAY,WAAiB;AACzB,UAAM,UAAU,SAAS;EAC7B;EAEA,eAAY;AACR,WAAO;EACX;EAEA,OAAO,QAAgBC,SAAsB;AACzC,WAAO,MAAM,OAAO,QAAQ,YAAY,MAAM,YAAYA,SAAQ,QAAQ,CAAC,CAAC;EAChF;EAEA,OAAO,QAAc;AACjB,WAAO,aAAa,MAAM,OAAO,MAAM,CAAC;EAC5C;;;;ACfE,IAAO,aAAP,cAA0B,MAAK;EAGjC,YAAY,QAAsB,WAAiB;AAC/C,QAAI,UAAU;AACd,UAAM,QAAuB,CAAA;AAC7B,WAAO,QAAQ,CAAC,UAAS;AACrB,UAAI,MAAM,SAAS;AAAE,kBAAU;;AAC/B,YAAM,KAAK,MAAM,IAAI;IACzB,CAAC;AACD,UAAM,OAAQ,WAAW,MAAM,KAAK,GAAG,IAAI;AAE3C,UAAM,SAAS,MAAM,WAAW,OAAO;AAXlC;AAYL,qBAA6B,MAAM,EAAE,QAAQ,OAAO,OAAO,OAAO,MAAK,CAAE,EAAC,CAAE;EAChF;EAEA,eAAY;AACR,UAAM,SAAc,CAAA;AACpB,SAAK,OAAO,QAAQ,CAAC,UAAS;AAC1B,aAAO,KAAK,MAAM,aAAY,CAAE;IACpC,CAAC;AAGD,UAAM,cAAc,KAAK,OAAO,OAAO,CAAC,OAAO,UAAS;AACpD,YAAM,OAAO,MAAM;AACnB,UAAI,MAAM;AACN,YAAI,CAAC,MAAM,IAAI,GAAG;AAAE,gBAAM,IAAI,IAAI;;AAClC,cAAM,IAAI;;AAEd,aAAO;IACX,GAAiC,CAAA,CAAG;AAGpC,SAAK,OAAO,QAAQ,CAAC,OAAc,UAAiB;AAChD,UAAI,OAAO,MAAM;AACjB,UAAI,CAAC,QAAQ,YAAY,IAAI,MAAM,GAAG;AAAE;;AAExC,UAAI,SAAS,UAAU;AAAE,eAAO;;AAEhC,UAAI,OAAO,IAAI,KAAK,MAAM;AAAE;;AAE5B,aAAO,IAAI,IAAI,OAAO,KAAK;IAC/B,CAAC;AAED,WAAO,OAAO,OAAO,MAAM;EAC/B;EAEA,OAAO,QAAgBC,SAAsD;AACzE,UAAM,QAAQ,MAAM,YAAYA,SAAQ,OAAO;AAC/C,WAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK;EAC1C;EAEA,OAAO,QAAc;AACjB,WAAO,OAAO,QAAQ,KAAK,MAAM;EACrC;;;;ACpDE,SAAU,GAAG,OAAa;AAC5B,SAAO,UAAU,YAAY,KAAK,CAAC;AACvC;;;ACXA,IAAI,eAAe;AACnB,IAAM,SAAS,oBAAI,IAAI,CAAC,CAAC,MAAK,YAAY,GAAE,CAAC,MAAK,gBAAgB,GAAE,CAAC,OAAM,YAAY,CAAC,CAAC;AACzF,IAAM,UAAU;AAEhB,SAAS,kBAAkBC,QAAO;AACjC,MAAI,MAAM;AACV,WAAS,MAAM;AAAE,WAAQA,OAAM,KAAK,KAAK,IAAKA,OAAM,KAAK;AAAA,EAAG;AAG5D,MAAI,eAAe,IAAI;AACvB,MAAI,QAAQ;AACZ,MAAI,MAAM,CAAC,GAAG,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACtC,QAAI,KAAK,SAAS,IAAI,CAAC;AAAA,EACxB;AAGA,MAAI,OAAO,IAAI;AACf,MAAI,cAAc;AAClB,SAAO;AAEP,MAAI,aAAa;AACjB,MAAI,cAAc;AAClB,WAAS,WAAW;AACnB,QAAI,cAAc,GAAG;AAGpB,oBAAe,eAAe,IAAKA,OAAM,KAAK;AAC9C,mBAAa;AAAA,IACd;AACA,WAAQ,eAAe,EAAE,aAAc;AAAA,EACxC;AAEA,QAAMC,KAAI;AACV,QAAM,OAAO,KAAGA;AAChB,QAAM,OAAO,SAAS;AACtB,QAAM,OAAO,QAAQ;AACrB,QAAM,OAAO,OAAO;AAGpB,MAAI,WAAW;AACf,WAAS,IAAI,GAAG,IAAIA,IAAG,IAAK,YAAY,YAAY,IAAK,SAAS;AAElE,MAAI,UAAU,CAAC;AACf,MAAI,MAAM;AACV,MAAI,QAAQ;AACZ,SAAO,MAAM;AACZ,QAAI,QAAQ,KAAK,QAAS,WAAW,MAAM,KAAK,QAAS,KAAK,KAAK;AACnE,QAAI,QAAQ;AACZ,QAAI,MAAM;AACV,WAAO,MAAM,QAAQ,GAAG;AACvB,UAAI,MAAO,QAAQ,QAAS;AAC5B,UAAI,QAAQ,IAAI,GAAG,GAAG;AACrB,cAAM;AAAA,MACP,OAAO;AACN,gBAAQ;AAAA,MACT;AAAA,IACD;AACA,QAAI,SAAS,EAAG;AAChB,YAAQ,KAAK,KAAK;AAClB,QAAI,IAAI,MAAM,KAAK,MAAM,QAAQ,IAAI,KAAK,IAAM,KAAK;AACrD,QAAIC,KAAI,MAAM,KAAK,MAAM,QAAQ,IAAI,QAAM,CAAC,IAAI,KAAK,IAAI;AACzD,aAAS,IAAIA,MAAK,SAAS,GAAG;AAC7B,iBAAY,YAAY,IAAK,OAAO,SAAS;AAC7C,UAAK,KAAK,IAAK;AACf,MAAAA,KAAKA,MAAK,IAAK,OAAO;AAAA,IACvB;AACA,WAAO,IAAI,CAACA,KAAI,MAAM;AACrB,iBAAY,WAAW,OAAU,YAAY,IAAM,SAAS,IAAM,SAAS;AAC3E,UAAK,KAAK,IAAK;AACf,MAAAA,MAAMA,KAAI,SAAS,IAAK,OAAO;AAAA,IAChC;AACA,UAAM;AACN,YAAQ,IAAIA,KAAI;AAAA,EACjB;AACA,MAAI,SAAS,eAAe;AAC5B,SAAO,QAAQ,IAAI,OAAK;AACvB,YAAQ,IAAI,QAAQ;AAAA,MACnB,KAAK;AAAG,eAAO,SAAS,SAAYF,OAAM,aAAa,KAAK,KAAOA,OAAM,aAAa,KAAK,IAAKA,OAAM,aAAa;AAAA,MACnH,KAAK;AAAG,eAAO,SAAS,OAAUA,OAAM,aAAa,KAAK,IAAKA,OAAM,aAAa;AAAA,MAClF,KAAK;AAAG,eAAO,SAASA,OAAM,aAAa;AAAA,MAC3C;AAAS,eAAO,IAAI;AAAA,IACrB;AAAA,EACD,CAAC;AACF;AAGA,SAAS,aAAa,GAAG;AACxB,MAAI,MAAM;AACV,SAAO,MAAM,EAAE,KAAK;AACrB;AACA,SAAS,wBAAwB,GAAG;AACnC,SAAO,aAAa,kBAAkB,YAAY,CAAC,CAAC,CAAC;AACtD;AAKA,SAAS,YAAY,GAAG;AACvB,MAAI,SAAS,CAAC;AACd,GAAC,GAAG,kEAAkE,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC;AACrH,MAAIG,KAAI,EAAE;AACV,MAAI,MAAM,IAAI,WAAY,IAAIA,MAAM,CAAC;AACrC,WAAS,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,IAAIA,IAAG,KAAK;AAC1D,YAAS,SAAS,IAAK,OAAO,EAAE,WAAW,CAAC,CAAC;AAC7C,aAAS;AACT,QAAI,SAAS,GAAG;AACf,UAAI,KAAK,IAAK,UAAU,SAAS;AAAA,IAClC;AAAA,EACD;AACA,SAAO;AACR;AAGA,SAAS,OAAO,GAAG;AAClB,SAAQ,IAAI,IAAM,CAAC,KAAK,IAAM,KAAK;AACpC;AAEA,SAAS,YAAYA,IAAG,MAAM;AAC7B,MAAI,IAAI,MAAMA,EAAC;AACf,WAAS,IAAI,GAAG,IAAI,GAAG,IAAIA,IAAG,IAAK,GAAE,CAAC,IAAI,KAAK,OAAO,KAAK,CAAC;AAC5D,SAAO;AACR;AAGA,SAAS,YAAY,MAAM,OAAO,GAAG;AACpC,MAAI,MAAM,CAAC;AACX,SAAO,MAAM;AACZ,QAAI,IAAI,KAAK;AACb,QAAIA,KAAI,KAAK;AACb,QAAI,CAACA,GAAG;AACR,YAAQ;AACR,aAAS,IAAI,GAAG,IAAIA,IAAG,KAAK;AAC3B,UAAI,KAAK,OAAO,CAAC;AAAA,IAClB;AACA,YAAQA,KAAI;AAAA,EACb;AACA,SAAO;AACR;AAEA,SAAS,mBAAmB,MAAM;AACjC,SAAO,iBAAiB,MAAM;AAC7B,QAAI,IAAI,YAAY,IAAI;AACxB,QAAI,EAAE,OAAQ,QAAO;AAAA,EACtB,CAAC;AACF;AAGA,SAAS,YAAY,MAAM;AAC1B,MAAI,MAAM,CAAC;AACX,SAAO,MAAM;AACZ,QAAI,IAAI,KAAK;AACb,QAAI,KAAK,EAAG;AACZ,QAAI,KAAK,kBAAkB,GAAG,IAAI,CAAC;AAAA,EACpC;AACA,SAAO,MAAM;AACZ,QAAI,IAAI,KAAK,IAAI;AACjB,QAAI,IAAI,EAAG;AACX,QAAI,KAAK,uBAAuB,GAAG,IAAI,CAAC;AAAA,EACzC;AACA,SAAO,IAAI,KAAK;AACjB;AAIA,SAAS,iBAAiB,MAAM;AAC/B,MAAI,IAAI,CAAC;AACT,SAAO,MAAM;AACZ,QAAI,IAAI,KAAK,EAAE,MAAM;AACrB,QAAI,CAAC,EAAG;AACR,MAAE,KAAK,CAAC;AAAA,EACT;AACA,SAAO;AACR;AAIA,SAAS,gBAAgBA,IAAG,GAAG,MAAM;AACpC,MAAI,IAAI,MAAMA,EAAC,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,CAAC;AACpC,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,gBAAYA,IAAG,IAAI,EAAE,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AAAA,EACpD;AACA,SAAO;AACR;AAIA,SAAS,kBAAkB,GAAG,MAAM;AACnC,MAAI,KAAK,IAAI,KAAK;AAClB,MAAI,KAAK,KAAK;AACd,MAAI,KAAK,iBAAiB,IAAI;AAC9B,MAAI,IAAI,gBAAgB,GAAG,QAAQ,IAAE,GAAG,IAAI;AAC5C,SAAO,EAAE,QAAQ,CAAC,GAAG,MAAM;AAC1B,QAAI,CAAC,GAAG,GAAG,EAAE,IAAI;AACjB,WAAO,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,MAAM;AACxC,UAAI,OAAO,IAAI;AACf,aAAO,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,OAAK,IAAI,IAAI,CAAC;AAAA,IAC1C,CAAC;AAAA,EACF,CAAC;AACF;AAIA,SAAS,uBAAuB,GAAG,MAAM;AACxC,MAAIA,KAAI,IAAI,KAAK;AACjB,MAAI,IAAI,gBAAgBA,IAAG,IAAE,GAAG,IAAI;AACpC,SAAO,EAAE,IAAI,OAAK,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC;AACrC;AAGA,SAAS,UAAU,MAAM;AACxB,MAAI,MAAM,CAAC;AACX,MAAI,SAAS,YAAY,IAAI;AAC7B,SAAOC,QAAO,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,SAAO;AACP,WAASA,QAAO,GAAG;AAClB,QAAIC,KAAI,KAAK;AACb,QAAI,IAAI,iBAAiB,MAAM;AAC9B,UAAI,MAAM,YAAY,IAAI,EAAE,IAAI,OAAK,OAAO,CAAC,CAAC;AAC9C,UAAI,IAAI,OAAQ,QAAOD,QAAO,GAAG;AAAA,IAClC,CAAC;AACD,WAAO,EAAC,GAAAC,IAAG,GAAG,EAAC;AAAA,EAChB;AACA,WAAS,OAAO,EAAC,GAAAA,IAAG,EAAC,GAAG,KAAK,OAAO;AACnC,QAAIA,KAAI,KAAK,UAAU,IAAI,IAAI,SAAO,CAAC,EAAG;AAC1C,QAAIA,KAAI,EAAG,SAAQ,IAAI,IAAI,SAAO,CAAC;AACnC,QAAIA,KAAI,EAAG,KAAI,KAAK,GAAG;AACvB,aAAS,MAAM,GAAG;AACjB,eAAS,MAAM,GAAG,GAAG;AACpB,eAAO,IAAI,CAAC,GAAG,KAAK,EAAE,GAAG,KAAK;AAAA,MAC/B;AAAA,IACD;AAAA,EACD;AACD;AAEA,SAAS,OAAO,IAAI;AACnB,SAAO,GAAG,SAAS,EAAE,EAAE,YAAY,EAAE,SAAS,GAAG,GAAG;AACrD;AAEA,SAAS,SAAS,IAAI;AACrB,SAAO,IAAI,OAAO,EAAE,CAAC;AACtB;AAOA,SAAS,WAAW,GAAG;AACtB,MAAI,MAAM,CAAC;AACX,WAAS,MAAM,GAAG,MAAM,EAAE,QAAQ,MAAM,OAAO;AAC9C,QAAI,KAAK,EAAE,YAAY,GAAG;AAC1B,WAAO,KAAK,QAAU,IAAI;AAC1B,QAAI,KAAK,EAAE;AAAA,EACZ;AACA,SAAO;AACR;AAEA,SAAS,aAAa,KAAK;AAC1B,QAAM,QAAQ;AACd,MAAI,MAAM,IAAI;AACd,MAAI,MAAM,MAAO,QAAO,OAAO,cAAc,GAAG,GAAG;AACnD,MAAI,MAAM,CAAC;AACX,WAAS,IAAI,GAAG,IAAI,OAAO;AAC1B,QAAI,KAAK,OAAO,cAAc,GAAG,IAAI,MAAM,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EAC3D;AACA,SAAO,IAAI,KAAK,EAAE;AACnB;AAEA,SAAS,eAAe,GAAGH,IAAG;AAC7B,MAAIC,KAAI,EAAE;AACV,MAAI,IAAIA,KAAID,GAAE;AACd,WAAS,IAAI,GAAG,KAAK,KAAK,IAAIC,IAAG,IAAK,KAAI,EAAE,CAAC,IAAID,GAAE,CAAC;AACpD,SAAO;AACR;AAOA,IAAI,aAAa;AASjB,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,KAAK;AACX,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,UAAU,UAAU;AAC1B,IAAM,UAAU,UAAU;AAC1B,IAAM,KAAK,KAAK;AAChB,IAAM,KAAK,KAAK;AAChB,IAAM,KAAK,KAAK;AAChB,IAAM,KAAK,KAAK;AAEhB,SAAS,UAAU,QAAQ;AAC1B,SAAQ,UAAU,KAAM;AACzB;AACA,SAAS,UAAU,QAAQ;AAC1B,SAAO,SAAS;AACjB;AAEA,IAAI;AAAJ,IAAkB;AAAlB,IAA8B;AAA9B,IAAsC;AAEtC,SAAS,SAAS;AAEjB,MAAI,IAAI,wBAAwB,UAAU;AAC1C,iBAAe,IAAI,IAAI,mBAAmB,CAAC,EAAE,QAAQ,CAAC,GAAG,MAAM,EAAE,IAAI,OAAK,CAAC,GAAI,IAAE,KAAM,EAAE,CAAC,CAAC,CAAC;AAC5F,eAAa,IAAI,IAAI,YAAY,CAAC,CAAC;AACnC,WAAS,oBAAI,IAAI;AACjB,WAAS,oBAAI,IAAI;AACjB,WAAS,CAAC,IAAI,GAAG,KAAK,YAAY,CAAC,GAAG;AACrC,QAAI,CAAC,WAAW,IAAI,EAAE,KAAK,IAAI,UAAU,GAAG;AAC3C,UAAI,CAAC,GAAGA,EAAC,IAAI;AACb,UAAI,SAAS,OAAO,IAAI,CAAC;AACzB,UAAI,CAAC,QAAQ;AACZ,iBAAS,oBAAI,IAAI;AACjB,eAAO,IAAI,GAAG,MAAM;AAAA,MACrB;AACA,aAAO,IAAIA,IAAG,EAAE;AAAA,IACjB;AACA,WAAO,IAAI,IAAI,IAAI,QAAQ,CAAC;AAAA,EAC7B;AAGD;AAEA,SAAS,UAAU,IAAI;AACtB,SAAO,MAAM,MAAM,KAAK;AACzB;AAEA,SAAS,aAAa,GAAGA,IAAG;AAC3B,MAAI,KAAK,MAAM,IAAI,MAAMA,MAAK,MAAMA,KAAI,IAAI;AAC3C,WAAO,MAAM,IAAI,MAAM,WAAWA,KAAI,MAAM;AAAA,EAC7C,WAAW,UAAU,CAAC,KAAKA,KAAI,MAAMA,KAAI,OAAO,IAAI,MAAM,WAAW,GAAG;AACvE,WAAO,KAAKA,KAAI;AAAA,EACjB,OAAO;AACN,QAAI,SAAS,OAAO,IAAI,CAAC;AACzB,QAAI,QAAQ;AACX,eAAS,OAAO,IAAIA,EAAC;AACrB,UAAI,QAAQ;AACX,eAAO;AAAA,MACR;AAAA,IACD;AACA,WAAO;AAAA,EACR;AACD;AAEA,SAAS,WAAW,KAAK;AACxB,MAAI,CAAC,aAAc,QAAO;AAC1B,MAAI,MAAM,CAAC;AACX,MAAI,MAAM,CAAC;AACX,MAAI,cAAc;AAClB,WAAS,IAAI,IAAI;AAChB,QAAI,KAAK,aAAa,IAAI,EAAE;AAC5B,QAAI,IAAI;AACP,oBAAc;AACd,YAAM;AAAA,IACP;AACA,QAAI,KAAK,EAAE;AAAA,EACZ;AACA,WAAS,MAAM,KAAK;AACnB,WAAO,MAAM;AACZ,UAAI,KAAK,KAAM;AACd,YAAI,KAAK,EAAE;AAAA,MACZ,WAAW,UAAU,EAAE,GAAG;AACzB,YAAI,UAAU,KAAK;AACnB,YAAI,UAAU,UAAU,UAAU;AAClC,YAAI,UAAW,UAAU,UAAW,UAAU;AAC9C,YAAI,UAAU,UAAU;AACxB,YAAI,KAAK,OAAO;AAChB,YAAI,KAAK,OAAO;AAChB,YAAI,UAAU,EAAG,KAAI,KAAK,OAAO;AAAA,MAClC,OAAO;AACN,YAAI,SAAS,OAAO,IAAI,EAAE;AAC1B,YAAI,QAAQ;AACX,cAAI,KAAK,GAAG,MAAM;AAAA,QACnB,OAAO;AACN,cAAI,EAAE;AAAA,QACP;AAAA,MACD;AACA,UAAI,CAAC,IAAI,OAAQ;AACjB,WAAK,IAAI,IAAI;AAAA,IACd;AAAA,EACD;AACA,MAAI,eAAe,IAAI,SAAS,GAAG;AAClC,QAAI,UAAU,UAAU,IAAI,CAAC,CAAC;AAC9B,aAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACpC,UAAI,KAAK,UAAU,IAAI,CAAC,CAAC;AACzB,UAAI,MAAM,KAAK,WAAW,IAAI;AAC7B,kBAAU;AACV;AAAA,MACD;AACA,UAAI,IAAI,IAAE;AACV,aAAO,MAAM;AACZ,YAAI,MAAM,IAAI,IAAE,CAAC;AACjB,YAAI,IAAE,CAAC,IAAI,IAAI,CAAC;AAChB,YAAI,CAAC,IAAI;AACT,YAAI,CAAC,EAAG;AACR,kBAAU,UAAU,IAAI,EAAE,CAAC,CAAC;AAC5B,YAAI,WAAW,GAAI;AAAA,MACpB;AACA,gBAAU,UAAU,IAAI,CAAC,CAAC;AAAA,IAC3B;AAAA,EACD;AACA,SAAO;AACR;AAEA,SAAS,yBAAyB,GAAG;AACpC,MAAI,MAAM,CAAC;AACX,MAAI,QAAQ,CAAC;AACb,MAAI,UAAU;AACd,MAAI,UAAU;AACd,WAAS,UAAU,GAAG;AACrB,QAAI,KAAK,UAAU,MAAM;AACzB,QAAI,KAAK,UAAU,MAAM;AACzB,QAAI,WAAW,IAAI;AAClB,UAAI,MAAM,GAAG;AACZ,kBAAU;AAAA,MACX,OAAO;AACN,YAAI,KAAK,EAAE;AAAA,MACZ;AAAA,IACD,WAAW,UAAU,KAAK,WAAW,IAAI;AACxC,UAAI,MAAM,GAAG;AACZ,YAAI,KAAK,SAAS,GAAG,KAAK;AAC1B,cAAM,SAAS;AACf,kBAAU;AAAA,MACX,OAAO;AACN,cAAM,KAAK,EAAE;AAAA,MACd;AACA,gBAAU;AAAA,IACX,OAAO;AACN,UAAI,WAAW,aAAa,SAAS,EAAE;AACvC,UAAI,YAAY,GAAG;AAClB,kBAAU;AAAA,MACX,WAAW,WAAW,KAAK,MAAM,GAAG;AACnC,YAAI,KAAK,OAAO;AAChB,kBAAU;AAAA,MACX,OAAO;AACN,cAAM,KAAK,EAAE;AACb,kBAAU;AAAA,MACX;AAAA,IACD;AAAA,EACD;AACA,MAAI,WAAW,GAAG;AACjB,QAAI,KAAK,SAAS,GAAG,KAAK;AAAA,EAC3B;AACA,SAAO;AACR;AAGA,SAAS,IAAI,KAAK;AACjB,SAAO,WAAW,GAAG,EAAE,IAAI,SAAS;AACrC;AACA,SAAS,IAAI,KAAK;AACjB,SAAO,yBAAyB,WAAW,GAAG,CAAC;AAChD;AAEA,IAAM,SAAS;AAEf,IAAM,UAAU;AAChB,IAAM,OAAO;AACb,IAAM,YAAY;AAGlB,IAAM,aAAa,OAAK,MAAM,KAAK,CAAC;AAEpC,SAAS,aAAa,GAAG,IAAI;AAE5B,SAAO,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE;AACjC;AAEA,IAAM,QAAN,cAAoB,MAAM;AAAA,EACzB,IAAI,WAAW;AAAE,WAAO;AAAA,EAAM;AAAA;AAC/B;AAEA,IAAI;AAAJ,IAAY;AAAZ,IAAqB;AAArB,IAAyB;AAAzB,IAA8B;AAA9B,IAAsC;AAAtC,IAAiD;AAAjD,IAAyD;AAAzD,IAAsE;AAAtE,IAAiF;AAAjF,IAAwF;AAAxF,IAAoG;AAEpG,SAAS,OAAO;AACf,MAAI,OAAQ;AAEZ,MAAI,IAAI,wBAAwB,YAAY;AAC5C,QAAM,oBAAoB,MAAM,YAAY,CAAC;AAC7C,QAAM,kBAAkB,MAAM,IAAI,IAAI,kBAAkB,CAAC;AACzD,QAAM,eAAe,CAAC,KAAK,MAAM,EAAE,QAAQ,OAAK,IAAI,IAAI,CAAC,CAAC;AAE1D,WAAS,IAAI,IAAI,YAAY,CAAC,CAAC;AAC/B,YAAU,gBAAgB;AAW1B,OAAK,kBAAkB;AACvB,QAAM,IAAI,IAAI,kBAAkB,EAAE,IAAI,OAAK,GAAG,CAAC,CAAC,CAAC;AACjD,OAAK,IAAI,IAAI,EAAE;AAEf,WAAS,gBAAgB;AACzB,cAAY,gBAAgB;AAE5B,MAAI,SAAS,mBAAmB,CAAC;AACjC,MAAI,eAAe,EAAE;AAErB,QAAM,eAAe,MAAM;AAE1B,QAAI,MAAM,oBAAI,IAAI;AAClB,sBAAkB,EAAE,QAAQ,OAAK,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC;AAC7D,iBAAa,KAAK,kBAAkB,CAAC;AACrC,WAAO;AAAA,EACR;AACA,WAAS,iBAAiB,OAAK;AAG9B,QAAII,KAAI,iBAAiB,CAAC,EAAE,IAAI,OAAK,IAAE,EAAI;AAC3C,QAAIA,GAAE,QAAQ;AACb,UAAI,IAAI,KAAK;AACb,MAAAA,GAAE,CAAC,KAAK;AACR,MAAAA,KAAI,aAAaA,EAAC;AAClB,UAAI,EAAG,CAAAA,KAAE,cAAcA,EAAC;AACxB,UAAI,IAAI,aAAa;AACrB,UAAI,IAAI,aAAa;AACrB,UAAI,IAAI,CAAC,EAAE;AAcX,aAAO,EAAC,GAAAA,IAAG,GAAG,GAAG,GAAG,EAAC;AAAA,IACtB;AAAA,EACD,CAAC;AAGD,gBAAc,gBAAgB;AAC9B,cAAY,oBAAI,IAAI;AACpB,MAAI,SAAS,kBAAkB,EAAE,OAAO,WAAW,WAAW,CAAC,EAAE,KAAK,CAAC,GAAGC,OAAM,IAAEA,EAAC;AACnF,SAAO,QAAQ,CAAC,IAAI,MAAM;AACzB,QAAI,IAAI,EAAE;AACV,QAAI,IAAI,OAAO,CAAC,IAAI,IAAI,OAAO,IAAE,CAAC,IAAI,EAAC,GAAG,CAAC,GAAG,GAAG,oBAAI,IAAI,EAAC;AAC1D,MAAE,EAAE,KAAK,EAAE;AACX,QAAI,CAAC,YAAY,IAAI,EAAE,GAAG;AACzB,gBAAU,IAAI,IAAI,CAAC;AAAA,IACpB;AAAA,EACD,CAAC;AAID,WAAS,EAAC,GAAG,EAAC,KAAK,IAAI,IAAI,UAAU,OAAO,CAAC,GAAG;AAE/C,QAAI,OAAO,CAAC;AACZ,aAAS,MAAM,GAAG;AACjB,UAAI,KAAK,OAAO,OAAO,OAAK,aAAa,GAAG,EAAE,CAAC;AAC/C,UAAI,MAAM,KAAK,KAAK,CAAC,EAAC,EAAC,MAAM,GAAG,KAAK,OAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AACnD,UAAI,CAAC,KAAK;AACT,cAAM,EAAC,GAAG,oBAAI,IAAI,GAAG,GAAG,CAAC,EAAC;AAC1B,aAAK,KAAK,GAAG;AAAA,MACd;AACA,UAAI,EAAE,KAAK,EAAE;AACb,mBAAa,IAAI,GAAG,EAAE;AAAA,IACvB;AAEA,QAAI,QAAQ,KAAK,QAAQ,OAAK,WAAW,EAAE,CAAC,CAAC;AAC7C,aAAS,EAAC,GAAG,GAAAC,GAAC,KAAK,MAAM;AACxB,UAAI,aAAa,IAAI,IAAI,MAAM,OAAO,OAAK,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AACrD,eAAS,MAAMA,IAAG;AACjB,UAAE,IAAI,IAAI,UAAU;AAAA,MACrB;AAAA,IACD;AAAA,EACD;AAIA,UAAQ,oBAAI,IAAI;AAChB,MAAI,QAAQ,oBAAI,IAAI;AACpB,QAAM,eAAe,QAAM,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE;AACvE,WAAS,KAAK,QAAQ;AACrB,aAAS,MAAM,EAAE,EAAG,cAAa,EAAE;AACnC,aAAS,MAAM,EAAE,EAAG,cAAa,EAAE;AAAA,EACpC;AAEA,WAAS,MAAM,OAAO;AACrB,QAAI,CAAC,UAAU,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,EAAE,GAAG;AACzC,gBAAU,IAAI,IAAI,SAAS;AAAA,IAC5B;AAAA,EACD;AAGA,eAAa,OAAO,IAAI,KAAK,CAAC;AAI9B,eAAa,UAAU,CAAC,EAAE,IAAI,OAAK,MAAM,KAAK,CAAC,CAAC,EAAE,KAAK,cAAc;AACrE,eAAa,oBAAI,IAAI;AACrB,WAAS,OAAO,YAAY;AAO3B,QAAI,OAAO,CAAC,UAAU;AACtB,aAAS,MAAM,KAAK;AACnB,UAAI,OAAO,KAAK,IAAI,UAAQ;AAC3B,YAAI,QAAQ,KAAK,IAAI,EAAE;AACvB,YAAI,CAAC,OAAO;AAIX,kBAAQ,oBAAI,IAAI;AAChB,eAAK,IAAI,IAAI,KAAK;AAAA,QACnB;AACA,eAAO;AAAA,MACR,CAAC;AACD,UAAI,OAAO,MAAM;AAChB,aAAK,KAAK,GAAG,IAAI;AAAA,MAClB,OAAO;AACN,eAAO;AAAA,MACR;AAAA,IACD;AACA,aAAS,KAAK,MAAM;AACnB,QAAE,IAAI;AAAA,IACP;AAAA,EACD;AACD;AAIA,SAAS,UAAU,IAAI;AACtB,UAAQ,cAAc,EAAE,IAAI,KAAK,GAAG,QAAQ,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE;AACvF;AAMA,SAAS,QAAQ,GAAG;AACnB,SAAO,IAAI,CAAC;AACb;AAEA,SAAS,sBAAsB,KAAK;AACnC,MAAI,IAAI,UAAU,KAAK,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,QAAQ;AAC5D,UAAM,IAAI,MAAM,6BAA6B,aAAa,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG;AAAA,EAC9E;AACD;AACA,SAAS,yBAAyB,KAAK;AACtC,QAAM,aAAa;AACnB,WAAS,IAAI,IAAI,YAAY,UAAU,GAAG,IAAI,KAAK;AAClD,QAAI,IAAI,EAAE,CAAC,MAAM,YAAY;AAC5B,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACnD;AAAA,EACD;AACD;AAEA,SAAS,aAAa,KAAK;AAC1B,MAAI,KAAK,IAAI,CAAC;AACd,MAAI,OAAO,OAAO,IAAI,EAAE;AACxB,MAAI,KAAM,OAAM,gBAAgB,WAAW,IAAI,EAAE;AACjD,MAAIC,KAAI,IAAI;AACZ,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAIA,IAAG,KAAK;AAC3B,SAAK,IAAI,CAAC;AACV,QAAI,QAAQ,OAAO,IAAI,EAAE;AACzB,QAAI,OAAO;AAEV,UAAI,QAAQ,EAAG,OAAM,gBAAgB,GAAG,IAAI,MAAM,KAAK,EAAE;AACzD,aAAO,IAAI;AACX,aAAO;AAAA,IACR;AAAA,EACD;AACA,MAAI,QAAQA,GAAG,OAAM,gBAAgB,YAAY,IAAI,EAAE;AACxD;AAQA,SAAS,kBAAkB,KAAK,MAAM,UAAU,SAAS,UAAU;AAGlE,MAAI,MAAM,CAAC;AACX,MAAI,kBAAkB,IAAI,CAAC,CAAC,EAAG,KAAI,KAAK,QAAG;AAC3C,MAAI,IAAI,SAAS,KAAK;AACrB,YAAQ;AACR,UAAM,CAAC,GAAG,IAAI,MAAM,GAAG,GAAG,GAAG,MAAQ,GAAG,IAAI,MAAM,CAAC,GAAG,CAAC;AAAA,EACxD;AACA,MAAI,OAAO;AACX,MAAIA,KAAI,IAAI;AACZ,WAAS,IAAI,GAAG,IAAIA,IAAG,KAAK;AAC3B,QAAI,KAAK,IAAI,CAAC;AACd,QAAI,cAAc,EAAE,GAAG;AACtB,UAAI,KAAK,aAAa,IAAI,MAAM,MAAM,CAAC,CAAC,CAAC;AACzC,UAAI,KAAK,OAAO,EAAE,CAAC;AACnB,aAAO,IAAI;AAAA,IACZ;AAAA,EACD;AACA,MAAI,KAAK,aAAa,IAAI,MAAM,MAAMA,EAAC,CAAC,CAAC;AACzC,SAAO,IAAI,KAAK,EAAE;AACnB;AAIA,SAAS,kBAAkB,IAAI;AAC9B,OAAK;AACL,SAAO,GAAG,IAAI,EAAE;AACjB;AACA,SAAS,cAAc,IAAI;AAC1B,OAAK;AACL,SAAO,OAAO,IAAI,EAAE;AACrB;AAeA,SAAS,cAAc,MAAM;AAC5B,SAAO,QAAQC,OAAM,MAAM,KAAK,WAAW,CAAC;AAC7C;AAgDA,SAASC,OAAM,MAAM,IAAI,IAAI;AAC5B,MAAI,CAAC,KAAM,QAAO,CAAC;AACnB,OAAK;AACL,MAAI,SAAS;AAGb,SAAO,KAAK,MAAM,OAAO,EAAE,IAAI,WAAS;AACvC,QAAI,QAAQ,WAAW,KAAK;AAC5B,QAAI,OAAO;AAAA,MACV;AAAA,MACA;AAAA;AAAA,IACD;AACA,cAAU,MAAM,SAAS;AACzB,QAAI;AAEH,UAAI,SAAS,KAAK,SAAS,gBAAgB,OAAO,IAAI,EAAE;AACxD,UAAI,cAAc,OAAO;AACzB,UAAI;AACJ,UAAI,CAAC,aAAa;AAKjB,cAAM,IAAI,MAAM,aAAa;AAAA,MAC9B;AACA,UAAI,OAAO,KAAK,SAAS,OAAO,KAAK;AACrC,+BAAyB,IAAI;AAC7B,UAAI,QAAQ,KAAK,QAAQ,cAAc,KAAK,OAAO,CAAC,EAAE;AACtD,UAAI,CAAC,SAAS,KAAK,MAAM,QAAM,KAAK,GAAI,GAAG;AAE1C,8BAAsB,IAAI;AAK1B,eAAO;AAAA,MACR,OAAO;AACN,YAAI,QAAQ,OAAO,QAAQ,OAAK,EAAE,WAAW,CAAC,IAAI,CAAC;AACnD,YAAI,CAAC,MAAM,QAAQ;AAClB,iBAAO;AAAA,QACR,OAAO;AAEN,cAAI,GAAG,IAAI,KAAK,CAAC,CAAC,EAAG,OAAM,gBAAgB,wBAAwB;AACnE,mBAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACrC,gBAAI,MAAM,OAAO,CAAC;AAClB,gBAAI,CAAC,IAAI,YAAY,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG;AAEpC,oBAAM,gBAAgB,4BAA4B,aAAa,OAAO,IAAE,CAAC,CAAC,CAAC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;AAAA,YAChH;AAAA,UACD;AACA,uBAAa,IAAI;AACjB,cAAI,SAAS,WAAW,IAAI,IAAI,KAAK,CAAC;AACtC,cAAI,CAAC,CAAC,IAAI,gBAAgB,MAAM;AAGhC,sBAAY,GAAG,KAAK;AACpB,sBAAY,GAAG,MAAM;AACrB,iBAAO,EAAE;AAAA,QAKV;AAAA,MACD;AACA,WAAK,OAAO;AAAA,IACb,SAAS,KAAK;AACb,WAAK,QAAQ;AAAA,IACd;AACA,WAAO;AAAA,EACR,CAAC;AACF;AAEA,SAAS,YAAY,OAAO,QAAQ;AACnC,MAAI;AACJ,MAAI,SAAS,CAAC;AACd,WAAS,MAAM,QAAQ;AACtB,QAAI,QAAQ,UAAU,IAAI,EAAE;AAC5B,QAAI,UAAU,UAAW;AACzB,QAAI,OAAO;AACV,UAAI,MAAM,MAAM,EAAE,IAAI,EAAE;AACxB,cAAQ,QAAQ,MAAM,OAAO,OAAK,IAAI,IAAI,CAAC,CAAC,IAAI,WAAW,GAAG;AAC9D,UAAI,CAAC,MAAM,OAAQ;AAAA,IACpB,OAAO;AACN,aAAO,KAAK,EAAE;AAAA,IACf;AAAA,EACD;AACA,MAAI,OAAO;AAIV,aAAS,KAAK,OAAO;AACpB,UAAI,OAAO,MAAM,QAAM,aAAa,GAAG,EAAE,CAAC,GAAG;AAC5C,cAAM,IAAI,MAAM,4BAA4B,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE;AAAA,MAC7D;AAAA,IACD;AAAA,EACD;AACD;AAIA,SAAS,gBAAgB,QAAQ;AAChC,MAAI,SAAS;AACb,WAAS,MAAM,QAAQ;AAGtB,QAAI,KAAK,OAAO,OAAO,OAAK,aAAa,GAAG,EAAE,CAAC;AAC/C,QAAI,CAAC,GAAG,QAAQ;AACf,UAAI,CAAC,OAAO,KAAK,OAAK,aAAa,GAAG,EAAE,CAAC,GAAG;AAM3C,cAAM,iBAAiB,EAAE;AAAA,MAC1B,OAAO;AAIN,cAAM,mBAAmB,OAAO,CAAC,GAAG,EAAE;AAAA,MACvC;AAAA,IACD;AACA,aAAS;AACT,QAAI,GAAG,UAAU,EAAG;AAAA,EACrB;AAEA,SAAO;AACR;AAGA,SAAS,QAAQA,QAAO;AACvB,SAAOA,OAAM,IAAI,CAAC,EAAC,OAAO,OAAO,QAAAC,QAAM,MAAM;AAC5C,QAAI,OAAO;AAEV,UAAI,MAAM,MAAM;AAEhB,YAAM,IAAI,MAAMD,OAAM,UAAU,IAAI,MAAM,iBAAiB,QAAQ,kBAAkB,OAAO,EAAE,CAAC,CAAC,KAAK,GAAG,EAAE;AAAA,IAC3G;AACA,WAAO,aAAaC,OAAM;AAAA,EAC3B,CAAC,EAAE,KAAK,OAAO;AAChB;AAEA,SAAS,iBAAiB,IAAI;AAE7B,SAAO,IAAI,MAAM,yBAAyB,UAAU,EAAE,CAAC,EAAE;AAC1D;AACA,SAAS,mBAAmB,GAAG,IAAI;AAClC,MAAI,SAAS,UAAU,EAAE;AACzB,MAAI,KAAK,OAAO,KAAK,CAAAC,OAAKA,GAAE,EAAE,IAAI,EAAE,CAAC;AACrC,MAAI,IAAI;AACP,aAAS,GAAG,GAAG,CAAC,IAAI,MAAM;AAAA,EAC3B;AACA,SAAO,IAAI,MAAM,oBAAoB,EAAE,CAAC,MAAM,MAAM,EAAE;AACvD;AACA,SAAS,gBAAgB,OAAO;AAC/B,SAAO,IAAI,MAAM,sBAAsB,KAAK,EAAE;AAC/C;AAKA,SAAS,YAAY,GAAG,KAAK;AAC5B,WAAS,MAAM,KAAK;AACnB,QAAI,CAAC,aAAa,GAAG,EAAE,GAAG;AAWzB,YAAM,mBAAmB,GAAG,EAAE;AAAA,IAC/B;AAAA,EACD;AAEA,MAAI,EAAE,GAAG;AACR,QAAIC,cAAa,IAAI,GAAG;AACxB,aAAS,IAAI,GAAG,IAAIA,YAAW,QAAQ,IAAI,GAAG,KAAK;AAclD,UAAI,IAAI,IAAIA,YAAW,CAAC,CAAC,GAAG;AAC3B,YAAI,IAAI,IAAI;AACZ,iBAAS,IAAI,IAAI,KAAK,IAAI,IAAI,KAAKA,YAAW,CAAC,CAAC,GAAG,KAAK;AAEvD,mBAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC3B,gBAAIA,YAAW,CAAC,KAAK,IAAI;AACxB,oBAAM,IAAI,MAAM,gCAAgC,UAAU,EAAE,CAAC,EAAE;AAAA,YAChE;AAAA,UACD;AAAA,QACD;AAGA,YAAI,IAAI,IAAI,SAAS;AAEpB,gBAAM,IAAI,MAAM,gCAAgC,QAAQ,kBAAkBA,YAAW,MAAM,IAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,IAAE,CAAC,IAAI,OAAO,GAAG;AAAA,QAC3H;AACA,YAAI;AAAA,MACL;AAAA,IACD;AAAA,EACD;AA+CD;AAOA,SAAS,gBAAgB,OAAO,IAAI,IAAI;AACvC,MAAI,MAAM,CAAC;AACX,MAAI,QAAQ,CAAC;AACb,UAAQ,MAAM,MAAM,EAAE,QAAQ;AAC9B,SAAO,MAAM,QAAQ;AACpB,QAAI,QAAQ,uBAAuB,KAAK;AACxC,QAAI,OAAO;AACV,UAAI,MAAM,QAAQ;AACjB,YAAI,KAAK,GAAG,KAAK,CAAC;AAClB,gBAAQ,CAAC;AAAA,MACV;AACA,UAAI,KAAK,GAAG,KAAK,CAAC;AAAA,IACnB,OAAO;AACN,UAAI,KAAK,MAAM,IAAI;AACnB,UAAI,MAAM,IAAI,EAAE,GAAG;AAClB,cAAM,KAAK,EAAE;AAAA,MACd,OAAO;AACN,YAAI,MAAM,OAAO,IAAI,EAAE;AACvB,YAAI,KAAK;AACR,gBAAM,KAAK,GAAG,GAAG;AAAA,QAClB,WAAW,CAAC,QAAQ,IAAI,EAAE,GAAG;AAO5B,gBAAM,iBAAiB,EAAE;AAAA,QAC1B;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACA,MAAI,MAAM,QAAQ;AACjB,QAAI,KAAK,GAAG,KAAK,CAAC;AAAA,EACnB;AACA,SAAO;AACR;AAEA,SAAS,YAAY,KAAK;AACzB,SAAO,IAAI,OAAO,QAAM,MAAM,IAAI;AACnC;AAOA,SAAS,uBAAuB,KAAK,OAAO;AAC3C,MAAI,OAAO;AACX,MAAI;AACJ,MAAI,MAAM,IAAI;AACd,SAAO,KAAK;AACX,WAAO,KAAK,IAAI,IAAI,EAAE,GAAG,CAAC;AAC1B,QAAI,CAAC,KAAM;AACX,QAAI,EAAC,EAAC,IAAI;AACV,QAAI,GAAG;AACN,cAAQ;AACR,UAAI,MAAO,OAAM,KAAK,GAAG,IAAI,MAAM,GAAG,EAAE,QAAQ,CAAC;AACjD,UAAI,SAAS;AAAA,IACd;AAAA,EACD;AACA,SAAO;AACR;;;AChmCA,IAAMC,SAAQ,IAAI,WAAW,EAAE;AAC/BA,OAAM,KAAK,CAAC;AAEZ,SAAS,eAAe,MAAgB;AACpC,iBAAe,KAAK,WAAW,GAAG,qCAAqC,QAAQ,IAAI;AACnF,SAAO;AACX;AAEA,SAAS,aAAa,MAAY;AAC9B,QAAMC,SAAQ,YAAY,aAAa,IAAI,CAAC;AAC5C,QAAM,QAA2B,CAAA;AAEjC,MAAI,KAAK,WAAW,GAAG;AAAE,WAAO;;AAEhC,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,UAAM,IAAIA,OAAM,CAAC;AAGjB,QAAI,MAAM,IAAM;AACZ,YAAM,KAAK,eAAeA,OAAM,MAAM,MAAM,CAAC,CAAC,CAAC;AAC/C,aAAO,IAAI;;;AAKnB,iBAAe,OAAOA,OAAM,QAAQ,qCAAqC,QAAQ,IAAI;AAErF,QAAM,KAAK,eAAeA,OAAM,MAAM,IAAI,CAAC,CAAC;AAC5C,SAAO;AACX;AAKM,SAAU,aAAa,MAAY;AACrC,MAAI;AACA,QAAI,KAAK,WAAW,GAAG;AAAE,YAAM,IAAI,MAAM,aAAa;;AACtD,WAAO,cAAc,IAAI;WACpB,OAAY;AACjB,mBAAe,OAAO,qBAAsB,MAAM,OAAQ,KAAK,QAAQ,IAAI;;AAEnF;AAKM,SAAU,YAAY,MAAY;AACpC,MAAI;AACA,WAAQ,aAAa,IAAI,EAAE,WAAW;WACjC,OAAO;EAAA;AAChB,SAAO;AACX;AAKM,SAAU,SAAS,MAAY;AACjC,iBAAe,OAAO,SAAU,UAAU,kCAAkC,QAAQ,IAAI;AAExF,iBAAe,KAAK,QAAQ,kCAAkC,QAAQ,IAAI;AAE1E,MAAI,SAA8BD;AAElC,QAAM,QAAQ,aAAa,IAAI;AAC/B,SAAO,MAAM,QAAQ;AACjB,aAAS,UAAU,OAAO,CAAE,QAAQ,UAAuB,MAAM,IAAG,CAAG,CAAC,CAAC,CAAE;;AAG/E,SAAO,QAAQ,MAAM;AACzB;AAQM,SAAU,UAAU,MAAc,YAAmB;AACvD,QAAM,SAAU,cAAc,OAAQ,aAAY;AAElD,iBAAe,UAAU,KAAK,uCAAuC,UAAU,MAAM;AAErF,SAAO,QAAQ,OAAO,aAAa,IAAI,EAAE,IAAI,CAAC,SAAQ;AAClD,mBAAe,KAAK,UAAU,QAAQ,SAAU,KAAK,UAAU,IAAI,CAAE,YAAa,MAAO,UAAU,QAAQ,IAAI;AAE/G,UAAMC,SAAQ,IAAI,WAAW,KAAK,SAAS,CAAC;AAC5C,IAAAA,OAAM,IAAI,MAAM,CAAC;AACjB,IAAAA,OAAM,CAAC,IAAIA,OAAM,SAAS;AAC1B,WAAOA;EACX,CAAC,CAAC,CAAC,IAAI;AACX;;;AC9FA,SAAS,aAAa,MAAc,aAA0B;AAC1D,SAAO;IACH,SAAS,WAAW,IAAI;IACxB,aAAa,YAAY,IAAI,CAAC,YAAY,UAAS;AAC/C,qBAAe,YAAY,YAAY,EAAE,GAAG,gBAAgB,eAAgB,KAAM,KAAK,UAAU;AACjG,aAAO,WAAW,YAAW;IACjC,CAAC;;AAET;AAKM,SAAU,cAAc,OAAoB;AAC9C,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,WAA0F,MAAO,IAAI,CAAC,KAAK,UAAS;AAChH,UAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,uBAAe,IAAI,WAAW,GAAG,oBAAoB,SAAU,KAAM,KAAK,GAAG;AAC7E,eAAO,aAAa,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;;AAEtC,qBAAe,OAAO,QAAQ,OAAO,QAAS,UAAU,4BAA4B,SAAS,KAAK;AAClG,aAAO,aAAa,IAAI,SAAS,IAAI,WAAW;IACpD,CAAC;;AAGL,iBAAe,SAAS,QAAQ,OAAO,UAAW,UAAU,uBAAuB,SAAS,KAAK;AAEjG,QAAM,SAAiE,OAAO,KAAK,KAAK,EAAE,IAAI,CAAC,SAAQ;AACnG,UAAM,cAAoC,MAAM,IAAI,EAAE,OAAO,CAAC,OAAO,eAAc;AAC/E,YAAM,UAAU,IAAI;AACpB,aAAO;IACX,GAAyB,CAAA,CAAG;AAC5B,WAAO,aAAa,MAAM,OAAO,KAAK,WAAW,EAAE,KAAI,CAAE;EAC7D,CAAC;AACD,SAAO,KAAK,CAAC,GAAGC,OAAO,EAAE,QAAQ,cAAcA,GAAE,OAAO,CAAE;AAC1D,SAAO;AACX;;;AC/BM,SAAU,eAAe,KAAwB;AACnD,MAAI;AACJ,MAAI,OAAO,QAAS,UAAU;AAC1B,aAAS,WAAW,iBAAiB,KAAK,KAAK;SAC5C;AACH,aAAS,IAAI;;AAEjB,SAAO,WAAW,UAAU,OAAO,OAAO,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;AACzE;AAMM,SAAU,eAAe,QAAmB,WAAwB;AACtE,SAAO,eAAe,WAAW,iBAAiB,QAAQ,SAAS,CAAC;AACxE;;;ACPA,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAMC,SAAQ,OAAO,EAAE;AACvB,IAAMC,SAAQ,OAAO,EAAE;AACvB,IAAMC,SAAQ,OAAO,EAAE;AACvB,IAAM,cAAc,OAAO,oEAAoE;AAE/F,IAAM,YAAY,OAAO;AA4IzB,SAAS,iBAAiBC,UAAiBC,OAAe;AACtD,MAAI,YAAYD,SAAQ,SAAS,EAAE;AACnC,SAAO,UAAU,SAAS,GAAG;AAAE,gBAAY,MAAM;;AACjD,eAAaE,QAAOD,KAAI,EAAE,UAAU,CAAC;AACrC,SAAO,OAAO;AAClB;AAEA,SAAS,cAAc,OAAa;AAChC,MAAI,UAAU,MAAM;AAAE,WAAO;;AAC7B,SAAO,WAAW,KAAK;AAC3B;AAEA,SAAS,iBAAiB,OAAY,OAAa;AAC/C,MAAI;AACA,WAAO,cAAc,KAAK;WACrB,OAAY;AACjB,mBAAe,OAAO,MAAM,SAAS,OAAO,KAAK;;AAEzD;AAEA,SAAS,aAAaE,SAAgB,OAAa;AAC/C,MAAIA,YAAW,MAAM;AAAE,WAAO;;AAC9B,SAAO,UAAUA,SAAQ,KAAK;AAClC;AAEA,SAAS,WAAWA,SAAgB,OAAa;AAC7C,MAAIA,YAAW,MAAM;AAAE,WAAOR;;AAC9B,QAAM,QAAQ,UAAUQ,SAAQ,KAAK;AACrC,iBAAe,SAAS,aAAa,2BAA2B,OAAO,KAAK;AAC5E,SAAO;AACX;AAEA,SAAS,aAAaA,SAAsB,MAAY;AACpD,QAAM,QAAQ,UAAUA,SAAQ,OAAO;AACvC,QAAM,SAAS,UAAU,KAAK;AAC9B,iBAAe,OAAO,UAAU,IAAI,mBAAmB,MAAO,IAAK,IAAI,KAAK;AAC5E,SAAO;AACX;AAEA,SAAS,iBAAiB,OAAoB;AAC1C,SAAO,cAAc,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAE,IAAI,SAAS,IAAI,WAAW,CAAE;AAC7E;AAEA,SAAS,aAAa,OAAsB,OAAa;AACrD,iBAAe,MAAM,QAAQ,KAAK,GAAG,WAAY,KAAM,IAAI,SAAS,KAAK;AACzE,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,mBAAe,YAAY,MAAM,CAAC,GAAG,EAAE,GAAG,2BAA2B,SAAU,CAAE,KAAK,MAAM,CAAC,CAAC;;AAElG,SAAO;AACX;AAEA,SAAS,aAAaC,OAAgB;AAClC,QAAM,SAAc,UAAUA,KAAI;AAElC,iBAAe,MAAM,QAAQ,MAAM,MAAM,OAAO,WAAW,KAAK,OAAO,WAAW,IAC9E,8CAA8C,QAAQA,KAAI;AAE9D,QAAM,KAAsB;IACxB,MAAU;IACV,OAAU,aAAa,OAAO,CAAC,GAAG,OAAO;IACzC,UAAU,WAAW,OAAO,CAAC,GAAG,UAAU;IAC1C,UAAU,WAAW,OAAO,CAAC,GAAG,UAAU;IAC1C,IAAU,cAAc,OAAO,CAAC,CAAC;IACjC,OAAU,WAAW,OAAO,CAAC,GAAG,OAAO;IACvC,MAAU,QAAQ,OAAO,CAAC,CAAC;IAC3B,SAAUT;;AAId,MAAI,OAAO,WAAW,GAAG;AAAE,WAAO;;AAElC,QAAM,IAAI,WAAW,OAAO,CAAC,GAAG,GAAG;AACnC,QAAM,IAAI,WAAW,OAAO,CAAC,GAAG,GAAG;AACnC,QAAM,IAAI,WAAW,OAAO,CAAC,GAAG,GAAG;AAEnC,MAAI,MAAMA,SAAQ,MAAMA,OAAM;AAE1B,OAAG,UAAU;SAEV;AAGH,QAAI,WAAW,IAAII,UAASH;AAC5B,QAAI,UAAUD,OAAM;AAAE,gBAAUA;;AAChC,OAAG,UAAU;AAGb,mBAAe,YAAYA,UAAS,MAAME,UAAS,MAAMC,SAAQ,0BAA0B,KAAK,OAAO,CAAC,CAAC;AAEzG,OAAG,YAAY,UAAU,KAAK;MAC1B,GAAG,aAAa,OAAO,CAAC,GAAG,EAAE;MAC7B,GAAG,aAAa,OAAO,CAAC,GAAG,EAAE;MAC7B;KACH;;AAKL,SAAO;AACX;AAEA,SAAS,iBAAiB,IAAiB,KAAqB;AAC5D,QAAM,SAAqB;IACvB,aAAa,GAAG,OAAO,OAAO;IAC9B,aAAa,GAAG,YAAY,GAAG,UAAU;IACzC,aAAa,GAAG,UAAU,UAAU;IACnC,GAAG,MAAM;IACV,aAAa,GAAG,OAAO,OAAO;IAC9B,GAAG;;AAGP,MAAI,UAAUH;AACd,MAAI,GAAG,WAAWA,OAAM;AAEpB,cAAU,UAAU,GAAG,SAAS,YAAY;AAI5C,mBAAe,CAAC,OAAO,IAAI,YAAY,QAAQ,IAAI,kBAAkB,SAChE,6BAA6B,OAAO,GAAG;aAErC,GAAG,WAAW;AAErB,UAAM,SAAS,GAAG,UAAU;AAC5B,QAAI,UAAU,MAAM;AAAE,gBAAU;;;AAIpC,MAAI,CAAC,KAAK;AAEN,QAAI,YAAYA,OAAM;AAClB,aAAO,KAAK,UAAU,OAAO,CAAC;AAC9B,aAAO,KAAK,IAAI;AAChB,aAAO,KAAK,IAAI;;AAGpB,WAAO,UAAU,MAAM;;AAQ3B,MAAI,IAAI,OAAO,KAAK,IAAI,OAAO;AAC/B,MAAI,YAAYA,OAAM;AAClB,QAAI,UAAU,YAAY,SAAS,IAAI,CAAC;aACjC,OAAO,IAAI,CAAC,MAAM,GAAG;AAC5B,mBAAe,OAAO,6BAA6B,OAAO,GAAG;;AAIjE,SAAO,KAAK,UAAU,CAAC,CAAC;AACxB,SAAO,KAAK,UAAU,IAAI,CAAC,CAAC;AAC5B,SAAO,KAAK,UAAU,IAAI,CAAC,CAAC;AAE5B,SAAO,UAAU,MAAM;AAC3B;AAEA,SAAS,mBAAmB,IAAqB,QAAqB;AAClE,MAAI;AACJ,MAAI;AACA,cAAU,aAAa,OAAO,CAAC,GAAG,SAAS;AAC3C,QAAI,YAAY,KAAK,YAAY,GAAG;AAAE,YAAM,IAAI,MAAM,aAAa;;WAC9D,OAAO;AACZ,mBAAe,OAAO,mBAAmB,WAAW,OAAO,CAAC,CAAC;;AAGjE,QAAM,IAAI,aAAa,OAAO,CAAC,GAAG,EAAE;AACpC,QAAM,IAAI,aAAa,OAAO,CAAC,GAAG,EAAE;AAEpC,QAAM,YAAY,UAAU,KAAK,EAAE,GAAG,GAAG,QAAO,CAAE;AAClD,KAAG,YAAY;AACnB;AAEA,SAAS,cAAcS,OAAgB;AACnC,QAAM,SAAc,UAAU,SAASA,KAAI,EAAE,MAAM,CAAC,CAAC;AAErD,iBAAe,MAAM,QAAQ,MAAM,MAAM,OAAO,WAAW,KAAK,OAAO,WAAW,KAC9E,+CAA+C,QAAQ,QAAQA,KAAI,CAAC;AAExE,QAAM,KAAsB;IACxB,MAAuB;IACvB,SAAuB,WAAW,OAAO,CAAC,GAAG,SAAS;IACtD,OAAuB,aAAa,OAAO,CAAC,GAAG,OAAO;IACtD,sBAAuB,WAAW,OAAO,CAAC,GAAG,sBAAsB;IACnE,cAAuB,WAAW,OAAO,CAAC,GAAG,cAAc;IAC3D,UAAuB;IACvB,UAAuB,WAAW,OAAO,CAAC,GAAG,UAAU;IACvD,IAAuB,cAAc,OAAO,CAAC,CAAC;IAC9C,OAAuB,WAAW,OAAO,CAAC,GAAG,OAAO;IACpD,MAAuB,QAAQ,OAAO,CAAC,CAAC;IACxC,YAAuB,iBAAiB,OAAO,CAAC,GAAG,YAAY;;AAInE,MAAI,OAAO,WAAW,GAAG;AAAE,WAAO;;AAIlC,qBAAmB,IAAI,OAAO,MAAM,CAAC,CAAC;AAEtC,SAAO;AACX;AAEA,SAAS,kBAAkB,IAAiB,KAAqB;AAC7D,QAAM,SAAqB;IACvB,aAAa,GAAG,SAAS,SAAS;IAClC,aAAa,GAAG,OAAO,OAAO;IAC9B,aAAa,GAAG,wBAAwB,GAAG,sBAAsB;IACjE,aAAa,GAAG,gBAAgB,GAAG,cAAc;IACjD,aAAa,GAAG,UAAU,UAAU;IACnC,GAAG,MAAM;IACV,aAAa,GAAG,OAAO,OAAO;IAC9B,GAAG;IACH,iBAAiB,GAAG,cAAc,CAAA,CAAG;;AAGzC,MAAI,KAAK;AACL,WAAO,KAAK,aAAa,IAAI,SAAS,SAAS,CAAC;AAChD,WAAO,KAAK,UAAU,IAAI,CAAC,CAAC;AAC5B,WAAO,KAAK,UAAU,IAAI,CAAC,CAAC;;AAGhC,SAAO,OAAO,CAAE,QAAQ,UAAU,MAAM,CAAC,CAAC;AAC9C;AAEA,SAAS,cAAcA,OAAgB;AACnC,QAAM,SAAc,UAAU,SAASA,KAAI,EAAE,MAAM,CAAC,CAAC;AAErD,iBAAe,MAAM,QAAQ,MAAM,MAAM,OAAO,WAAW,KAAK,OAAO,WAAW,KAC9E,+CAA+C,QAAQ,QAAQA,KAAI,CAAC;AAExE,QAAM,KAAsB;IACxB,MAAY;IACZ,SAAY,WAAW,OAAO,CAAC,GAAG,SAAS;IAC3C,OAAY,aAAa,OAAO,CAAC,GAAG,OAAO;IAC3C,UAAY,WAAW,OAAO,CAAC,GAAG,UAAU;IAC5C,UAAY,WAAW,OAAO,CAAC,GAAG,UAAU;IAC5C,IAAY,cAAc,OAAO,CAAC,CAAC;IACnC,OAAY,WAAW,OAAO,CAAC,GAAG,OAAO;IACzC,MAAY,QAAQ,OAAO,CAAC,CAAC;IAC7B,YAAY,iBAAiB,OAAO,CAAC,GAAG,YAAY;;AAIxD,MAAI,OAAO,WAAW,GAAG;AAAE,WAAO;;AAIlC,qBAAmB,IAAI,OAAO,MAAM,CAAC,CAAC;AAEtC,SAAO;AACX;AAEA,SAAS,kBAAkB,IAAiB,KAAqB;AAC7D,QAAM,SAAc;IAChB,aAAa,GAAG,SAAS,SAAS;IAClC,aAAa,GAAG,OAAO,OAAO;IAC9B,aAAa,GAAG,YAAY,GAAG,UAAU;IACzC,aAAa,GAAG,UAAU,UAAU;IACnC,GAAG,MAAM;IACV,aAAa,GAAG,OAAO,OAAO;IAC9B,GAAG;IACH,iBAAiB,GAAG,cAAc,CAAA,CAAG;;AAGzC,MAAI,KAAK;AACL,WAAO,KAAK,aAAa,IAAI,SAAS,eAAe,CAAC;AACtD,WAAO,KAAK,UAAU,IAAI,CAAC,CAAC;AAC5B,WAAO,KAAK,UAAU,IAAI,CAAC,CAAC;;AAGhC,SAAO,OAAO,CAAE,QAAQ,UAAU,MAAM,CAAC,CAAC;AAC9C;AAEA,SAAS,cAAcA,OAAgB;AACnC,MAAI,SAAc,UAAU,SAASA,KAAI,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAI,WAAW;AAEf,MAAI,QAA4B;AAGhC,MAAI,OAAO,WAAW,KAAK,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AACjD,eAAW;AACX,UAAM,SAAS,OAAO,CAAC,GAAG,WAAW,OAAO,CAAC,GAAG,UAAU,OAAO,CAAC;AAClE,mBAAe,MAAM,QAAQ,MAAM,GAAG,8CAA8C,aAAa,MAAM;AACvG,mBAAe,MAAM,QAAQ,QAAQ,GAAG,oDAAoD,aAAa,QAAQ;AACjH,mBAAe,MAAM,QAAQ,OAAO,GAAG,+CAA+C,aAAa,OAAO;AAC1G,mBAAe,OAAO,WAAW,SAAS,QAAQ,6DAA6D,UAAU,MAAM;AAC/H,mBAAe,OAAO,WAAW,QAAQ,QAAQ,wDAAwD,UAAU,MAAM;AAEzH,YAAQ,CAAA;AACR,aAAS,IAAI,GAAG,IAAI,OAAO,CAAC,EAAE,QAAQ,KAAK;AACvC,YAAM,KAAK;QACP,MAAM,OAAO,CAAC;QACd,YAAY,SAAS,CAAC;QACtB,OAAO,QAAQ,CAAC;OACnB;;AAGL,aAAS,OAAO,CAAC;;AAGrB,iBAAe,MAAM,QAAQ,MAAM,MAAM,OAAO,WAAW,MAAM,OAAO,WAAW,KAC/E,6CAA8C,QAAS,IAAI,QAAQ,QAAQA,KAAI,CAAC;AAEpF,QAAM,KAAsB;IACxB,MAAuB;IACvB,SAAuB,WAAW,OAAO,CAAC,GAAG,SAAS;IACtD,OAAuB,aAAa,OAAO,CAAC,GAAG,OAAO;IACtD,sBAAuB,WAAW,OAAO,CAAC,GAAG,sBAAsB;IACnE,cAAuB,WAAW,OAAO,CAAC,GAAG,cAAc;IAC3D,UAAuB;IACvB,UAAuB,WAAW,OAAO,CAAC,GAAG,UAAU;IACvD,IAAuB,cAAc,OAAO,CAAC,CAAC;IAC9C,OAAuB,WAAW,OAAO,CAAC,GAAG,OAAO;IACpD,MAAuB,QAAQ,OAAO,CAAC,CAAC;IACxC,YAAuB,iBAAiB,OAAO,CAAC,GAAG,YAAY;IAC/D,kBAAuB,WAAW,OAAO,CAAC,GAAG,kBAAkB;IAC/D,qBAAuB,OAAO,EAAE;;AAGpC,MAAI,OAAO;AAAE,OAAG,QAAQ;;AAExB,iBAAe,GAAG,MAAM,MAAM,yCAA0C,QAAS,IAAI,QAAQA,KAAI;AAEjG,iBAAe,MAAM,QAAQ,GAAG,mBAAmB,GAAG,iDAAiD,QAAQA,KAAI;AACnH,WAAS,IAAI,GAAG,IAAI,GAAG,oBAAoB,QAAQ,KAAK;AACpD,mBAAe,YAAY,GAAG,oBAAoB,CAAC,GAAG,EAAE,GAAG,sCAAuC,CAAE,uBAAuB,QAAQA,KAAI;;AAI3I,MAAI,OAAO,WAAW,IAAI;AAAE,WAAO;;AAMnC,qBAAmB,IAAI,OAAO,MAAM,EAAE,CAAC;AAEvC,SAAO;AACX;AAEA,SAAS,kBAAkB,IAAiB,KAAuB,OAAyB;AACxF,QAAM,SAAqB;IACvB,aAAa,GAAG,SAAS,SAAS;IAClC,aAAa,GAAG,OAAO,OAAO;IAC9B,aAAa,GAAG,wBAAwB,GAAG,sBAAsB;IACjE,aAAa,GAAG,gBAAgB,GAAG,cAAc;IACjD,aAAa,GAAG,UAAU,UAAU;IACnC,GAAG,MAAM;IACV,aAAa,GAAG,OAAO,OAAO;IAC9B,GAAG;IACH,iBAAiB,GAAG,cAAc,CAAA,CAAG;IACrC,aAAa,GAAG,oBAAoB,GAAG,kBAAkB;IACzD,aAAa,GAAG,uBAAuB,CAAA,GAAK,qBAAqB;;AAGrE,MAAI,KAAK;AACL,WAAO,KAAK,aAAa,IAAI,SAAS,SAAS,CAAC;AAChD,WAAO,KAAK,UAAU,IAAI,CAAC,CAAC;AAC5B,WAAO,KAAK,UAAU,IAAI,CAAC,CAAC;AAG5B,QAAI,OAAO;AACP,aAAO,OAAO;QACV;QACA,UAAU;UACN;UACA,MAAM,IAAI,CAACC,OAAMA,GAAE,IAAI;UACvB,MAAM,IAAI,CAACA,OAAMA,GAAE,UAAU;UAC7B,MAAM,IAAI,CAACA,OAAMA,GAAE,KAAK;SAC3B;OACJ;;;AAKT,SAAO,OAAO,CAAE,QAAQ,UAAU,MAAM,CAAC,CAAC;AAC9C;AAniBA,gBAAAC,QAAA;AAkjBM,IAAO,eAAP,MAAO,aAAW;;;;EAoTpB,cAAA;AApTE;AACF;AACA;AACA,uBAAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAqSI,uBAAK,OAAQ;AACb,uBAAK,KAAM;AACX,uBAAK,QAAS;AACd,uBAAK,WAAYX;AACjB,uBAAK,WAAY;AACjB,uBAAK,uBAAwB;AAC7B,uBAAK,eAAgB;AACrB,uBAAKW,QAAQ;AACb,uBAAK,QAASX;AACd,uBAAK,UAAWA;AAChB,uBAAK,MAAO;AACZ,uBAAK,aAAc;AACnB,uBAAK,mBAAoB;AACzB,uBAAK,sBAAuB;AAC5B,uBAAK,QAAS;AACd,uBAAK,MAAO;EAChB;;;;;;;EA7SA,IAAI,OAAI;AAAoB,WAAO,mBAAK;EAAO;EAC/C,IAAI,KAAK,OAA6B;AAClC,YAAQ,OAAO;MACX,KAAK;AACD,2BAAK,OAAQ;AACb;MACJ,KAAK;MAAG,KAAK;AACT,2BAAK,OAAQ;AACb;MACJ,KAAK;MAAG,KAAK;MAAU,KAAK;AACxB,2BAAK,OAAQ;AACb;MACJ,KAAK;MAAG,KAAK;MAAU,KAAK;AACxB,2BAAK,OAAQ;AACb;MACJ,KAAK;MAAG,KAAK;MAAU,KAAK;AACxB,2BAAK,OAAQ;AACb;MACJ;AACI,uBAAe,OAAO,gCAAgC,QAAQ,KAAK;;EAE/E;;;;EAKA,IAAI,WAAQ;AACR,YAAQ,KAAK,MAAM;MACf,KAAK;AAAG,eAAO;MACf,KAAK;AAAG,eAAO;MACf,KAAK;AAAG,eAAO;MACf,KAAK;AAAG,eAAO;;AAGnB,WAAO;EACX;;;;;EAMA,IAAI,KAAE;AACF,UAAM,QAAQ,mBAAK;AACnB,QAAI,SAAS,QAAQ,KAAK,SAAS,GAAG;AAAE,aAAO;;AAC/C,WAAO;EACX;EACA,IAAI,GAAG,OAAoB;AACvB,uBAAK,KAAO,SAAS,OAAQ,OAAM,WAAW,KAAK;EACvD;;;;EAKA,IAAI,QAAK;AAAa,WAAO,mBAAK;EAAQ;EAC1C,IAAI,MAAM,OAAmB;AAAI,uBAAK,QAAS,UAAU,OAAO,OAAO;EAAG;;;;EAK1E,IAAI,WAAQ;AAAa,WAAO,mBAAK;EAAW;EAChD,IAAI,SAAS,OAAmB;AAAI,uBAAK,WAAY,UAAU,KAAK;EAAG;;;;;;;EAQvE,IAAI,WAAQ;AACR,UAAM,QAAQ,mBAAK;AACnB,QAAI,SAAS,SAAS,KAAK,SAAS,KAAK,KAAK,SAAS,IAAI;AAAE,aAAOA;;AACpE,WAAO;EACX;EACA,IAAI,SAAS,OAA0B;AACnC,uBAAK,WAAa,SAAS,OAAQ,OAAM,UAAU,OAAO,UAAU;EACxE;;;;;EAMA,IAAI,uBAAoB;AACpB,UAAM,QAAQ,mBAAK;AACnB,QAAI,SAAS,MAAM;AACf,UAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG;AAAE,eAAOA;;AACjD,aAAO;;AAEX,WAAO;EACX;EACA,IAAI,qBAAqB,OAA0B;AAC/C,uBAAK,uBAAyB,SAAS,OAAQ,OAAM,UAAU,OAAO,sBAAsB;EAChG;;;;;EAMA,IAAI,eAAY;AACZ,UAAM,QAAQ,mBAAK;AACnB,QAAI,SAAS,MAAM;AACf,UAAI,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG;AAAE,eAAOA;;AACjD,aAAO;;AAEX,WAAO;EACX;EACA,IAAI,aAAa,OAA0B;AACvC,uBAAK,eAAiB,SAAS,OAAQ,OAAM,UAAU,OAAO,cAAc;EAChF;;;;;EAMA,IAAI,OAAI;AAAa,WAAO,mBAAKW;EAAO;EACxC,IAAI,KAAK,OAAgB;AAAI,uBAAKA,QAAQ,QAAQ,KAAK;EAAG;;;;EAK1D,IAAI,QAAK;AAAa,WAAO,mBAAK;EAAQ;EAC1C,IAAI,MAAM,OAAmB;AACzB,uBAAK,QAAS,UAAU,OAAO,OAAO;EAC1C;;;;EAKA,IAAI,UAAO;AAAa,WAAO,mBAAK;EAAU;EAC9C,IAAI,QAAQ,OAAmB;AAAI,uBAAK,UAAW,UAAU,KAAK;EAAG;;;;EAKrE,IAAI,YAAS;AAAuB,WAAO,mBAAK,SAAQ;EAAM;EAC9D,IAAI,UAAU,OAA2B;AACrC,uBAAK,MAAQ,SAAS,OAAQ,OAAM,UAAU,KAAK,KAAK;EAC5D;;;;;;;EAQA,IAAI,aAAU;AACV,UAAM,QAAQ,mBAAK,gBAAe;AAClC,QAAI,SAAS,MAAM;AACf,UAAI,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,KAAK,SAAS,GAAG;AAGvD,eAAO,CAAA;;AAEX,aAAO;;AAEX,WAAO;EACX;EACA,IAAI,WAAW,OAA2B;AACtC,uBAAK,aAAe,SAAS,OAAQ,OAAM,cAAc,KAAK;EAClE;;;;EAKA,IAAI,mBAAgB;AAChB,UAAM,QAAQ,mBAAK;AACnB,QAAI,SAAS,QAAQ,KAAK,SAAS,GAAG;AAAE,aAAOX;;AAC/C,WAAO;EACX;EACA,IAAI,iBAAiB,OAA0B;AAC3C,uBAAK,mBAAqB,SAAS,OAAQ,OAAM,UAAU,OAAO,kBAAkB;EACxF;;;;EAKA,IAAI,sBAAmB;AAGnB,QAAI,QAAQ,mBAAK;AACjB,QAAI,SAAS,QAAQ,KAAK,SAAS,GAAG;AAAE,aAAO,CAAA;;AAC/C,WAAO;EACX;EACA,IAAI,oBAAoB,OAA2B;AAC/C,QAAI,SAAS,MAAM;AACf,qBAAe,MAAM,QAAQ,KAAK,GAAG,wCAAwC,SAAS,KAAK;AAC3F,cAAQ,MAAM,MAAK;AACnB,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,uBAAe,YAAY,MAAM,CAAC,GAAG,EAAE,GAAG,6BAA6B,SAAU,CAAE,KAAK,MAAM,CAAC,CAAC;;;AAGxG,uBAAK,sBAAuB;EAChC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BA,IAAI,QAAK;AACL,QAAI,mBAAK,WAAU,MAAM;AAAE,aAAO;;AAClC,WAAO,mBAAK,QAAO,IAAI,CAACU,OAAM,OAAO,OAAO,CAAA,GAAKA,EAAC,CAAC;EACvD;EACA,IAAI,MAAME,SAA8B;AACpC,QAAIA,WAAU,MAAM;AAChB,yBAAK,QAAS;AACd;;AAGJ,UAAM,QAAqB,CAAA;AAC3B,UAAM,kBAAiC,CAAA;AACvC,aAAS,IAAI,GAAG,IAAIA,QAAO,QAAQ,KAAK;AACpC,YAAM,OAAOA,QAAO,CAAC;AAErB,UAAI,YAAY,IAAI,GAAG;AACnB,eAAO,mBAAK,OAAM,4CAA4C,yBAAyB;UACnF,WAAW;SACd;AAED,YAAIH,QAAO,SAAS,IAAI;AACxB,uBAAeA,MAAK,UAAU,WAAW,qBAAqB,SAAU,CAAE,KAAK,IAAI;AAGnF,YAAIA,MAAK,WAAW,WAAW;AAC3B,gBAAM,SAAS,IAAI,WAAW,SAAS;AACvC,iBAAO,IAAIA,KAAI;AACf,UAAAA,QAAO;;AAGX,cAAM,SAAS,mBAAK,MAAK,oBAAoBA,KAAI;AACjD,cAAM,QAAQ,QAAQ,mBAAK,MAAK,oBAAoBA,OAAM,MAAM,CAAC;AAEjE,cAAM,KAAK;UACP,MAAM,QAAQA,KAAI;UAClB,YAAY,QAAQ,MAAM;UAC1B;SACH;AACD,wBAAgB,KAAK,iBAAiB,GAAG,MAAM,CAAC;aAE7C;AACH,cAAM,SAAS,QAAQ,KAAK,UAAU;AACtC,cAAM,KAAK;UACP,MAAM,QAAQ,KAAK,IAAI;UACvB,YAAY;UACZ,OAAO,QAAQ,KAAK,KAAK;SAC5B;AACD,wBAAgB,KAAK,iBAAiB,GAAG,MAAM,CAAC;;;AAIxD,uBAAK,QAAS;AACd,uBAAK,sBAAuB;EAChC;EAEA,IAAI,MAAG;AAAwB,WAAO,mBAAK;EAAM;EACjD,IAAI,IAAI,KAAsB;AAC1B,uBAAK,MAAO;EAChB;;;;EA2BA,IAAI,OAAI;AACJ,QAAI,KAAK,aAAa,MAAM;AAAE,aAAO;;AACrC,WAAO,UAAU,sBAAK,0CAAL,WAAoB,MAAM,MAAM;EACrD;;;;;;;EAQA,IAAI,eAAY;AACZ,WAAO,UAAU,KAAK,kBAAkB;EAC5C;;;;EAKA,IAAI,OAAI;AACJ,QAAI,KAAK,aAAa,MAAM;AAAE,aAAO;;AACrC,WAAO,eAAe,KAAK,cAAc,KAAK,SAAS;EAC3D;;;;EAKA,IAAI,gBAAa;AACb,QAAI,KAAK,aAAa,MAAM;AAAE,aAAO;;AACrC,WAAO,WAAW,iBAAiB,KAAK,cAAc,KAAK,SAAS;EACxE;;;;;;;EAQA,WAAQ;AACJ,WAAO,KAAK,aAAa;EAC7B;;;;;;;EA0BA,IAAI,aAAU;AACV,WAAO,sBAAK,0CAAL,WAAoB,MAAM;EACrC;;;;;;;EAQA,IAAI,qBAAkB;AAClB,WAAO,sBAAK,0CAAL,WAAoB,OAAO;EACtC;;;;;EAMA,YAAS;AACL,UAAM,QAAQ,KAAK,WAAU;AAG7B,QAAI,MAAM,QAAQ,CAAC,KAAK,GAAG;AAAE,aAAO;;AAGpC,WAAgB,MAAM,IAAG;EAC7B;;;;;EAMA,aAAU;AAGN,UAAM,cAAc,KAAK,YAAY;AACrC,UAAM,SAAU,KAAK,gBAAgB,QAAQ,KAAK,wBAAwB;AAC1E,UAAM,gBAAiB,KAAK,cAAc;AAC1C,UAAM,UAAW,mBAAK,sBAAqB,QAAQ,mBAAK;AAMxD,QAAI,KAAK,gBAAgB,QAAQ,KAAK,wBAAwB,MAAM;AAChE,aAAO,KAAK,gBAAgB,KAAK,sBAAsB,0CAA0C,YAAY,EAAE,OAAO,KAAI,CAAE;;AAOhI,WAAO,CAAC,UAAW,KAAK,SAAS,KAAK,KAAK,SAAS,GAAI,qEAAqE,YAAY,EAAE,OAAO,KAAI,CAAE;AACxJ,WAAO,KAAK,SAAS,KAAK,CAAC,eAAe,6CAA6C,YAAY,EAAE,OAAO,KAAI,CAAE;AAElH,UAAM,QAAuB,CAAA;AAG7B,QAAI,KAAK,QAAQ,MAAM;AACnB,YAAM,KAAK,KAAK,IAAI;WAEjB;AACH,UAAI,QAAQ;AACR,cAAM,KAAK,CAAC;iBACL,aAAa;AACpB,cAAM,KAAK,CAAC;AACZ,YAAI,CAAC,eAAe;AAAE,gBAAM,KAAK,CAAC;;iBAC3B,eAAe;AACtB,cAAM,KAAK,CAAC;AACZ,cAAM,KAAK,CAAC;iBACL,WAAW,KAAK,IAAI;AAC3B,cAAM,KAAK,CAAC;aACT;AACH,cAAM,KAAK,CAAC;AACZ,cAAM,KAAK,CAAC;AACZ,cAAM,KAAK,CAAC;AACZ,cAAM,KAAK,CAAC;;;AAIpB,UAAM,KAAI;AAEV,WAAO;EACX;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;EAKA,QAAK;AACD,WAAO,aAAY,KAAK,IAAI;EAChC;;;;EAKA,SAAM;AACF,UAAM,IAAI,CAAC,MAAoB;AAC3B,UAAI,KAAK,MAAM;AAAE,eAAO;;AACxB,aAAO,EAAE,SAAQ;IACrB;AAEA,WAAO;MACH,MAAM,KAAK;MACX,IAAI,KAAK;;MAET,MAAM,KAAK;MACX,OAAO,KAAK;MACZ,UAAU,EAAE,KAAK,QAAQ;MACzB,UAAU,EAAE,KAAK,QAAQ;MACzB,sBAAsB,EAAE,KAAK,oBAAoB;MACjD,cAAc,EAAE,KAAK,YAAY;MACjC,OAAO,EAAE,KAAK,KAAK;MACnB,SAAS,EAAE,KAAK,OAAO;MACvB,KAAK,KAAK,YAAY,KAAK,UAAU,OAAM,IAAI;MAC/C,YAAY,KAAK;;EAEzB;;;;;EAMA,OAAO,KAAK,IAAqC;AAC7C,QAAI,MAAM,MAAM;AAAE,aAAO,IAAI,aAAW;;AAExC,QAAI,OAAO,OAAQ,UAAU;AACzB,YAAM,UAAU,SAAS,EAAE;AAE3B,UAAI,QAAQ,CAAC,KAAK,KAAM;AACpB,eAAO,aAAY,KAAK,aAAa,OAAO,CAAC;;AAGjD,cAAO,QAAQ,CAAC,GAAG;QACf,KAAK;AAAG,iBAAO,aAAY,KAAK,cAAc,OAAO,CAAC;QACtD,KAAK;AAAG,iBAAO,aAAY,KAAK,cAAc,OAAO,CAAC;QACtD,KAAK;AAAG,iBAAO,aAAY,KAAK,cAAc,OAAO,CAAC;;AAE1D,aAAO,OAAO,gCAAgC,yBAAyB,EAAE,WAAW,OAAM,CAAE;;AAGhG,UAAM,SAAS,IAAI,aAAW;AAC9B,QAAI,GAAG,QAAQ,MAAM;AAAE,aAAO,OAAO,GAAG;;AACxC,QAAI,GAAG,MAAM,MAAM;AAAE,aAAO,KAAK,GAAG;;AACpC,QAAI,GAAG,SAAS,MAAM;AAAE,aAAO,QAAQ,GAAG;;AAC1C,QAAI,GAAG,YAAY,MAAM;AAAE,aAAO,WAAW,GAAG;;AAChD,QAAI,GAAG,YAAY,MAAM;AAAE,aAAO,WAAW,GAAG;;AAChD,QAAI,GAAG,wBAAwB,MAAM;AAAE,aAAO,uBAAuB,GAAG;;AACxE,QAAI,GAAG,gBAAgB,MAAM;AAAE,aAAO,eAAe,GAAG;;AACxD,QAAI,GAAG,oBAAoB,MAAM;AAAE,aAAO,mBAAmB,GAAG;;AAChE,QAAI,GAAG,QAAQ,MAAM;AAAE,aAAO,OAAO,GAAG;;AACxC,QAAI,GAAG,SAAS,MAAM;AAAE,aAAO,QAAQ,GAAG;;AAC1C,QAAI,GAAG,WAAW,MAAM;AAAE,aAAO,UAAU,GAAG;;AAC9C,QAAI,GAAG,aAAa,MAAM;AAAE,aAAO,YAAY,UAAU,KAAK,GAAG,SAAS;;AAC1E,QAAI,GAAG,cAAc,MAAM;AAAE,aAAO,aAAa,GAAG;;AAGpD,QAAI,GAAG,uBAAuB,MAAM;AAAE,aAAO,sBAAsB,GAAG;;AAItE,QAAI,GAAG,OAAO,MAAM;AAAE,aAAO,MAAM,GAAG;;AACtC,QAAI,GAAG,SAAS,MAAM;AAAE,aAAO,QAAQ,GAAG;;AAE1C,QAAI,GAAG,QAAQ,MAAM;AACjB,qBAAe,OAAO,SAAQ,GAAI,8CAA8C,MAAM,EAAE;AACxF,qBAAe,OAAO,SAAS,GAAG,MAAM,iBAAiB,MAAM,EAAE;;AAGrE,QAAI,GAAG,QAAQ,MAAM;AACjB,qBAAe,OAAO,SAAQ,GAAI,8CAA8C,MAAM,EAAE;AACxF,qBAAe,OAAO,KAAK,YAAW,OAAQ,GAAG,QAAQ,IAAI,YAAW,GAAI,iBAAiB,MAAM,EAAE;;AAGzG,WAAO;EACX;;AApmBA;AACA;AACAE,SAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAhBE;AAmXF,mBAAc,SAACE,SAAiB,SAAgB;AAC5C,SAAO,CAACA,WAAU,KAAK,aAAa,MAAM,8EAA8E,yBAAyB,EAAE,WAAW,cAAa,CAAC;AAE5K,QAAM,MAAMA,UAAS,KAAK,YAAW;AACrC,UAAQ,KAAK,UAAS,GAAI;IACtB,KAAK;AACD,aAAO,iBAAiB,MAAM,GAAG;IACrC,KAAK;AACD,aAAO,kBAAkB,MAAM,GAAG;IACtC,KAAK;AACD,aAAO,kBAAkB,MAAM,GAAG;IACtC,KAAK;AACD,aAAO,kBAAkB,MAAM,KAAK,UAAU,KAAK,QAAO,IAAI;;AAGtE,SAAO,OAAO,gCAAgC,yBAAyB,EAAE,WAAW,cAAa,CAAE;AACvG;AAnYE,IAAO,cAAP;;;ACjhBA,SAAU,YAAY,SAA4B;AACpD,MAAI,OAAO,YAAa,UAAU;AAAE,cAAU,YAAY,OAAO;;AACjE,SAAO,UAAU,OAAO;IACpB,YAAY,aAAa;IACzB,YAAY,OAAO,QAAQ,MAAM,CAAC;IAClC;GACH,CAAC;AACN;AAMM,SAAU,cAAc,SAA8B,KAAkB;AAC1E,QAAM,SAAS,YAAY,OAAO;AAClC,SAAO,eAAe,QAAQ,GAAG;AACrC;;;ACxCA,IAAM,aAAa,IAAI,OAAO,iBAAiB;AAC/C,IAAM,cAAc,IAAI,OAAO,mBAAmB;AAClD,IAAM,aAAa,IAAI,OAAO,sBAAsB;AAGpD,SAAS,MAAM,MAAc,OAAY,SAAiB;AACtD,UAAO,MAAM;IACT,KAAK;AACD,UAAI,SAAS;AAAE,eAAO,SAAS,aAAa,OAAO,EAAE,CAAC;;AACtD,aAAO,SAAS,WAAW,KAAK,CAAC;IACrC,KAAK;AACD,aAAO,YAAY,KAAK;IAC5B,KAAK;AACD,aAAO,SAAS,KAAK;IACzB,KAAK;AACD,cAAS,CAAC,CAAC,QAAQ,SAAQ;AAC3B,UAAI,SAAS;AAAE,eAAO,SAAS,aAAa,OAAO,EAAE,CAAC;;AACtD,aAAO,SAAS,KAAK;;AAG7B,MAAI,QAAS,KAAK,MAAM,WAAW;AACnC,MAAI,OAAO;AACP,QAAIC,UAAU,MAAM,CAAC,MAAM;AAC3B,QAAI,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK;AAErC,oBAAgB,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,OAAO,IAAI,MAAO,OAAO,MAAM,KAAM,SAAS,KAAK,QAAQ,KAAK,uBAAuB,QAAQ,IAAI;AAE7I,QAAI,SAAS;AAAE,aAAO;;AAEtB,QAAIA,SAAQ;AAAE,cAAQ,OAAO,OAAO,IAAI;;AAExC,WAAO,SAAS,aAAa,UAAU,KAAK,GAAG,OAAO,CAAC,CAAC;;AAG5D,UAAQ,KAAK,MAAM,UAAU;AAC7B,MAAI,OAAO;AACP,UAAM,OAAO,SAAS,MAAM,CAAC,CAAC;AAE9B,mBAAe,OAAO,IAAI,MAAM,MAAM,CAAC,KAAK,SAAS,KAAK,QAAQ,IAAI,sBAAsB,QAAQ,IAAI;AACxG,mBAAe,WAAW,KAAK,MAAM,MAAM,qBAAsB,IAAK,IAAI,SAAS,KAAK;AAExF,QAAI,SAAS;AAAE,aAAO,SAAS,aAAa,OAAO,EAAE,CAAC;;AACtD,WAAO;;AAGX,UAAQ,KAAK,MAAM,UAAU;AAC7B,MAAI,SAAS,MAAM,QAAQ,KAAK,GAAG;AAC/B,UAAM,WAAW,MAAM,CAAC;AACxB,UAAM,QAAQ,SAAS,MAAM,CAAC,KAAK,OAAO,MAAM,MAAM,CAAC;AACvD,mBAAe,UAAU,MAAM,QAAQ,4BAA6B,IAAK,IAAI,SAAS,KAAK;AAE3F,UAAM,SAA4B,CAAA;AAClC,UAAM,QAAQ,SAASC,QAAK;AACxB,aAAO,KAAK,MAAM,UAAUA,QAAO,IAAI,CAAC;IAC5C,CAAC;AACD,WAAO,SAAS,OAAO,MAAM,CAAC;;AAGlC,iBAAe,OAAO,gBAAgB,QAAQ,IAAI;AACtD;AAaM,SAAU,eAAe,OAA8B,QAA0B;AACnF,iBAAe,MAAM,WAAW,OAAO,QAAQ,sDAAsD,UAAU,MAAM;AAErH,QAAM,QAA2B,CAAA;AACjC,QAAM,QAAQ,SAAS,MAAM,OAAK;AAC9B,UAAM,KAAK,MAAM,MAAM,OAAO,KAAK,CAAC,CAAC;EACzC,CAAC;AACD,SAAO,QAAQ,OAAO,KAAK,CAAC;AAChC;AAWM,SAAU,wBAAwB,OAA8B,QAA0B;AAC5F,SAAO,UAAW,eAAe,OAAO,MAAM,CAAC;AACnD;AAWM,SAAU,qBAAqB,OAA8B,QAA0B;AACzF,SAAOC,QAAQ,eAAe,OAAO,MAAM,CAAC;AAChD;;;ACrGA,IAAM,UAAU,IAAI,WAAW,EAAE;AACjC,QAAQ,KAAK,CAAC;AAEd,IAAM,QAAQ,OAAO,EAAE;AACvB,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAMC,QAAO,OAAO,CAAC;AACrB,IAAMC,kBAAiB,OAAO,oEAAoE;AAiDlG,SAAS,YAAY,OAAgB;AACjC,QAAMC,SAAQ,SAAS,KAAK;AAC5B,QAAM,YAAYA,OAAM,SAAS;AACjC,MAAI,WAAW;AACX,WAAO,OAAO,CAAEA,QAAO,QAAQ,MAAM,SAAS,CAAC,CAAE;;AAErD,SAAO,QAAQA,MAAK;AACxB;AAEA,IAAM,UAAU,QAAQC,OAAM,EAAE;AAChC,IAAM,WAAW,QAAQC,OAAM,EAAE;AAEjC,IAAM,mBAA2C;EAC7C,MAAM;EACN,SAAS;EACT,SAAS;EACT,mBAAmB;EACnB,MAAM;;AAGV,IAAM,mBAAkC;EACpC;EAAQ;EAAW;EAAW;EAAqB;;AAGvD,SAAS,YAAY,KAAW;AAC5B,SAAO,SAAU,OAAU;AACvB,mBAAe,OAAO,UAAW,UAAU,4BAA6B,KAAK,UAAU,GAAG,CAAE,IAAI,UAAW,GAAI,IAAI,KAAK;AACxH,WAAO;EACX;AACJ;AAEA,IAAM,eAAoD;EACtD,MAAM,YAAY,MAAM;EACxB,SAAS,YAAY,SAAS;EAC9B,SAAS,SAASC,SAAW;AACzB,UAAM,QAAQ,UAAUA,SAAQ,gBAAgB;AAChD,mBAAe,SAAS,GAAG,oBAAoB,kBAAkBA,OAAM;AACvE,QAAI,OAAO,cAAc,KAAK,GAAG;AAAE,aAAO,OAAO,KAAK;;AACtD,WAAO,WAAW,KAAK;EAC3B;EACA,mBAAmB,SAAS,OAAU;AAClC,QAAI;AACA,aAAO,WAAW,KAAK,EAAE,YAAW;aAC/B,OAAO;IAAA;AAChB,mBAAe,OAAO,4CAA4C,4BAA4B,KAAK;EACvG;EACA,MAAM,SAAS,OAAU;AACrB,UAAMH,SAAQ,SAAS,OAAO,aAAa;AAC3C,mBAAeA,OAAM,WAAW,IAAI,+BAA+B,eAAe,KAAK;AACvF,WAAO,QAAQA,MAAK;EACxB;;AAGJ,SAAS,eAAe,MAAY;AAEhC;AACI,UAAM,QAAQ,KAAK,MAAM,gBAAgB;AACzC,QAAI,OAAO;AACP,YAAMI,UAAU,MAAM,CAAC,MAAM;AAE7B,YAAM,QAAQ,SAAS,MAAM,CAAC,CAAC;AAC/B,qBAAe,QAAQ,MAAM,KAAK,UAAU,KAAK,SAAS,OAAO,MAAM,CAAC,MAAM,OAAO,KAAK,GAAG,yBAAyB,QAAQ,IAAI;AAElI,YAAM,cAAc,KAAKC,iBAAgBD,UAAU,QAAQ,IAAI,KAAK;AACpE,YAAM,cAAcA,WAAW,cAAcH,SAAQ,QAAQC;AAE7D,aAAO,SAASC,SAAoB;AAChC,cAAM,QAAQ,UAAUA,SAAQ,OAAO;AAEvC,uBAAe,SAAS,eAAe,SAAS,aAAa,2BAA4B,IAAK,IAAI,SAAS,KAAK;AAEhH,eAAO,QAAQC,UAAS,OAAO,OAAO,GAAG,IAAG,OAAO,EAAE;MACzD;;;AAKR;AACI,UAAM,QAAQ,KAAK,MAAM,cAAc;AACvC,QAAI,OAAO;AACP,YAAM,QAAQ,SAAS,MAAM,CAAC,CAAC;AAC/B,qBAAe,UAAU,KAAK,SAAS,MAAM,MAAM,CAAC,MAAM,OAAO,KAAK,GAAG,uBAAuB,QAAQ,IAAI;AAE5G,aAAO,SAAS,OAAgB;AAC5B,cAAMJ,SAAQ,SAAS,KAAK;AAC5B,uBAAeA,OAAM,WAAW,OAAO,sBAAuB,IAAK,IAAI,SAAS,KAAK;AACrF,eAAO,YAAY,KAAK;MAC5B;;;AAIR,UAAQ,MAAM;IACV,KAAK;AAAW,aAAO,SAAS,OAAa;AACzC,eAAO,aAAa,WAAW,KAAK,GAAG,EAAE;MAC7C;IACA,KAAK;AAAQ,aAAO,SAAS,OAAc;AACvC,eAAS,CAAC,QAAS,WAAU;MACjC;IACA,KAAK;AAAS,aAAO,SAAS,OAAgB;AAC1C,eAAO,UAAU,KAAK;MAC1B;IACA,KAAK;AAAU,aAAO,SAAS,OAAa;AACxC,eAAO,GAAG,KAAK;MACnB;;AAGJ,SAAO;AACX;AAEA,SAAS,WAAW,MAAc,QAA6B;AAC3D,SAAO,GAAI,IAAK,IAAK,OAAO,IAAI,CAAC,EAAE,MAAAM,OAAM,KAAI,MAAQ,OAAO,MAAMA,KAAK,EAAE,KAAK,GAAG,CAAE;AACvF;AAcA,SAAS,WAAW,MAAY;AAC5B,QAAM,QAAQ,KAAK,MAAM,6CAA6C;AACtE,MAAI,OAAO;AACP,WAAO;MACH,MAAM,MAAM,CAAC;MACb,OAAQ,MAAM,CAAC,IAAI,MAAM,CAAC;MAC1B,OAAO;QACH,MAAM,MAAM,CAAC;QACb,QAAS,MAAM,CAAC,IAAI,MAAM,CAAC;QAC3B,OAAQ,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,CAAC,IAAG;;;;AAKnD,SAAO,EAAE,MAAM,KAAI;AACvB;AAlNA;AA4NM,IAAO,oBAAP,MAAO,kBAAgB;;;;;;;;EA+BzB,YAAYC,SAA6C;AA/BvD;AASO;;;;;;;;;AAEA;AASA;AAEA;AAUL,uBAAK,YAAa,oBAAI,IAAG;AACzB,uBAAK,eAAgB,oBAAI,IAAG;AAG5B,UAAM,QAAkC,oBAAI,IAAG;AAG/C,UAAM,UAAsC,oBAAI,IAAG;AAGnD,UAAM,WAAqC,oBAAI,IAAG;AAElD,UAAM,QAA+C,CAAA;AACrD,WAAO,KAAKA,OAAM,EAAE,QAAQ,CAAC,SAAQ;AACjC,YAAM,IAAI,IAAIA,QAAO,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,MAAAC,MAAI,MAAM;AAG9C,YAAI,EAAE,MAAM,MAAK,IAAK,WAAWA,KAAI;AACrC,YAAI,SAAS,SAAS,CAACD,QAAO,KAAK,GAAG;AAAE,iBAAO;;AAC/C,YAAI,SAAS,UAAU,CAACA,QAAO,MAAM,GAAG;AAAE,iBAAO;;AAEjD,eAAO,EAAE,MAAM,MAAO,QAAQ,SAAS,IAAI;MAC/C,CAAC;AAED,YAAM,IAAI,MAAM,oBAAI,IAAG,CAAE;AACzB,cAAQ,IAAI,MAAM,CAAA,CAAG;AACrB,eAAS,IAAI,MAAM,oBAAI,IAAG,CAAE;IAChC,CAAC;AACD,uBAAK,QAAS,KAAK,UAAU,KAAK;AAElC,eAAW,QAAQ,OAAO;AACtB,YAAM,cAA2B,oBAAI,IAAG;AAExC,iBAAW,SAAS,MAAM,IAAI,GAAG;AAG7B,uBAAe,CAAC,YAAY,IAAI,MAAM,IAAI,GAAG,2BAA4B,KAAK,UAAU,MAAM,IAAI,CAAE,OAAQ,KAAK,UAAU,IAAI,CAAE,IAAI,SAASA,OAAM;AACpJ,oBAAY,IAAI,MAAM,IAAI;AAG1B,cAAM,WAAW,WAAW,MAAM,IAAI,EAAE;AACxC,uBAAe,aAAa,MAAM,8BAA+B,KAAK,UAAU,QAAQ,CAAE,IAAI,SAASA,OAAM;AAG7G,cAAM,UAAU,eAAe,QAAQ;AACvC,YAAI,SAAS;AAAE;;AAEf,uBAAe,QAAQ,IAAI,QAAQ,GAAG,gBAAiB,KAAK,UAAU,QAAQ,CAAE,IAAI,SAASA,OAAM;AAGlG,gBAAQ,IAAI,QAAQ,EAAoB,KAAK,IAAI;AACjD,cAAM,IAAI,IAAI,EAAkB,IAAI,QAAQ;;;AAKrD,UAAM,eAAe,MAAM,KAAK,QAAQ,KAAI,CAAE,EAAE,OAAO,CAACE,OAAQ,QAAQ,IAAIA,EAAC,EAAoB,WAAW,CAAE;AAC9G,mBAAe,aAAa,WAAW,GAAG,wBAAwB,SAASF,OAAM;AACjF,mBAAe,aAAa,WAAW,GAAG,4CAA6C,aAAa,IAAI,CAAC,MAAO,KAAK,UAAU,CAAC,CAAE,EAAE,KAAK,IAAI,CAAE,IAAI,SAASA,OAAM;AAElK,qBAAmC,MAAM,EAAE,aAAa,aAAa,CAAC,EAAC,CAAE;AAGzE,aAAS,cAAc,MAAc,OAAkB;AACnD,qBAAe,CAAC,MAAM,IAAI,IAAI,GAAG,8BAA+B,KAAK,UAAU,IAAI,CAAE,IAAI,SAASA,OAAM;AAExG,YAAM,IAAI,IAAI;AAEd,iBAAW,SAAU,MAAM,IAAI,IAAI,GAAmB;AAClD,YAAI,CAAC,QAAQ,IAAI,KAAK,GAAG;AAAE;;AAG3B,sBAAc,OAAO,KAAK;AAG1B,mBAAW,WAAW,OAAO;AACxB,mBAAS,IAAI,OAAO,EAAkB,IAAI,KAAK;;;AAIxD,YAAM,OAAO,IAAI;IACrB;AACA,kBAAc,KAAK,aAAa,oBAAI,IAAG,CAAE;AAGzC,eAAW,CAAE,MAAM,GAAG,KAAM,UAAU;AAClC,YAAM,KAAK,MAAM,KAAK,GAAG;AACzB,SAAG,KAAI;AACP,yBAAK,YAAW,IAAI,MAAM,WAAW,MAAM,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;;EAEjH;;;;EA1GA,IAAI,QAAK;AACL,WAAO,KAAK,MAAM,mBAAK,OAAM;EACjC;;;;EA6GA,WAAW,MAAY;AACnB,QAAI,UAAU,mBAAK,eAAc,IAAI,IAAI;AACzC,QAAI,CAAC,SAAS;AACV,gBAAU,sBAAK,4CAAL,WAAiB;AAC3B,yBAAK,eAAc,IAAI,MAAM,OAAO;;AAExC,WAAO;EACX;;;;EAgDA,WAAW,MAAY;AACnB,UAAM,SAAS,mBAAK,YAAW,IAAI,IAAI;AACvC,mBAAe,QAAQ,iBAAkB,KAAK,UAAU,IAAI,CAAE,IAAI,QAAQ,IAAI;AAC9E,WAAO;EACX;;;;EAKA,WAAW,MAAc,OAAU;AAC/B,WAAO,KAAK,WAAW,IAAI,EAAE,KAAK;EACtC;;;;EAKA,WAAW,MAAc,OAA0B;AAC/C,WAAO,UAAU,KAAK,WAAW,MAAM,KAAK,CAAC;EACjD;;;;EAKA,OAAO,OAA0B;AAC7B,WAAO,KAAK,WAAW,KAAK,aAAa,KAAK;EAClD;;;;EAKA,KAAK,OAA0B;AAC3B,WAAO,KAAK,WAAW,KAAK,aAAa,KAAK;EAClD;;;;EAKA,OAAO,MAAc,OAAY,UAA0C;AAEvE;AACI,YAAM,UAAU,eAAe,IAAI;AACnC,UAAI,SAAS;AAAE,eAAO,SAAS,MAAM,KAAK;;;AAI9C,UAAM,QAAQ,WAAW,IAAI,EAAE;AAC/B,QAAI,OAAO;AACP,qBAAe,MAAM,UAAU,MAAM,MAAM,UAAU,MAAM,QAAQ,0CAA2C,MAAM,KAAM,IAAI,SAAS,KAAK;AAC5I,aAAO,MAAM,IAAI,CAAC,MAAW,KAAK,OAAO,MAAM,QAAQ,GAAG,QAAQ,CAAC;;AAIvE,UAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,QAAI,QAAQ;AACR,aAAO,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,MAAAC,MAAI,MAAM;AAC3C,cAAM,IAAI,IAAI,KAAK,OAAOA,OAAM,MAAM,IAAI,GAAG,QAAQ;AACrD,eAAO;MACX,GAAwB,CAAA,CAAE;;AAG9B,mBAAe,OAAO,iBAAkB,IAAK,IAAI,QAAQ,IAAI;EACjE;;;;;;;;EASA,MAAM,OAA4B,UAA0C;AACxE,WAAO,KAAK,OAAO,KAAK,aAAa,OAAO,QAAQ;EACxD;;;;EAKA,OAAO,KAAK,OAA4C;AACpD,WAAO,IAAI,kBAAiB,KAAK;EACrC;;;;EAKA,OAAO,eAAe,OAA4C;AAC9D,WAAO,kBAAiB,KAAK,KAAK,EAAE;EACxC;;;;EAKA,OAAO,WAAW,MAAc,OAA8C,OAA0B;AACpG,WAAO,kBAAiB,KAAK,KAAK,EAAE,WAAW,MAAM,KAAK;EAC9D;;;;EAKA,OAAO,WAAW,QAAuB;AACrC,UAAM,eAAsC,CAAA;AAC5C,eAAW,QAAQ,QAAQ;AACvB,UAA0B,OAAQ,IAAI,KAAK,MAAM;AAAE;;AACnD,YAAM,OAAO,iBAAiB,IAAI;AAClC,qBAAe,MAAM,kCAAmC,KAAK,UAAU,IAAI,CAAE,IAAI,UAAU,MAAM;AACjG,mBAAa,KAAK,EAAE,MAAM,KAAI,CAAE;;AAGpC,iBAAa,KAAK,CAAC,GAAGE,OAAK;AACvB,aAAO,iBAAiB,QAAQ,EAAE,IAAI,IAAI,iBAAiB,QAAQA,GAAE,IAAI;IAC7E,CAAC;AAED,WAAO,kBAAiB,WAAW,gBAAgB,EAAE,cAAc,aAAY,GAAI,MAAM;EAC7F;;;;EAKA,OAAO,OAAO,QAAyB,OAA8C,OAA0B;AAC3G,WAAO,OAAO;MACV;MACA,kBAAiB,WAAW,MAAM;MAClC,kBAAiB,KAAK,KAAK,EAAE,KAAK,KAAK;KAC1C;EACL;;;;EAKA,OAAO,KAAK,QAAyB,OAA8C,OAA0B;AACzG,WAAO,UAAU,kBAAiB,OAAO,QAAQ,OAAO,KAAK,CAAC;EAClE;;;;;;EAOA,aAAa,aAAa,QAAyB,OAA8C,OAA4B,aAA8C;AAEvK,aAAS,OAAO,OAAO,CAAA,GAAK,MAAM;AAGlC,eAAW,OAAO,QAAQ;AACtB,UAA0B,OAAQ,GAAG,KAAK,MAAM;AAC5C,eAA6B,OAAQ,GAAG;;;AAKhD,UAAM,WAAmC,CAAA;AAGzC,QAAI,OAAO,qBAAqB,CAAC,YAAY,OAAO,mBAAmB,EAAE,GAAG;AACxE,eAAS,OAAO,iBAAiB,IAAI;;AAIzC,UAAM,UAAU,kBAAiB,KAAK,KAAK;AAG3C,YAAQ,MAAM,OAAO,CAAC,MAAcC,WAAc;AAC9C,UAAI,SAAS,aAAa,CAAC,YAAYA,QAAO,EAAE,GAAG;AAC/C,iBAASA,MAAK,IAAI;;AAEtB,aAAOA;IACX,CAAC;AAGD,eAAW,QAAQ,UAAU;AACzB,eAAS,IAAI,IAAI,MAAM,YAAY,IAAI;;AAI3C,QAAI,OAAO,qBAAqB,SAAS,OAAO,iBAAiB,GAAG;AAChE,aAAO,oBAAoB,SAAS,OAAO,iBAAiB;;AAIhE,YAAQ,QAAQ,MAAM,OAAO,CAAC,MAAcA,WAAc;AACtD,UAAI,SAAS,aAAa,SAASA,MAAK,GAAG;AAAE,eAAO,SAASA,MAAK;;AAClE,aAAOA;IACX,CAAC;AAED,WAAO,EAAE,QAAQ,MAAK;EAC1B;;;;;EAMA,OAAO,WAAW,QAAyB,OAA8C,OAA0B;AAE/G,sBAAiB,WAAW,MAAM;AAGlC,UAAM,eAAoC,CAAA;AAC1C,UAAM,cAAoD,CAAA;AAE1D,qBAAiB,QAAQ,CAAC,SAAQ;AAC9B,YAAMA,SAAc,OAAQ,IAAI;AAChC,UAAIA,UAAS,MAAM;AAAE;;AACrB,mBAAa,IAAI,IAAI,aAAa,IAAI,EAAEA,MAAK;AAC7C,kBAAY,KAAK,EAAE,MAAM,MAAM,iBAAiB,IAAI,EAAC,CAAE;IAC3D,CAAC;AAED,UAAM,UAAU,kBAAiB,KAAK,KAAK;AAG3C,YAAQ,QAAQ;AAEhB,UAAM,kBAAkB,OAAO,OAAO,CAAA,GAAK,KAAK;AAChD,mBAAe,gBAAgB,gBAAgB,MAAM,4CAA4C,sBAAsB,KAAK;AAE5H,oBAAgB,eAAe;AAG/B,YAAQ,OAAO,KAAK;AAEpB,WAAO;MACH,OAAO;MACP,QAAQ;MACR,aAAa,QAAQ;MACrB,SAAS,QAAQ,MAAM,OAAO,CAAC,MAAcA,WAAc;AAGvD,YAAI,KAAK,MAAM,aAAa,GAAG;AAC3B,iBAAO,QAAQ,SAASA,MAAK,CAAC;;AAIlC,YAAI,KAAK,MAAM,QAAQ,GAAG;AACtB,iBAAO,UAAUA,MAAK,EAAE,SAAQ;;AAGpC,gBAAQ,MAAM;UACV,KAAK;AACD,mBAAOA,OAAM,YAAW;UAC5B,KAAK;AACD,mBAAO,CAAC,CAACA;UACb,KAAK;AACD,2BAAe,OAAOA,WAAW,UAAU,kBAAkB,SAASA,MAAK;AAC3E,mBAAOA;;AAGf,uBAAe,OAAO,oBAAoB,QAAQ,IAAI;MAC1D,CAAC;;EAET;;AAlaS;AASA;AAEA;AAtBP;AAwIF,gBAAW,SAAC,MAAY;AAGpB;AACI,UAAM,UAAU,eAAe,IAAI;AACnC,QAAI,SAAS;AAAE,aAAO;;;AAI1B,QAAM,QAAQ,WAAW,IAAI,EAAE;AAC/B,MAAI,OAAO;AACP,UAAM,UAAU,MAAM;AACtB,UAAM,aAAa,KAAK,WAAW,OAAO;AAC1C,WAAO,CAAC,UAAqB;AACzB,qBAAe,MAAM,UAAU,MAAM,MAAM,UAAU,MAAM,QAAQ,0CAA2C,MAAM,KAAM,IAAI,SAAS,KAAK;AAE5I,UAAI,SAAS,MAAM,IAAI,UAAU;AACjC,UAAI,mBAAK,YAAW,IAAI,OAAO,GAAG;AAC9B,iBAAS,OAAO,IAAI,SAAS;;AAGjC,aAAO,UAAU,OAAO,MAAM,CAAC;IACnC;;AAIJ,QAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,MAAI,QAAQ;AACR,UAAM,cAAc,GAAG,mBAAK,YAAW,IAAI,IAAI,CAAW;AAC1D,WAAO,CAAC,UAA8B;AAClC,YAAM,SAAS,OAAO,IAAI,CAAC,EAAE,MAAM,MAAAH,MAAI,MAAM;AACzC,cAAM,SAAS,KAAK,WAAWA,KAAI,EAAE,MAAM,IAAI,CAAC;AAChD,YAAI,mBAAK,YAAW,IAAIA,KAAI,GAAG;AAAE,iBAAO,UAAU,MAAM;;AACxD,eAAO;MACX,CAAC;AACD,aAAO,QAAQ,WAAW;AAC1B,aAAO,OAAO,MAAM;IACxB;;AAGJ,iBAAe,OAAO,iBAAkB,IAAK,IAAI,QAAQ,IAAI;AACjE;AAjLE,IAAO,mBAAP;AAmbA,SAAU,gBAAgB,QAAyB,OAA8C,OAA4B,WAAwB;AACvJ,SAAO,eAAe,iBAAiB,KAAK,QAAQ,OAAO,KAAK,GAAG,SAAS;AAChF;;;AC5hBA,SAAS,OAAO,OAAoB;AAChC,QAAM,SAAsB,oBAAI,IAAG;AACnC,QAAM,QAAQ,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC;AAClC,SAAO,OAAO,OAAO,MAAM;AAC/B;AAEA,IAAM,iBAAiB;AACvB,IAAM,gBAAgB,OAAO,eAAe,MAAM,GAAG,CAAC;AAGtD,IAAM,WAAW;AACjB,IAAM,UAAU,OAAO,SAAS,MAAM,GAAG,CAAC;AAE1C,IAAM,WAAW;AACjB,IAAM,UAAU,OAAO,SAAS,MAAM,GAAG,CAAC;AAE1C,IAAM,eAAe;AACrB,IAAM,cAAc,OAAO,aAAa,MAAM,GAAG,CAAC;AAElD,IAAM,WAAW;AAGjB,IAAM,YAAY,CAAE,UAAU,cAAc,UAAU,QAAQ,EAAG,KAAK,GAAG;AACzE,IAAM,WAAW,OAAO,UAAU,MAAM,GAAG,CAAC;AAG5C,IAAM,eAAuC;EAC3C,KAAK;EAAc,KAAK;EACxB,KAAK;EAAgB,KAAK;EAC1B,KAAK;EAAS,KAAK;;AAIrB,IAAM,wBAAwB,IAAI,OAAO,SAAS;AAClD,IAAM,oBAAoB,IAAI,OAAO,WAAW;AAChD,IAAM,gBAAgB,IAAI,OAAO,6BAA6B;AAG9D,IAAM,UAAU,IAAI,OAAO,8BAA8B;AACzD,IAAM,YAAY,IAAI,OAAO,qDAAqD;AA5JlF,IAAAI,UAAA;AA0LA,IAAM,eAAN,MAAM,aAAW;EAOb,YAAY,QAA4B;AAP5C;AACI,uBAAAA;AACA;AAMI,uBAAKA,UAAU;AACf,uBAAK,SAAU,OAAO,MAAK;EAC/B;EANA,IAAI,SAAM;AAAa,WAAO,mBAAKA;EAAS;EAC5C,IAAI,SAAM;AAAa,WAAO,mBAAK,SAAQ,SAAS,mBAAKA;EAAS;EAOlE,QAAK;AAAkB,WAAO,IAAI,aAAY,mBAAK,QAAO;EAAG;EAC7D,QAAK;AAAW,uBAAKA,UAAU;EAAG;;EAalC,WAAW,SAA4B;AACnC,UAAM,MAAM,KAAK,KAAI;AACrB,QAAI,IAAI,SAAS,aAAa,CAAC,QAAQ,IAAI,IAAI,IAAI,GAAG;AAAE,YAAM,IAAI,MAAM,oBAAqB,IAAI,IAAK,EAAE;;AACxG,WAAO,KAAK,IAAG,EAAG;EACtB;;EAGA,QAAQ,MAAY;AAChB,QAAI,KAAK,KAAI,EAAG,SAAS,MAAM;AAC3B,YAAM,MAAM,KAAK,KAAI;AACrB,YAAM,IAAI,MAAM,YAAa,IAAK,SAAU,IAAI,IAAK,IAAK,KAAK,UAAU,IAAI,IAAI,CAAE,EAAE;;AAEzF,WAAO,KAAK,IAAG,EAAG;EACtB;;EAGA,WAAQ;AACJ,UAAM,MAAM,KAAK,KAAI;AACrB,QAAI,IAAI,SAAS,cAAc;AAAE,YAAM,IAAI,MAAM,WAAW;;AAC5D,UAAM,SAAS,sBAAK,2CAAL,WAAqB,mBAAKA,YAAU,GAAG,IAAI,QAAQ;AAClE,uBAAKA,UAAU,IAAI,QAAQ;AAC3B,WAAO;EACX;;EAGA,YAAS;AACL,UAAM,MAAM,KAAK,KAAI;AAErB,QAAI,IAAI,SAAS,cAAc;AAAE,YAAM,IAAI,MAAM,WAAW;;AAE5D,UAAM,SAA6B,CAAA;AAEnC,WAAM,mBAAKA,YAAU,IAAI,QAAQ,GAAG;AAChC,YAAM,OAAO,KAAK,KAAI,EAAG;AACzB,aAAO,KAAK,sBAAK,2CAAL,WAAqB,mBAAKA,YAAU,GAAG,KAAK;AACxD,yBAAKA,UAAU;;AAGnB,uBAAKA,UAAU,IAAI,QAAQ;AAE3B,WAAO;EACX;;EAGA,OAAI;AACA,QAAI,mBAAKA,aAAW,mBAAK,SAAQ,QAAQ;AACrC,YAAM,IAAI,MAAM,eAAe;;AAEnC,WAAO,mBAAK,SAAQ,mBAAKA,SAAO;EACpC;;EAGA,YAAY,SAA4B;AACpC,UAAM,MAAM,KAAK,SAAS,SAAS;AACnC,WAAQ,OAAO,QAAQ,QAAQ,IAAI,GAAG,IAAK,MAAK;EACpD;;EAGA,SAAS,MAAY;AACjB,QAAI,KAAK,WAAW,GAAG;AAAE,aAAO;;AAChC,UAAM,MAAM,KAAK,KAAI;AACrB,WAAQ,IAAI,SAAS,OAAQ,IAAI,OAAM;EAC3C;;EAGA,MAAG;AACC,UAAM,SAAS,KAAK,KAAI;AACxB,2BAAKA,UAAL;AACA,WAAO;EACX;EAEA,WAAQ;AACJ,UAAM,SAAwB,CAAA;AAC9B,aAAS,IAAI,mBAAKA,WAAS,IAAI,mBAAK,SAAQ,QAAQ,KAAK;AACrD,YAAM,QAAQ,mBAAK,SAAQ,CAAC;AAC5B,aAAO,KAAK,GAAI,MAAM,IAAK,IAAK,MAAM,IAAK,EAAE;;AAEjD,WAAO,gBAAiB,OAAO,KAAK,GAAG,CAAE;EAC7C;;AAvGAA,WAAA;AACA;AAFJ;AAeI,oBAAe,SAAC,OAAe,GAAG,KAAa,GAAC;AAC5C,SAAO,IAAI,aAAY,mBAAK,SAAQ,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,MAAK;AAC1D,WAAO,OAAO,OAAO,OAAO,OAAO,CAAA,GAAK,GAAG;MACvC,OAAQ,EAAE,QAAQ;MAClB,UAAW,EAAE,WAAW;MACxB,UAAW,EAAE,WAAW;KAC3B,CAAC;EACN,CAAC,CAAC;AACN;AAvBJ,IAAM,cAAN;AA6GA,SAAS,IAAI,MAAY;AACrB,QAAM,SAAuB,CAAA;AAE7B,QAAMC,cAAa,CAAC,YAAmB;AACnC,UAAM,QAAS,SAAS,KAAK,SAAU,KAAK,UAAU,KAAK,MAAM,CAAC,IAAG;AACrE,UAAM,IAAI,MAAM,iBAAkB,KAAM,OAAQ,MAAO,KAAM,OAAQ,EAAE;EAC3E;AAEA,MAAI,WAA0B,CAAA;AAC9B,MAAI,SAAwB,CAAA;AAE5B,MAAI,SAAS;AACb,SAAO,SAAS,KAAK,QAAQ;AAGzB,QAAI,MAAM,KAAK,UAAU,MAAM;AAC/B,QAAI,QAAQ,IAAI,MAAM,qBAAqB;AAC3C,QAAI,OAAO;AACP,gBAAU,MAAM,CAAC,EAAE;AACnB,YAAM,KAAK,UAAU,MAAM;;AAG/B,UAAM,QAAQ,EAAE,OAAO,SAAS,QAAQ,UAAU,IAAI,UAAU,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,IAAI,QAAQ,OAAO,GAAE;AACpH,WAAO,KAAK,KAAK;AAEjB,QAAI,OAAQ,aAAa,IAAI,CAAC,CAAC,KAAK;AACpC,QAAI,MAAM;AACN,YAAM,OAAO;AACb,YAAM,OAAO,IAAI,CAAC;AAClB;AAEA,UAAI,SAAS,cAAc;AACvB,iBAAS,KAAK,OAAO,SAAS,CAAC;AAC/B,eAAO,KAAK,OAAO,SAAS,CAAC;iBAEtB,QAAQ,eAAe;AAC9B,YAAI,SAAS,WAAW,GAAG;AAAE,UAAAA,YAAW,0BAA0B;;AAElE,cAAM,QAAQ,SAAS,IAAG;AACP,QAAC,OAAO,MAAM,KAAK,EAAI,QAAQ,OAAO,SAAS;AAClE,cAAM;AAEN,cAAM,WAAW,OAAO,IAAG;AACR,QAAC,OAAO,MAAM,QAAQ,EAAI,WAAW,OAAO,SAAS;iBAEjE,SAAS,SAAS;AACzB,cAAM,WAAW,OAAO,IAAG;AACR,QAAC,OAAO,MAAM,QAAQ,EAAI,WAAW,OAAO,SAAS;AACxE,eAAO,KAAK,OAAO,SAAS,CAAC;iBAEtB,SAAS,gBAAgB;AAChC,cAAM,OAAO;iBAEN,SAAS,iBAAiB;AAEjC,YAAI,SAAU,OAAO,IAAG,EAAa;AACrC,YAAI,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,CAAC,EAAE,SAAS,UAAU;AAClE,gBAAM,QAAS,OAAO,IAAG,EAAa;AACtC,mBAAS,QAAQ;AACE,UAAC,OAAO,OAAO,SAAS,CAAC,EAAI,QAAQ,UAAU,KAAK;;AAE3E,YAAI,OAAO,WAAW,KAAK,OAAO,OAAO,SAAS,CAAC,EAAE,SAAS,WAAW;AACrE,gBAAM,IAAI,MAAM,yBAAyB;;AAE1B,QAAC,OAAO,OAAO,SAAS,CAAC,EAAI,QAAQ;;AAG5D;;AAGJ,YAAQ,IAAI,MAAM,aAAa;AAC/B,QAAI,OAAO;AACP,YAAM,OAAO,MAAM,CAAC;AACpB,gBAAU,MAAM,KAAK;AAErB,UAAI,SAAS,IAAI,MAAM,IAAI,GAAG;AAC1B,cAAM,OAAO;AACb;;AAGJ,UAAI,MAAM,KAAK,MAAM,SAAS,GAAG;AAC7B,cAAM,OAAO;AACb;;AAGJ,YAAM,OAAO;AACb;;AAGJ,YAAQ,IAAI,MAAM,iBAAiB;AACnC,QAAI,OAAO;AACP,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,OAAO;AACb,gBAAU,MAAM,KAAK;AACrB;;AAGJ,UAAM,IAAI,MAAM,oBAAqB,KAAK,UAAU,IAAI,CAAC,CAAC,CAAE,gBAAiB,MAAO,EAAE;;AAG1F,SAAO,IAAI,YAAY,OAAO,IAAI,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC;AAC9D;AAGA,SAAS,YAAY,KAA0B,SAA4B;AACvE,MAAI,WAA0B,CAAA;AAC9B,aAAW,OAAO,QAAQ,KAAI,GAAI;AAC9B,QAAI,IAAI,IAAI,GAAG,GAAG;AAAE,eAAS,KAAK,GAAG;;;AAEzC,MAAI,SAAS,SAAS,GAAG;AAAE,UAAM,IAAI,MAAM,sBAAuB,SAAS,KAAK,IAAI,CAAE,EAAE;;AAC5F;AAKA,SAAS,YAAY,MAAc,QAAmB;AAClD,MAAI,OAAO,YAAY,OAAO,GAAG;AAC7B,UAAM,UAAU,OAAO,IAAG,EAAG;AAC7B,QAAI,YAAY,MAAM;AAClB,YAAM,IAAI,MAAM,YAAa,IAAK,SAAU,OAAQ,EAAE;;;AAI9D,SAAO,OAAO,QAAQ,IAAI;AAC9B;AAGA,SAAS,gBAAgB,QAAqB,SAA6B;AACvE,QAAM,WAAwB,oBAAI,IAAG;AACrC,SAAO,MAAM;AACT,UAAM,UAAU,OAAO,SAAS,SAAS;AAEzC,QAAI,WAAW,QAAS,WAAW,CAAC,QAAQ,IAAI,OAAO,GAAI;AAAE;;AAC7D,WAAO,IAAG;AAEV,QAAI,SAAS,IAAI,OAAO,GAAG;AAAE,YAAM,IAAI,MAAM,uBAAwB,KAAK,UAAU,OAAO,CAAE,EAAE;;AAC/F,aAAS,IAAI,OAAO;;AAGxB,SAAO,OAAO,OAAO,QAAQ;AACjC;AAGA,SAAS,kBAAkB,QAAmB;AAC1C,MAAI,YAAY,gBAAgB,QAAQ,OAAO;AAG/C,cAAY,WAAW,OAAO,8BAA8B,MAAM,GAAG,CAAC,CAAC;AACvE,cAAY,WAAW,OAAO,+BAA+B,MAAM,GAAG,CAAC,CAAC;AAGxE,MAAI,UAAU,IAAI,MAAM,GAAG;AAAE,WAAO;;AACpC,MAAI,UAAU,IAAI,MAAM,GAAG;AAAE,WAAO;;AACpC,MAAI,UAAU,IAAI,SAAS,GAAG;AAAE,WAAO;;AACvC,MAAI,UAAU,IAAI,YAAY,GAAG;AAAE,WAAO;;AAG1C,MAAI,UAAU,IAAI,UAAU,GAAG;AAAE,WAAO;;AAExC,SAAO;AACX;AAGA,SAAS,cAAc,QAAqB,cAAsB;AAC9D,SAAO,OAAO,UAAS,EAAG,IAAI,CAAC,MAAM,UAAU,KAAK,GAAG,YAAY,CAAC;AACxE;AAGA,SAAS,WAAW,QAAmB;AACnC,MAAI,OAAO,SAAS,IAAI,GAAG;AACvB,WAAO,IAAG;AACV,QAAI,OAAO,SAAS,QAAQ,GAAG;AAC3B,aAAO,UAAU,OAAO,IAAG,EAAG,IAAI;;AAEtC,UAAM,IAAI,MAAM,aAAa;;AAEjC,SAAO;AACX;AAEA,SAAS,WAAW,QAAmB;AACnC,MAAI,OAAO,QAAQ;AACf,UAAM,IAAI,MAAM,+BAAgC,OAAO,MAAO,KAAM,OAAO,SAAQ,CAAG,EAAE;;AAEhG;AAEA,IAAM,iBAAiB,IAAI,OAAO,oBAAoB;AAEtD,SAAS,gBAAgB,MAAY;AACjC,QAAM,QAAQ,KAAK,MAAM,SAAS;AAClC,iBAAe,OAAO,gBAAgB,QAAQ,IAAI;AAClD,MAAI,SAAS,QAAQ;AAAE,WAAO;;AAC9B,MAAI,SAAS,OAAO;AAAE,WAAO;;AAE7B,MAAI,MAAM,CAAC,GAAG;AAEV,UAAM,SAAS,SAAS,MAAM,CAAC,CAAC;AAChC,mBAAe,WAAW,KAAK,UAAU,IAAI,wBAAwB,QAAQ,IAAI;aAE1E,MAAM,CAAC,GAAG;AAEjB,UAAM,OAAO,SAAS,MAAM,CAAC,CAAW;AACxC,mBAAe,SAAS,KAAK,QAAQ,OAAQ,OAAO,MAAO,GAAG,yBAAyB,QAAQ,IAAI;;AAGvG,SAAO;AACX;AAGA,IAAMC,UAAS,CAAA;AAef,IAAM,WAAW,OAAO,IAAI,kBAAkB;AAE9C,IAAM,oBAAoB;AAC1B,IAAM,wBAAwB;AAC9B,IAAM,wBAAwB;AAC9B,IAAM,8BAA8B;AACpC,IAAM,2BAA2B;AACjC,IAAM,2BAA2B;AACjC,IAAM,yBAAyB;AA9gB/B;AAmhBM,IAAO,aAAP,MAAO,WAAS;;;;EAkDlB,YAAY,OAAY,MAAc,MAAc,UAAkB,SAAyB,YAA6C,aAA4B,eAA+B;AAlDrM;AAKO;;;;AAMA;;;;;AAKA;;;;AAOA;;;;;;AAOA;;;;;;AAOA;;;;;;AAOA;;;;;;AAOL,kBAAc,OAAOA,SAAQ,WAAW;AACxC,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,kBAAiB,CAAE;AAElE,QAAI,YAAY;AAAE,mBAAa,OAAO,OAAO,WAAW,MAAK,CAAE;;AAE/D,QAAI,aAAa,SAAS;AACtB,UAAI,eAAe,QAAQ,iBAAiB,MAAM;AAC9C,cAAM,IAAI,MAAM,EAAE;;eAEf,eAAe,QAAQ,iBAAiB,MAAM;AACrD,YAAM,IAAI,MAAM,EAAE;;AAGtB,QAAI,aAAa,SAAS;AACtB,UAAI,cAAc,MAAM;AAAE,cAAM,IAAI,MAAM,EAAE;;eACrC,cAAc,MAAM;AAC3B,YAAM,IAAI,MAAM,EAAE;;AAGtB,qBAA4B,MAAM;MAC9B;MAAM;MAAM;MAAU;MAAS;MAAY;MAAa;KAC3D;EACL;;;;;;;;;;;;EAaA,OAAO,QAAmB;AACtB,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,QAAI,WAAW,QAAQ;AACnB,YAAM,OAAO,KAAK,QAAQ;AAE1B,UAAI,KAAK,QAAO,GAAI;AAChB,cAAMC,UAAS,KAAK,MAAM,KAAK,cAAc,OAAO,MAAM,CAAC;AAC3D,QAAAA,QAAO,OAAO;AACd,QAAAA,QAAO,QAAQ,IAAM,KAAK,cAAc,IAAI,KAAI,OAAO,KAAK,WAAW,CAAG;AAC1E,eAAO,KAAK,UAAUA,OAAM;;AAGhC,YAAMA,UAAc;QAChB,MAAQ,KAAK,aAAa,UAAW,UAAS,KAAK;QACnD;;AAIJ,UAAI,OAAO,KAAK,YAAa,WAAW;AAAE,QAAAA,QAAO,UAAU,KAAK;;AAChE,UAAI,KAAK,QAAO,GAAI;AAChB,QAAAA,QAAO,aAAa,KAAK,WAAW,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;;AAE/E,aAAO,KAAK,UAAUA,OAAM;;AAGhC,QAAI,SAAS;AAGb,QAAI,KAAK,QAAO,GAAI;AAChB,gBAAU,KAAK,cAAc,OAAO,MAAM;AAC1C,gBAAU,IAAM,KAAK,cAAc,IAAI,KAAI,OAAO,KAAK,WAAW,CAAG;WAClE;AACH,UAAI,KAAK,QAAO,GAAI;AAChB,kBAAU,MAAM,KAAK,WAAW,IAC5B,CAAC,SAAS,KAAK,OAAO,MAAM,CAAC,EAC/B,KAAM,WAAW,SAAU,OAAM,GAAG,IAAI;aACvC;AACH,kBAAU,KAAK;;;AAIvB,QAAI,WAAW,WAAW;AACtB,UAAI,KAAK,YAAY,MAAM;AAAE,kBAAU;;AACvC,UAAI,WAAW,UAAU,KAAK,MAAM;AAChC,kBAAU,MAAM,KAAK;;;AAI7B,WAAO;EACX;;;;;;;EAQA,UAAO;AACH,WAAQ,KAAK,aAAa;EAC9B;;;;;;;EAQA,UAAO;AACH,WAAQ,KAAK,aAAa;EAC9B;;;;;;;EAQA,cAAW;AACP,WAAQ,KAAK,WAAW;EAC5B;;;;;EAMA,KAAK,OAAYC,UAA0B;AACvC,QAAI,KAAK,QAAO,GAAI;AAChB,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAE,cAAM,IAAI,MAAM,qBAAqB;;AAClE,UAAI,KAAK,gBAAgB,MAAM,MAAM,WAAW,KAAK,aAAa;AAC9D,cAAM,IAAI,MAAM,uBAAuB;;AAE3C,YAAM,QAAQ;AACd,aAAO,MAAM,IAAI,CAAC,MAAO,MAAM,cAAc,KAAK,GAAGA,QAAO,CAAE;;AAGlE,QAAI,KAAK,QAAO,GAAI;AAChB,UAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAE,cAAM,IAAI,MAAM,qBAAqB;;AAClE,UAAI,MAAM,WAAW,KAAK,WAAW,QAAQ;AACzC,cAAM,IAAI,MAAM,uBAAuB;;AAE3C,YAAM,QAAQ;AACd,aAAO,MAAM,IAAI,CAAC,GAAG,MAAO,MAAM,WAAW,CAAC,EAAE,KAAK,GAAGA,QAAO,CAAE;;AAGrE,WAAOA,SAAQ,KAAK,MAAM,KAAK;EACnC;;;;;;;;EAuEA,MAAM,UAAU,OAAYA,UAA+B;AACvD,UAAM,WAAiC,CAAA;AACvC,UAAM,SAAkB,CAAE,KAAK;AAC/B,0BAAK,oCAAL,WAAgB,UAAU,OAAOA,UAAS,CAACC,WAAc;AACrD,aAAO,CAAC,IAAIA;IAChB;AACA,QAAI,SAAS,QAAQ;AAAE,YAAM,QAAQ,IAAI,QAAQ;;AACjD,WAAO,OAAO,CAAC;EACnB;;;;;;;EAQA,OAAO,KAAK,KAAU,cAAsB;AACxC,QAAI,WAAU,YAAY,GAAG,GAAG;AAAE,aAAO;;AAEzC,QAAI,OAAO,QAAS,UAAU;AAC1B,UAAI;AACA,eAAO,WAAU,KAAK,IAAI,GAAG,GAAG,YAAY;eACvC,OAAO;AACZ,uBAAe,OAAO,sBAAsB,OAAO,GAAG;;eAGnD,eAAe,aAAa;AACnC,UAAIC,QAAO,IAAI,WAAW;AAC1B,UAAI,QAAiC;AAErC,UAAI,gBAAgB,KAAK,OAAO,CAAE,OAAO,CAAE,CAAC,EAAE,IAAI,OAAO,KAAK,IAAI,SAAS,YAAY,GAAG;AAEtF,mBAAW;AACX,gBAAQ,IAAI,UAAS,EAAG,IAAI,CAAC,MAAM,WAAU,KAAK,CAAC,CAAC;AACpD,QAAAA,QAAO,SAAU,MAAM,IAAI,CAAC,MAAM,EAAE,OAAM,CAAE,EAAE,KAAK,GAAG,CAAE;aACrD;AAEH,QAAAA,QAAO,gBAAgB,IAAI,QAAQ,MAAM,CAAC;AAC1C,mBAAWA;;AAIf,UAAI,gBAAmC;AACvC,UAAI,cAA6B;AAEjC,aAAO,IAAI,UAAU,IAAI,SAAS,SAAS,GAAG;AAC1C,cAAM,UAAU,IAAI,IAAG;AACvB,wBAAgB,IAAI,WAAUJ,SAAQ,IAAII,OAAM,UAAU,MAAM,OAAO,aAAa,aAAa;AACjG,sBAAc,QAAQ;AACtB,QAAAA,SAAQ,QAAQ;AAChB,mBAAW;AACX,gBAAQ;;AAGZ,UAAIC,WAA0B;AAC9B,YAAM,WAAW,gBAAgB,KAAK,WAAW;AACjD,UAAI,SAAS,IAAI,SAAS,GAAG;AACzB,YAAI,CAAC,cAAc;AAAE,gBAAM,IAAI,MAAM,EAAE;;AACvC,QAAAA,WAAU;;AAGd,YAAMC,QAAQ,IAAI,SAAS,IAAI,IAAI,IAAI,IAAG,EAAG,OAAM;AAEnD,UAAI,IAAI,QAAQ;AAAE,cAAM,IAAI,MAAM,iBAAiB;;AAEnD,aAAO,IAAI,WAAUN,SAAQM,OAAMF,OAAM,UAAUC,UAAS,OAAO,aAAa,aAAa;;AAGjG,UAAM,OAAO,IAAI;AACjB,mBAAe,CAAC,QAAS,OAAO,SAAU,YAAY,KAAK,MAAM,OAAO,GACpE,gBAAgB,YAAY,IAAI;AAEpC,QAAI,UAAU,IAAI;AAClB,QAAI,WAAW,MAAM;AACjB,qBAAe,cAAc,+BAA+B,eAAe,IAAI,OAAO;AACtF,gBAAU,CAAC,CAAC;;AAGhB,QAAI,OAAO,IAAI;AAEf,QAAI,aAAa,KAAK,MAAM,cAAc;AAC1C,QAAI,YAAY;AACZ,YAAM,cAAc,SAAS,WAAW,CAAC,KAAK,IAAI;AAClD,YAAM,gBAAgB,WAAU,KAAK;QACjC,MAAM,WAAW,CAAC;QAClB,YAAY,IAAI;OACnB;AAED,aAAO,IAAI,WAAUL,SAAQ,QAAQ,IAAI,MAAM,SAAS,SAAS,MAAM,aAAa,aAAa;;AAGrG,QAAI,SAAS,WAAW,KAAK;MAAW;;IAAoB,KAAK,KAAK;MAAW;;IAAgB,GAAG;AAChG,YAAM,QAAS,IAAI,cAAc,OAAQ,IAAI,WAAW,IAAI,CAAC,MAAW,WAAU,KAAK,CAAC,CAAC,IAAG;AAC5F,YAAM,QAAQ,IAAI,WAAUA,SAAQ,QAAQ,IAAI,MAAM,SAAS,SAAS,OAAO,MAAM,IAAI;AAEzF,aAAO;;AAGX,WAAO,gBAAgB,IAAI,IAAI;AAE/B,WAAO,IAAI,WAAUA,SAAQ,QAAQ,IAAI,MAAM,MAAM,SAAS,MAAM,MAAM,IAAI;EAClF;;;;EAKA,OAAO,YAAY,OAAU;AACzB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;AAlXE;AAiMF,eAAU,SAAC,UAAgC,OAAYE,UAAiC,UAA8B;AAElH,MAAI,KAAK,QAAO,GAAI;AAChB,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAE,YAAM,IAAI,MAAM,qBAAqB;;AAClE,QAAI,KAAK,gBAAgB,MAAM,MAAM,WAAW,KAAK,aAAa;AAC9D,YAAM,IAAI,MAAM,uBAAuB;;AAE3C,UAAM,YAAY,KAAK;AAEvB,UAAMD,UAAS,MAAM,MAAK;AAC1B,IAAAA,QAAO,QAAQ,CAACE,QAAO,UAAS;AA9tB5C,UAAAI;AA+tBgB,sBAAAA,MAAA,WAAU,oCAAV,KAAAA,KAAqB,UAAUJ,QAAOD,UAAS,CAACC,WAAc;AAC1D,QAAAF,QAAO,KAAK,IAAIE;MACpB;IACJ,CAAC;AACD,aAASF,OAAM;AACf;;AAGJ,MAAI,KAAK,QAAO,GAAI;AAChB,UAAM,aAAa,KAAK;AAGxB,QAAIA;AACJ,QAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,MAAAA,UAAS,MAAM,MAAK;WAEjB;AACH,UAAI,SAAS,QAAQ,OAAO,UAAW,UAAU;AAC7C,cAAM,IAAI,MAAM,qBAAqB;;AAGzC,MAAAA,UAAS,WAAW,IAAI,CAAC,UAAS;AAC9B,YAAI,CAAC,MAAM,MAAM;AAAE,gBAAM,IAAI,MAAM,iDAAiD;;AACpF,YAAI,EAAE,MAAM,QAAQ,QAAQ;AACxB,gBAAM,IAAI,MAAM,+BAAgC,MAAM,IAAK,EAAE;;AAEjE,eAAO,MAAM,MAAM,IAAI;MAC3B,CAAC;;AAGL,QAAIA,QAAO,WAAW,KAAK,WAAW,QAAQ;AAC1C,YAAM,IAAI,MAAM,uBAAuB;;AAG3C,IAAAA,QAAO,QAAQ,CAACE,QAAO,UAAS;AAjwB5C,UAAAI;AAkwBgB,sBAAAA,MAAA,WAAW,KAAK,GAAE,oCAAlB,KAAAA,KAA6B,UAAUJ,QAAOD,UAAS,CAACC,WAAc;AAClE,QAAAF,QAAO,KAAK,IAAIE;MACpB;IACJ,CAAC;AACD,aAASF,OAAM;AACf;;AAGJ,QAAM,SAASC,SAAQ,KAAK,MAAM,KAAK;AACvC,MAAI,OAAO,MAAM;AACb,aAAS,KAAM,iBAAK;AAAc,eAAS,MAAM,MAAM;IAAG,EAAE,CAAE;SAC3D;AACH,aAAS,MAAM;;AAEvB;AA7PE,IAAO,YAAP;AA6XA,IAAgB,WAAhB,MAAgB,UAAQ;;;;EAc1B,YAAY,OAAY,MAAoB,QAAgC;AAVnE;;;;AAKA;;;;AAML,kBAAc,OAAOF,SAAQ,UAAU;AACvC,aAAS,OAAO,OAAO,OAAO,MAAK,CAAE;AACrC,qBAA2B,MAAM,EAAE,MAAM,OAAM,CAAE;EACrD;;;;;EAWA,OAAO,KAAK,KAAQ;AAChB,QAAI,OAAO,QAAS,UAAU;AAG1B,UAAI;AACA,kBAAS,KAAK,KAAK,MAAM,GAAG,CAAC;eACxB,GAAG;MAAA;AAGZ,aAAO,UAAS,KAAK,IAAI,GAAG,CAAC;;AAGjC,QAAI,eAAe,aAAa;AAG5B,YAAM,OAAO,IAAI,YAAY,OAAO;AAEpC,cAAQ,MAAM;QACV,KAAK;AAAe,iBAAO,oBAAoB,KAAK,GAAG;QACvD,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;QAC3C,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;QAC3C,KAAK;QAAY,KAAK;AAClB,iBAAO,iBAAiB,KAAK,GAAG;QACpC,KAAK;AAAY,iBAAO,iBAAiB,KAAK,GAAG;QACjD,KAAK;AAAU,iBAAO,eAAe,KAAK,GAAG;;eAG1C,OAAO,QAAS,UAAU;AAGjC,cAAQ,IAAI,MAAM;QACd,KAAK;AAAe,iBAAO,oBAAoB,KAAK,GAAG;QACvD,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;QAC3C,KAAK;AAAS,iBAAO,cAAc,KAAK,GAAG;QAC3C,KAAK;QAAY,KAAK;AAClB,iBAAO,iBAAiB,KAAK,GAAG;QACpC,KAAK;AAAY,iBAAO,iBAAiB,KAAK,GAAG;QACjD,KAAK;AAAU,iBAAO,eAAe,KAAK,GAAG;;AAGjD,aAAO,OAAO,qBAAsB,IAAI,IAAK,IAAI,yBAAyB;QACtE,WAAW;OACd;;AAGL,mBAAe,OAAO,+BAA+B,OAAO,GAAG;EACnE;;;;EAKA,OAAO,cAAc,OAAU;AAC3B,WAAO,oBAAoB,WAAW,KAAK;EAC/C;;;;EAKA,OAAO,QAAQ,OAAU;AACrB,WAAO,cAAc,WAAW,KAAK;EACzC;;;;EAKA,OAAO,QAAQ,OAAU;AACrB,WAAO,cAAc,WAAW,KAAK;EACzC;;;;EAKA,OAAO,WAAW,OAAU;AACxB,WAAO,iBAAiB,WAAW,KAAK;EAC5C;;;;EAKA,OAAO,SAAS,OAAU;AACtB,WAAO,eAAe,WAAW,KAAK;EAC1C;;AAOE,IAAgB,gBAAhB,cAAsC,SAAQ;;;;EAShD,YAAY,OAAY,MAAoB,MAAc,QAAgC;AACtF,UAAM,OAAO,MAAM,MAAM;AANpB;;;;AAOL,mBAAe,OAAO,SAAU,YAAY,KAAK,MAAM,OAAO,GAC1D,sBAAsB,QAAQ,IAAI;AACtC,aAAS,OAAO,OAAO,OAAO,MAAK,CAAE;AACrC,qBAAgC,MAAM,EAAE,KAAI,CAAE;EAClD;;AAGJ,SAAS,WAAW,QAAoB,QAAgC;AACpE,SAAO,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,MAAM,CAAC,EAAE,KAAM,WAAW,SAAU,OAAM,GAAG,IAAI;AAC7F;AAKM,IAAO,gBAAP,MAAO,uBAAsB,cAAa;;;;EAI5C,YAAY,OAAY,MAAc,QAAgC;AAClE,UAAM,OAAO,SAAS,MAAM,MAAM;AAClC,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,sBAAqB,CAAE;EAC1E;;;;EAKA,IAAI,WAAQ;AACR,WAAO,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE,UAAU,GAAG,EAAE;EACrD;;;;EAKA,OAAO,QAAmB;AACtB,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;QAClB,MAAM;QACN,MAAM,KAAK;QACX,QAAQ,KAAK,OAAO,IAAI,CAAC,UAAU,KAAK,MAAM,MAAM,OAAO,MAAM,CAAC,CAAC;OACtE;;AAGL,UAAM,SAAwB,CAAA;AAC9B,QAAI,WAAW,WAAW;AAAE,aAAO,KAAK,OAAO;;AAC/C,WAAO,KAAK,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC;AACvD,WAAO,OAAO,KAAK,GAAG;EAC1B;;;;EAKA,OAAO,KAAK,KAAQ;AAChB,QAAI,eAAc,WAAW,GAAG,GAAG;AAAE,aAAO;;AAE5C,QAAI,OAAO,QAAS,UAAU;AAC1B,aAAO,eAAc,KAAK,IAAI,GAAG,CAAC;eAE3B,eAAe,aAAa;AACnC,YAAM,OAAO,YAAY,SAAS,GAAG;AACrC,YAAM,SAAS,cAAc,GAAG;AAChC,iBAAW,GAAG;AAEd,aAAO,IAAI,eAAcA,SAAQ,MAAM,MAAM;;AAGjD,WAAO,IAAI,eAAcA,SAAQ,IAAI,MACjC,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAG,CAAA,CAAG;EACxD;;;;;EAMA,OAAO,WAAW,OAAU;AACxB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;AAME,IAAO,gBAAP,MAAO,uBAAsB,cAAa;;;;EAS5C,YAAY,OAAY,MAAc,QAAkC,WAAkB;AACtF,UAAM,OAAO,SAAS,MAAM,MAAM;AAN7B;;;;AAOL,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,sBAAqB,CAAE;AACtE,qBAAgC,MAAM,EAAE,UAAS,CAAE;EACvD;;;;EAKA,IAAI,YAAS;AACT,WAAO,GAAG,KAAK,OAAO,SAAS,CAAC;EACpC;;;;EAKA,OAAO,QAAmB;AACtB,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;QAClB,MAAM;QACN,WAAW,KAAK;QAChB,MAAM,KAAK;QACX,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;OAC9D;;AAGL,UAAM,SAAwB,CAAA;AAC9B,QAAI,WAAW,WAAW;AAAE,aAAO,KAAK,OAAO;;AAC/C,WAAO,KAAK,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC;AACvD,QAAI,WAAW,aAAa,KAAK,WAAW;AAAE,aAAO,KAAK,WAAW;;AACrE,WAAO,OAAO,KAAK,GAAG;EAC1B;;;;EAKA,OAAO,aAAa,MAAc,QAAmB;AACjD,cAAU,UAAU,CAAA,GAAI,IAAI,CAAC,MAAM,UAAU,KAAK,CAAC,CAAC;AACpD,UAAM,WAAW,IAAI,eAAcA,SAAQ,MAAM,QAAQ,KAAK;AAC9D,WAAO,SAAS;EACpB;;;;EAKA,OAAO,KAAK,KAAQ;AAChB,QAAI,eAAc,WAAW,GAAG,GAAG;AAAE,aAAO;;AAE5C,QAAI,OAAO,QAAS,UAAU;AAC1B,UAAI;AACA,eAAO,eAAc,KAAK,IAAI,GAAG,CAAC;eAC7B,OAAO;AACZ,uBAAe,OAAO,0BAA0B,OAAO,GAAG;;eAGvD,eAAe,aAAa;AACnC,YAAM,OAAO,YAAY,SAAS,GAAG;AACrC,YAAM,SAAS,cAAc,KAAK,IAAI;AACtC,YAAM,YAAY,CAAC,CAAC,gBAAgB,KAAK,OAAO,CAAE,WAAW,CAAE,CAAC,EAAE,IAAI,WAAW;AACjF,iBAAW,GAAG;AAEd,aAAO,IAAI,eAAcA,SAAQ,MAAM,QAAQ,SAAS;;AAG5D,WAAO,IAAI,eAAcA,SAAQ,IAAI,MACjC,IAAI,SAAS,IAAI,OAAO,IAAI,CAAC,MAAW,UAAU,KAAK,GAAG,IAAI,CAAC,IAAG,CAAA,GAAK,CAAC,CAAC,IAAI,SAAS;EAC9F;;;;;EAMA,OAAO,WAAW,OAAU;AACxB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;AAME,IAAO,sBAAP,MAAO,6BAA4B,SAAQ;;;;EAe7C,YAAY,OAAY,MAAoB,QAAkC,SAAkB,KAAkB;AAC9G,UAAM,OAAO,MAAM,MAAM;AAXpB;;;;AAKA;;;;AAOL,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,4BAA2B,CAAE;AAC5E,qBAAsC,MAAM,EAAE,SAAS,IAAG,CAAE;EAChE;;;;EAKA,OAAO,QAAmB;AACtB,WAAO,UAAU,QAAQ,WAAW,WAAW,2CAC3C,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAE7D,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;QAClB,MAAM;QACN,iBAAkB,KAAK,UAAU,YAAW;QAC5C,SAAS,KAAK;QACd,KAAO,KAAK,OAAO,OAAQ,KAAK,MAAK;QACrC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;OAC9D;;AAGL,UAAM,SAAS,CAAE,cAAe,WAAW,QAAQ,KAAK,MAAM,CAAE,EAAE;AAClE,QAAI,KAAK,SAAS;AAAE,aAAO,KAAK,SAAS;;AACzC,QAAI,KAAK,OAAO,MAAM;AAAE,aAAO,KAAK,IAAK,KAAK,IAAI,SAAQ,CAAG,EAAE;;AAC/D,WAAO,OAAO,KAAK,GAAG;EAC1B;;;;EAKA,OAAO,KAAK,KAAQ;AAChB,QAAI,qBAAoB,WAAW,GAAG,GAAG;AAAE,aAAO;;AAElD,QAAI,OAAO,QAAS,UAAU;AAC1B,UAAI;AACA,eAAO,qBAAoB,KAAK,IAAI,GAAG,CAAC;eACnC,OAAO;AACZ,uBAAe,OAAO,+BAA+B,OAAO,GAAG;;eAG5D,eAAe,aAAa;AACnC,sBAAgB,KAAK,OAAO,CAAE,aAAa,CAAE,CAAC;AAC9C,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,UAAU,CAAC,CAAC,gBAAgB,KAAK,aAAa,EAAE,IAAI,SAAS;AACnE,YAAM,MAAM,WAAW,GAAG;AAC1B,iBAAW,GAAG;AAEd,aAAO,IAAI,qBAAoBA,SAAQ,eAAe,QAAQ,SAAS,GAAG;;AAG9E,WAAO,IAAI,qBAAoBA,SAAQ,eACnC,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAG,CAAA,GAC7C,CAAC,CAAC,IAAI,SAAU,IAAI,OAAO,OAAQ,IAAI,MAAK,IAAI;EACxD;;;;;EAMA,OAAO,WAAW,OAAU;AACxB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;AAME,IAAO,mBAAP,MAAO,0BAAyB,SAAQ;EAO1C,YAAY,OAAY,QAAkC,SAAgB;AACtE,UAAM,OAAO,YAAY,MAAM;AAH1B;;;;AAIL,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,yBAAwB,CAAE;AACzE,qBAAmC,MAAM,EAAE,QAAO,CAAE;EACxD;;;;EAKA,OAAO,QAAmB;AACtB,UAAM,OAAS,KAAK,OAAO,WAAW,IAAK,YAAW;AAEtD,QAAI,WAAW,QAAQ;AACnB,YAAM,kBAAmB,KAAK,UAAU,YAAW;AACnD,aAAO,KAAK,UAAU,EAAE,MAAM,gBAAe,CAAE;;AAGnD,WAAO,GAAI,IAAK,KAAM,KAAK,UAAU,aAAY,EAAG;EACxD;;;;EAKA,OAAO,KAAK,KAAQ;AAChB,QAAI,kBAAiB,WAAW,GAAG,GAAG;AAAE,aAAO;;AAE/C,QAAI,OAAO,QAAS,UAAU;AAC1B,UAAI;AACA,eAAO,kBAAiB,KAAK,IAAI,GAAG,CAAC;eAChC,OAAO;AACZ,uBAAe,OAAO,6BAA6B,OAAO,GAAG;;eAG1D,eAAe,aAAa;AACnC,YAAM,WAAW,IAAI,SAAQ;AAE7B,YAAM,aAAa,IAAI,YAAY,OAAO,CAAE,YAAY,SAAS,CAAE,CAAC;AACpE,qBAAe,YAAY,oCAAoC,OAAO,QAAQ;AAE9E,YAAM,OAAO,IAAI,WAAW,OAAO,CAAE,YAAY,SAAS,CAAE,CAAC;AAG7D,UAAI,SAAS,WAAW;AACpB,cAAMQ,UAAS,cAAc,GAAG;AAChC,uBAAeA,QAAO,WAAW,GAAG,iCAAiC,cAAcA,OAAM;AACzF,wBAAgB,KAAK,OAAO,CAAE,SAAS,CAAE,CAAC;AAC1C,mBAAW,GAAG;AACd,eAAO,IAAI,kBAAiBR,SAAQ,CAAA,GAAK,IAAI;;AAKjD,UAAI,SAAS,cAAc,GAAG;AAC9B,UAAI,OAAO,QAAQ;AACf,uBAAe,OAAO,WAAW,KAAK,OAAO,CAAC,EAAE,SAAS,SACrD,2BAA2B,cAC3B,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;aAClD;AACH,iBAAS,CAAE,UAAU,KAAK,OAAO,CAAC;;AAGtC,YAAM,aAAa,kBAAkB,GAAG;AACxC,qBAAe,eAAe,gBAAgB,eAAe,WAAW,gCAAgC,uBAAuB,UAAU;AAEzI,UAAI,gBAAgB,KAAK,OAAO,CAAE,SAAS,CAAE,CAAC,EAAE,IAAI,SAAS,GAAG;AAC5D,cAAM,UAAU,cAAc,GAAG;AACjC,uBAAe,QAAQ,WAAW,KAAK,QAAQ,CAAC,EAAE,SAAS,SACvD,4BAA4B,eAC5B,QAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,CAAC;;AAG1D,iBAAW,GAAG;AAEd,aAAO,IAAI,kBAAiBA,SAAQ,QAAQ,eAAe,SAAS;;AAGxE,QAAI,IAAI,SAAS,WAAW;AACxB,aAAO,IAAI,kBAAiBA,SAAQ,CAAA,GAAK,IAAI;;AAGjD,QAAI,IAAI,SAAS,YAAY;AACzB,YAAM,SAAS,CAAE,UAAU,KAAK,OAAO,CAAC;AACxC,YAAM,UAAW,IAAI,oBAAoB;AACzC,aAAO,IAAI,kBAAiBA,SAAQ,QAAQ,OAAO;;AAGvD,mBAAe,OAAO,gCAAgC,OAAO,GAAG;EACpE;;;;;EAMA,OAAO,WAAW,OAAU;AACxB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;AAOE,IAAO,mBAAP,MAAO,0BAAyB,cAAa;;;;EA8B/C,YAAY,OAAY,MAAc,iBAA6D,QAAkC,SAAmC,KAAkB;AACtL,UAAM,OAAO,YAAY,MAAM,MAAM;AA3BhC;;;;AAKA;;;;AAMA;;;;;AAKA;;;;AAKA;;;;AAOL,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,yBAAwB,CAAE;AACzE,cAAU,OAAO,OAAO,QAAQ,MAAK,CAAE;AACvC,UAAM,WAAY,oBAAoB,UAAU,oBAAoB;AACpE,UAAM,UAAW,oBAAoB;AACrC,qBAAmC,MAAM,EAAE,UAAU,KAAK,SAAS,SAAS,gBAAe,CAAE;EACjG;;;;EAKA,IAAI,WAAQ;AACR,WAAO,GAAG,KAAK,OAAO,SAAS,CAAC,EAAE,UAAU,GAAG,EAAE;EACrD;;;;EAKA,OAAO,QAAmB;AACtB,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,QAAI,WAAW,QAAQ;AACnB,aAAO,KAAK,UAAU;QAClB,MAAM;QACN,MAAM,KAAK;QACX,UAAU,KAAK;QACf,iBAAmB,KAAK,oBAAoB,eAAgB,KAAK,kBAAiB;QAClF,SAAS,KAAK;QACd,KAAO,KAAK,OAAO,OAAQ,KAAK,MAAK;QACrC,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;QAC3D,SAAS,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,OAAO,MAAM,CAAC,CAAC;OAChE;;AAGL,UAAM,SAAwB,CAAA;AAE9B,QAAI,WAAW,WAAW;AAAE,aAAO,KAAK,UAAU;;AAElD,WAAO,KAAK,KAAK,OAAO,WAAW,QAAQ,KAAK,MAAM,CAAC;AAEvD,QAAI,WAAW,WAAW;AACtB,UAAI,KAAK,oBAAoB,cAAc;AACvC,eAAO,KAAK,KAAK,eAAe;;AAGpC,UAAI,KAAK,WAAW,KAAK,QAAQ,QAAQ;AACrC,eAAO,KAAK,SAAS;AACrB,eAAO,KAAK,WAAW,QAAQ,KAAK,OAAO,CAAC;;AAGhD,UAAI,KAAK,OAAO,MAAM;AAAE,eAAO,KAAK,IAAK,KAAK,IAAI,SAAQ,CAAG,EAAE;;;AAEnE,WAAO,OAAO,KAAK,GAAG;EAC1B;;;;EAKA,OAAO,YAAY,MAAc,QAAmB;AAChD,cAAU,UAAU,CAAA,GAAI,IAAI,CAAC,MAAM,UAAU,KAAK,CAAC,CAAC;AACpD,UAAM,WAAW,IAAI,kBAAiBA,SAAQ,MAAM,QAAQ,QAAQ,CAAA,GAAK,IAAI;AAC7E,WAAO,SAAS;EACpB;;;;EAKA,OAAO,KAAK,KAAQ;AAChB,QAAI,kBAAiB,WAAW,GAAG,GAAG;AAAE,aAAO;;AAE/C,QAAI,OAAO,QAAS,UAAU;AAC1B,UAAI;AACA,eAAO,kBAAiB,KAAK,IAAI,GAAG,CAAC;eAChC,OAAO;AACZ,uBAAe,OAAO,6BAA6B,OAAO,GAAG;;eAG1D,eAAe,aAAa;AACnC,YAAM,OAAO,YAAY,YAAY,GAAG;AACxC,YAAM,SAAS,cAAc,GAAG;AAChC,YAAM,aAAa,kBAAkB,GAAG;AAExC,UAAI,UAA4B,CAAA;AAChC,UAAI,gBAAgB,KAAK,OAAO,CAAE,SAAS,CAAE,CAAC,EAAE,IAAI,SAAS,GAAG;AAC5D,kBAAU,cAAc,GAAG;;AAG/B,YAAM,MAAM,WAAW,GAAG;AAE1B,iBAAW,GAAG;AAEd,aAAO,IAAI,kBAAiBA,SAAQ,MAAM,YAAY,QAAQ,SAAS,GAAG;;AAG9E,QAAI,kBAAkB,IAAI;AAG1B,QAAI,mBAAmB,MAAM;AACzB,wBAAkB;AAElB,UAAI,OAAO,IAAI,aAAc,WAAW;AACpC,0BAAkB;AAClB,YAAI,CAAC,IAAI,UAAU;AACf,4BAAkB;AAClB,cAAI,OAAO,IAAI,YAAa,aAAa,CAAC,IAAI,SAAS;AACnD,8BAAkB;;;iBAGnB,OAAO,IAAI,YAAa,aAAa,CAAC,IAAI,SAAS;AAC1D,0BAAkB;;;AAO1B,WAAO,IAAI,kBAAiBA,SAAQ,IAAI,MAAM,iBACzC,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAG,CAAA,GAC7C,IAAI,UAAU,IAAI,QAAQ,IAAI,UAAU,IAAI,IAAG,CAAA,GAC9C,IAAI,OAAO,OAAQ,IAAI,MAAK,IAAI;EAC1C;;;;;EAMA,OAAO,WAAW,OAAU;AACxB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;AAME,IAAO,iBAAP,MAAO,wBAAuB,cAAa;;;;EAK7C,YAAY,OAAY,MAAc,QAAgC;AAClE,UAAM,OAAO,UAAU,MAAM,MAAM;AACnC,WAAO,eAAe,MAAM,UAAU,EAAE,OAAO,uBAAsB,CAAE;EAC3E;;;;EAKA,SAAM;AACF,UAAM,IAAI,MAAM,OAAO;EAC3B;;;;EAKA,OAAO,KAAK,KAAQ;AAChB,QAAI,OAAO,QAAS,UAAU;AAC1B,UAAI;AACA,eAAO,gBAAe,KAAK,IAAI,GAAG,CAAC;eAC9B,OAAO;AACZ,uBAAe,OAAO,2BAA2B,OAAO,GAAG;;eAGxD,eAAe,aAAa;AACnC,YAAM,OAAO,YAAY,UAAU,GAAG;AACtC,YAAM,SAAS,cAAc,GAAG;AAChC,iBAAW,GAAG;AACd,aAAO,IAAI,gBAAeA,SAAQ,MAAM,MAAM;;AAGlD,WAAO,IAAI,gBAAeA,SAAQ,IAAI,MAAM,IAAI,SAAS,IAAI,OAAO,IAAI,UAAU,IAAI,IAAG,CAAA,CAAG;EAChG;;;;;;EAOA,OAAO,WAAW,OAAU;AACxB,WAAQ,SAAS,MAAM,QAAQ,MAAM;EACzC;;;;ACxiDJ,IAAM,eAAoC,oBAAI,IAAG;AACjD,aAAa,IAAI,GAAM,eAAe;AACtC,aAAa,IAAI,GAAM,cAAc;AACrC,aAAa,IAAI,IAAM,UAAU;AACjC,aAAa,IAAI,IAAM,gBAAgB;AACvC,aAAa,IAAI,IAAM,kBAAkB;AACzC,aAAa,IAAI,IAAM,kBAAkB;AACzC,aAAa,IAAI,IAAM,iBAAiB;AACxC,aAAa,IAAI,IAAM,mBAAmB;AAC1C,aAAa,IAAI,IAAM,eAAe;AACtC,aAAa,IAAI,IAAM,6BAA6B;AAEpD,IAAM,iBAAiB,IAAI,OAAO,iBAAiB;AACnD,IAAM,kBAAkB,IAAI,OAAO,mBAAmB;AAGtD,IAAI,eAAgC;AACpC,IAAI,sBAAsB;AAE1B,SAAS,wBAAwB,QAA6B,IAAiES,OAAwB,UAAkB;AACrK,MAAI,UAAU;AAEd,MAAI,SAAwB;AAC5B,QAAM,aAAa;AACnB,MAAI,SAAuE;AAE3E,MAAIA,OAAM;AACN,cAAU;AAEV,UAAMC,SAAQ,SAASD,KAAI;AAC3B,IAAAA,QAAO,QAAQA,KAAI;AAEnB,QAAIC,OAAM,WAAW,GAAG;AACpB,iBAAW;AACX,eAAS;eAEFA,OAAM,SAAS,OAAO,GAAG;AAChC,iBAAW;eAEJ,QAAQA,OAAM,MAAM,GAAG,CAAC,CAAC,MAAM,cAAc;AAEpD,UAAI;AACA,iBAAS,SAAS,OAAO,CAAE,QAAQ,GAAIA,OAAM,MAAM,CAAC,CAAC,EAAE,CAAC;AACxD,iBAAS;UACL,WAAW;UACX,MAAM;UACN,MAAM,CAAE,MAAM;;AAElB,mBAAW,KAAM,KAAK,UAAU,MAAM,CAAE;eAEnC,OAAO;AACZ,mBAAW;;eAGR,QAAQA,OAAM,MAAM,GAAG,CAAC,CAAC,MAAM,cAAc;AAEpD,UAAI;AACA,cAAM,OAAO,OAAO,SAAS,OAAO,CAAE,SAAS,GAAIA,OAAM,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AACrE,iBAAS;UACL,WAAW;UACX,MAAM;UACN,MAAM,CAAE,IAAI;;AAEhB,iBAAS,gBAAiB,aAAa,IAAI,IAAI,KAAK,SAAU,IAAK,IAAK;AACxE,mBAAW,KAAM,MAAO;eACnB,OAAO;AACZ,mBAAW;;WAEZ;AACH,iBAAW;;;AAInB,QAAM,cAAwC;IAC1C,IAAK,GAAG,KAAK,WAAW,GAAG,EAAE,IAAG;IAChC,MAAO,GAAG,QAAQ;;AAEtB,MAAI,GAAG,MAAM;AAAE,gBAAY,OAAO,WAAW,GAAG,IAAI;;AAEpD,SAAO,UAAU,SAAS,kBAAkB;IACxC;IAAQ,MAAAD;IAAM;IAAQ;IAAa;IAAY;GAClD;AACL;AAxHA;AA8HM,IAAO,YAAP,MAAO,UAAQ;EAAf;;;;;;;;;EAkDF,gBAAgB,OAAwC;AACpD,UAAM,SAAuB,MAAM,IAAI,CAAC,SAAS,sBAAK,kCAAL,WAAe,UAAU,KAAK,IAAI,EAAE;AACrF,UAAM,QAAQ,IAAI,WAAW,QAAQ,GAAG;AACxC,WAAO,MAAM,aAAY;EAC7B;;;;;;EAOA,OAAO,OAA0C,QAA0B;AACvE,wBAAoB,OAAO,QAAQ,MAAM,QAAQ,8BAA8B;AAE/E,UAAM,SAAS,MAAM,IAAI,CAAC,SAAS,sBAAK,kCAAL,WAAe,UAAU,KAAK,IAAI,EAAE;AACvE,UAAM,QAAS,IAAI,WAAW,QAAQ,GAAG;AAEzC,UAAM,SAAS,IAAI,OAAM;AACzB,UAAM,OAAO,QAAQ,MAAM;AAC3B,WAAO,OAAO;EAClB;;;;;;;;EASA,OAAO,OAA0CA,OAAiB,OAAe;AAC7E,UAAM,SAAuB,MAAM,IAAI,CAAC,SAAS,sBAAK,kCAAL,WAAe,UAAU,KAAK,IAAI,EAAE;AACrF,UAAM,QAAQ,IAAI,WAAW,QAAQ,GAAG;AACxC,WAAO,MAAM,OAAO,IAAI,OAAOA,OAAM,OAAO,mBAAmB,CAAC;EACpE;EAEA,OAAO,wBAAwB,OAAa;AACxC,mBAAe,OAAO,UAAW,YAAY,OAAO,UAAU,KAAK,GAAG,sCAAsC,SAAS,KAAK;AAC1H,0BAAsB;EAC1B;;;;;;EAOA,OAAO,kBAAe;AAClB,QAAI,gBAAgB,MAAM;AACtB,qBAAe,IAAI,UAAQ;;AAE/B,WAAO;EACX;;;;;;EAOA,OAAO,wBAAwB,QAA6B,IAAiEA,OAAsB;AAC/I,WAAO,wBAAwB,QAAQ,IAAIA,OAAM,UAAS,gBAAe,CAAE;EAC/E;;AA7GE;AAEF,cAAS,SAAC,OAAgB;AACtB,MAAI,MAAM,QAAO,GAAI;AACjB,WAAO,IAAI,WAAW,sBAAK,kCAAL,WAAe,MAAM,gBAAgB,MAAM,aAAa,MAAM,IAAI;;AAG5F,MAAI,MAAM,QAAO,GAAI;AACjB,WAAO,IAAI,WAAW,MAAM,WAAW,IAAI,CAAC,MAAM,sBAAK,kCAAL,WAAe,EAAE,GAAG,MAAM,IAAI;;AAGpF,UAAQ,MAAM,UAAU;IACpB,KAAK;AACD,aAAO,IAAI,aAAa,MAAM,IAAI;IACtC,KAAK;AACD,aAAO,IAAI,aAAa,MAAM,IAAI;IACtC,KAAK;AACD,aAAO,IAAI,YAAY,MAAM,IAAI;IACrC,KAAK;AACD,aAAO,IAAI,WAAW,MAAM,IAAI;IACpC,KAAK;AACD,aAAO,IAAI,UAAU,MAAM,IAAI;;AAIvC,MAAI,QAAQ,MAAM,KAAK,MAAM,eAAe;AAC5C,MAAI,OAAO;AACP,QAAI,OAAO,SAAS,MAAM,CAAC,KAAK,KAAK;AACrC,mBAAe,SAAS,KAAK,QAAQ,OAAQ,OAAO,MAAO,GACvD,aAAa,MAAM,CAAC,IAAI,eAAe,SAAS,KAAK;AACzD,WAAO,IAAI,YAAY,OAAO,GAAI,MAAM,CAAC,MAAM,OAAQ,MAAM,IAAI;;AAIrE,UAAQ,MAAM,KAAK,MAAM,cAAc;AACvC,MAAI,OAAO;AACP,QAAI,OAAO,SAAS,MAAM,CAAC,CAAC;AAC5B,mBAAe,SAAS,KAAK,QAAQ,IAAI,wBAAwB,SAAS,KAAK;AAC/E,WAAO,IAAI,gBAAgB,MAAM,MAAM,IAAI;;AAG/C,iBAAe,OAAO,gBAAgB,QAAQ,MAAM,IAAI;AAC5D;AA1CE,IAAO,WAAP;;;AC/GA,SAAU,oBAAoB,MAAY;AAG5C,QAAME,SAAQ,YAAY,IAAI;AAG9B,MAAIA,OAAM,SAAS,IAAI;AAAE,UAAM,IAAI,MAAM,2CAA2C;;AAGpF,SAAO,aAAaA,QAAO,EAAE;AACjC;AAKM,SAAU,oBAAoB,QAAiB;AACjD,QAAMC,QAAO,SAAS,QAAQ,OAAO;AAGrC,MAAIA,MAAK,WAAW,IAAI;AAAE,UAAM,IAAI,MAAM,qCAAqC;;AAC/E,MAAIA,MAAK,EAAE,MAAM,GAAG;AAAE,UAAM,IAAI,MAAM,6CAA6C;;AAGnF,MAAI,SAAS;AACb,SAAOA,MAAK,SAAS,CAAC,MAAM,GAAG;AAAE;;AAGjC,SAAO,aAAaA,MAAK,MAAM,GAAG,MAAM,CAAC;AAC7C;;;ACJM,IAAO,iBAAP,MAAqB;;;;EA6BvB,YAAY,UAAyB,OAAe,MAAY;AAzBvD;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAML,UAAM,OAAO,SAAS,MAAM,YAAY,SAAS,OAAM;AACvD,qBAAiC,MAAM;MACnC;MAAU;MAAM;MAAW;MAAO;KACrC;EACL;;AAQE,IAAO,yBAAP,MAA6B;;;;EAkC/B,YAAY,UAA4B,UAAkB,MAAc,OAAa;AA9B5E;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAML,UAAM,OAAO,SAAS,MAAM,YAAY,SAAS,OAAM;AACvD,qBAAyC,MAAM;MAC3C;MAAU;MAAM;MAAM;MAAW;MAAU;KAC9C;EACL;;AAOE,IAAO,mBAAP,MAAuB;;;;EA6BzB,YAAY,UAAyB,UAAkB,MAAY;AAzB1D;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAML,UAAM,OAAO,SAAS,MAAM,YAAY,SAAS,OAAM;AACvD,qBAAmC,MAAM;MACrC;MAAU;MAAM;MAAM;MAAW;KACpC;EACL;;AASE,IAAO,UAAP,MAAc;;;;EAuBhB,YAAYC,OAAmB;AAnBtB;;;;AAKA;;;;AAeL,qBAA0B,MAAM,EAAE,MAAAA,OAAM,YAAY,KAAI,CAAE;EAC9D;;;;;;EATA,OAAO,UAAU,OAAU;AACvB,WAAO,CAAC,EAAE,SAAS,MAAM;EAC7B;;AAkBJ,IAAMC,gBAAuC;EACzC,KAAK;EACL,KAAK;EACL,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;;AAGV,IAAM,gBAA2C;EAC7C,cAAc;IACV,WAAW;IACX,MAAM;IACN,QAAQ,CAAE,QAAQ;IAClB,QAAQ,CAAC,YAAmB;AACxB,aAAO,+BAAgC,KAAK,UAAU,OAAO,CAAE;IACnE;;EAEJ,cAAc;IACV,WAAW;IACX,MAAM;IACN,QAAQ,CAAE,SAAS;IACnB,QAAQ,CAAC,SAAgB;AACrB,UAAI,SAAS;AACb,UAAI,QAAQ,KAAK,QAAQ,OAAQA,cAAa,KAAK,SAAQ,CAAE,GAAG;AAC5D,iBAASA,cAAa,KAAK,SAAQ,CAAE;;AAEzC,aAAO,8BAA+B,KAAK,SAAS,EAAE,CAAE,KAAM,MAAO;IACzE;;;AA9OR;AAsSM,IAAO,aAAP,MAAO,WAAS;;;;EAgClB,YAAY,WAAuB;AAhCjC;AAKO;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAET;AACA;AACA;AAGA;;AAMI,QAAI,MAAuD,CAAA;AAC3D,QAAI,OAAO,cAAe,UAAU;AAChC,YAAM,KAAK,MAAM,SAAS;WACvB;AACH,YAAM;;AAGV,uBAAK,YAAa,oBAAI,IAAG;AACzB,uBAAK,SAAU,oBAAI,IAAG;AACtB,uBAAK,SAAU,oBAAI,IAAG;AAItB,UAAM,QAAyB,CAAA;AAC/B,eAAW,KAAK,KAAK;AACjB,UAAI;AACA,cAAM,KAAK,SAAS,KAAK,CAAC,CAAC;eACtB,OAAY;AACjB,gBAAQ,IAAI,8BAA+B,KAAK,UAAU,CAAC,CAAE,KAAK,MAAM,OAAO;;;AAIvF,qBAA4B,MAAM;MAC9B,WAAW,OAAO,OAAO,KAAK;KACjC;AAED,QAAI,WAAoC;AACxC,QAAI,UAAU;AAEd,uBAAK,WAAY,KAAK,YAAW;AAGjC,SAAK,UAAU,QAAQ,CAAC,UAAU,UAAS;AACvC,UAAI;AACJ,cAAQ,SAAS,MAAM;QACnB,KAAK;AACD,cAAI,KAAK,QAAQ;AACb,oBAAQ,IAAI,oCAAoC;AAChD;;AAGJ,2BAA4B,MAAM,EAAE,QAA6B,SAAQ,CAAE;AAC3E;QAEJ,KAAK;AACD,cAAI,SAAS,OAAO,WAAW,GAAG;AAC9B,sBAAU;iBACP;AACH,2BAAe,CAAC,YAA+B,SAAU,YAAY,SAAS,SAC1E,kCAAkC,aAAc,KAAM,KAAK,QAAQ;AACvE,uBAA6B;AAC7B,sBAAU,SAAS;;AAEvB;QAEJ,KAAK;AAGD,mBAAS,mBAAK;AACd;QAEJ,KAAK;AAED,mBAAS,mBAAK;AACd;QAEJ,KAAK;AACD,mBAAS,mBAAK;AACd;QAEJ;AACI;;AAIR,YAAM,YAAY,SAAS,OAAM;AACjC,UAAI,OAAO,IAAI,SAAS,GAAG;AAAE;;AAE7B,aAAO,IAAI,WAAW,QAAQ;IAClC,CAAC;AAGD,QAAI,CAAC,KAAK,QAAQ;AACd,uBAA4B,MAAM;QAC9B,QAAQ,oBAAoB,KAAK,eAAe;OACnD;;AAGL,qBAA4B,MAAM,EAAE,UAAU,QAAO,CAAE;EAC3D;;;;;;EAOA,OAAO,SAAiB;AACpB,UAAM,SAAU,UAAU,YAAW;AACrC,UAAM,MAAM,KAAK,UAAU,IAAI,CAACC,OAAMA,GAAE,OAAO,MAAM,CAAC;AACtD,WAAO;EACX;;;;;EAMA,aAAU;AACN,UAAM,MAAM,KAAK,UAAU,IAAI,CAACA,OAAMA,GAAE,OAAO,MAAM,CAAC;AAGtD,WAAO,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;EACvD;;;;;EAMA,cAAW;AACP,WAAO,SAAS,gBAAe;EACnC;;;;;EA6FA,gBAAgB,KAAW;AACvB,UAAM,WAAW,sBAAK,sCAAL,WAAkB,KAAK,MAAM;AAC9C,mBAAe,UAAU,wBAAwB,OAAO,GAAG;AAC3D,WAAO,SAAS;EACpB;;;;;;;;EASA,YAAY,KAAW;AACnB,WAAO,CAAC,CAAC,sBAAK,sCAAL,WAAkB,KAAK,MAAM;EAC1C;;;;;;;;;;;EAYA,YAAY,KAAa,QAA2B;AAChD,WAAO,sBAAK,sCAAL,WAAkB,KAAK,UAAU,MAAM;EAClD;;;;EAKA,gBAAgB,UAAyD;AACrE,UAAMC,SAAQ,MAAM,KAAK,mBAAK,YAAW,KAAI,CAAE;AAC/C,IAAAA,OAAM,KAAK,CAAC,GAAGC,OAAM,EAAE,cAAcA,EAAC,CAAC;AACvC,aAAS,IAAI,GAAG,IAAID,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,eAA4B,mBAAK,YAAW,IAAI,IAAI,GAAI,CAAC;;EAEjE;;;;;EAmEA,aAAa,KAAW;AACpB,UAAM,WAAW,sBAAK,mCAAL,WAAe,KAAK,MAAM;AAC3C,mBAAe,UAAU,qBAAqB,OAAO,GAAG;AAExD,WAAO,SAAS;EACpB;;;;;;;;EASA,SAAS,KAAW;AAChB,WAAO,CAAC,CAAC,sBAAK,mCAAL,WAAe,KAAK,MAAM;EACvC;;;;;;;;;;;EAYA,SAAS,KAAa,QAA2B;AAC7C,WAAO,sBAAK,mCAAL,WAAe,KAAK,UAAU,MAAM;EAC/C;;;;EAKA,aAAa,UAAsD;AAC/D,UAAMA,SAAQ,MAAM,KAAK,mBAAK,SAAQ,KAAI,CAAE;AAC5C,IAAAA,OAAM,KAAK,CAAC,GAAGC,OAAM,EAAE,cAAcA,EAAC,CAAC;AACvC,aAAS,IAAI,GAAG,IAAID,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,eAAyB,mBAAK,SAAQ,IAAI,IAAI,GAAI,CAAC;;EAE3D;;;;;;;;;;;EAYA,SAAS,KAAa,QAA2B;AAC7C,QAAI,YAAY,GAAG,GAAG;AAClB,YAAM,WAAW,IAAI,YAAW;AAEhC,UAAI,cAAc,QAAQ,GAAG;AACzB,eAAO,cAAc,KAAK,cAAc,QAAQ,EAAE,SAAS;;AAG/D,iBAAW,YAAY,mBAAK,SAAQ,OAAM,GAAI;AAC1C,YAAI,aAAa,SAAS,UAAU;AAAE,iBAAO;;;AAGjD,aAAO;;AAIX,QAAI,IAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,YAAM,WAAiC,CAAA;AACvC,iBAAW,CAAE,MAAM,QAAQ,KAAM,mBAAK,UAAS;AAC3C,YAAI,KAAK;UAAM;;QAAc,EAAE,CAAC,MAAM,KAAK;AAAE,mBAAS,KAAK,QAAQ;;;AAGvE,UAAI,SAAS,WAAW,GAAG;AACvB,YAAI,QAAQ,SAAS;AAAE,iBAAO,cAAc,KAAK,qBAAqB;;AACtE,YAAI,QAAQ,SAAS;AAAE,iBAAO,cAAc,KAAK,sBAAsB;;AACvE,eAAO;iBACA,SAAS,SAAS,GAAG;AAC5B,cAAM,WAAW,SAAS,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,OAAM,CAAE,CAAC,EAAE,KAAK,IAAI;AAC1E,uBAAe,OAAO,qCAAsC,QAAS,KAAK,QAAQ,GAAG;;AAGzF,aAAO,SAAS,CAAC;;AAIrB,UAAM,cAAc,KAAK,GAAG,EAAE,OAAM;AACpC,QAAI,QAAQ,iBAAiB;AAAE,aAAO,cAAc,KAAK,qBAAqB;;AAC9E,QAAI,QAAQ,kBAAkB;AAAE,aAAO,cAAc,KAAK,sBAAsB;;AAEhF,UAAM,SAAS,mBAAK,SAAQ,IAAI,GAAG;AACnC,QAAI,QAAQ;AAAE,aAAO;;AAErB,WAAO;EACX;;;;EAKA,aAAa,UAAsD;AAC/D,UAAMA,SAAQ,MAAM,KAAK,mBAAK,SAAQ,KAAI,CAAE;AAC5C,IAAAA,OAAM,KAAK,CAAC,GAAGC,OAAM,EAAE,cAAcA,EAAC,CAAC;AACvC,aAAS,IAAI,GAAG,IAAID,OAAM,QAAQ,KAAK;AACnC,YAAM,OAAOA,OAAM,CAAC;AACpB,eAAyB,mBAAK,SAAQ,IAAI,IAAI,GAAI,CAAC;;EAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCA,cAAc,QAAkCE,OAAe;AAC3D,WAAO,mBAAK,WAAU,OAAO,QAAQA,KAAI;EAC7C;EAEA,cAAc,QAAkC,QAA0B;AACtE,WAAO,mBAAK,WAAU,OAAO,QAAQ,MAAM;EAC/C;;;;;EAMA,aAAa,QAA2B;AACpC,WAAO,KAAK,cAAc,KAAK,OAAO,QAAQ,UAAU,CAAA,CAAG;EAC/D;;;;;;;;;;EAWA,kBAAkB,UAAkCA,OAAe;AAC/D,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,YAAY,QAAQ;AACvD,iBAAWA;;AAGf,mBAAe,UAAUG,OAAM,GAAG,CAAC,MAAM,SAAS,UAC9C,uCAAwC,SAAS,IAAK,KAAK,QAAQA,KAAI;AAE3E,WAAO,KAAK,cAAc,SAAS,QAAQ,UAAUA,OAAM,CAAC,CAAC;EACjE;;;;;;;;;EAUA,kBAAkB,UAAkC,QAA2B;AAC3E,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,YAAY,QAAQ;AACvD,iBAAWA;;AAGf,WAAO,OAAO;MACV,SAAS;MACT,KAAK,cAAc,SAAS,QAAQ,UAAU,CAAA,CAAG;KACpD;EACL;;;;;;;;;EAUA,mBAAmB,UAAqCG,OAAe;AACnE,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;;AAGf,mBAAe,UAAUG,OAAM,GAAG,CAAC,MAAM,SAAS,UAC9C,0CAA2C,SAAS,IAAK,KAAK,QAAQA,KAAI;AAE9E,WAAO,KAAK,cAAc,SAAS,QAAQ,UAAUA,OAAM,CAAC,CAAC;EACjE;;;;;;EAOA,mBAAmB,UAAqC,QAA2B;AAC/E,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;;AAGf,WAAO,OAAO;MACV,SAAS;MACT,KAAK,cAAc,SAAS,QAAQ,UAAU,CAAA,CAAG;KACpD;EACL;;;;;;;;;;EAWA,qBAAqB,UAAqCG,OAAe;AACrE,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;;AAGf,QAAI,UAAU;AAEd,UAAMI,SAAQ,aAAaD,KAAI;AAC/B,QAAKC,OAAM,SAAS,OAAQ,GAAG;AAC3B,UAAI;AACA,eAAO,mBAAK,WAAU,OAAO,SAAS,SAASA,MAAK;eAC/C,OAAO;AACZ,kBAAU;;;AAKlB,WAAO,OAAO,SAAS,YAAY;MAC/B,OAAO,QAAQA,MAAK;MACpB,MAAM,EAAE,QAAQ,SAAS,MAAM,WAAW,SAAS,OAAM,EAAE;KAC9D;EACL;EAEA,UAAUC,QAAkB,IAA4B;AACpD,UAAMF,QAAO,SAASE,QAAO,MAAM;AAEnC,UAAM,QAAQ,SAAS,wBAAwB,QAAQ,IAAIF,KAAI;AAG/D,UAAM,eAAe;AACrB,QAAI,MAAM,QAAQ,WAAW,YAAY,GAAG;AACxC,YAAM,WAAW,QAAQA,MAAK,MAAM,GAAG,CAAC,CAAC;AAEzC,YAAM,KAAK,KAAK,SAAS,QAAQ;AACjC,UAAI,IAAI;AACJ,YAAI;AACA,gBAAM,OAAO,mBAAK,WAAU,OAAO,GAAG,QAAQA,MAAK,MAAM,CAAC,CAAC;AAC3D,gBAAM,SAAS;YACX,MAAM,GAAG;YAAM,WAAW,GAAG,OAAM;YAAI;;AAE3C,gBAAM,SAAS,MAAM,OAAO;AAC5B,gBAAM,UAAU,uBAAwB,MAAM,MAAO;iBAC/C,GAAG;AACT,gBAAM,UAAU;;;;AAM5B,UAAM,SAAS,KAAK,iBAAiB,EAAE;AACvC,QAAI,QAAQ;AACR,YAAM,aAAa;QACf,QAAQ,OAAO;QACf,WAAW,OAAO;QAClB,MAAM,OAAO;;;AAIrB,WAAO;EACX;;;;;;;;;EAUA,qBAAqB,UAAqC,QAA2B;AACjF,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,YAAY,QAAQ;AACnC,qBAAeA,IAAG,oBAAoB,YAAY,QAAQ;AAC1D,iBAAWA;;AAEf,WAAO,QAAQ,mBAAK,WAAU,OAAO,SAAS,SAAS,UAAU,CAAA,CAAG,CAAC;EACzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgCA,mBAAmB,UAAkC,QAA0B;AAC3E,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMA,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,iBAAiB,QAAQ;AAC5D,iBAAWA;;AAGf,WAAO,OAAO,UAAU,SAAS,OAAO,QAAQ,0BAA2B,SAAS,OAAM,CAAG,IACzF,uBAAuB,EAAE,OAAO,OAAO,QAAQ,eAAe,SAAS,OAAO,OAAM,CAAE;AAE1F,UAAM,SAA+C,CAAA;AACrD,QAAI,CAAC,SAAS,WAAW;AAAE,aAAO,KAAK,SAAS,SAAS;;AAGzD,UAAM,cAAc,CAAC,OAAkB,UAAsB;AACzD,UAAI,MAAM,SAAS,UAAU;AACxB,eAAO,GAAG,KAAK;iBACT,MAAM,SAAS,SAAS;AAC9B,eAAO,UAAU,QAAQ,KAAK,CAAC;;AAGpC,UAAI,MAAM,SAAS,UAAU,OAAO,UAAW,WAAW;AACtD,gBAAS,QAAQ,SAAQ;iBAClB,MAAM,KAAK,MAAM,QAAQ,GAAG;AACnC,gBAAQ,QAAQ,KAAK;iBACd,MAAM,KAAK,MAAM,QAAQ,GAAG;AACnC,gBAAQ,aAAa,OAAO,EAAE;iBACvB,MAAM,SAAS,WAAW;AAEjC,2BAAK,WAAU,OAAQ,CAAE,SAAS,GAAI,CAAE,KAAK,CAAE;;AAGnD,aAAO,aAAa,QAAQ,KAAK,GAAG,EAAE;IAC1C;AAEA,WAAO,QAAQ,CAAC,OAAO,UAAS;AAE5B,YAAM,QAAwB,SAAU,OAAO,KAAK;AAEpD,UAAI,CAAC,MAAM,SAAS;AAChB,uBAAe,SAAS,MACpB,sDAAuD,cAAc,MAAM,MAAO,KAAK;AAC3F;;AAGJ,UAAI,SAAS,MAAM;AACf,eAAO,KAAK,IAAI;iBACT,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;AACjE,uBAAe,OAAO,iDAAkD,cAAc,MAAM,MAAO,KAAK;iBACjG,MAAM,QAAQ,KAAK,GAAG;AAC7B,eAAO,KAAK,MAAM,IAAI,CAACM,WAAU,YAAY,OAAOA,MAAK,CAAC,CAAC;aACxD;AACH,eAAO,KAAK,YAAY,OAAO,KAAK,CAAC;;IAE7C,CAAC;AAGD,WAAO,OAAO,UAAU,OAAO,OAAO,SAAS,CAAC,MAAM,MAAM;AACxD,aAAO,IAAG;;AAGd,WAAO;EACX;EAEA,eAAe,UAAkC,QAA0B;AACvE,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMN,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,iBAAiB,QAAQ;AAC5D,iBAAWA;;AAGf,UAAM,SAAwB,CAAA;AAE9B,UAAM,YAA8B,CAAA;AACpC,UAAM,aAA4B,CAAA;AAElC,QAAI,CAAC,SAAS,WAAW;AACrB,aAAO,KAAK,SAAS,SAAS;;AAGlC,mBAAe,OAAO,WAAW,SAAS,OAAO,QAC7C,mCAAmC,UAAU,MAAM;AAEvD,aAAS,OAAO,QAAQ,CAAC,OAAO,UAAS;AACrC,YAAM,QAAQ,OAAO,KAAK;AAC1B,UAAI,MAAM,SAAS;AACf,YAAI,MAAM,SAAS,UAAU;AACzB,iBAAO,KAAK,GAAG,KAAK,CAAC;mBACd,MAAM,SAAS,SAAS;AAC/B,iBAAO,KAAK,UAAU,KAAK,CAAC;mBACrB,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;AAEjE,gBAAM,IAAI,MAAM,iBAAiB;eAC9B;AACH,iBAAO,KAAK,mBAAK,WAAU,OAAO,CAAE,MAAM,IAAI,GAAI,CAAE,KAAK,CAAE,CAAC;;aAE7D;AACH,kBAAU,KAAK,KAAK;AACpB,mBAAW,KAAK,KAAK;;IAE7B,CAAC;AAED,WAAO;MACH,MAAM,mBAAK,WAAU,OAAO,WAAY,UAAU;MAClD;;EAER;;EAGA,eAAe,UAAkCG,OAAiB,QAA8B;AAC5F,QAAI,OAAO,aAAc,UAAU;AAC/B,YAAMH,KAAI,KAAK,SAAS,QAAQ;AAChC,qBAAeA,IAAG,iBAAiB,iBAAiB,QAAQ;AAC5D,iBAAWA;;AAGf,QAAI,UAAU,QAAQ,CAAC,SAAS,WAAW;AACvC,YAAM,aAAa,SAAS;AAC5B,qBAAe,YAAY,OAAO,CAAC,GAAG,EAAE,KAAK,OAAO,CAAC,EAAE,YAAW,MAAO,YACrE,2BAA2B,aAAa,OAAO,CAAC,CAAC;AACrD,eAAS,OAAO,MAAM,CAAC;;AAG3B,UAAM,UAA4B,CAAA;AAClC,UAAM,aAA+B,CAAA;AACrC,UAAM,UAA0B,CAAA;AAEhC,aAAS,OAAO,QAAQ,CAAC,OAAO,UAAS;AACrC,UAAI,MAAM,SAAS;AACf,YAAI,MAAM,SAAS,YAAY,MAAM,SAAS,WAAW,MAAM,aAAa,WAAW,MAAM,aAAa,SAAS;AAC/G,kBAAQ,KAAK,UAAU,KAAK,EAAE,MAAM,WAAW,MAAM,MAAM,KAAI,CAAE,CAAC;AAClE,kBAAQ,KAAK,IAAI;eACd;AACH,kBAAQ,KAAK,KAAK;AAClB,kBAAQ,KAAK,KAAK;;aAEnB;AACH,mBAAW,KAAK,KAAK;AACrB,gBAAQ,KAAK,KAAK;;IAE1B,CAAC;AAED,UAAM,gBAAiB,UAAU,OAAQ,mBAAK,WAAU,OAAO,SAAS,OAAO,MAAM,CAAC,IAAG;AACzF,UAAM,mBAAmB,mBAAK,WAAU,OAAO,YAAYG,OAAM,IAAI;AAGrE,UAAM,SAAqB,CAAA;AAC3B,UAAM,OAA6B,CAAA;AACnC,QAAI,kBAAkB,GAAG,eAAe;AACxC,aAAS,OAAO,QAAQ,CAAC,OAAO,UAAS;AACrC,UAAI,QAAgC;AACpC,UAAI,MAAM,SAAS;AACf,YAAI,iBAAiB,MAAM;AACvB,kBAAQ,IAAI,QAAQ,IAAI;mBAEjB,QAAQ,KAAK,GAAG;AACvB,kBAAQ,IAAI,QAAQ,cAAc,cAAc,CAAC;eAE9C;AACH,cAAI;AACA,oBAAQ,cAAc,cAAc;mBAC/B,OAAY;AACjB,oBAAQ;;;aAGb;AACH,YAAI;AACA,kBAAQ,iBAAiB,iBAAiB;iBACrC,OAAY;AACjB,kBAAQ;;;AAIhB,aAAO,KAAK,KAAK;AACjB,WAAK,KAAK,MAAM,QAAQ,IAAI;IAChC,CAAC;AAED,WAAO,OAAO,UAAU,QAAQ,IAAI;EACxC;;;;;;;EAQA,iBAAiB,IAA0C;AACvD,UAAMA,QAAO,SAAS,GAAG,MAAM,SAAS;AACxC,UAAM,QAAQ,UAAW,GAAG,SAAS,OAAQ,GAAG,QAAO,GAAG,UAAU;AAEpE,UAAM,WAAW,KAAK,YAAY,QAAQA,MAAK,MAAM,GAAG,CAAC,CAAC,CAAC;AAE3D,QAAI,CAAC,UAAU;AAAE,aAAO;;AAExB,UAAM,OAAO,mBAAK,WAAU,OAAO,SAAS,QAAQA,MAAK,MAAM,CAAC,CAAC;AACjE,WAAO,IAAI,uBAAuB,UAAU,SAAS,UAAU,MAAM,KAAK;EAC9E;EAEA,gBAAgBA,OAAe;AAC3B,UAAM,IAAI,MAAM,OAAO;EAC3B;;;;;;;EAQA,SAAS,KAAmD;AACxD,UAAM,WAAW,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC;AAE5C,QAAI,CAAC,YAAY,SAAS,WAAW;AAAE,aAAO;;AAO/C,WAAO,IAAI,eAAe,UAAU,SAAS,WAAW,KAAK,eAAe,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC;EAC9G;;;;;;;EAQA,WAAWA,OAAe;AACtB,UAAM,UAAU,QAAQA,KAAI;AAE5B,UAAM,WAAW,KAAK,SAAS,UAAU,SAAS,GAAG,CAAC,CAAC;AAEvD,QAAI,CAAC,UAAU;AAAE,aAAO;;AAExB,UAAM,OAAO,mBAAK,WAAU,OAAO,SAAS,QAAQ,UAAU,SAAS,CAAC,CAAC;AACzE,WAAO,IAAI,iBAAiB,UAAU,SAAS,UAAU,IAAI;EACjE;;;;;;;EAQA,OAAO,KAAK,OAA+B;AAEvC,QAAI,iBAAiB,YAAW;AAAE,aAAO;;AAGzC,QAAI,OAAO,UAAW,UAAU;AAAE,aAAO,IAAI,WAAU,KAAK,MAAM,KAAK,CAAC;;AAGxE,QAAI,OAAa,MAAO,eAAgB,YAAY;AAChD,aAAO,IAAI,WAAgB,MAAO,WAAU,CAAE;;AAIlD,QAAI,OAAa,MAAO,WAAY,YAAY;AAC5C,aAAO,IAAI,WAAgB,MAAO,OAAO,MAAM,CAAC;;AAIpD,WAAO,IAAI,WAAU,KAAK;EAC9B;;AAz7BA;AACA;AACA;AAGA;AA3BE;;AA2JF,iBAAY,SAAC,KAAa,QAAmC,aAAoB;AAG7E,MAAI,YAAY,GAAG,GAAG;AAClB,UAAM,WAAW,IAAI,YAAW;AAChC,eAAW,YAAY,mBAAK,YAAW,OAAM,GAAI;AAC7C,UAAI,aAAa,SAAS,UAAU;AAAE,eAAO;;;AAEjD,WAAO;;AAIX,MAAI,IAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,UAAM,WAAoC,CAAA;AAC1C,eAAW,CAAE,MAAM,QAAQ,KAAM,mBAAK,aAAY;AAC9C,UAAI,KAAK;QAAM;;MAAc,EAAE,CAAC,MAAM,KAAK;AAAE,iBAAS,KAAK,QAAQ;;;AAGvE,QAAI,QAAQ;AACR,YAAM,YAAa,OAAO,SAAS,IAAK,OAAO,OAAO,SAAS,CAAC,IAAG;AAEnE,UAAI,cAAc,OAAO;AACzB,UAAI,eAAe;AACnB,UAAI,MAAM,QAAQ,SAAS,KAAK,UAAU,SAAS,aAAa;AAC5D,uBAAe;AACf;;AAKJ,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,cAAM,SAAS,SAAS,CAAC,EAAE,OAAO;AAClC,YAAI,WAAW,gBAAgB,CAAC,gBAAgB,WAAW,cAAc,IAAI;AACzE,mBAAS,OAAO,GAAG,CAAC;;;AAK5B,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,cAAM,SAAS,SAAS,CAAC,EAAE;AAC3B,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAEpC,cAAI,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AAAE;;AAGjC,cAAI,KAAK,OAAO,QAAQ;AACpB,gBAAI,OAAO,CAAC,EAAE,SAAS,aAAa;AAAE;;AACtC,qBAAS,OAAO,GAAG,CAAC;AACpB;;AAIJ,cAAI,OAAO,CAAC,EAAE,SAAS,OAAO,CAAC,EAAE,UAAU;AACvC,qBAAS,OAAO,GAAG,CAAC;AACpB;;;;;AAQhB,QAAI,SAAS,WAAW,KAAK,UAAU,OAAO,WAAW,SAAS,CAAC,EAAE,OAAO,QAAQ;AAChF,YAAM,UAAU,OAAO,OAAO,SAAS,CAAC;AACxC,UAAI,WAAW,QAAQ,MAAM,QAAQ,OAAO,KAAK,OAAO,YAAa,UAAU;AAC3E,iBAAS,OAAO,GAAG,CAAC;;;AAI5B,QAAI,SAAS,WAAW,GAAG;AAAE,aAAO;;AAEpC,QAAI,SAAS,SAAS,KAAK,aAAa;AACpC,YAAM,WAAW,SAAS,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,OAAM,CAAE,CAAC,EAAE,KAAK,IAAI;AAC1E,qBAAe,OAAO,gDAAiD,QAAS,KAAK,OAAO,GAAG;;AAGnG,WAAO,SAAS,CAAC;;AAIrB,QAAM,SAAS,mBAAK,YAAW,IAAI,iBAAiB,KAAK,GAAG,EAAE,OAAM,CAAE;AACtE,MAAI,QAAQ;AAAE,WAAO;;AAErB,SAAO;AACX;;AAmDA,cAAS,SAAC,KAAa,QAA0C,aAAoB;AAGjF,MAAI,YAAY,GAAG,GAAG;AAClB,UAAM,aAAa,IAAI,YAAW;AAClC,eAAW,YAAY,mBAAK,SAAQ,OAAM,GAAI;AAC1C,UAAI,eAAe,SAAS,WAAW;AAAE,eAAO;;;AAEpD,WAAO;;AAIX,MAAI,IAAI,QAAQ,GAAG,MAAM,IAAI;AACzB,UAAM,WAAiC,CAAA;AACvC,eAAW,CAAE,MAAM,QAAQ,KAAM,mBAAK,UAAS;AAC3C,UAAI,KAAK;QAAM;;MAAc,EAAE,CAAC,MAAM,KAAK;AAAE,iBAAS,KAAK,QAAQ;;;AAGvE,QAAI,QAAQ;AAER,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,SAAS,CAAC,EAAE,OAAO,SAAS,OAAO,QAAQ;AAC3C,mBAAS,OAAO,GAAG,CAAC;;;AAK5B,eAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,cAAM,SAAS,SAAS,CAAC,EAAE;AAC3B,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AAEpC,cAAI,CAAC,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG;AAAE;;AAGjC,cAAI,OAAO,CAAC,EAAE,SAAS,OAAO,CAAC,EAAE,UAAU;AACvC,qBAAS,OAAO,GAAG,CAAC;AACpB;;;;;AAMhB,QAAI,SAAS,WAAW,GAAG;AAAE,aAAO;;AAEpC,QAAI,SAAS,SAAS,KAAK,aAAa;AACpC,YAAM,WAAW,SAAS,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,OAAM,CAAE,CAAC,EAAE,KAAK,IAAI;AAC1E,qBAAe,OAAO,6CAA8C,QAAS,KAAK,OAAO,GAAG;;AAGhG,WAAO,SAAS,CAAC;;AAIrB,QAAM,SAAS,mBAAK,SAAQ,IAAI,cAAc,KAAK,GAAG,EAAE,OAAM,CAAE;AAChE,MAAI,QAAQ;AAAE,WAAO;;AAErB,SAAO;AACX;AA3VE,IAAO,YAAP;;;ACnRN,IAAMI,QAAO,OAAO,CAAC;AAwBrB,SAASC,UAAY,OAA2B;AAC5C,MAAI,SAAS,MAAM;AAAE,WAAO;;AAC5B,SAAO;AACX;AAEA,SAAS,OAAO,OAAoB;AAChC,MAAI,SAAS,MAAM;AAAE,WAAO;;AAC5B,SAAO,MAAM,SAAQ;AACzB;AAQM,IAAO,UAAP,MAAc;;;;;EAmChB,YAAY,UAA0B,cAA8B,sBAAoC;AA/B/F;;;;AAcA;;;;;;;;;;;;;AAWA;;;;;;;;;;AAOL,qBAA0B,MAAM;MAC5B,UAAUA,UAAS,QAAQ;MAC3B,cAAcA,UAAS,YAAY;MACnC,sBAAsBA,UAAS,oBAAoB;KACtD;EACL;;;;EAKA,SAAM;AACF,UAAM,EACF,UAAU,cAAc,qBAAoB,IAC5C;AACJ,WAAO;MACH,OAAO;MACP,UAAU,OAAO,QAAQ;MACzB,cAAc,OAAO,YAAY;MACjC,sBAAsB,OAAO,oBAAoB;;EAEzD;;AA6OE,SAAU,YAAY,KAAuB;AAC/C,QAAM,SAAc,CAAA;AAGpB,MAAI,IAAI,IAAI;AAAE,WAAO,KAAK,IAAI;;AAC9B,MAAI,IAAI,MAAM;AAAE,WAAO,OAAO,IAAI;;AAElC,MAAI,IAAI,MAAM;AAAE,WAAO,OAAO,QAAQ,IAAI,IAAI;;AAE9C,QAAM,aAAa,qFAAqF,MAAM,GAAG;AACjH,aAAW,OAAO,YAAY;AAC1B,QAAI,EAAE,OAAO,QAAc,IAAK,GAAG,KAAK,MAAM;AAAE;;AAChD,WAAO,GAAG,IAAI,UAAgB,IAAK,GAAG,GAAG,WAAY,GAAI,EAAE;;AAG/D,QAAM,aAAa,aAAa,MAAM,GAAG;AACzC,aAAW,OAAO,YAAY;AAC1B,QAAI,EAAE,OAAO,QAAc,IAAK,GAAG,KAAK,MAAM;AAAE;;AAChD,WAAO,GAAG,IAAI,UAAgB,IAAK,GAAG,GAAG,WAAY,GAAI,EAAE;;AAG/D,MAAI,IAAI,YAAY;AAChB,WAAO,aAAa,cAAc,IAAI,UAAU;;AAGpD,MAAI,cAAc,KAAK;AAAE,WAAO,WAAW,IAAI;;AAE/C,MAAI,oBAAoB,KAAK;AACzB,WAAO,iBAAiB,CAAC,CAAC,IAAI;;AAGlC,MAAI,gBAAgB,KAAK;AACrB,WAAO,aAAa,IAAI;;AAG5B,MAAI,yBAAyB,OAAO,IAAI,qBAAqB;AACzD,WAAO,sBAAsB,IAAI,oBAAoB,MAAK;;AAG9D,MAAI,SAAS,KAAK;AAAE,WAAO,MAAM,IAAI;;AAErC,MAAI,WAAW,OAAO,IAAI,OAAO;AAC7B,WAAO,QAAQ,IAAI,MAAM,IAAI,CAACC,OAAK;AAC/B,UAAI,YAAYA,EAAC,GAAG;AAAE,eAAO,QAAQA,EAAC;;AACtC,aAAO,OAAO,OAAO,CAAA,GAAKA,EAAC;IAC/B,CAAC;;AAGL,SAAO;AACX;AAjZA;AA6bM,IAAO,QAAP,MAAY;;;;;;;EA+Hd,YAAY,OAAoB,UAAkB;AAzHzC;;;;;AAMA;;;;;AAQA;;;;;;;AAMA;;;;;AAKA;;;;AAMT;;;;;AAQS;;;;;;;AAWA;;;;;;;;;;AAMA;;;;AAKA;;;;AAOA;;;;;AAKA;;;;AAMA;;;;;AAMA;;;;;AAMA;;;;;AAMA;;;;;AAKA;;;;AASA;;;;;;;;AAEA;AAUL,uBAAK,eAAgB,MAAM,aAAa,IAAI,CAAC,OAAM;AAC/C,UAAI,OAAO,OAAQ,UAAU;AACzB,eAAO,IAAI,oBAAoB,IAAI,QAAQ;;AAE/C,aAAO;IACX,CAAC;AAED,qBAAwB,MAAM;MAC1B;MAEA,MAAMC,UAAS,MAAM,IAAI;MAEzB,QAAQ,MAAM;MACd,WAAW,MAAM;MAEjB,YAAY,MAAM;MAClB,uBAAuB,MAAM;MAE7B,OAAO,MAAM;MACb,YAAY,MAAM;MAElB,UAAU,MAAM;MAChB,SAAS,MAAM;MACf,aAAa,MAAM;MACnB,eAAe,MAAM;MACrB,OAAO,MAAM;MACb,YAAYA,UAAS,MAAM,UAAU;MACrC,WAAW,MAAM;MAEjB,eAAeA,UAAS,MAAM,aAAa;MAE3C,WAAW,MAAM;MACjB,cAAc,MAAM;KACvB;EACL;;;;;EAMA,IAAI,eAAY;AACZ,WAAO,mBAAK,eAAc,IAAI,CAAC,OAAM;AACjC,UAAI,OAAO,OAAQ,UAAU;AAAE,eAAO;;AACtC,aAAO,GAAG;IACd,CAAC;EACL;;;;;;;;;EAUA,IAAI,yBAAsB;AACtB,UAAM,MAAM,mBAAK,eAAc,MAAK;AAGpC,QAAI,IAAI,WAAW,GAAG;AAAE,aAAO,CAAA;;AAG/B,WAAO,OAAO,IAAI,CAAC,MAAO,UAAU,uDAAuD,yBAAyB;MAChH,WAAW;KACd;AAED,WAAmC;EACvC;;;;EAKA,SAAM;AACF,UAAM,EACF,eAAe,YAAY,WAAW,UAAU,SAAS,MAAAC,OACzD,OAAO,YAAY,OAAO,QAAAC,SAAQ,YAAY,uBAC9C,WAAW,cAAc,WAAW,aAAY,IAChD;AAEJ,WAAO;MACH,OAAO;MACP,eAAe,OAAO,aAAa;MACnC,YAAY,OAAO,UAAU;MAC7B;MACA,UAAU,OAAO,QAAQ;MACzB,SAAS,OAAO,OAAO;MACvB,aAAa,OAAO,KAAK,WAAW;MACpC,eAAe,OAAO,KAAK,aAAa;MACxC,MAAAD;MAAM;MAAO;MAAY;MAAO,QAAAC;MAAQ;MAAY;MACpD;MAAuB;MAAW;MAClC;;EAER;EAEA,CAAC,OAAO,QAAQ,IAAC;AACb,QAAI,QAAQ;AACZ,UAAM,MAAM,KAAK;AACjB,WAAO;MACH,MAAM,MAAK;AACP,YAAI,QAAQ,KAAK,QAAQ;AACrB,iBAAO;YACH,OAAO,IAAI,OAAO;YAAG,MAAM;;;AAGnC,eAAO,EAAE,OAAO,QAAW,MAAM,KAAI;MACzC;;EAER;;;;EAKA,IAAI,SAAM;AAAa,WAAO,mBAAK,eAAc;EAAQ;;;;EAKzD,IAAI,OAAI;AACJ,QAAI,KAAK,aAAa,MAAM;AAAE,aAAO;;AACrC,WAAO,IAAI,KAAK,KAAK,YAAY,GAAI;EACzC;;;;EAKA,MAAM,eAAe,aAA4B;AAE7C,QAAI,KAA+C;AACnD,QAAI,OAAO,gBAAiB,UAAU;AAClC,WAAK,mBAAK,eAAc,WAAW;WAEhC;AACH,YAAMD,QAAO,YAAY,YAAW;AACpC,iBAAW,KAAK,mBAAK,gBAAe;AAChC,YAAI,OAAO,MAAO,UAAU;AACxB,cAAI,MAAMA,OAAM;AAAE;;AAClB,eAAK;AACL;eACG;AACH,cAAI,EAAE,SAASA,OAAM;AAAE;;AACvB,eAAK;AACL;;;;AAIZ,QAAI,MAAM,MAAM;AAAE,YAAM,IAAI,MAAM,YAAY;;AAE9C,QAAI,OAAO,OAAQ,UAAU;AACzB,aAA6B,MAAM,KAAK,SAAS,eAAe,EAAE;WAC/D;AACH,aAAO;;EAEf;;;;;;;EAQA,yBAAyB,aAA4B;AACjD,UAAM,MAAM,KAAK;AACjB,QAAI,OAAO,gBAAiB,UAAU;AAClC,aAAO,IAAI,WAAW;;AAG1B,kBAAc,YAAY,YAAW;AACrC,eAAW,MAAM,KAAK;AAClB,UAAI,GAAG,SAAS,aAAa;AAAE,eAAO;;;AAG1C,mBAAe,OAAO,2BAA2B,eAAe,WAAW;EAC/E;;;;;EAMA,UAAO;AAAyB,WAAO,CAAC,CAAC,KAAK;EAAM;;;;EAKpD,WAAQ;AACJ,WAAO,CAAC,CAAC,KAAK;EAClB;;;;EAKA,gBAAa;AACT,QAAI,CAAC,KAAK,QAAO,GAAI;AAAE,YAAM,IAAI,MAAM,EAAE;;AACzC,WAAO,0BAA0B,IAAI;EACzC;;AA3MS;AAsNP,IAAO,MAAP,MAAU;;;;EAqEZ,YAAY,KAAgB,UAAkB;AA/DrC;;;;;AAMA;;;;;AAMA;;;;;AAQA;;;;;;;AAQA;;;;;;;AAKA;;;;AAKA;;;;AAQA;;;;;;;AAOA;;;;;;AAKA;;;;AAML,SAAK,WAAW;AAEhB,UAAM,SAAS,OAAO,OAAO,IAAI,OAAO,MAAK,CAAE;AAC/C,qBAAsB,MAAM;MACxB,iBAAiB,IAAI;MACrB,WAAW,IAAI;MACf,aAAa,IAAI;MAEjB,SAAS,IAAI;MAEb,SAAS,IAAI;MACb,MAAM,IAAI;MAEV;MAEA,OAAO,IAAI;MACX,kBAAkB,IAAI;KACzB;EACL;;;;EAKA,SAAM;AACF,UAAM,EACF,SAAS,WAAW,aAAa,MAAAE,OAAM,OACvC,SAAS,QAAQ,iBAAiB,iBAAgB,IAClD;AAEJ,WAAO;MACH,OAAO;MACP;MAAS;MAAW;MAAa,MAAAA;MAAM;MACvC;MAAS;MAAQ;MAAiB;;EAE1C;;;;EAKA,MAAM,WAAQ;AACV,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,KAAK,SAAS;AACzD,WAAO,CAAC,CAAC,OAAO,8BAA8B,iBAAiB,CAAA,CAAG;AAClE,WAAO;EACX;;;;EAKA,MAAM,iBAAc;AAChB,UAAM,KAAK,MAAM,KAAK,SAAS,eAAe,KAAK,eAAe;AAClE,WAAO,CAAC,CAAC,IAAI,8BAA8B,iBAAiB,CAAA,CAAG;AAC/D,WAAO;EACX;;;;;EAMA,MAAM,wBAAqB;AACvB,UAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,KAAK,eAAe;AAC9E,WAAO,CAAC,CAAC,SAAS,sCAAsC,iBAAiB,CAAA,CAAG;AAC5E,WAAO;EACX;;;;EAKA,eAAY;AACR,WAAO,uBAAuB,IAAI;EACtC;;AAr5BJ;AA66BM,IAAO,qBAAP,MAAyB;;;;EAsH3B,YAAY,IAA8B,UAAkB;AAjHnD;;;;;AAKA;;;;AAKA;;;;AASA;;;;;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAOA;;;;;;AASA;;;;;;;;AAKA;;;;AASA;;;;;;;;AASA;;;;;;;;AAKA;;;;AAKA;;;;AAUA;;;;;;;;;AAQA;;;;;;;AAEA;AAML,uBAAK,OAAQ,OAAO,OAAO,GAAG,KAAK,IAAI,CAAC,QAAO;AAC3C,aAAO,IAAI,IAAI,KAAK,QAAQ;IAChC,CAAC,CAAC;AAEF,QAAI,WAAWC;AACf,QAAI,GAAG,qBAAqB,MAAM;AAC9B,iBAAW,GAAG;eACP,GAAG,YAAY,MAAM;AAC5B,iBAAW,GAAG;;AAGlB,qBAAqC,MAAM;MACvC;MAEA,IAAI,GAAG;MACP,MAAM,GAAG;MACT,iBAAiB,GAAG;MAEpB,MAAM,GAAG;MACT,OAAO,GAAG;MAEV,WAAW,GAAG;MACd,aAAa,GAAG;MAEhB,WAAW,GAAG;MAEd,SAAS,GAAG;MACZ,mBAAmB,GAAG;MACtB,aAAa,GAAG;MAChB;MACA,cAAc,GAAG;MAEjB,MAAM,GAAG;;MAET,QAAQ,GAAG;MACX,MAAM,GAAG;KACZ;EACL;;;;EAKA,IAAI,OAAI;AAAyB,WAAO,mBAAK;EAAO;;;;EAKpD,SAAM;AACF,UAAM;MACF;MAAI;MAAM;MAAiB,MAAAH;MAAM;MACjC;MAAW;MAAa;MACxB;;MACA;MAAQ;IAAI,IACZ;AAEJ,WAAO;MACH,OAAO;MACP;MAAW;;MAEX;MACA,mBAAmB,OAAO,KAAK,iBAAiB;MAChD;MACA,UAAU,OAAO,KAAK,QAAQ;MAC9B,aAAa,OAAO,KAAK,WAAW;MACpC,cAAc,OAAO,KAAK,YAAY;MACtC,SAAS,OAAO,KAAK,OAAO;MAC5B,MAAAA;MAAM;MAAO;MAAM;MAAW;MAAM;MAAQ;;EAEpD;;;;EAKA,IAAI,SAAM;AAAa,WAAO,KAAK,KAAK;EAAQ;EAEhD,CAAC,OAAO,QAAQ,IAAC;AACb,QAAI,QAAQ;AACZ,WAAO;MACH,MAAM,MAAK;AACP,YAAI,QAAQ,KAAK,QAAQ;AACrB,iBAAO,EAAE,OAAO,KAAK,KAAK,OAAO,GAAG,MAAM,MAAK;;AAEnD,eAAO,EAAE,OAAO,QAAW,MAAM,KAAI;MACzC;;EAER;;;;EAKA,IAAI,MAAG;AACH,WAAO,KAAK,UAAU,KAAK;EAC/B;;;;EAKA,MAAM,WAAQ;AACV,UAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,KAAK,SAAS;AACzD,QAAI,SAAS,MAAM;AAAE,YAAM,IAAI,MAAM,MAAM;;AAC3C,WAAO;EACX;;;;EAKA,MAAM,iBAAc;AAChB,UAAM,KAAK,MAAM,KAAK,SAAS,eAAe,KAAK,IAAI;AACvD,QAAI,MAAM,MAAM;AAAE,YAAM,IAAI,MAAM,MAAM;;AACxC,WAAO;EACX;;;;;;;EAQA,MAAM,YAAS;AACX,WAAgB,MAAM,KAAK,SAAS,qBAAqB,KAAK,IAAI;EACtE;;;;EAKA,MAAM,gBAAa;AACf,WAAQ,MAAM,KAAK,SAAS,eAAc,IAAM,KAAK,cAAc;EACvE;;;;EAKA,eAAY;AACR,WAAO,+BAA+B,IAAI;EAC9C;;;;EAKA,eAAe,OAA2B;AACtC,WAAO,CAAC,SAAS,MAAM,QAAO,GAAI,iDAC9B,yBAAyB,EAAE,WAAW,wBAAuB,CAAE;AACnE,WAAO,iCAAiC,MAAM,KAAK;EACvD;;AArJS;AA9hCb;AA0tCM,IAAO,uBAAP,MAAO,qBAAmB;;;;EA4I5B,YAAY,IAA+B,UAAkB;AAvIpD;;;;;AAOA;;;;;;AAOA;;;;;;AAKA;;;;AAKA;;;;AAMA;;;;;AAUA;;;;;;;;;AAOA;;;;;;AAUA;;;;;;;;;AAOA;;;;;;AAcA;;;;;;;;;;;;;AAOA;;;;;;AAMA;;;;;AAKA;;;;AAKA;;;;AAMA;;;;;AAKA;;;;AAKA;;;;AAMA;;;;;AAKA;;;;AAET;AAMI,SAAK,WAAW;AAEhB,SAAK,cAAe,GAAG,eAAe,OAAQ,GAAG,cAAa;AAC9D,SAAK,YAAa,GAAG,aAAa,OAAQ,GAAG,YAAW;AAExD,SAAK,OAAO,GAAG;AACf,SAAK,QAAQ,GAAG;AAEhB,SAAK,OAAO,GAAG;AAEf,SAAK,OAAO,GAAG;AACf,SAAK,KAAK,GAAG,MAAM;AAEnB,SAAK,WAAW,GAAG;AACnB,SAAK,QAAQ,GAAG;AAChB,SAAK,OAAO,GAAG;AACf,SAAK,QAAQ,GAAG;AAEhB,SAAK,WAAW,GAAG;AACnB,SAAK,uBAAwB,GAAG,wBAAwB,OAAQ,GAAG,uBAAsB;AACzF,SAAK,eAAgB,GAAG,gBAAgB,OAAQ,GAAG,eAAc;AACjE,SAAK,mBAAoB,GAAG,oBAAoB,OAAQ,GAAG,mBAAkB;AAE7E,SAAK,UAAU,GAAG;AAClB,SAAK,YAAY,GAAG;AAEpB,SAAK,aAAc,GAAG,cAAc,OAAQ,GAAG,aAAY;AAC3D,SAAK,sBAAuB,GAAG,uBAAuB,OAAQ,GAAG,sBAAqB;AAEtF,uBAAK,aAAc;EACvB;;;;EAKA,SAAM;AACF,UAAM,EACF,aAAa,WAAW,OAAO,MAAAA,OAAM,MAAM,IAAI,MAAM,OACrD,MAAAE,OAAM,WAAW,YAAY,oBAAmB,IAChD;AAEJ,WAAO;MACH,OAAO;MACP;MAAY;MAAa;MACzB;MACA,SAAS,OAAO,KAAK,OAAO;MAC5B,MAAAA;MAAM;MACN,UAAU,OAAO,KAAK,QAAQ;MAC9B,UAAU,OAAO,KAAK,QAAQ;MAC9B,MAAAF;MACA,cAAc,OAAO,KAAK,YAAY;MACtC,sBAAsB,OAAO,KAAK,oBAAoB;MACtD,kBAAkB,OAAO,KAAK,gBAAgB;MAC9C;MAAO;MAAW;MAAI;MAAO;MAC7B,OAAO,OAAO,KAAK,KAAK;;EAEhC;;;;;;EAOA,MAAM,WAAQ;AACV,QAAI,cAAc,KAAK;AACvB,QAAI,eAAe,MAAM;AACrB,YAAM,KAAK,MAAM,KAAK,eAAc;AACpC,UAAI,IAAI;AAAE,sBAAc,GAAG;;;AAE/B,QAAI,eAAe,MAAM;AAAE,aAAO;;AAClC,UAAM,QAAQ,KAAK,SAAS,SAAS,WAAW;AAChD,QAAI,SAAS,MAAM;AAAE,YAAM,IAAI,MAAM,MAAM;;AAC3C,WAAO;EACX;;;;;;EAOA,MAAM,iBAAc;AAChB,WAAO,KAAK,SAAS,eAAe,KAAK,IAAI;EACjD;;;;EAKA,MAAM,gBAAa;AACf,QAAI,KAAK,eAAe,MAAM;AAC1B,YAAM,EAAE,IAAI,aAAAI,aAAW,IAAK,MAAM,kBAAkB;QAChD,IAAI,KAAK,eAAc;QACvB,aAAa,KAAK,SAAS,eAAc;OAC5C;AAGD,UAAI,MAAM,QAAQ,GAAG,eAAe,MAAM;AAAE,eAAO;;AAEnD,aAAOA,eAAc,GAAG,cAAc;;AAG1C,UAAM,cAAc,MAAM,KAAK,SAAS,eAAc;AACtD,WAAO,cAAc,KAAK,cAAc;EAC5C;;;;;;;;;;EAWA,MAAM,KAAK,WAAoBC,WAAiB;AAC5C,UAAM,WAAY,aAAa,OAAQ,IAAG;AAC1C,UAAM,UAAWA,aAAY,OAAQ,IAAGA;AAExC,QAAI,aAAa,mBAAK;AACtB,QAAI,WAAW;AACf,QAAI,eAAgB,eAAe,KAAM,OAAM;AAC/C,UAAM,mBAAmB,YAAW;AAEhC,UAAI,cAAc;AAAE,eAAO;;AAC3B,YAAM,EAAE,aAAa,MAAK,IAAK,MAAM,kBAAkB;QACnD,aAAa,KAAK,SAAS,eAAc;QACzC,OAAO,KAAK,SAAS,oBAAoB,KAAK,IAAI;OACrD;AAID,UAAI,QAAQ,KAAK,OAAO;AACpB,qBAAa;AACb;;AAIJ,UAAI,cAAc;AAAE,eAAO;;AAC3B,YAAM,QAAQ,MAAM,KAAK,eAAc;AACvC,UAAI,SAAS,MAAM,eAAe,MAAM;AAAE;;AAK1C,UAAI,aAAa,IAAI;AACjB,mBAAW,aAAa;AACxB,YAAI,WAAW,mBAAK,cAAa;AAAE,qBAAW,mBAAK;;;AAGvD,aAAO,YAAY,aAAa;AAE5B,YAAI,cAAc;AAAE,iBAAO;;AAC3B,cAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,UAAU,IAAI;AAGzD,YAAI,SAAS,MAAM;AAAE;;AAGrB,mBAAWL,SAAQ,OAAO;AACtB,cAAIA,UAAS,KAAK,MAAM;AAAE;;;AAI9B,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,gBAAM,KAA0B,MAAM,MAAM,eAAe,CAAC;AAE5D,cAAI,GAAG,SAAS,KAAK,QAAQ,GAAG,UAAU,KAAK,OAAO;AAElD,gBAAI,cAAc;AAAE,qBAAO;;AAC3B,kBAAMM,WAAU,MAAM,KAAK,SAAS,sBAAsB,GAAG,IAAI;AAGjE,gBAAIA,YAAW,MAAM;AAAE;;AAGvB,gBAAK,cAAcA,SAAQ,cAAc,IAAK,UAAU;AAAE;;AAG1D,gBAAI,SAAgD;AACpD,gBAAI,GAAG,SAAS,KAAK,QAAQ,GAAG,OAAO,KAAK,MAAM,GAAG,UAAU,KAAK,OAAO;AACvE,uBAAS;uBACD,GAAG,SAAS,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,UAAUH,OAAM;AACpE,uBAAS;;AAGb,mBAAO,OAAO,4BAA4B,wBAAwB;cAC9D,WAAY,WAAW,cAAc,WAAW;cAChD;cACA,aAAa,GAAG,uBAAuB,UAAU;cACjD,MAAM,GAAG;cACT,SAAAG;aACH;;;AAIT;;AAEJ;IACJ;AAEA,UAAM,eAAe,CAACA,aAAsC;AACxD,UAAIA,YAAW,QAAQA,SAAQ,WAAW,GAAG;AAAE,eAAOA;;AACtD,aAAO,OAAO,kCAAkC,kBAAkB;QAC9D,QAAQ;QACR,MAAM;QAAM,QAAQ;QAAM,YAAY;QAAM,QAAQ;QACpD,aAAa;UACT,IAAIA,SAAQ;UACZ,MAAMA,SAAQ;UACd,MAAM;;;QACP,SAAAA;OACN;IACL;AAEA,UAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,KAAK,IAAI;AAEnE,QAAI,aAAa,GAAG;AAAE,aAAO,aAAa,OAAO;;AAEjD,QAAI,SAAS;AACT,UAAK,MAAM,QAAQ,cAAa,KAAO,UAAU;AAC7C,eAAO,aAAa,OAAO;;WAG5B;AAEH,YAAM,iBAAgB;AAGtB,UAAI,aAAa,GAAG;AAAE,eAAO;;;AAGjC,UAAM,SAAS,IAAI,QAAQ,CAAC,SAAS,WAAU;AAE3C,YAAM,aAAgC,CAAA;AACtC,YAAM,SAAS,MAAK;AAAG,mBAAW,QAAQ,CAAC,MAAM,EAAC,CAAE;MAAG;AAGvD,iBAAW,KAAK,MAAK;AAAG,uBAAe;MAAM,CAAC;AAG9C,UAAI,UAAU,GAAG;AACb,cAAM,QAAQ,WAAW,MAAK;AAC1B,iBAAM;AACN,iBAAO,UAAU,gCAAgC,SAAS,CAAC;QAC/D,GAAG,OAAO;AACV,mBAAW,KAAK,MAAK;AAAG,uBAAa,KAAK;QAAG,CAAC;;AAGlD,YAAM,aAAa,OAAOA,aAA+B;AAErD,YAAK,MAAMA,SAAQ,cAAa,KAAO,UAAU;AAC7C,iBAAM;AACN,cAAI;AACA,oBAAQ,aAAaA,QAAO,CAAC;mBACxB,OAAO;AAAE,mBAAO,KAAK;;;MAEtC;AACA,iBAAW,KAAK,MAAK;AAAG,aAAK,SAAS,IAAI,KAAK,MAAM,UAAU;MAAG,CAAC;AACnE,WAAK,SAAS,GAAG,KAAK,MAAM,UAAU;AAEtC,UAAI,cAAc,GAAG;AACjB,cAAM,kBAAkB,YAAW;AAC/B,cAAI;AAEA,kBAAM,iBAAgB;mBAEjB,OAAO;AAEZ,gBAAI,QAAQ,OAAO,sBAAsB,GAAG;AACxC,qBAAM;AACN,qBAAO,KAAK;AACZ;;;AAKR,cAAI,CAAC,cAAc;AACf,iBAAK,SAAS,KAAK,SAAS,eAAe;;QAEnD;AACA,mBAAW,KAAK,MAAK;AAAG,eAAK,SAAS,IAAI,SAAS,eAAe;QAAG,CAAC;AACtE,aAAK,SAAS,KAAK,SAAS,eAAe;;IAEnD,CAAC;AAED,WAAO,MAAmC;EAC9C;;;;;;;;;;;;EAaA,UAAO;AACH,WAAQ,KAAK,aAAa;EAC9B;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;;;;EASA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;EAMA,WAAQ;AACJ,WAAQ,KAAK,SAAS;EAC1B;;;;;EAMA,eAAY;AACR,WAAO,KAAK,QAAO,GAAI,yCACnB,yBAAyB,EAAE,WAAW,gBAAe,CAAE;AAC3D,WAAO,+BAA+B,IAAI;EAC9C;;;;;EAMA,eAAe,OAA2B;AACtC,WAAO,KAAK,QAAO,GAAI,yCACnB,yBAAyB,EAAE,WAAW,gBAAe,CAAE;AAE3D,WAAO,CAAC,SAAS,MAAM,QAAO,GAAI,iDAC9B,yBAAyB,EAAE,WAAW,gBAAe,CAAE;AAE3D,WAAO,iCAAiC,MAAM,KAAK;EACvD;;;;;;;;;;EAWA,uBAAuB,YAAkB;AACrC,mBAAe,OAAO,UAAU,UAAU,KAAK,cAAc,GAAG,sBAAsB,cAAc,UAAU;AAC9G,UAAM,KAAK,IAAI,qBAAoB,MAAM,KAAK,QAAQ;AACtD,qBAAG,aAAc;AACjB,WAAO;EACX;;AAlYA;AAvIE,IAAO,sBAAP;AAgjBN,SAAS,0BAA0B,OAAuC;AACtE,SAAO,EAAE,QAAQ,cAAc,MAAM,MAAM,MAAM,QAAQ,MAAM,OAAM;AACzE;AAEA,SAAS,iCAAiC,IAA8D,OAAgE;AACpK,SAAO,EAAE,QAAQ,uBAAuB,IAAI,MAAK;AACrD;AAEA,SAAS,+BAA+B,IAA4D;AAChG,SAAO,EAAE,QAAQ,oBAAoB,GAAE;AAC3C;AAEA,SAAS,uBAAuB,KAAqJ;AACjL,SAAO,EAAE,QAAQ,YAAY,KAAK;IAC9B,iBAAiB,IAAI;IACrB,WAAW,IAAI;IACf,aAAa,IAAI;IACjB,SAAS,IAAI;IACb,MAAM,IAAI;IACV,QAAQ,OAAO,OAAO,IAAI,OAAO,MAAK,CAAE;IACxC,OAAO,IAAI;IACd;AACL;;;AC7wDM,IAAO,WAAP,cAAwB,IAAG;;;;EAmB7B,YAAY,KAAUC,QAAkB,UAAuB;AAC3D,UAAM,KAAK,IAAI,QAAQ;AAhBlB;;;;AAKA;;;;AAKA;;;;AAOL,UAAM,OAAOA,OAAM,eAAe,UAAU,IAAI,MAAM,IAAI,MAAM;AAChE,qBAA2B,MAAM,EAAE,MAAM,UAAU,WAAWA,OAAK,CAAE;EACzE;;;;EAKA,IAAI,YAAS;AAAa,WAAO,KAAK,SAAS;EAAM;;;;EAKrD,IAAI,iBAAc;AAAa,WAAO,KAAK,SAAS,OAAM;EAAI;;AAM5D,IAAO,oBAAP,cAAiC,IAAG;;;;EAUtC,YAAY,KAAU,OAAY;AAC9B,UAAM,KAAK,IAAI,QAAQ;AANlB;;;;AAOL,qBAAoC,MAAM,EAAE,MAAK,CAAE;EACvD;;AAvEJ;AA8EM,IAAO,6BAAP,cAA0C,mBAAkB;;;;EAM9D,YAAYA,QAAkB,UAAoB,IAAsB;AACpE,UAAM,IAAI,QAAQ;AANb;AAOL,uBAAK,QAASA;EAClB;;;;;EAMA,IAAI,OAAI;AACJ,WAAO,MAAM,KAAK,IAAI,CAAC,QAAO;AAC1B,YAAM,WAAW,IAAI,OAAO,SAAS,mBAAK,QAAO,SAAS,IAAI,OAAO,CAAC,CAAC,IAAG;AAC1E,UAAI,UAAU;AACV,YAAI;AACA,iBAAO,IAAI,SAAS,KAAK,mBAAK,SAAQ,QAAQ;iBACzC,OAAY;AACjB,iBAAO,IAAI,kBAAkB,KAAK,KAAK;;;AAI/C,aAAO;IACX,CAAC;EACL;;AA3BS;AA/Eb,IAAAC;AAkHM,IAAO,8BAAP,cAA2C,oBAAmB;;;;EAMhE,YAAYD,QAAkB,UAAoB,IAAuB;AACrE,UAAM,IAAI,QAAQ;AANb,uBAAAC;AAOL,uBAAKA,SAASD;EAClB;;;;;;;;;;EAWA,MAAM,KAAK,UAAmB,SAAgB;AAC1C,UAAM,UAAU,MAAM,MAAM,KAAK,UAAU,OAAO;AAClD,QAAI,WAAW,MAAM;AAAE,aAAO;;AAC9B,WAAO,IAAI,2BAA2B,mBAAKC,UAAQ,KAAK,UAAU,OAAO;EAC7E;;AAvBSA,UAAA;AA8BP,IAAQ,8BAAR,cAA4C,aAA+B;;;;EAS7E,YAAY,UAAwB,UAA2B,QAA2B,KAAQ;AAC9F,UAAM,UAAU,UAAU,MAAM;AAN3B;;;;AAOL,qBAA8C,MAAM,EAAE,IAAG,CAAE;EAC/D;;;;EAKA,MAAM,WAAQ;AACV,WAAO,MAAM,KAAK,IAAI,SAAQ;EAClC;;;;EAKA,MAAM,iBAAc;AAChB,WAAO,MAAM,KAAK,IAAI,eAAc;EACxC;;;;EAKA,MAAM,wBAAqB;AACvB,WAAO,MAAM,KAAK,IAAI,sBAAqB;EAC/C;;AAOE,IAAO,uBAAP,cAAoC,4BAA2B;;;;EAoBjE,YAAY,UAAwB,UAA2B,QAA2B,UAAyB,MAAS;AACxH,UAAM,UAAU,UAAU,QAAQ,IAAI,SAAS,MAAM,SAAS,WAAW,QAAQ,CAAC;AAClF,UAAM,OAAO,SAAS,UAAU,eAAe,UAAU,KAAK,IAAI,MAAM,KAAK,IAAI,MAAM;AACvF,qBAAuC,MAAM,EAAE,MAAM,SAAQ,CAAE;EACnE;;;;EAKA,IAAI,YAAS;AACT,WAAO,KAAK,SAAS;EACzB;;;;EAKA,IAAI,iBAAc;AACd,WAAO,KAAK,SAAS,OAAM;EAC/B;;;;AC3LJ,IAAMC,SAAO,OAAO,CAAC;AAkBrB,SAAS,QAAQ,OAAU;AACvB,SAAQ,SAAS,OAAO,MAAM,SAAU;AAC5C;AAEA,SAAS,YAAY,OAAU;AAC3B,SAAQ,SAAS,OAAO,MAAM,gBAAiB;AACnD;AAEA,SAAS,WAAW,OAAU;AAC1B,SAAQ,SAAS,OAAO,MAAM,gBAAiB;AACnD;AAEA,SAAS,QAAQ,OAAU;AACvB,SAAQ,SAAS,OAAO,MAAM,oBAAqB;AACvD;AAEA,SAAS,YAAY,OAAU;AAC3B,MAAI,SAAS,MAAM;AACf,QAAI,WAAW,KAAK,GAAG;AAAE,aAAO;;AAChC,QAAI,MAAM,UAAU;AAAE,aAAO,MAAM;;;AAEvC,SAAO;AACX;AA5EA;AA8EA,IAAM,sBAAN,MAAyB;EAIrB,YAAY,UAAwB,UAAyB,MAAgB;AAH7E;AACS;AAGL,qBAAsC,MAAM,EAAE,SAAQ,CAAE;AACxD,QAAI,SAAS,OAAO,SAAS,KAAK,QAAQ;AACtC,YAAM,IAAI,MAAM,oBAAoB;;AAIxC,UAAM,SAAS,UAAU,SAAS,QAAQ,aAAa;AACvD,UAAM,WAAW,WAAW,MAAM,IAAI,SAAQ;AAC9C,uBAAK,SAAW,iBAAK;AACjB,YAAM,eAAe,MAAM,QAAQ,IAAI,SAAS,OAAO,IAAI,CAAC,OAAO,UAAS;AACxE,cAAM,MAAM,KAAK,KAAK;AACtB,YAAI,OAAO,MAAM;AAAE,iBAAO;;AAE1B,eAAO,MAAM,UAAU,KAAK,KAAK,GAAG,CAAC,MAAM,UAAS;AAChD,cAAI,SAAS,WAAW;AACpB,gBAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,qBAAO,QAAQ,IAAI,MAAM,IAAI,CAAC,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC;;AAEpE,mBAAO,eAAe,OAAO,QAAQ;;AAEzC,iBAAO;QACX,CAAC;MACL,CAAC,CAAC;AAEF,aAAO,SAAS,UAAU,mBAAmB,UAAU,YAAY;IACvE,EAAE;EACN;EAEA,iBAAc;AACV,WAAO,mBAAK;EAChB;;AAlCA;AA6CJ,SAAS,UAAoC,OAAY,SAA6B;AAClF,MAAI,SAAS,MAAM;AAAE,WAAO;;AAC5B,MAAI,OAAO,MAAM,OAAO,MAAO,YAAY;AAAE,WAAO;;AACpD,MAAI,MAAM,YAAY,OAAO,MAAM,SAAS,OAAO,MAAO,YAAY;AAClE,WAAO,MAAM;;AAEjB,SAAO;AACX;AAEA,SAAS,YAAY,OAA4B;AAC7C,MAAI,SAAS,MAAM;AAAE,WAAO;;AAC5B,SAAO,MAAM,YAAY;AAC7B;AAKA,eAAsB,cAAgD,KAAU,SAAuB;AAGnG,QAAM,aAAa,MAAM,YAAY,KAAK,WAAW;AACrD,iBAAe,OAAO,eAAgB,UAAU,+BAA+B,aAAa,GAAG;AAG/F,QAAM,YAAY,YAAY,UAAU;AAExC,iBAAe,UAAU,MAAM,SAAS,WAAW,CAAA,GAAK,QAAQ,IAAI,KAAK,GACvE,sBAAsB,gBAAgB,UAAU,EAAE;AACpD,iBAAe,UAAU,QAAQ,SAAS,WAAW,CAAA,GAAK,QAAQ,MAAM,KAAK,GAC3E,wBAAwB,kBAAkB,UAAU,IAAI;AAG1D,MAAI,UAAU,MAAM;AAAE,cAAU,OAAO,UAAU;;AAEjD,SAAqC;AACzC;AAKA,eAAsB,YAAY,SAAgC,QAAkC,MAAgB;AAEhH,QAAM,SAAS,UAAU,SAAS,aAAa;AAC/C,QAAM,WAAW,WAAW,MAAM,IAAI,SAAQ;AAC9C,SAAO,MAAM,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,UAAS;AACjD,WAAO,MAAM,UAAU,KAAK,KAAK,GAAG,CAAC,MAAM,UAAS;AAChD,cAAQ,MAAM,YAAY,OAAO,IAAI;AACrC,UAAI,SAAS,WAAW;AAAE,eAAO,eAAe,OAAO,QAAQ;;AAC/D,aAAO;IACX,CAAC;EACL,CAAC,CAAC;AACN;AAEA,SAAS,qBAAqB,UAAsB;AAEhD,QAAM,sBAAsB,eAAe,WAA0C;AAGjF,UAAM,KAAgC,MAAM,cAAsB,WAAW,CAAE,MAAM,CAAE;AACvF,OAAG,KAAK,MAAM,SAAS,WAAU;AAEjC,QAAI,GAAG,MAAM;AACT,SAAG,OAAO,MAAM,eAAe,GAAG,MAAM,YAAY,SAAS,MAAM,CAAC;;AAGxE,UAAMC,SAAQ,SAAS;AAEvB,UAAM,UAAW,UAAW,GAAG,SAASD,QAAO,iBAAiB,MAAMA;AACtE,UAAM,UAAW,GAAG,QAAQ,UAAU;AAEtC,QAAIC,OAAM,YAAY,CAACA,OAAM,SAAS,WAAWA,OAAM,WAAW,CAAC,UAAU,CAAC,SAAS;AACnF,qBAAe,OAAO,qEAAqE,aAAa,SAAS;;AAGrH,mBAAeA,OAAM,YAAY,QAC/B,6CAA6C,kBAAkB,GAAG,IAAI;AAGxE,UAAM,UAAUA,OAAM,WAAYA,OAAM,YAAYA,OAAM,SAAS;AACnE,mBAAe,WAAW,SACxB,6CAA6C,mBAAmB,GAAG,KAAK;AAG1E,mBAAeA,OAAM,YAAY,QAC/B,6CAA6C,kBAAkB,GAAG,IAAI;AAExE,WAAO;EACX;AAEA,QAAM,aAAa,eAAe,WAA0C;AACxE,UAAM,SAAS,UAAU,SAAS,QAAQ,MAAM;AAChD,WAAO,QAAQ,MAAM,GAAG,4CACpB,yBAAyB,EAAE,WAAW,OAAM,CAAE;AAElD,UAAM,KAAK,MAAM,oBAAoB,SAAS;AAE9C,QAAI;AACA,aAAO,MAAM,OAAO,KAAK,EAAE;aACtB,OAAY;AACjB,UAAI,gBAAgB,KAAK,KAAK,MAAM,MAAM;AACtC,cAAM,SAAS,UAAU,UAAU,MAAM,MAAM,EAAE;;AAErD,YAAM;;EAEd;AAEA,QAAM,OAAO,eAAe,WAA0C;AAClE,UAAM,SAAS,SAAS;AACxB,WAAO,QAAQ,MAAM,GAAG,yDACpB,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAE7D,UAAM,KAAK,MAAM,OAAO,gBAAgB,MAAM,oBAAoB,SAAS,CAAC;AAC5E,UAAM,WAAW,YAAY,SAAS,MAAM;AAG5C,WAAO,IAAI,4BAA4B,SAAS,WAAqB,UAAU,EAAE;EACrF;AAEA,QAAM,cAAc,eAAe,WAA0C;AACzE,UAAM,SAAS,UAAU,SAAS,QAAQ,aAAa;AACvD,WAAO,YAAY,MAAM,GAAG,mDACxB,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAEzD,WAAO,MAAM,OAAO,YAAY,MAAM,oBAAoB,SAAS,CAAC;EACxE;AAEA,QAAM,SAAS,OAAO,cAA8C;AAChE,WAAO,MAAM,KAAK,SAAS;EAC/B;AAEA,mBAAsB,QAAQ;IAC1B,WAAW;IAEX;IACA;IACA;IAAM;GACT;AAED,SAAwB;AAC5B;AAEA,SAAS,mBAAwI,UAAwB,KAAW;AAEhL,QAAM,cAAc,YAAY,MAA2B;AACvD,UAAM,WAAW,SAAS,UAAU,YAAY,KAAK,IAAI;AACzD,WAAO,UAAU,wBAAwB,yBAAyB;MAC9D,WAAW;MACX,MAAM,EAAE,KAAK,KAAI;KACpB;AACD,WAAO;EACX;AAEA,QAAM,sBAAsB,kBAAkB,MAA2B;AACrE,UAAM,WAAW,YAAY,GAAG,IAAI;AAGpC,QAAI,YAAsD,CAAA;AAC1D,QAAI,SAAS,OAAO,SAAS,MAAM,KAAK,QAAQ;AAC5C,kBAAY,MAAM,cAAc,KAAK,IAAG,CAAE;AAE1C,UAAI,UAAU,MAAM;AAChB,kBAAU,OAAO,MAAM,eAAe,UAAU,MAAM,YAAY,SAAS,MAAM,CAAC;;;AAI1F,QAAI,SAAS,OAAO,WAAW,KAAK,QAAQ;AACxC,YAAM,IAAI,MAAM,4EAA4E;;AAGhG,UAAM,eAAe,MAAM,YAAY,SAAS,QAAQ,SAAS,QAAQ,IAAI;AAE7E,WAAO,OAAO,OAAO,CAAA,GAAK,WAAW,MAAM,kBAAkB;MACzD,IAAI,SAAS,WAAU;MACvB,MAAM,SAAS,UAAU,mBAAmB,UAAU,YAAY;KACrE,CAAC;EACN;AAEA,QAAM,aAAa,kBAAkB,MAA2B;AAC5D,UAAM,SAAS,MAAM,iBAAiB,GAAG,IAAI;AAC7C,QAAI,OAAO,WAAW,GAAG;AAAE,aAAO,OAAO,CAAC;;AAC1C,WAAmB;EACvB;AAEA,QAAM,OAAO,kBAAkB,MAA2B;AACtD,UAAM,SAAS,SAAS;AACxB,WAAO,QAAQ,MAAM,GAAG,yDACpB,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAE7D,UAAM,KAAK,MAAM,OAAO,gBAAgB,MAAM,oBAAoB,GAAG,IAAI,CAAC;AAC1E,UAAM,WAAW,YAAY,SAAS,MAAM;AAG5C,WAAO,IAAI,4BAA4B,SAAS,WAAqB,UAAU,EAAE;EACrF;AAEA,QAAM,cAAc,kBAAkB,MAA2B;AAC7D,UAAM,SAAS,UAAU,SAAS,QAAQ,aAAa;AACvD,WAAO,YAAY,MAAM,GAAG,mDACxB,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAEzD,WAAO,MAAM,OAAO,YAAY,MAAM,oBAAoB,GAAG,IAAI,CAAC;EACtE;AAEA,QAAM,mBAAmB,kBAAkB,MAA2B;AAClE,UAAM,SAAS,UAAU,SAAS,QAAQ,MAAM;AAChD,WAAO,QAAQ,MAAM,GAAG,4CACpB,yBAAyB,EAAE,WAAW,OAAM,CAAE;AAElD,UAAM,KAAK,MAAM,oBAAoB,GAAG,IAAI;AAE5C,QAAI,SAAS;AACb,QAAI;AACA,eAAS,MAAM,OAAO,KAAK,EAAE;aACxB,OAAY;AACjB,UAAI,gBAAgB,KAAK,KAAK,MAAM,MAAM;AACtC,cAAM,SAAS,UAAU,UAAU,MAAM,MAAM,EAAE;;AAErD,YAAM;;AAGV,UAAM,WAAW,YAAY,GAAG,IAAI;AACpC,WAAO,SAAS,UAAU,qBAAqB,UAAU,MAAM;EACnE;AAEA,QAAM,SAAS,UAAU,SAA+B;AACpD,UAAM,WAAW,YAAY,GAAG,IAAI;AACpC,QAAI,SAAS,UAAU;AAAE,aAAO,MAAM,WAAW,GAAG,IAAI;;AACxD,WAAO,MAAM,KAAK,GAAG,IAAI;EAC7B;AAEA,mBAAsB,QAAQ;IAC1B,MAAM,SAAS,UAAU,gBAAgB,GAAG;IAC5C,WAAW;IAAU,MAAM;IAE3B;IAEA;IACA;IACA;IAAM;IAAY;GACrB;AAGD,SAAO,eAAe,QAAQ,YAAY;IACtC,cAAc;IACd,YAAY;IACZ,KAAK,MAAK;AACN,YAAM,WAAW,SAAS,UAAU,YAAY,GAAG;AACnD,aAAO,UAAU,wBAAwB,yBAAyB;QAC9D,WAAW;QACX,MAAM,EAAE,IAAG;OACd;AACD,aAAO;IACX;GACH;AAED,SAAoC;AACxC;AAEA,SAAS,kBAAqD,UAAwB,KAAW;AAE7F,QAAM,cAAc,YAAY,MAA0B;AACtD,UAAM,WAAW,SAAS,UAAU,SAAS,KAAK,IAAI;AAEtD,WAAO,UAAU,wBAAwB,yBAAyB;MAC9D,WAAW;MACX,MAAM,EAAE,KAAK,KAAI;KACpB;AAED,WAAO;EACX;AAEA,QAAM,SAAS,YAAY,MAA2B;AAClD,WAAO,IAAI,oBAAoB,UAAU,YAAY,GAAG,IAAI,GAAG,IAAI;EACvE;AAEA,mBAAsB,QAAQ;IAC1B,MAAM,SAAS,UAAU,aAAa,GAAG;IACzC,WAAW;IAAU,MAAM;IAE3B;GACH;AAGD,SAAO,eAAe,QAAQ,YAAY;IACtC,cAAc;IACd,YAAY;IACZ,KAAK,MAAK;AACN,YAAM,WAAW,SAAS,UAAU,SAAS,GAAG;AAEhD,aAAO,UAAU,wBAAwB,yBAAyB;QAC9D,WAAW;QACX,MAAM,EAAE,IAAG;OACd;AAED,aAAO;IACX;GACH;AAED,SAAkC;AACtC;AAeA,IAAMC,YAAW,OAAO,IAAI,0BAA0B;AAUtD,IAAM,iBAAkD,oBAAI,QAAO;AAEnE,SAAS,YAAY,UAAwB,QAAgB;AACzD,iBAAe,IAAI,SAASA,SAAQ,GAAG,MAAM;AACjD;AAEA,SAAS,YAAY,UAAsB;AACvC,SAAO,eAAe,IAAI,SAASA,SAAQ,CAAC;AAChD;AAEA,SAAS,WAAW,OAAU;AAC1B,SAAQ,SAAS,OAAO,UAAW,YAAa,oBAAoB,SACjE,OAAO,MAAM,mBAAoB,cAAe,MAAM;AAC7D;AAEA,eAAe,WAAW,UAAwB,OAAwB;AACtE,MAAI;AACJ,MAAI,WAAiC;AAKrC,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,UAAM,eAAe,SAAS,MAAY;AACtC,UAAI,YAAY,MAAM,EAAE,GAAG;AAAE,eAAO;;AACpC,YAAMC,YAAW,SAAS,UAAU,SAAS,IAAI;AACjD,qBAAeA,WAAU,oBAAoB,QAAQ,IAAI;AACzD,aAAOA,UAAS;IACpB;AAGA,aAAS,MAAM,IAAI,CAAC,MAAK;AACrB,UAAI,KAAK,MAAM;AAAE,eAAO;;AACxB,UAAI,MAAM,QAAQ,CAAC,GAAG;AAAE,eAAO,EAAE,IAAI,YAAY;;AACjD,aAAO,aAAa,CAAC;IACzB,CAAC;aAEM,UAAU,KAAK;AACtB,aAAS,CAAE,IAAI;aAER,OAAO,UAAW,UAAU;AACnC,QAAI,YAAY,OAAO,EAAE,GAAG;AAExB,eAAS,CAAE,KAAK;WACb;AAEH,iBAAW,SAAS,UAAU,SAAS,KAAK;AAC5C,qBAAe,UAAU,oBAAoB,SAAS,KAAK;AAC3D,eAAS,CAAE,SAAS,SAAS;;aAG1B,WAAW,KAAK,GAAG;AAE1B,aAAS,MAAM,MAAM,eAAc;aAE5B,cAAc,OAAO;AAE5B,eAAW,MAAM;AACjB,aAAS,CAAE,SAAS,SAAS;SAE1B;AACH,mBAAe,OAAO,sBAAsB,SAAS,KAAK;;AAI9D,WAAS,OAAO,IAAI,CAAC,MAAK;AACtB,QAAI,KAAK,MAAM;AAAE,aAAO;;AACxB,QAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,YAAM,QAAQ,MAAM,KAAK,IAAI,IAAI,EAAE,IAAI,CAACC,OAAMA,GAAE,YAAW,CAAE,CAAC,EAAE,OAAM,CAAE;AACxE,UAAI,MAAM,WAAW,GAAG;AAAE,eAAO,MAAM,CAAC;;AACxC,YAAM,KAAI;AACV,aAAO;;AAEX,WAAO,EAAE,YAAW;EACxB,CAAC;AAED,QAAM,MAAM,OAAO,IAAI,CAAC,MAAK;AACzB,QAAI,KAAK,MAAM;AAAE,aAAO;;AACxB,QAAI,MAAM,QAAQ,CAAC,GAAG;AAAE,aAAO,EAAE,KAAK,GAAG;;AACzC,WAAO;EACX,CAAC,EAAE,KAAK,GAAG;AAEX,SAAO,EAAE,UAAU,KAAK,OAAM;AAClC;AAEA,eAAe,OAAO,UAAwB,OAAwB;AAClE,QAAM,EAAE,KAAI,IAAK,YAAY,QAAQ;AACrC,SAAO,KAAK,KAAK,MAAM,WAAW,UAAU,KAAK,GAAG,GAAG,KAAK;AAChE;AAEA,eAAe,OAAO,UAAwB,WAAmB,OAAwB;AAErF,QAAM,WAAW,YAAY,SAAS,MAAM;AAC5C,SAAO,UAAU,gDACb,yBAAyB,EAAE,UAAS,CAAE;AAE1C,QAAM,EAAE,UAAU,KAAK,OAAM,IAAK,MAAM,WAAW,UAAU,KAAK;AAElE,QAAM,EAAE,MAAM,KAAI,IAAK,YAAY,QAAQ;AAE3C,MAAI,MAAM,KAAK,IAAI,GAAG;AACtB,MAAI,CAAC,KAAK;AACN,UAAM,UAAiC,OAAO,OAAM;AACpD,UAAM,SAAS,EAAE,SAAS,OAAM;AAChC,UAAM,WAAW,CAAC,QAAY;AAC1B,UAAI,gBAAgB;AACpB,UAAI,iBAAiB,MAAM;AACvB,YAAI;AACA,0BAAgB,SAAS,UAAU,SAAS,IAAI,OAAO,CAAC,CAAC;iBACpD,OAAO;QAAA;;AAKpB,UAAI,eAAe;AACf,cAAM,iBAAiB;AACvB,cAAM,OAAO,WAAW,SAAS,UAAU,eAAe,UAAU,IAAI,MAAM,IAAI,MAAM,IAAG,CAAA;AAC3F,aAAK,UAAU,OAAO,MAAM,CAACC,cAA6B;AACtD,iBAAO,IAAI,qBAAqB,UAAUA,WAAU,OAAO,gBAAgB,GAAG;QAClF,CAAC;aACE;AACH,aAAK,UAAU,OAAO,CAAA,GAAK,CAACA,cAA6B;AACrD,iBAAO,IAAI,4BAA4B,UAAUA,WAAU,OAAO,GAAG;QACzE,CAAC;;IAET;AAEA,QAAI,WAAgC,CAAA;AACpC,UAAM,QAAQ,MAAK;AACf,UAAI,SAAS,QAAQ;AAAE;;AACvB,eAAS,KAAK,SAAS,GAAG,QAAQ,QAAQ,CAAC;IAC/C;AAEA,UAAM,OAAO,YAAW;AACpB,UAAI,SAAS,UAAU,GAAG;AAAE;;AAE5B,UAAI,UAAU;AACd,iBAAW,CAAA;AACX,YAAM,QAAQ,IAAI,OAAO;AACzB,eAAS,IAAI,QAAQ,QAAQ;IACjC;AAEA,UAAM,EAAE,KAAK,WAAW,CAAA,GAAK,OAAO,KAAI;AACxC,SAAK,IAAI,KAAK,GAAG;;AAErB,SAAO;AACX;AAKA,IAAI,WAAyB,QAAQ,QAAO;AAI5C,eAAe,MAAM,UAAwB,OAA0B,MAAkB,aAA+B;AACpH,QAAM;AAEN,QAAM,MAAM,MAAM,OAAO,UAAU,KAAK;AACxC,MAAI,CAAC,KAAK;AAAE,WAAO;;AAEnB,QAAM,QAAQ,IAAI,UAAU;AAC5B,MAAI,YAAY,IAAI,UAAU,OAAO,CAAC,EAAE,UAAU,KAAI,MAAM;AACxD,UAAM,WAAW,MAAM,KAAK,IAAI;AAChC,QAAI,aAAa;AACb,eAAS,KAAK,YAAY,OAAO,OAAM,QAAQ,CAAC;;AAEpD,QAAI;AACA,eAAS,KAAK,UAAU,GAAG,QAAQ;aAC9B,OAAO;IAAA;AAChB,WAAO,CAAC;EACZ,CAAC;AAED,MAAI,IAAI,UAAU,WAAW,GAAG;AAC5B,QAAI,KAAI;AACR,gBAAY,QAAQ,EAAE,KAAK,OAAO,IAAI,GAAG;;AAG7C,SAAQ,QAAQ;AACpB;AAEA,eAAe,KAAK,UAAwB,OAA0B,MAAkB,aAA+B;AACnH,MAAI;AACA,UAAM;WACD,OAAO;EAAA;AAEhB,QAAM,gBAAgB,MAAM,UAAU,OAAO,MAAM,WAAW;AAC9D,aAAW;AACX,SAAO,MAAM;AACjB;AAEA,IAAMC,kBAAiB,CAAE,MAAM;AA/nB/B;AAgqBc,KAAAJ;AAhCR,IAAO,gBAAP,MAAO,cAAY;;;;;;EA4CrB,YAAY,QAA8B,KAA+B,QAAgC,WAAsC;AApCtI;;;;;;;;AAKA;;;;AASA;;;;;;;;AAKA;;;;AAKA;;;wBAAC;AAKD;;;;AAQL,mBAAe,OAAO,WAAY,YAAY,cAAc,MAAM,GAC9D,qCAAqC,UAAU,MAAM;AAEzD,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,UAAMD,SAAQ,UAAU,KAAK,GAAG;AAChC,qBAA+B,MAAM,EAAE,QAAQ,QAAQ,WAAWA,OAAK,CAAE;AAEzE,WAAO,eAAe,MAAMC,WAAU,EAAE,OAAO,CAAA,EAAG,CAAE;AAEpD,QAAI;AACJ,QAAI,OAAsB;AAE1B,QAAI,WAA+C;AACnD,QAAI,WAAW;AACX,YAAM,WAAW,YAAY,MAAM;AAGnC,iBAAW,IAAI,4BAA4B,KAAK,WAAqB,UAAU,SAAS;;AAG5F,QAAI,OAAO,oBAAI,IAAG;AAGlB,QAAI,OAAO,WAAY,UAAU;AAC7B,UAAI,YAAY,MAAM,GAAG;AACrB,eAAO;AACP,sBAAc,QAAQ,QAAQ,MAAM;aAEjC;AACH,cAAM,WAAW,UAAU,QAAQ,aAAa;AAChD,YAAI,CAAC,WAAW,QAAQ,GAAG;AACvB,gBAAM,UAAU,oDAAoD,yBAAyB;YACzF,WAAW;WACd;;AAGL,sBAAc,SAAS,YAAY,MAAM,EAAE,KAAK,CAACK,UAAQ;AACrD,cAAIA,SAAQ,MAAM;AACd,kBAAM,UAAU,uEAAuE,qBAAqB;cACxG,OAAO;aACV;;AAEL,sBAAY,IAAI,EAAE,OAAOA;AACzB,iBAAOA;QACX,CAAC;;WAEF;AACH,oBAAc,OAAO,WAAU,EAAG,KAAK,CAACA,UAAQ;AAC5C,YAAIA,SAAQ,MAAM;AAAE,gBAAM,IAAI,MAAM,MAAM;;AAC1C,oBAAY,IAAI,EAAE,OAAOA;AACzB,eAAOA;MACX,CAAC;;AAIL,gBAAY,MAAM,EAAE,aAAa,MAAM,UAAU,KAAI,CAAE;AAGvD,UAAM,UAAU,IAAI,MAAM,CAAA,GAAK;MAC3B,KAAK,CAACC,SAAQ,MAAM,aAAY;AAE5B,YAAI,OAAO,SAAU,YAAYF,gBAAe,QAAQ,IAAI,KAAK,GAAG;AAChE,iBAAO,QAAQ,IAAIE,SAAQ,MAAM,QAAQ;;AAG7C,YAAI;AACA,iBAAO,KAAK,SAAS,IAAI;iBACpB,OAAO;AACZ,cAAI,CAAC,QAAQ,OAAO,kBAAkB,KAAK,MAAM,aAAa,OAAO;AACjE,kBAAM;;;AAId,eAAO;MACX;MACA,KAAK,CAACA,SAAQ,SAAQ;AAElB,YAAIF,gBAAe,QAAgB,IAAI,KAAK,GAAG;AAC3C,iBAAO,QAAQ,IAAIE,SAAQ,IAAI;;AAGnC,eAAO,QAAQ,IAAIA,SAAQ,IAAI,KAAK,KAAK,UAAU,SAAS,OAAO,IAAI,CAAC;MAC5E;KACH;AACD,qBAA+B,MAAM,EAAE,QAAO,CAAE;AAEhD,qBAA+B,MAAM;MACjC,UAAYP,OAAM,WAAWA,OAAM,WAAa,qBAAqB,IAAI,IAAI;KAChF;AAGD,WAAO,IAAI,MAAM,MAAM;MACnB,KAAK,CAACO,SAAQ,MAAM,aAAY;AAC5B,YAAI,OAAO,SAAU,YAAY,QAAQA,WAAUF,gBAAe,QAAQ,IAAI,KAAK,GAAG;AAClF,iBAAO,QAAQ,IAAIE,SAAQ,MAAM,QAAQ;;AAI7C,YAAI;AACA,iBAAOA,QAAO,YAAY,IAAI;iBACzB,OAAO;AACZ,cAAI,CAAC,QAAQ,OAAO,kBAAkB,KAAK,MAAM,aAAa,OAAO;AACjE,kBAAM;;;AAId,eAAO;MACX;MACA,KAAK,CAACA,SAAQ,SAAQ;AAClB,YAAI,OAAO,SAAU,YAAY,QAAQA,WAAUF,gBAAe,QAAQ,IAAI,KAAK,GAAG;AAClF,iBAAO,QAAQ,IAAIE,SAAQ,IAAI;;AAGnC,eAAOA,QAAO,UAAU,YAAY,IAAI;MAC5C;KACH;EAEL;;;;;EAMA,QAAQ,QAA6B;AACjC,WAAO,IAAI,cAAa,KAAK,QAAQ,KAAK,WAAW,MAAM;EAC/D;;;;;EAMA,OAAO,QAA4B;AAC/B,WAAO,IAAI,cAAa,QAAQ,KAAK,WAAW,KAAK,MAAM;EAC/D;;;;EAKA,MAAM,aAAU;AAAsB,WAAO,MAAM,YAAY,IAAI,EAAE;EAAa;;;;EAKlF,MAAM,kBAAe;AACjB,UAAM,WAAW,YAAY,KAAK,MAAM;AACxC,WAAO,UAAU,qCACb,yBAAyB,EAAE,WAAW,kBAAiB,CAAE;AAE7D,UAAM,OAAO,MAAM,SAAS,QAAQ,MAAM,KAAK,WAAU,CAAE;AAC3D,QAAI,SAAS,MAAM;AAAE,aAAO;;AAC5B,WAAO;EACX;;;;;EAMA,MAAM,oBAAiB;AAEnB,UAAM,WAAW,KAAK,sBAAqB;AAC3C,QAAI,UAAU;AACV,YAAM,SAAS,KAAI;AACnB,aAAO;;AAIX,UAAM,OAAO,MAAM,KAAK,gBAAe;AACvC,QAAI,QAAQ,MAAM;AAAE,aAAO;;AAG3B,UAAM,WAAW,YAAY,KAAK,MAAM;AACxC,WAAO,YAAY,MAAM,8CACrB,yBAAyB,EAAE,WAAW,oBAAmB,CAAE;AAE/D,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AACnC,YAAM,YAAY,YAAW;AACzB,YAAI;AACA,gBAAMC,QAAO,MAAM,KAAK,gBAAe;AACvC,cAAIA,SAAQ,MAAM;AAAE,mBAAO,QAAQ,IAAI;;AACvC,mBAAS,KAAK,SAAS,SAAS;iBAC3B,OAAO;AACZ,iBAAO,KAAK;;MAEpB;AACA,gBAAS;IACb,CAAC;EACL;;;;;;;EAQA,wBAAqB;AACjB,WAAO,YAAY,IAAI,EAAE;EAC7B;;;;;;EAOA,YAAuD,KAA8B;AACjF,QAAI,OAAO,QAAS,UAAU;AAAE,YAAM,IAAI,OAAM;;AAChD,UAAM,OAAO,mBAAmB,MAAM,GAAG;AACzC,WAAU;EACd;;;;;;EAOA,SAAS,KAA2B;AAChC,QAAI,OAAO,QAAS,UAAU;AAAE,YAAM,IAAI,OAAM;;AAChD,WAAO,kBAAkB,MAAM,GAAG;EACtC;;;;EAKA,MAAM,iBAAiBC,OAAY;AAC/B,UAAM,IAAI,MAAM,OAAO;EAC3B;;;;;;;;;;;;;;;;;;;;;EAuBA,MAAM,YAAY,OAA0B,WAAsB,SAAkB;AAChF,QAAI,aAAa,MAAM;AAAE,kBAAY;;AACrC,QAAI,WAAW,MAAM;AAAE,gBAAU;;AACjC,UAAM,EAAE,MAAM,YAAW,IAAK,YAAY,IAAI;AAC9C,UAAM,UAAW,OAAO,OAAO,MAAM;AACrC,UAAM,EAAE,UAAU,OAAM,IAAK,MAAM,WAAW,MAAM,KAAK;AACzD,UAAM,SAAS,EAAE,SAAS,QAAQ,WAAW,QAAO;AAEpD,UAAM,WAAW,YAAY,KAAK,MAAM;AACxC,WAAO,UAAU,4CACb,yBAAyB,EAAE,WAAW,cAAa,CAAE;AAEzD,YAAQ,MAAM,SAAS,QAAQ,MAAM,GAAG,IAAI,CAAC,QAAO;AAChD,UAAI,gBAAgB;AACpB,UAAI,iBAAiB,MAAM;AACvB,YAAI;AACA,0BAAgB,KAAK,UAAU,SAAS,IAAI,OAAO,CAAC,CAAC;iBAChD,OAAO;QAAA;;AAGpB,UAAI,eAAe;AACf,YAAI;AACA,iBAAO,IAAI,SAAS,KAAK,KAAK,WAAW,aAAa;iBACjD,OAAY;AACjB,iBAAO,IAAI,kBAAkB,KAAK,KAAK;;;AAI/C,aAAO,IAAI,IAAI,KAAK,QAAQ;IAChC,CAAC;EACL;;;;EAKA,MAAM,GAAG,OAA0B,UAAkB;AACjD,UAAM,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK;AAC1C,QAAI,UAAU,KAAK,EAAE,UAAU,MAAM,MAAK,CAAE;AAC5C,QAAI,MAAK;AACT,WAAO;EACX;;;;;EAMA,MAAM,KAAK,OAA0B,UAAkB;AACnD,UAAM,MAAM,MAAM,OAAO,MAAM,QAAQ,KAAK;AAC5C,QAAI,UAAU,KAAK,EAAE,UAAU,MAAM,KAAI,CAAE;AAC3C,QAAI,MAAK;AACT,WAAO;EACX;;;;;;EAOA,MAAM,KAAK,UAA6B,MAAgB;AACpD,WAAO,MAAM,KAAK,MAAM,OAAO,MAAM,IAAI;EAC7C;;;;;EAMA,MAAM,cAAc,OAAyB;AACzC,QAAI,OAAO;AACP,YAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,UAAI,CAAC,KAAK;AAAE,eAAO;;AACnB,aAAO,IAAI,UAAU;;AAGzB,UAAM,EAAE,KAAI,IAAK,YAAY,IAAI;AAEjC,QAAI,QAAQ;AACZ,eAAW,EAAE,UAAS,KAAM,KAAK,OAAM,GAAI;AACvC,eAAS,UAAU;;AAEvB,WAAO;EACX;;;;;EAMA,MAAM,UAAU,OAAyB;AACrC,QAAI,OAAO;AACP,YAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,UAAI,CAAC,KAAK;AAAE,eAAO,CAAA;;AACnB,aAAO,IAAI,UAAU,IAAI,CAAC,EAAE,SAAQ,MAAO,QAAQ;;AAGvD,UAAM,EAAE,KAAI,IAAK,YAAY,IAAI;AAEjC,QAAI,SAA0B,CAAA;AAC9B,eAAW,EAAE,UAAS,KAAM,KAAK,OAAM,GAAI;AACvC,eAAS,OAAO,OAAO,UAAU,IAAI,CAAC,EAAE,SAAQ,MAAO,QAAQ,CAAC;;AAEpE,WAAO;EACX;;;;;EAMA,MAAM,IAAI,OAA0B,UAAmB;AACnD,UAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,QAAI,CAAC,KAAK;AAAE,aAAO;;AAEnB,QAAI,UAAU;AACV,YAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,EAAE,UAAAL,UAAQ,MAAOA,SAAQ,EAAE,QAAQ,QAAQ;AAC5E,UAAI,SAAS,GAAG;AAAE,YAAI,UAAU,OAAO,OAAO,CAAC;;;AAGnD,QAAI,YAAY,QAAQ,IAAI,UAAU,WAAW,GAAG;AAChD,UAAI,KAAI;AACR,kBAAY,IAAI,EAAE,KAAK,OAAO,IAAI,GAAG;;AAGzC,WAAO;EACX;;;;;EAMA,MAAM,mBAAmB,OAAyB;AAC9C,QAAI,OAAO;AACP,YAAM,MAAM,MAAM,OAAO,MAAM,KAAK;AACpC,UAAI,CAAC,KAAK;AAAE,eAAO;;AACnB,UAAI,KAAI;AACR,kBAAY,IAAI,EAAE,KAAK,OAAO,IAAI,GAAG;WAClC;AACH,YAAM,EAAE,KAAI,IAAK,YAAY,IAAI;AACjC,iBAAW,EAAE,KAAK,KAAI,KAAM,KAAK,OAAM,GAAI;AACvC,aAAI;AACJ,aAAK,OAAO,GAAG;;;AAIvB,WAAO;EACX;;;;EAKA,MAAM,YAAY,OAA0B,UAAkB;AAC1D,WAAO,MAAM,KAAK,GAAG,OAAO,QAAQ;EACxC;;;;EAKA,MAAM,eAAe,OAA0B,UAAkB;AAC7D,WAAO,MAAM,KAAK,IAAI,OAAO,QAAQ;EACzC;;;;EAKA,OAAO,WAAkC,KAA6B;IAClE,MAAM,uBAAuB,cAAY;MACrC,YAAY,SAAiB,SAAgC,MAAI;AAC7D,cAAM,SAAS,KAAK,MAAM;MAC9B;;AAEJ,WAAO;EACX;;;;EAKA,OAAO,KAA4B,QAAgB,KAA+B,QAA8B;AAC5G,QAAI,UAAU,MAAM;AAAE,eAAS;;AAC/B,UAAM,WAAW,IAAI,KAAK,QAAQ,KAAK,MAAM;AAC7C,WAAO;EACX;;AArdE,IAAO,eAAP;AAwdN,SAAS,gBAAa;AAClB,SAAO;AACX;AAKM,IAAO,WAAP,cAAwB,cAAa,EAAE;;;;ACpkCvC,IAAO,kBAAP,MAAO,iBAAe;;;;;;;;EAwBxB,YAAY,KAA+B,UAA0C,QAA8B;AAnB1G;;;;AAKA;;;;AAKA;;;;AAUL,UAAMM,SAAQ,UAAU,KAAK,GAAG;AAGhC,QAAI,oBAAoB,YAAY;AAChC,iBAAW,QAAQ,SAAS,QAAQ,CAAC;WAClC;AACH,UAAI,OAAO,aAAc,UAAU;AAAE,mBAAW,SAAS;;AACzD,UAAI,CAAC,SAAS,WAAW,IAAI,GAAG;AAAE,mBAAW,OAAO;;AACpD,iBAAW,QAAQ,SAAS,QAAQ,CAAC;;AAGzC,qBAAkC,MAAM;MACpC;MAAU,WAAWA;MAAO,QAAS,UAAU;KAClD;EACL;EAEA,OAAO,QAA4B;AAC/B,WAAO,IAAU,aAAc,QAAQ,KAAK,WAAW,KAAK,MAAM;EACtE;;;;;EAMA,MAAM,wBAAwB,MAA2B;AACrD,QAAI,YAAqD,CAAA;AAEzD,UAAM,WAAW,KAAK,UAAU;AAEhC,QAAI,SAAS,OAAO,SAAS,MAAM,KAAK,QAAQ;AAC5C,kBAAY,MAAM,cAAc,KAAK,IAAG,CAAE;;AAG9C,QAAI,SAAS,OAAO,WAAW,KAAK,QAAQ;AACxC,YAAM,IAAI,MAAM,8CAA8C;;AAGlE,UAAM,eAAe,MAAM,YAAY,KAAK,QAAQ,SAAS,QAAQ,IAAI;AAEzE,UAAMC,QAAO,OAAO,CAAE,KAAK,UAAU,KAAK,UAAU,aAAa,YAAY,CAAC,CAAE;AAChF,WAAO,OAAO,OAAO,CAAA,GAAK,WAAW,EAAE,MAAAA,MAAI,CAAE;EACjD;;;;;;;;;EAUA,MAAM,UAAU,MAA2B;AACvC,UAAM,KAAK,MAAM,KAAK,qBAAqB,GAAG,IAAI;AAElD,WAAO,KAAK,UAAU,OAAO,KAAK,OAAO,oBAAqB,YAC1D,wDAAwD,yBAAyB;MACjF,WAAW;KAAmB;AAElC,UAAM,SAAS,MAAM,KAAK,OAAO,gBAAgB,EAAE;AACnD,UAAM,UAAU,iBAAiB,MAAM;AACvC,WAAO,IAAU,aAAc,SAAS,KAAK,WAAW,KAAK,QAAQ,MAAM;EAC/E;;;;;EAMA,QAAQ,QAA6B;AACjC,WAAO,IAAI,iBAAgB,KAAK,WAAW,KAAK,UAAU,MAAM;EACpE;;;;EAKA,OAAO,aAAuEC,SAAa,QAAuB;AAC9G,mBAAeA,WAAU,MAAM,uBAAuB,UAAUA,OAAM;AAEtE,QAAI,OAAOA,YAAY,UAAU;AAAE,MAAAA,UAAS,KAAK,MAAMA,OAAM;;AAE7D,UAAM,MAAMA,QAAO;AAEnB,QAAI,WAAW;AACf,QAAIA,QAAO,UAAU;AACjB,iBAAWA,QAAO;eACXA,QAAO,OAAOA,QAAO,IAAI,UAAU;AAC1C,iBAAWA,QAAO,IAAI;;AAG1B,WAAO,IAAI,KAAK,KAAK,UAAU,MAAM;EACzC;;;;ACjHJ,SAAS,YAAY,MAAY;AAC7B,MAAI,KAAK,MAAM,mBAAmB,GAAG;AACjC,WAAO,KAAK,UAAU,EAAE;aACjB,KAAK,MAAM,aAAa,GAAG;AAClC,WAAO,KAAK,UAAU,CAAC;SACpB;AACH,mBAAe,OAAO,2BAA2B,QAAQ,IAAI;;AAGjE,SAAO,gCAAkC,IAAK;AAClD;AAqDM,IAAgB,0BAAhB,MAAuC;;;;EASzC,YAAY,MAAY;AALf;;;;AAML,qBAA0C,MAAM,EAAE,KAAI,CAAE;EAC5D;EAEA,QAAQ,UAAkB;AACtB,WAAO;EACX;;;;EAKA,iBAAiB,UAAgB;AAC7B,WAAO;EACX;;;;EAKA,MAAM,cAAc,UAAkB,SAAe;AACjD,UAAM,IAAI,MAAM,kBAAkB;EACtC;;;;EAKA,MAAM,cAAc,UAAkBC,OAAe;AACjD,UAAM,IAAI,MAAM,kBAAkB;EACtC;;AAmBJ,IAAM,cAAc,IAAI,OAAO,mBAAoB,GAAG;AACtD,IAAM,WAAW;EACb,IAAI,OAAO,oBAAqB,GAAG;EACnC,IAAI,OAAO,iBAAiB,GAAG;EAC/B;EACA,IAAI,OAAO,oCAAoC,GAAG;;AAvJtD;AA8JM,IAAO,eAAP,MAAO,aAAW;EAqBpB,YAAY,UAA4B,SAAiB,MAAY;AArBnE;AAIF;;;;AAKA;;;;AAKA;;;;AAGA;;AAEA;AAGI,qBAA8B,MAAM,EAAE,UAAU,SAAS,KAAI,CAAE;AAC/D,uBAAK,eAAgB;AAErB,uBAAK,WAAY,IAAI,SAAS,SAAS;MACnC;MACA;MACA;MACA;MACA;MACA;OACD,QAAQ;EAEf;;;;EAKA,MAAM,mBAAgB;AAClB,QAAI,mBAAK,kBAAiB,MAAM;AAC5B,yBAAK,gBAAiB,YAAW;AAC7B,YAAI;AACA,iBAAO,MAAM,mBAAK,WAAU,kBAAkB,YAAY;iBACrD,OAAO;AAGZ,cAAI,QAAQ,OAAO,gBAAgB,GAAG;AAAE,mBAAO;;AAG/C,6BAAK,eAAgB;AAErB,gBAAM;;MAEd,GAAE;;AAGN,WAAO,MAAM,mBAAK;EACtB;;;;;EA+CA,MAAM,WAAW,UAAiB;AAC9B,QAAI,YAAY,MAAM;AAAE,iBAAW;;AACnC,QAAI,aAAa,IAAI;AACjB,UAAI;AACA,cAAM,SAAS,MAAM,sBAAK,kCAAL,WAAY;AAGjC,YAAI,UAAU,QAAQ,WAAW,aAAa;AAAE,iBAAO;;AAEvD,eAAO;eACF,OAAY;AACjB,YAAI,QAAQ,OAAO,gBAAgB,GAAG;AAAE,iBAAO;;AAC/C,cAAM;;;AAKd,QAAI,YAAY,KAAK,WAAW,YAAY;AACxC,UAAI,cAAc,WAAW;AAE7B,YAAMC,QAAO,MAAM,sBAAK,kCAAL,WAAY,sBAAsB,CAAE,WAAW;AAClE,UAAI,YAAYA,OAAM,EAAE,GAAG;AAAE,eAAO,WAAWA,KAAI;;;AAGvD,QAAI,aAA6C;AACjD,eAAW,UAAU,KAAK,SAAS,SAAS;AACxC,UAAI,EAAE,kBAAkB,0BAA0B;AAAE;;AACpD,UAAI,OAAO,iBAAiB,QAAQ,GAAG;AACnC,qBAAa;AACb;;;AAIR,QAAI,cAAc,MAAM;AAAE,aAAO;;AAGjC,UAAMA,QAAO,MAAM,sBAAK,kCAAL,WAAY,sBAAsB,CAAE,QAAQ;AAG/D,QAAIA,SAAQ,QAAQA,UAAS,MAAM;AAAE,aAAO;;AAG5C,UAAM,UAAU,MAAM,WAAW,cAAc,UAAUA,KAAI;AAE7D,QAAI,WAAW,MAAM;AAAE,aAAO;;AAE9B,WAAO,OAAO,qBAAqB,yBAAyB;MACxD,WAAW,cAAe,QAAS;MACnC,MAAM,EAAE,UAAU,MAAAA,MAAI;KACzB;EACL;;;;;EAMA,MAAM,QAAQ,KAAW;AACrB,UAAMA,QAAO,MAAM,sBAAK,kCAAL,WAAY,wBAAwB,CAAE,GAAG;AAC5D,QAAIA,SAAQ,QAAQA,UAAS,MAAM;AAAE,aAAO;;AAC5C,WAAOA;EACX;;;;EAKA,MAAM,iBAAc;AAEhB,UAAMA,QAAO,MAAM,sBAAK,kCAAL,WAAY;AAG/B,QAAIA,SAAQ,QAAQA,UAAS,MAAM;AAAE,aAAO;;AAG5C,UAAM,OAAOA,MAAK,MAAM,0EAA0E;AAClG,QAAI,MAAM;AACN,YAAM,SAAU,KAAK,CAAC,MAAM,aAAc,SAAQ;AAClD,YAAM,SAAS,SAAS,KAAK,CAAC,GAAG,EAAE;AACnC,UAAI,KAAK,CAAC,EAAE,WAAW,SAAS,GAAG;AAC/B,eAAO,GAAI,MAAO,MAAQ,aAAa,OAAO,KAAK,CAAC,CAAC,CAAC;;;AAK9D,UAAM,QAAQA,MAAK,MAAM,+BAA+B;AACxD,QAAI,SAAS,MAAM,CAAC,EAAE,WAAW,IAAI;AACjC,aAAO,SAAW,MAAM,CAAC,CAAE;;AAG/B,WAAO,OAAO,4CAA4C,yBAAyB;MAC/E,WAAW;MACX,MAAM,EAAE,MAAAA,MAAI;KACf;EACL;;;;;;;;;EAUA,MAAM,YAAS;AACX,UAAM,SAAS,MAAM,KAAK,WAAU;AACpC,WAAO,OAAO;EAClB;;;;;;;;;EAUA,MAAM,aAAU;AACZ,UAAM,UAAgC,CAAE,EAAE,MAAM,QAAQ,OAAO,KAAK,KAAI,CAAE;AAC1E,QAAI;AAGA,YAAM,SAAS,MAAM,KAAK,QAAQ,QAAQ;AAC1C,UAAI,UAAU,MAAM;AAChB,gBAAQ,KAAK,EAAE,MAAM,WAAW,OAAO,GAAE,CAAE;AAC3C,eAAO,EAAE,KAAK,MAAM,QAAO;;AAE/B,cAAQ,KAAK,EAAE,MAAM,UAAU,OAAO,OAAM,CAAE;AAE9C,eAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACtC,cAAM,QAAQ,OAAO,MAAM,SAAS,CAAC,CAAC;AACtC,YAAI,SAAS,MAAM;AAAE;;AAErB,cAAM,SAAS,MAAM,CAAC,EAAE,YAAW;AAEnC,gBAAQ,QAAQ;UACZ,KAAK;UACL,KAAK;AACD,oBAAQ,KAAK,EAAE,MAAM,OAAO,OAAO,OAAM,CAAE;AAC3C,mBAAO,EAAE,SAAS,KAAK,OAAM;UACjC,KAAK,QAAQ;AACT,kBAAM,MAAM,YAAY,MAAM;AAC9B,oBAAQ,KAAK,EAAE,MAAM,QAAQ,OAAO,OAAM,CAAE;AAC5C,oBAAQ,KAAK,EAAE,MAAM,OAAO,OAAO,IAAG,CAAE;AACxC,mBAAO,EAAE,SAAS,IAAG;;UAGzB,KAAK;UACL,KAAK,WAAW;AAEZ,kBAAM,WAAY,WAAW,WAAY,sBAAqB;AAC9D,oBAAQ,KAAK,EAAE,MAAM,QAAQ,OAAO,OAAM,CAAE;AAG5C,kBAAM,QAAQ,MAAM,KAAK,WAAU;AACnC,gBAAI,SAAS,MAAM;AACf,sBAAQ,KAAK,EAAE,MAAM,UAAU,OAAO,GAAE,CAAE;AAC1C,qBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,kBAAM,SAAS,MAAM,CAAC,KAAK,IAAI,MAAM,GAAG;AACxC,gBAAI,MAAM,WAAW,GAAG;AACpB,sBAAQ,KAAK,EAAE,MAAW,IAAK,MAAO,QAAQ,OAAQ,MAAM,CAAC,KAAK,GAAG,CAAE;AACvE,qBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,kBAAM,UAAU,MAAM,CAAC;AAEvB,kBAAM,WAAW,IAAI,SAAS,MAAM,CAAC,GAAG;;cAEpC;cACA;;cAGA;cACA;eACD,KAAK,QAAQ;AAGhB,gBAAI,WAAW,UAAU;AACrB,oBAAM,aAAa,MAAM,SAAS,QAAQ,OAAO;AAEjD,kBAAI,UAAU,YAAY;AACtB,wBAAQ,KAAK,EAAE,MAAM,UAAU,OAAO,WAAU,CAAE;AAClD,uBAAO,EAAE,KAAK,MAAM,QAAO;;AAE/B,sBAAQ,KAAK,EAAE,MAAM,SAAS,OAAO,WAAU,CAAE;uBAE1C,WAAW,WAAW;AAC7B,oBAAM,UAAU,MAAM,SAAS,UAAU,OAAO,OAAO;AACvD,kBAAI,CAAC,SAAS;AACV,wBAAQ,KAAK,EAAE,MAAM,YAAY,OAAO,IAAG,CAAE;AAC7C,uBAAO,EAAE,KAAK,MAAM,QAAO;;AAE/B,sBAAQ,KAAK,EAAE,MAAM,WAAW,OAAO,QAAQ,SAAQ,EAAE,CAAE;;AAI/D,gBAAI,cAAc,MAAM,SAAS,QAAQ,EAAE,OAAO;AAClD,gBAAI,eAAe,QAAQ,gBAAgB,MAAM;AAC7C,sBAAQ,KAAK,EAAE,MAAM,iBAAiB,OAAO,GAAE,CAAE;AACjD,qBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,oBAAQ,KAAK,EAAE,MAAM,qBAAqB,OAAO,YAAW,CAAE;AAG9D,gBAAI,WAAW,WAAW;AACtB,4BAAc,YAAY,QAAQ,QAAQ,QAAQ,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC;AAC3E,sBAAQ,KAAK,EAAE,MAAM,yBAAyB,OAAO,YAAW,CAAE;;AAItE,gBAAI,YAAY,MAAM,SAAS,GAAG;AAC9B,4BAAc,YAAY,WAAW;;AAEzC,oBAAQ,KAAK,EAAE,MAAM,gBAAgB,OAAO,YAAW,CAAE;AAGzD,gBAAI,WAAgB,CAAA;AACpB,kBAAM,WAAW,MAAO,IAAI,aAAa,WAAW,EAAG,KAAI;AAC3D,qBAAS,SAAQ;AAEjB,gBAAI;AACA,yBAAW,SAAS;qBACf,OAAO;AACZ,kBAAI;AACA,wBAAQ,KAAK,EAAE,MAAM,aAAa,OAAO,SAAS,SAAQ,CAAE;uBACvDC,QAAO;AACZ,sBAAMC,SAAQ,SAAS;AACvB,oBAAIA,QAAO;AACP,0BAAQ,KAAK,EAAE,MAAM,aAAa,OAAO,QAAQA,MAAK,EAAC,CAAE;;AAE7D,uBAAO,EAAE,KAAK,MAAM,QAAO;;AAE/B,qBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,gBAAI,CAAC,UAAU;AACX,sBAAQ,KAAK,EAAE,MAAM,aAAa,OAAO,GAAE,CAAE;AAC7C,qBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,oBAAQ,KAAK,EAAE,MAAM,YAAY,OAAO,KAAK,UAAU,QAAQ,EAAC,CAAE;AAGlE,gBAAI,WAAW,SAAS;AACxB,gBAAI,OAAO,aAAc,UAAU;AAC/B,sBAAQ,KAAK,EAAE,MAAM,aAAa,OAAO,GAAE,CAAE;AAC7C,qBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,gBAAI,SAAS,MAAM,sBAAsB,GAAG;mBAErC;AAEH,oBAAM,OAAO,SAAS,MAAM,WAAW;AACvC,kBAAI,QAAQ,MAAM;AACd,wBAAQ,KAAK,EAAE,MAAM,kBAAkB,OAAO,SAAQ,CAAE;AACxD,uBAAO,EAAE,KAAK,MAAM,QAAO;;AAG/B,sBAAQ,KAAK,EAAE,MAAM,iBAAiB,OAAO,SAAQ,CAAE;AACvD,yBAAW,YAAY,QAAQ;;AAGnC,oBAAQ,KAAK,EAAE,MAAM,OAAO,OAAO,SAAQ,CAAE;AAE7C,mBAAO,EAAE,SAAS,KAAK,SAAQ;;;;aAItC,OAAO;IAAA;AAEhB,WAAO,EAAE,SAAS,KAAK,KAAI;EAC/B;EAEA,aAAa,cAAc,UAAkB;AACzC,UAAM,UAAU,MAAM,SAAS,WAAU;AAEzC,UAAM,YAAY,QAAQ,UAAqB,gCAAgC;AAG/E,WAAO,WAAW,gCAAgC,yBAAyB;MACvE,WAAW;MAAiB,MAAM,EAAE,QAAO;KAAI;AAEnD,WAAO,UAAU;EACrB;;;;;EA8BA,aAAa,SAAS,UAA4B,MAAY;AAlkBlE,QAAAC;AAokBQ,QAAI,cAAc;AAClB,WAAO,MAAM;AACT,UAAI,gBAAgB,MAAM,gBAAgB,KAAK;AAAE,eAAO;;AAIxD,UAAI,SAAS,SAAS,gBAAgB,OAAO;AAAE,eAAO;;AAGtD,YAAM,OAAO,MAAM,gBAAAA,MAAA,cAAY,qCAAZ,KAAAA,KAAyB,UAAU;AAGtD,UAAI,QAAQ,MAAM;AACd,cAAM,WAAW,IAAI,aAAY,UAAU,MAAM,IAAI;AAGrD,YAAI,gBAAgB,QAAQ,CAAE,MAAM,SAAS,iBAAgB,GAAK;AAAE,iBAAO;;AAE3E,eAAO;;AAIX,oBAAc,YAAY,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG;;EAE9D;;AA7aA;AAEA;AAnBE;AA4DI,WAAM,eAAC,UAAkB,QAAmB;AAC9C,YAAU,UAAU,CAAA,GAAI,MAAK;AAC7B,QAAMC,SAAQ,mBAAK,WAAU;AAG7B,SAAO,QAAQ,SAAS,KAAK,IAAI,CAAC;AAElC,MAAI,WAAoC;AACxC,MAAI,MAAM,KAAK,iBAAgB,GAAI;AAC/B,eAAWA,OAAM,YAAY,QAAQ;AACrC,WAAO,UAAU,oBAAoB,iBAAiB;MAClD,MAAM,EAAE,SAAQ;KACnB;AAED,aAAS;MACL,UAAU,KAAK,MAAM,GAAG;MACxBA,OAAM,mBAAmB,UAAU,MAAM;;AAG7C,eAAW;;AAGf,SAAO,KAAK;IACR,gBAAgB;GACnB;AAED,MAAI;AACA,UAAM,SAAS,MAAM,mBAAK,WAAU,QAAQ,EAAE,GAAG,MAAM;AAEvD,QAAI,UAAU;AACV,aAAOA,OAAM,qBAAqB,UAAU,MAAM,EAAE,CAAC;;AAGzD,WAAO;WACF,OAAY;AACjB,QAAI,CAAC,QAAQ,OAAO,gBAAgB,GAAG;AAAE,YAAM;;;AAGnD,SAAO;AACX;AAnGE;AAwYW,iBAAY,eAAC,UAAoB,MAAY;AACtD,QAAM,UAAU,MAAM,aAAY,cAAc,QAAQ;AAExD,MAAI;AACA,UAAM,WAAW,IAAI,SAAS,SAAS;MACnC;OACD,QAAQ;AAEX,UAAM,OAAO,MAAM,SAAS,SAAS,SAAS,IAAI,GAAG;MACjD,gBAAgB;KACnB;AAED,QAAI,SAAS,aAAa;AAAE,aAAO;;AACnC,WAAO;WAEF,OAAO;AAGZ,UAAM;;AAGV,SAAO;AACX;AA9ZE,aAAO,cAAP;IAAO,cAAP;;;AC7IN,IAAMC,SAAO,OAAO,CAAC;AAIf,SAAU,UAAU,QAAoB,WAAe;AACzD,SAAQ,SAAS,OAAU;AACvB,QAAI,SAAS,MAAM;AAAE,aAAO;;AAC5B,WAAO,OAAO,KAAK;EACvB;AACJ;AAEM,SAAU,QAAQ,QAAoBC,YAAmB;AAC3D,SAAQ,CAAC,UAAc;AACnB,QAAIA,cAAa,SAAS,MAAM;AAAE,aAAO;;AACzC,QAAI,CAAC,MAAM,QAAQ,KAAK,GAAG;AAAE,YAAM,IAAI,MAAM,cAAc;;AAC3D,WAAO,MAAM,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC;EACrC;AACJ;AAKM,SAAU,OAAO,QAAoC,UAAwC;AAC/F,SAAQ,CAAC,UAAc;AACnB,UAAM,SAAc,CAAA;AACpB,eAAW,OAAO,QAAQ;AACtB,UAAI,SAAS;AACb,UAAI,YAAY,OAAO,YAAY,EAAE,UAAU,QAAQ;AACnD,mBAAW,UAAU,SAAS,GAAG,GAAG;AAChC,cAAI,UAAU,OAAO;AACjB,qBAAS;AACT;;;;AAKZ,UAAI;AACA,cAAM,KAAK,OAAO,GAAG,EAAE,MAAM,MAAM,CAAC;AACpC,YAAI,OAAO,QAAW;AAAE,iBAAO,GAAG,IAAI;;eACjC,OAAO;AACZ,cAAM,UAAW,iBAAiB,QAAS,MAAM,UAAS;AAC1D,eAAO,OAAO,2BAA4B,GAAI,KAAM,OAAQ,KAAK,YAAY,EAAE,MAAK,CAAE;;;AAG9F,WAAO;EACX;AACJ;AAEM,SAAU,cAAc,OAAU;AACpC,UAAQ,OAAO;IACX,KAAK;IAAM,KAAK;AACZ,aAAO;IACX,KAAK;IAAO,KAAK;AACb,aAAO;;AAEf,iBAAe,OAAO,oBAAqB,KAAK,UAAU,KAAK,CAAE,IAAI,SAAS,KAAK;AACvF;AAEM,SAAU,WAAW,OAAa;AACpC,iBAAe,YAAY,OAAO,IAAI,GAAG,gBAAgB,SAAS,KAAK;AACvE,SAAO;AACX;AAEM,SAAU,WAAW,OAAU;AACjC,iBAAe,YAAY,OAAO,EAAE,GAAG,gBAAgB,SAAS,KAAK;AACrE,SAAO;AACX;AASA,IAAM,aAAa,OAAO;EACtB,SAAS;EACT,WAAW;EACX,aAAa;EACb,MAAM;EACN,OAAO;EACP,SAAS,UAAU,eAAe,KAAK;EACvC,QAAQ,QAAQ,UAAU;EAC1B,iBAAiB;EACjB,kBAAkB;GACnB;EACC,OAAO,CAAE,UAAU;CACtB;AAEK,SAAU,UAAU,OAAU;AAChC,SAAO,WAAW,KAAK;AAC3B;AAEA,IAAM,eAAe,OAAO;EACxB,MAAM,UAAU,UAAU;EAC1B,YAAY;EACZ,uBAAuB,UAAU,YAAY,IAAI;EAEjD,QAAQ;EAER,WAAW;EACX,OAAO,UAAU,UAAU;EAC3B,YAAY;EAEZ,UAAU;EACV,SAAS;EAET,WAAW,UAAU,YAAY,IAAI;EACrC,cAAc,UAAU,YAAY,IAAI;EAExC,aAAa,UAAU,WAAW,IAAI;EACtC,eAAe,UAAU,WAAW,IAAI;EAExC,OAAO,UAAU,UAAU;EAC3B,YAAY,UAAU,YAAY,IAAI;EACtC,WAAW;EAEX,eAAe,UAAU,SAAS;GACnC;EACC,YAAY,CAAE,SAAS;CAC1B;AAEK,SAAU,YAAY,OAAU;AAClC,QAAM,SAAS,aAAa,KAAK;AACjC,SAAO,eAAe,MAAM,aAAa,IAAI,CAAC,OAA0C;AACpF,QAAI,OAAO,OAAQ,UAAU;AAAE,aAAO;;AACtC,WAAO,0BAA0B,EAAE;EACvC,CAAC;AACD,SAAO;AACX;AAEA,IAAM,oBAAoB,OAAO;EAC7B,kBAAkB;EAClB,aAAa;EACb,iBAAiB;EACjB,SAAS;EACT,QAAQ,QAAQ,UAAU;EAC1B,MAAM;EACN,OAAO;EACP,WAAW;GACZ;EACC,OAAO,CAAE,UAAU;CACtB;AAEK,SAAU,iBAAiB,OAAU;AACvC,SAAO,kBAAkB,KAAK;AAClC;AAEA,IAAM,4BAA4B,OAAO;EACrC,IAAI,UAAU,YAAY,IAAI;EAC9B,MAAM,UAAU,YAAY,IAAI;EAChC,iBAAiB,UAAU,YAAY,IAAI;;EAE3C,OAAO;EACP,MAAM,UAAU,OAAO;EACvB,SAAS;EACT,aAAa,UAAU,WAAW,IAAI;EACtC,WAAW,UAAU,UAAU;EAC/B,WAAW;EACX,MAAM;EACN,MAAM,QAAQ,gBAAgB;EAC9B,aAAa;;EAEb,mBAAmB;EACnB,mBAAmB,UAAU,SAAS;EACtC,cAAc,UAAU,WAAW,IAAI;EACvC,QAAQ,UAAU,SAAS;EAC3B,MAAM,UAAU,WAAW,CAAC;GAC7B;EACC,mBAAmB,CAAE,UAAU;EAC/B,MAAM,CAAE,iBAAiB;EACzB,OAAO,CAAE,kBAAkB;CAC9B;AAEK,SAAU,yBAAyB,OAAU;AAC/C,SAAO,0BAA0B,KAAK;AAC1C;AAEM,SAAU,0BAA0B,OAAU;AAIhD,MAAI,MAAM,MAAM,UAAU,MAAM,EAAE,MAAMC,QAAM;AAC1C,UAAM,KAAK;;AAGf,QAAM,SAAS,OAAO;IAClB,MAAM;;IAGN,OAAO,UAAU,WAAW,MAAS;IAErC,MAAM,CAACC,WAAc;AACjB,UAAIA,WAAU,QAAQA,UAAS,MAAM;AAAE,eAAO;;AAC9C,aAAO,UAAUA,MAAK;IAC1B;IACA,YAAY,UAAU,eAAe,IAAI;IACzC,qBAAqB,UAAU,QAAQ,YAAY,IAAI,GAAG,IAAI;IAE9D,WAAW,UAAU,YAAY,IAAI;IACrC,aAAa,UAAU,WAAW,IAAI;IACtC,kBAAkB,UAAU,WAAW,IAAI;IAE3C,MAAM;;IAGN,UAAU,UAAU,SAAS;IAC7B,sBAAsB,UAAU,SAAS;IACzC,cAAc,UAAU,SAAS;IACjC,kBAAkB,UAAU,WAAW,IAAI;IAE3C,UAAU;IACV,IAAI,UAAU,YAAY,IAAI;IAC9B,OAAO;IACP,OAAO;IACP,MAAM;IAEN,SAAS,UAAU,YAAY,IAAI;IAEnC,SAAS,UAAU,WAAW,IAAI;KACnC;IACC,MAAM,CAAE,OAAO;IACf,UAAU,CAAE,KAAK;IACjB,OAAO,CAAE,kBAAkB;GAC9B,EAAE,KAAK;AAGR,MAAI,OAAO,MAAM,QAAQ,OAAO,WAAW,MAAM;AAC7C,WAAO,UAAU,iBAAiB,MAAM;;AAM5C,OAAK,MAAM,SAAS,KAAK,MAAM,SAAS,MAAM,MAAM,cAAc,MAAM;AACpE,WAAO,aAAa,CAAA;;AAIxB,MAAI,MAAM,WAAW;AACjB,WAAO,YAAY,UAAU,KAAK,MAAM,SAAS;SAC9C;AACH,WAAO,YAAY,UAAU,KAAK,KAAK;;AAI3C,MAAI,OAAO,WAAW,MAAM;AACxB,UAAM,UAAU,OAAO,UAAU;AACjC,QAAI,WAAW,MAAM;AAAE,aAAO,UAAU;;;AAwC5C,MAAI,OAAO,aAAa,UAAU,OAAO,SAAS,MAAMD,QAAM;AAC1D,WAAO,YAAY;;AAGvB,SAAO;AACX;;;AC9SA,IAAM,aAAa;AAKb,IAAO,gBAAP,MAAO,eAAa;;;;EAYtB,YAAY,MAAY;AALf;;;;;;;AAML,qBAAgC,MAAM,EAAE,KAAI,CAAE;EAClD;;;;EAKA,QAAK;AACD,WAAO,IAAI,eAAc,KAAK,IAAI;EACtC;;AA+CE,IAAO,gBAAP,MAAO,uBAAsB,cAAa;;;;;;EA6C5C,YAAY,gBAAyB,OAAyB;AAC1D,QAAI,kBAAkB,MAAM;AAAE,uBAAiB;;AAC/C,UAAM,sCAAwC,kBAAkB,CAAG,EAAE;AAxChE;;;;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAKA;;;;AAYL,UAAM,QAAgC,EAAE,eAAc;AACtD,aAAS,IAAI,MAA+B,SAAe;AACvD,UAAI,SAAS,SAAS,CAAA,GAAK,IAAI;AAC/B,UAAI,SAAS,MAAM;AAAE,gBAAQ;;AAC7B,qBAAe,OAAO,UAAW,UAAU,qBAAsB,IAAK,IAAI,SAAS,KAAK;AACxF,YAAM,IAAI,IAAI;IAClB;AAEA,QAAI,UAAU,IAAK;AACnB,QAAI,YAAY,IAAK;AACrB,QAAI,cAAc,CAAC;AACnB,QAAI,iBAAiB,EAAE;AACvB,QAAI,0BAA0B,IAAI;AAClC,QAAI,uBAAuB,IAAI;AAE/B,qBAAgC,MAAM,KAAK;EAC/C;EAEA,QAAK;AACD,WAAO,IAAI,eAAc,KAAK,gBAAgB,IAAI;EACtD;;AAYE,IAAO,YAAP,MAAO,mBAAkB,cAAa;;;;;;EAiBxC,YAAY,SAAyB,eAA6B;AAC9D,UAAM,gCAAgC;AAbjC;;;;AAKA;;;;AASL,qBAA4B,MAAM;MAC9B,SAAU,WAAW;MACrB,eAAiB,iBAAiB,OAAQ,IAAG;KAChD;EACL;EAEA,QAAK;AACD,WAAO,IAAI,WAAU,KAAK,SAAS,KAAK,aAAa;EACzD;;AA7LJ;AAuMM,IAAO,wBAAP,MAAO,8BAA6B,cAAa;;;;EAanD,YAAY,aAAqD;AAC7D,UAAM,oCAAoC;AAbrC;AAcL,uBAAK,cAAe;EACxB;;;;EAVA,IAAI,cAAW;AACX,WAAO,mBAAK;EAChB;;;;EAaA,MAAM,WAAW,UAAkB;AAC/B,WAAO,MAAM,mBAAK,cAAL,WAAkB;EACnC;EAEA,QAAK;AACD,WAAO,IAAI,sBAAqB,mBAAK,aAAY;EACrD;;AA1BS;AADP,IAAO,uBAAP;AAvMN,IAAAE,OAAA;AAqOM,IAAO,+BAAP,cAA4C,cAAa;;;;;EAkB3D,YAAY,KAAa,aAAmL;AACxM,UAAM,kDAAkD;AAlBnD,uBAAAA;AACA;AAkBL,uBAAKA,OAAO;AACZ,uBAAK,cAAe;EACxB;;;;EAfA,IAAI,MAAG;AAAa,WAAO,mBAAKA;EAAM;;;;EAKtC,IAAI,cAAW;AAA6K,WAAO,mBAAK;EAAc;;EAatN,QAAK;AAAmC,WAAO;EAAM;;AAxB5CA,QAAA;AACA;;;AC9Kb,IAAM,WAAgD,oBAAI,IAAG;AAzD7D,WAAAC,WAAA;AAgEM,IAAO,WAAP,MAAO,SAAO;;;;EAShB,YAAY,MAAc,SAAqB;AAR/C;AACA,uBAAAA;AAEA;AAMI,uBAAK,OAAQ;AACb,uBAAKA,WAAW,UAAU,OAAO;AACjC,uBAAK,UAAW,oBAAI,IAAG;EAC3B;;;;EAKA,SAAM;AACF,WAAO,EAAE,MAAM,KAAK,MAAM,SAAS,OAAO,KAAK,OAAO,EAAC;EAC3D;;;;;;;EAQA,IAAI,OAAI;AAAa,WAAO,mBAAK;EAAO;EACxC,IAAI,KAAK,OAAa;AAAI,uBAAK,OAAS;EAAO;;;;EAK/C,IAAI,UAAO;AAAa,WAAO,mBAAKA;EAAU;EAC9C,IAAI,QAAQ,OAAmB;AAAI,uBAAKA,WAAW,UAAU,OAAO,SAAS;EAAG;;;;;;;;EAShF,QAAQ,OAAiB;AACrB,QAAI,SAAS,MAAM;AAAE,aAAO;;AAE5B,QAAI,OAAO,UAAW,UAAU;AAC5B,UAAI;AACA,eAAQ,KAAK,YAAY,UAAU,KAAK;eACnC,OAAO;MAAA;AAChB,aAAQ,KAAK,SAAS;;AAG1B,QAAI,OAAO,UAAW,YAAY,OAAO,UAAW,UAAU;AAC1D,UAAI;AACA,eAAQ,KAAK,YAAY,UAAU,KAAK;eACnC,OAAO;MAAA;AAChB,aAAO;;AAGX,QAAI,OAAO,UAAW,UAAU;AAC5B,UAAI,MAAM,WAAW,MAAM;AACvB,YAAI;AACA,iBAAQ,KAAK,YAAY,UAAU,MAAM,OAAO;iBAC3C,OAAO;QAAA;AAChB,eAAO;;AAEX,UAAI,MAAM,QAAQ,MAAM;AACpB,eAAQ,KAAK,SAAS,MAAM;;AAEhC,aAAO;;AAGX,WAAO;EACX;;;;EAKA,IAAI,UAAO;AACP,WAAO,MAAM,KAAK,mBAAK,UAAS,OAAM,CAAE;EAC5C;;;;;EAMA,aAAa,QAAqB;AAC9B,QAAI,mBAAK,UAAS,IAAI,OAAO,IAAI,GAAG;AAChC,YAAM,IAAI,MAAM,mCAAoC,OAAO,IAAK,GAAG;;AAEvE,uBAAK,UAAS,IAAI,OAAO,MAAM,OAAO,MAAK,CAAE;AAC7C,WAAO;EACX;;;;;;EAOA,UAAmD,MAAY;AAC3D,WAAW,mBAAK,UAAS,IAAI,IAAI,KAAM;EAC3C;;;;;EAMA,WAAoD,UAAgB;AAChE,WAAkB,KAAK,QAAQ,OAAO,CAAC,MAAO,EAAE,KAAK,MAAM,GAAG,EAAE,CAAC,MAAM,QAAS;EACpF;;;;EAKA,QAAK;AACD,UAAM,QAAQ,IAAI,SAAQ,KAAK,MAAM,KAAK,OAAO;AACjD,SAAK,QAAQ,QAAQ,CAAC,WAAU;AAC5B,YAAM,aAAa,OAAO,MAAK,CAAE;IACrC,CAAC;AACD,WAAO;EACX;;;;;;;EAQA,oBAAoB,IAAmB;AACnC,UAAM,QAAQ,KAAK,UAAyB,oCAAoC,KAAM,IAAI,cAAa;AAEvG,QAAI,MAAM,MAAM;AAChB,QAAI,GAAG,MAAM,MAAM;AAAE,aAAO,MAAM;;AAClC,QAAI,GAAG,MAAM;AACT,eAAS,IAAI,GAAG,IAAI,GAAG,KAAK,QAAQ,KAAK,GAAG;AACxC,YAAI,GAAG,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,MAAM;AACtC,iBAAO,MAAM;eACV;AACH,iBAAO,MAAM;;;;AAKzB,QAAI,GAAG,YAAY;AACf,YAAM,aAAa,cAAc,GAAG,UAAU;AAC9C,iBAAW,QAAQ,YAAY;AAC3B,eAAO,MAAM,sBAAsB,MAAM,yBAAyB,WAAW,IAAI,EAAE,YAAY;;;AAIvG,WAAO;EACX;;;;EAKA,OAAO,KAAK,SAAoB;AAC5B,yBAAoB;AAGpB,QAAI,WAAW,MAAM;AAAE,aAAO,SAAQ,KAAK,SAAS;;AAGpD,QAAI,OAAO,YAAa,UAAU;AAAE,gBAAU,OAAO,OAAO;;AAC5D,QAAI,OAAO,YAAa,YAAY,OAAO,YAAa,UAAU;AAC9D,YAAM,cAAc,SAAS,IAAI,OAAO;AACxC,UAAI,aAAa;AAAE,eAAO,YAAW;;AACrC,UAAI,OAAO,YAAa,UAAU;AAC9B,eAAO,IAAI,SAAQ,WAAW,OAAO;;AAGzC,qBAAe,OAAO,mBAAmB,WAAW,OAAO;;AAI/D,QAAI,OAAiB,QAAS,UAAW,YAAY;AACjD,YAAM,QAAkB,QAAS,MAAK;AAGtC,aAAO;;AAIX,QAAI,OAAO,YAAa,UAAU;AAC9B,qBAAe,OAAO,QAAQ,SAAU,YAAY,OAAO,QAAQ,YAAa,UAC5E,0CAA0C,WAAW,OAAO;AAEhE,YAAM,SAAS,IAAI,SAAiB,QAAQ,MAAgB,QAAQ,OAAQ;AAE5E,UAAU,QAAS,cAAoB,QAAS,cAAc,MAAM;AAChE,eAAO,aAAa,IAAI,UAAgB,QAAS,YAAkB,QAAS,UAAU,CAAC;;AAO3F,aAAO;;AAGX,mBAAe,OAAO,mBAAmB,WAAW,OAAO;EAC/D;;;;;EAMA,OAAO,SAAS,eAAyC,aAA0B;AAC/E,QAAI,OAAO,kBAAmB,UAAU;AAAE,sBAAgB,OAAO,aAAa;;AAC9E,UAAM,WAAW,SAAS,IAAI,aAAa;AAC3C,QAAI,UAAU;AACV,qBAAe,OAAO,2BAA4B,KAAK,UAAU,SAAS,IAAI,CAAE,IAAI,iBAAiB,aAAa;;AAEtH,aAAS,IAAI,eAAe,WAAW;EAC3C;;AAvNA;AACAA,YAAA;AAEA;AAJE,IAAO,UAAP;AAsON,SAASC,YAAWC,SAAyB,UAAgB;AACzD,QAAM,QAAQ,OAAOA,OAAM;AAC3B,MAAI,CAAC,MAAM,MAAM,WAAW,GAAG;AAC3B,UAAM,IAAI,MAAM,uBAAwBA,OAAO,EAAE;;AAIrD,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,GAAG;AAAE,UAAM,KAAK,EAAE;;AAGvC,MAAI,MAAM,WAAW,GAAG;AACpB,UAAM,IAAI,MAAM,uBAAwBA,OAAO,EAAE;;AAIrD,SAAO,MAAM,CAAC,EAAE,SAAS,UAAU;AAAE,UAAM,CAAC,KAAK;;AAGjD,MAAI,MAAM,CAAC,EAAE,SAAS,GAAG;AACrB,QAAI,OAAO,OAAO,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;AAC1C,QAAI,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,MAAM,GAAG;AAAE;;AAC5C,UAAM,CAAC,IAAI,KAAK,SAAQ;;AAG5B,SAAO,OAAO,MAAM,CAAC,IAAI,MAAM,CAAC,CAAC;AACrC;AAGA,SAAS,oBAAoB,KAAW;AACpC,SAAO,IAAI,6BAA6B,KAAK,OAAO,cAAc,UAAU,YAAW;AAGnF,YAAQ,UAAU,cAAc,QAAQ;AAExC,QAAI;AACJ,QAAI;AACA,YAAM,CAAE,WAAW,QAAQ,IAAK,MAAM,QAAQ,IAAI;QAC9C,QAAQ,KAAI;QAAI,aAAY;OAC/B;AACD,iBAAW;AACX,YAAM,UAAU,SAAS,SAAS;AAClC,YAAM,UAAU;QACZ,UAAU,SAAS;QACnB,cAAcD,YAAW,QAAQ,QAAQ,CAAC;QAC1C,sBAAsBA,YAAW,QAAQ,gBAAgB,CAAC;;AAE9D,aAAO;aACF,OAAY;AACjB,aAAO,OAAO,+CAAgD,KAAK,UAAU,QAAQ,GAAG,CAAE,KAAK,gBAAgB,EAAE,SAAS,UAAU,MAAK,CAAE;;EAEnJ,CAAC;AACL;AAGA,IAAI,WAAW;AACf,SAAS,uBAAoB;AACzB,MAAI,UAAU;AAAE;;AAChB,aAAW;AAGX,WAAS,YAAY,MAAc,SAAiB,SAAgB;AAChE,UAAM,OAAO,WAAA;AACT,YAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;AAGzC,UAAI,QAAQ,cAAc,MAAM;AAC5B,gBAAQ,aAAa,IAAI,UAAU,MAAM,QAAQ,UAAU,CAAC;;AAGhE,cAAQ,aAAa,IAAI,cAAa,CAAE;AAExC,OAAC,QAAQ,WAAW,CAAA,GAAI,QAAQ,CAAC,WAAU;AACvC,gBAAQ,aAAa,MAAM;MAC/B,CAAC;AAED,aAAO;IACX;AAGA,YAAQ,SAAS,MAAM,IAAI;AAC3B,YAAQ,SAAS,SAAS,IAAI;AAE9B,QAAI,QAAQ,UAAU;AAClB,cAAQ,SAAS,QAAQ,CAACE,UAAQ;AAC9B,gBAAQ,SAASA,OAAM,IAAI;MAC/B,CAAC;;EAET;AAEA,cAAY,WAAW,GAAG,EAAE,YAAY,GAAG,UAAU,CAAE,WAAW,EAAE,CAAE;AACtE,cAAY,WAAW,GAAG,EAAE,YAAY,EAAC,CAAE;AAC3C,cAAY,WAAW,GAAG,EAAE,YAAY,EAAC,CAAE;AAC3C,cAAY,UAAU,GAAG,EAAE,YAAY,EAAC,CAAE;AAC1C,cAAY,SAAS,IAAI,EAAE,YAAY,GAAE,CAAE;AAC3C,cAAY,WAAW,UAAU,EAAE,YAAY,SAAQ,CAAE;AACzD,cAAY,WAAW,MAAO,EAAE,YAAY,KAAK,CAAE;AAEnD,cAAY,WAAW,IAAI,CAAA,CAAG;AAC9B,cAAY,gBAAgB,GAAG,CAAA,CAAG;AAElC,cAAY,YAAY,OAAO;IAC3B,YAAY;GACf;AACD,cAAY,mBAAmB,QAAQ,CAAA,CAAG;AAC1C,cAAY,oBAAoB,QAAQ,CAAA,CAAG;AAE3C,cAAY,QAAQ,MAAM,EAAE,YAAY,EAAC,CAAE;AAC3C,cAAY,eAAe,OAAO,CAAA,CAAG;AACrC,cAAY,gBAAgB,OAAO,CAAA,CAAG;AAEtC,cAAY,OAAO,IAAI,EAAE,YAAY,EAAC,CAAE;AACxC,cAAY,QAAQ,IAAI,CAAA,CAAG;AAE3B,cAAY,SAAS,OAAO,EAAE,YAAY,EAAC,CAAE;AAC7C,cAAY,gBAAgB,OAAO,CAAA,CAAG;AACtC,cAAY,iBAAiB,OAAO,CAAA,CAAG;AAEvC,cAAY,SAAS,KAAK;IACtB,YAAY;IACZ,SAAS;MACL,oBAAoB,0CAA2C;;GAEtE;AACD,cAAY,cAAc,OAAO,CAAA,CAAG;AACpC,cAAY,gBAAgB,OAAO;IAC/B,UAAU,CAAE,eAAe,UAAU;IACrC,SAAS;MACL,oBAAoB,kDAAmD;;GAE9E;AAED,cAAY,YAAY,IAAI;IACxB,YAAY;IACZ,SAAS,CAAA;GACZ;AACD,cAAY,mBAAmB,KAAK,CAAA,CAAG;AACvC,cAAY,oBAAoB,UAAU,CAAA,CAAG;AAE7C,cAAY,QAAQ,KAAK,EAAE,YAAY,EAAC,CAAE;AAC9C;;;AC7aA,SAAS,KAAK,KAAQ;AAClB,SAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AACzC;AAPA;AA+BM,IAAO,yBAAP,MAA6B;;;;EAa/B,YAAY,UAA0B;AAbpC;AACF;AACA;AAEA;AAIA;;;AAMI,uBAAK,WAAY;AACjB,uBAAK,SAAU;AACf,uBAAK,WAAY;AAEjB,uBAAK,cAAe;EACxB;;;;EAKA,IAAI,kBAAe;AAAa,WAAO,mBAAK;EAAW;EACvD,IAAI,gBAAgB,OAAa;AAAI,uBAAK,WAAY;EAAO;EAqC7D,QAAK;AACD,QAAI,mBAAK,UAAS;AAAE;;AACpB,uBAAK,SAAU,mBAAK,WAAU,YAAY,sBAAK,4CAAM,KAAK,IAAI,GAAG,mBAAK,UAAS;AAC/E,0BAAK,4CAAL;EACJ;EAEA,OAAI;AACA,QAAI,CAAC,mBAAK,UAAS;AAAE;;AACrB,uBAAK,WAAU,cAAc,mBAAK,QAAO;AACzC,uBAAK,SAAU;EACnB;EAEA,MAAM,iBAAyB;AAC3B,SAAK,KAAI;AACT,QAAI,iBAAiB;AAAE,yBAAK,cAAe;;EAC/C;EAEA,SAAM;AACF,SAAK,MAAK;EACd;;AAhFA;AACA;AAEA;AAIA;AARE;AA2BI,UAAK,iBAAA;AACP,MAAI;AACA,UAAM,cAAc,MAAM,mBAAK,WAAU,eAAc;AAGvD,QAAI,mBAAK,kBAAiB,IAAI;AAC1B,yBAAK,cAAe;AACpB;;AAKJ,QAAI,gBAAgB,mBAAK,eAAc;AACnC,eAASC,KAAI,mBAAK,gBAAe,GAAGA,MAAK,aAAaA,MAAK;AAEvD,YAAI,mBAAK,YAAW,MAAM;AAAE;;AAE5B,cAAM,mBAAK,WAAU,KAAK,SAASA,EAAC;;AAGxC,yBAAK,cAAe;;WAGnB,OAAO;;AAOhB,MAAI,mBAAK,YAAW,MAAM;AAAE;;AAE5B,qBAAK,SAAU,mBAAK,WAAU,YAAY,sBAAK,4CAAM,KAAK,IAAI,GAAG,mBAAK,UAAS;AACnF;AA3FJ,IAAAC,YAAA;AA0HM,IAAO,oBAAP,MAAwB;;;;EAQ1B,YAAY,UAA0B;AAPtC,uBAAAA;AACA;AACA;AAMI,uBAAKA,YAAY;AACjB,uBAAK,UAAW;AAChB,uBAAK,OAAQ,CAAC,gBAAuB;AACjC,WAAK,MAAM,aAAa,mBAAKA,WAAS;IAC1C;EACJ;;;;EAKA,MAAM,MAAM,aAAqB,UAA0B;AACvD,UAAM,IAAI,MAAM,gCAAgC;EACpD;EAEA,QAAK;AACD,QAAI,mBAAK,WAAU;AAAE;;AACrB,uBAAK,UAAW;AAEhB,uBAAK,OAAL,WAAW;AACX,uBAAKA,YAAU,GAAG,SAAS,mBAAK,MAAK;EACzC;EAEA,OAAI;AACA,QAAI,CAAC,mBAAK,WAAU;AAAE;;AACtB,uBAAK,UAAW;AAEhB,uBAAKA,YAAU,IAAI,SAAS,mBAAK,MAAK;EAC1C;EAEA,MAAM,iBAAyB;AAAU,SAAK,KAAI;EAAI;EACtD,SAAM;AAAW,SAAK,MAAK;EAAI;;AAtC/BA,aAAA;AACA;AACA;AA7HJ;AAoKM,IAAO,4BAAP,cAAyC,kBAAiB;EAI5D,YAAY,UAA4B,KAAW;AAC/C,UAAM,QAAQ;AAJT;AACT;AAII,uBAAK,MAAO;AACZ,uBAAK,YAAa;EACtB;EAEA,MAAM,iBAAyB;AAC3B,QAAI,iBAAiB;AAAE,yBAAK,YAAa;;AACzC,UAAM,MAAM,eAAe;EAC/B;EAEA,MAAM,MAAM,aAAqB,UAA0B;AACvD,UAAM,QAAQ,MAAM,SAAS,SAAS,mBAAK,KAAI;AAC/C,QAAI,SAAS,MAAM;AAAE;;AAErB,QAAI,mBAAK,gBAAe,IAAI;AACxB,yBAAK,YAAa,MAAM;eACjB,MAAM,SAAS,mBAAK,aAAY;AACvC,eAAS,KAAK,mBAAK,OAAM,MAAM,MAAM;AACrC,yBAAK,YAAa,MAAM;;EAEhC;;AAxBS;AACT;AAtKJ,IAAAC;AAsMM,IAAO,0BAAP,cAAuC,kBAAiB;EAG1D,YAAY,UAA4B,QAAoB;AACxD,UAAM,QAAQ;AAHlB,uBAAAA;AAII,uBAAKA,UAAU,KAAK,MAAM;EAC9B;EAEA,MAAM,MAAM,aAAqB,UAA0B;AACvD,UAAM,IAAI,MAAM,OAAO;AACvB,YAAQ,IAAI,mBAAKA,SAAO;EAC5B;;AAVAA,WAAA;AAvMJ;AA0NM,IAAO,+BAAP,cAA4C,kBAAiB;;;;;EAO/D,YAAY,UAA4BC,OAAY;AAChD,UAAM,QAAQ;AAPlB;AAQI,uBAAK,OAAQA;EACjB;EAEA,MAAM,MAAM,aAAqB,UAA0B;AACvD,UAAM,KAAK,MAAM,SAAS,sBAAsB,mBAAK,MAAK;AAC1D,QAAI,IAAI;AAAE,eAAS,KAAK,mBAAK,QAAO,EAAE;;EAC1C;;AAdA;AA3NJ,IAAAF,YAAAC,UAAAE,UAAAC,WAAAC,eAAA,mCAAAC;AAiPM,IAAO,yBAAP,MAA6B;;;;;EAe/B,YAAY,UAA4B,QAAmB;AAfzD;AACF,uBAAAN;AACA,uBAAAC;AACA,uBAAAE;AAEA,uBAAAC;AAIA;;uBAAAC;AAOI,uBAAKL,YAAY;AACjB,uBAAKC,UAAU,KAAK,MAAM;AAC1B,uBAAKE,UAAU,sBAAK,mCAAAG,UAAM,KAAK,IAAI;AACnC,uBAAKF,WAAW;AAChB,uBAAKC,eAAe;EACxB;EA+BA,QAAK;AACD,QAAI,mBAAKD,YAAU;AAAE;;AACrB,uBAAKA,WAAW;AAEhB,QAAI,mBAAKC,mBAAiB,IAAI;AAC1B,yBAAKL,YAAU,eAAc,EAAG,KAAK,CAAC,gBAAe;AACjD,2BAAKK,eAAe;MACxB,CAAC;;AAEL,uBAAKL,YAAU,GAAG,SAAS,mBAAKG,SAAO;EAC3C;EAEA,OAAI;AACA,QAAI,CAAC,mBAAKC,YAAU;AAAE;;AACtB,uBAAKA,WAAW;AAEhB,uBAAKJ,YAAU,IAAI,SAAS,mBAAKG,SAAO;EAC5C;EAEA,MAAM,iBAAyB;AAC3B,SAAK,KAAI;AACT,QAAI,iBAAiB;AAAE,yBAAKE,eAAe;;EAC/C;EAEA,SAAM;AACF,SAAK,MAAK;EACd;;AA7EAL,aAAA;AACAC,WAAA;AACAE,WAAA;AAEAC,YAAA;AAIAC,gBAAA;AATE;AAuBIC,WAAK,eAAC,aAAmB;AAE3B,MAAI,mBAAKD,mBAAiB,IAAI;AAAE;;AAEhC,QAAM,SAAS,KAAK,mBAAKJ,SAAO;AAChC,SAAO,YAAY,mBAAKI,iBAAe;AACvC,SAAO,UAAU;AAEjB,QAAM,OAAO,MAAM,mBAAKL,YAAU,QAAQ,MAAM;AAIhD,MAAI,KAAK,WAAW,GAAG;AACnB,QAAI,mBAAKK,iBAAe,cAAc,IAAI;AACtC,yBAAKA,eAAe,cAAc;;AAEtC;;AAGJ,aAAW,OAAO,MAAM;AACpB,uBAAKL,YAAU,KAAK,mBAAKC,WAAS,GAAG;AAKrC,uBAAKI,eAAe,IAAI;;AAEhC;;;ACnOJ,IAAME,QAAO,OAAO,CAAC;AAErB,IAAM,qBAAqB;AAE3B,SAAS,UAAmB,OAAU;AAClC,SAAQ,SAAS,OAAO,MAAM,SAAU;AAC5C;AAEA,SAAS,OAAO,QAAgB,OAAU;AACtC,SAAO,SAAS,MAAM,KAAK,UAAU,OAAO,CAAC,GAAG,MAAK;AACjD,QAAI,KAAK,MAAM;AAAE,aAAO;;AACxB,QAAI,OAAO,MAAO,UAAU;AAAE,aAAO,UAAW,EAAE,SAAQ,CAAG;;AAC7D,QAAI,OAAO,MAAO,UAAU;AAAE,aAAO,EAAE,YAAW;;AAGlD,QAAI,OAAO,MAAO,YAAY,CAAC,MAAM,QAAQ,CAAC,GAAG;AAC7C,YAAM,OAAO,OAAO,KAAK,CAAC;AAC1B,WAAK,KAAI;AACT,aAAO,KAAK,OAAO,CAAC,OAAO,QAAO;AAC9B,cAAM,GAAG,IAAI,EAAE,GAAG;AAClB,eAAO;MACX,GAAQ,CAAA,CAAG;;AAGf,WAAO;EACX,CAAC;AACL;AAoGM,IAAO,sBAAP,MAA0B;;;;EAS5B,YAAY,MAAY;AALxB;;;;AAK4B,qBAAsC,MAAM,EAAE,KAAI,CAAE;EAAG;EAEnF,QAAK;EAAW;EAChB,OAAI;EAAW;EAEf,MAAM,iBAAyB;EAAU;EACzC,SAAM;EAAW;;AAcrB,SAASC,MAAc,OAAQ;AAC3B,SAAO,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAC3C;AAEA,SAAS,UAAU,OAAoB;AACnC,UAAQ,MAAM,KAAM,IAAI,IAAI,KAAK,EAAG,OAAM,CAAE;AAC5C,QAAM,KAAI;AACV,SAAO;AACX;AAGA,eAAe,gBAAgBC,SAAuB,UAA0B;AAC5E,MAAIA,WAAU,MAAM;AAAE,UAAM,IAAI,MAAM,eAAe;;AAGrD,MAAI,MAAM,QAAQA,OAAM,GAAG;AAAE,IAAAA,UAAS,EAAE,QAAQA,QAAM;;AAEtD,MAAI,OAAOA,YAAY,UAAU;AAC7B,YAAQA,SAAQ;MACZ,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK,QAAQ;AACT,eAAO,EAAE,MAAMA,SAAQ,KAAKA,QAAM;;;;AAK9C,MAAI,YAAYA,SAAQ,EAAE,GAAG;AACzB,UAAMC,QAAOD,QAAO,YAAW;AAC/B,WAAO,EAAE,MAAM,eAAe,KAAK,OAAO,MAAM,EAAE,MAAAC,MAAI,CAAE,GAAG,MAAAA,MAAI;;AAGnE,MAAUD,QAAQ,QAAQ;AACtB,UAAM,QAAsBA;AAE5B,WAAO,EAAE,MAAM,UAAU,KAAK,OAAO,UAAU,KAAK,GAAG,QAAQD,MAAK,KAAK,EAAC;;AAG9E,MAAWC,QAAQ,WAAiBA,QAAQ,QAAS;AACjD,UAAM,QAAqBA;AAE3B,UAAM,SAAc;MAChB,SAAU,MAAM,UAAU,CAAA,GAAI,IAAI,CAAC,MAAK;AACpC,YAAI,KAAK,MAAM;AAAE,iBAAO;;AACxB,YAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,iBAAO,UAAU,EAAE,IAAI,CAACE,OAAMA,GAAE,YAAW,CAAE,CAAC;;AAElD,eAAO,EAAE,YAAW;MACxB,CAAC;;AAGL,QAAI,MAAM,SAAS;AACf,YAAM,YAA2B,CAAA;AACjC,YAAM,WAAiC,CAAA;AAEvC,YAAM,aAAa,CAAC,SAAqB;AACrC,YAAI,YAAY,IAAI,GAAG;AACnB,oBAAU,KAAK,IAAI;eAChB;AACH,mBAAS,MAAM,YAAW;AACtB,sBAAU,KAAK,MAAM,eAAe,MAAM,QAAQ,CAAC;UACvD,GAAE,CAAE;;MAEZ;AAEA,UAAI,MAAM,QAAQ,MAAM,OAAO,GAAG;AAC9B,cAAM,QAAQ,QAAQ,UAAU;aAC7B;AACH,mBAAW,MAAM,OAAO;;AAE5B,UAAI,SAAS,QAAQ;AAAE,cAAM,QAAQ,IAAI,QAAQ;;AACjD,aAAO,UAAU,UAAU,UAAU,IAAI,CAAC,MAAM,EAAE,YAAW,CAAE,CAAC;;AAGpE,WAAO,EAAE,QAAQ,KAAK,OAAO,SAAS,MAAM,GAAG,MAAM,QAAO;;AAGhE,iBAAe,OAAO,yBAAyB,SAASF,OAAM;AAClE;AAEA,SAASG,WAAO;AAAa,UAAQ,oBAAI,KAAI,GAAI,QAAO;AAAI;AA0H5D,IAAM,iBAAiB;EACnB,cAAc;EACd,iBAAiB;;AA3arB,WAAAC,WAAA,gIAAAC,WAAA;AA6bM,IAAO,mBAAP,MAAuB;;;;;;EA8BzB,YAAYC,WAA+B,SAAiC;AA9B1E;AAEF;AACA,uBAAAF;AAGA;;AAEA;AAEA;AACS;AAET;AAGA;;AAEA;AACA;AAEA;AAEA,uBAAAC;AAQI,uBAAKA,WAAW,OAAO,OAAO,CAAA,GAAK,gBAAgB,WAAW,CAAA,CAAG;AAEjE,QAAIC,cAAa,OAAO;AACpB,yBAAK,aAAc;AACnB,yBAAK,iBAAkB;eAChBA,WAAU;AACjB,YAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,yBAAK,aAAc;AACnB,yBAAK,iBAAkB,QAAQ,QAAQ,OAAO;AAC9C,iBAAW,MAAK;AAAG,aAAK,KAAK,WAAW,SAAS,IAAI;MAAG,GAAG,CAAC;WACzD;AACH,yBAAK,aAAc;AACnB,yBAAK,iBAAkB;;AAG3B,uBAAK,kBAAmB;AAExB,uBAAK,eAAgB,oBAAI,IAAG;AAE5B,uBAAK,OAAQ,oBAAI,IAAG;AACpB,uBAAKF,WAAW,oBAAI,IAAG;AACvB,uBAAK,cAAe;AAEpB,uBAAK,YAAa;AAElB,uBAAK,YAAa;AAClB,uBAAK,SAAU,oBAAI,IAAG;AAEtB,uBAAK,kBAAmB;EAC5B;EAEA,IAAI,kBAAe;AAAa,WAAO,mBAAKC,WAAS;EAAiB;;;;;EAMtE,IAAI,WAAQ;AAAW,WAAO;EAAM;;;;EAKpC,IAAI,UAAO;AACP,WAAO,MAAM,KAAK,mBAAKD,WAAS,OAAM,CAAE;EAC5C;;;;EAKA,aAAa,QAA8B;AACvC,QAAI,mBAAKA,WAAS,IAAI,OAAO,IAAI,GAAG;AAChC,YAAM,IAAI,MAAM,mCAAoC,OAAO,IAAK,GAAG;;AAEvE,uBAAKA,WAAS,IAAI,OAAO,MAAO,OAAO,QAAQ,IAAI,CAAC;AACpD,WAAO;EACX;;;;EAKA,UAAqE,MAAY;AAC7E,WAAW,mBAAKA,WAAS,IAAI,IAAI,KAAM;EAC3C;;;;;EAMA,IAAI,kBAAe;AAAc,WAAO,mBAAK;EAAkB;EAC/D,IAAI,gBAAgB,OAAc;AAAI,uBAAK,kBAAmB,CAAC,CAAC;EAAO;;;;EA+BvE,MAAM,cAAc,IAA8B,UAAkB,MAAmB;AACnF,QAAI,KAAK,mBAAmB,KAAK,WAAW,KAAK,GAAG,MAAM,MAAM;AAAE,aAAO;;AAEzE,UAAM,SAAS,GAAG,GAAG,YAAW;AAChC,UAAMG,QAAO,SAAS,YAAW;AAEjC,UAAM,gBAA+B,CAAA;AAErC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AAClC,YAAM,MAAM,KAAK,CAAC;AAGlB,YAAM,OAAO,IAAI,QAAQ,YAAY,MAAM,EAAE,QAAQ,UAAUA,KAAI;AASnE,YAAM,UAAU,IAAI,aAAa,IAAI;AACrC,UAAI,IAAI,QAAQ,QAAQ,MAAM,IAAI;AAC9B,gBAAQ,OAAO,EAAE,MAAAA,OAAM,OAAM;;AAGjC,WAAK,KAAK,SAAS,EAAE,QAAQ,4BAA4B,SAAS,OAAO,GAAG,KAAI,CAAE;AAElF,UAAI,eAAe;AAGnB,UAAI;AACJ,UAAI;AACA,eAAO,MAAM,QAAQ,KAAI;eACpB,OAAY;AAGjB,sBAAc,KAAK,MAAM,OAAO;AAChC,aAAK,KAAK,SAAS,EAAE,QAAQ,6BAA6B,SAAS,QAAQ,EAAE,MAAK,EAAE,CAAE;AACtF;;AAGJ,UAAI;AACA,cAAM,SAAS,KAAK;AACpB,YAAI,OAAO,MAAM;AACb,eAAK,KAAK,SAAS,EAAE,QAAQ,8BAA8B,SAAS,OAAM,CAAE;AAC5E,iBAAO,OAAO;;AAElB,YAAI,OAAO,SAAS;AAAE,yBAAe,OAAO;;AAC5C,aAAK,KAAK,SAAS,EAAE,QAAQ,6BAA6B,SAAS,OAAM,CAAE;eACtE,OAAO;MAAA;AAGhB,aAAO,KAAK,aAAa,OAAO,KAAK,cAAc,KAAK,yCAA0C,YAAa,IAC3G,kBAAkB,EAAE,QAAQ,wBAAwB,aAAa,IAAI,MAAM,EAAE,KAAK,aAAY,EAAE,CAAE;AAGtG,oBAAc,KAAK,YAAY;;AAGnC,WAAO,OAAO,wCAAyC,cAAc,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,CAAE,IAAI,kBAAkB;MAChI,QAAQ;MACR,aAAa;MAAI,MAAM,EAAE,MAAM,cAAa;KAC/C;EACL;;;;;;EAOA,WAAW,OAAoB,SAAgB;AAC3C,WAAO,IAAI,MAAM,YAAY,KAAK,GAAG,IAAI;EAC7C;;;;;;EAOA,SAAS,OAAkB,SAAgB;AACvC,WAAO,IAAI,IAAI,UAAU,KAAK,GAAG,IAAI;EACzC;;;;;;EAOA,wBAAwB,OAAiC,SAAgB;AACrE,WAAO,IAAI,mBAAmB,yBAAyB,KAAK,GAAG,IAAI;EACvE;;;;;;EAOA,yBAAyB,IAA+B,SAAgB;AACpE,WAAO,IAAI,oBAAoB,0BAA0B,EAAE,GAAG,IAAI;EACtE;;;;;;;EAQA,iBAAc;AACV,WAAO,OAAO,mCAAmC,yBAAyB;MACtE,WAAW;KACd;EACL;;;;;;;EAQA,MAAM,SAAkB,KAAyB;AAC7C,WAAO,OAAO,uBAAwB,IAAI,MAAO,IAAI,yBAAyB;MAC1E,WAAW,IAAI;MACf,MAAM;KACT;EACL;;EAIA,MAAM,iBAAc;AAChB,UAAM,cAAc,UAAU,MAAM,sBAAK,yCAAL,WAAc,EAAE,QAAQ,iBAAgB,IAAK,WAAW;AAC5F,QAAI,mBAAK,qBAAoB,GAAG;AAAE,yBAAK,kBAAmB;;AAC1D,WAAO;EACX;;;;;;EAOA,YAAY,SAAoB;AAC5B,WAAO,eAAe,SAAS,IAAI;EACvC;;;;;EAMA,aAAa,UAAmB;AAC5B,QAAI,YAAY,MAAM;AAAE,aAAO;;AAE/B,YAAQ,UAAU;MACd,KAAK;AACD,eAAO;MACX,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;AACD,eAAO;;AAIf,QAAI,YAAY,QAAQ,GAAG;AACvB,UAAI,YAAY,UAAU,EAAE,GAAG;AAAE,eAAO;;AACxC,aAAO,WAAW,QAAQ;;AAG9B,QAAI,OAAO,aAAc,UAAU;AAC/B,iBAAW,UAAU,UAAU,UAAU;;AAG7C,QAAI,OAAO,aAAc,UAAU;AAC/B,UAAI,YAAY,GAAG;AAAE,eAAO,WAAW,QAAQ;;AAC/C,UAAI,mBAAK,qBAAoB,GAAG;AAAE,eAAO,WAAW,mBAAK,oBAAmB,QAAQ;;AACpF,aAAO,KAAK,eAAc,EAAG,KAAK,CAACC,OAAM,WAAWA,KAAY,QAAQ,CAAC;;AAG7E,mBAAe,OAAO,oBAAoB,YAAY,QAAQ;EAClE;;;;;;EAOA,WAAW,QAAkC;AAGzC,UAAM,UAAU,OAAO,UAAU,CAAA,GAAK,IAAI,CAAC,MAAK;AAC5C,UAAI,KAAK,MAAM;AAAE,eAAO;;AACxB,UAAI,MAAM,QAAQ,CAAC,GAAG;AAClB,eAAO,UAAU,EAAE,IAAI,CAACN,OAAMA,GAAE,YAAW,CAAE,CAAC;;AAElD,aAAO,EAAE,YAAW;IACxB,CAAC;AAED,UAAM,YAAa,eAAe,SAAU,OAAO,YAAW;AAE9D,UAAM,UAAU,CAAC,UAAyBO,YAAoBC,aAAoB;AAC9E,UAAIC,WAA8C;AAClD,cAAQ,SAAS,QAAQ;QACrB,KAAK;AAAG;QACR,KAAK;AACD,UAAAA,WAAU,SAAS,CAAC;AACpB;QACJ;AACI,mBAAS,KAAI;AACb,UAAAA,WAAU;;AAGlB,UAAI,WAAW;AACX,YAAIF,cAAa,QAAQC,YAAW,MAAM;AACtC,gBAAM,IAAI,MAAM,gBAAgB;;;AAIxC,YAAME,UAAc,CAAA;AACpB,UAAID,UAAS;AAAE,QAAAC,QAAO,UAAUD;;AAChC,UAAI,OAAO,QAAQ;AAAE,QAAAC,QAAO,SAAS;;AACrC,UAAIH,YAAW;AAAE,QAAAG,QAAO,YAAYH;;AACpC,UAAIC,UAAS;AAAE,QAAAE,QAAO,UAAUF;;AAChC,UAAI,WAAW;AAAE,QAAAE,QAAO,YAAY;;AAEpC,aAAOA;IACX;AAGA,QAAI,UAA2C,CAAA;AAC/C,QAAI,OAAO,SAAS;AAChB,UAAI,MAAM,QAAQ,OAAO,OAAO,GAAG;AAC/B,mBAAW,QAAQ,OAAO,SAAS;AAAE,kBAAQ,KAAK,KAAK,YAAY,IAAI,CAAC;;aACrE;AACH,gBAAQ,KAAK,KAAK,YAAY,OAAO,OAAO,CAAC;;;AAIrD,QAAI,YAAkD;AACtD,QAAI,eAAe,QAAQ;AAAE,kBAAY,KAAK,aAAa,OAAO,SAAS;;AAE3E,QAAI,UAAgD;AACpD,QAAI,aAAa,QAAQ;AAAE,gBAAU,KAAK,aAAa,OAAO,OAAO;;AAErE,QAAI,QAAQ,OAAO,CAAC,MAAO,OAAO,MAAO,QAAS,EAAE,UAC/C,aAAa,QAAQ,OAAO,cAAe,YAC3C,WAAW,QAAQ,OAAO,YAAa,UAAW;AAEnD,aAAO,QAAQ,IAAI,CAAE,QAAQ,IAAI,OAAO,GAAG,WAAW,OAAO,CAAE,EAAE,KAAK,CAAC,WAAU;AAC7E,eAAO,QAAQ,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC;MAClD,CAAC;;AAGL,WAAO,QAAuB,SAAS,WAAW,OAAO;EAC7D;;;;;;EAOA,uBAAuBC,WAA4B;AAC/C,UAAM,UAAoC,YAAYA,SAAQ;AAE9D,UAAM,WAAiC,CAAA;AACvC,KAAE,MAAM,MAAM,EAAG,QAAQ,CAAC,QAAO;AAC7B,UAAU,QAAS,GAAG,KAAK,MAAM;AAAE;;AAEnC,YAAM,OAAO,eAAqB,QAAS,GAAG,GAAG,IAAI;AACrD,UAAI,UAAU,IAAI,GAAG;AACjB,iBAAS,KAAM,iBAAK;AAAoB,kBAAS,GAAG,IAAI,MAAM;QAAM,EAAE,CAAE;aACrE;AACG,gBAAS,GAAG,IAAI;;IAE9B,CAAC;AAED,QAAI,QAAQ,YAAY,MAAM;AAC1B,YAAM,WAAW,KAAK,aAAa,QAAQ,QAAQ;AACnD,UAAI,UAAU,QAAQ,GAAG;AACrB,iBAAS,KAAM,iBAAK;AAAc,kBAAQ,WAAW,MAAM;QAAU,EAAE,CAAE;aACtE;AACH,gBAAQ,WAAW;;;AAI3B,QAAI,SAAS,QAAQ;AACjB,aAAQ,iBAAK;AACT,cAAM,QAAQ,IAAI,QAAQ;AAC1B,eAAO;MACX,EAAE;;AAGN,WAAO;EACX;EAEA,MAAM,aAAU;AAGZ,QAAI,mBAAK,oBAAmB,MAAM;AAG9B,YAAM,iBAAiB,YAAW;AAC9B,YAAI;AACA,gBAAM,UAAU,MAAM,KAAK,eAAc;AACzC,eAAK,KAAK,WAAW,SAAS,IAAI;AAClC,iBAAO;iBACF,OAAO;AACZ,cAAI,mBAAK,qBAAoB,eAAgB;AACzC,+BAAK,iBAAkB;;AAE3B,gBAAM;;MAEd,GAAE;AAEF,yBAAK,iBAAkB;AACvB,cAAQ,MAAM,eAAe,MAAK;;AAGtC,UAAM,iBAAiB,mBAAK;AAE5B,UAAM,CAAE,UAAU,MAAM,IAAK,MAAM,QAAQ,IAAI;MAC3C;MACA,KAAK,eAAc;;KACtB;AAED,QAAI,SAAS,YAAY,OAAO,SAAS;AACrC,UAAI,mBAAK,cAAa;AAElB,aAAK,KAAK,WAAW,QAAQ,QAAQ;AAGrC,YAAI,mBAAK,qBAAoB,gBAAgB;AACzC,6BAAK,iBAAkB,QAAQ,QAAQ,MAAM;;aAE9C;AAEH,eAAO,OAAO,oBAAqB,SAAS,OAAQ,OAAQ,OAAO,OAAQ,KAAK,iBAAiB;UAC7F,OAAO;SACV;;;AAIT,WAAO,SAAS,MAAK;EACzB;EAEA,MAAM,aAAU;AACZ,UAAM,UAAU,MAAM,KAAK,WAAU;AAErC,UAAM,iBAAiB,YAAW;AAC9B,YAAM,EAAE,QAAQ,UAAU,YAAW,IAAK,MAAM,kBAAkB;QAC9D,QAAQ,sBAAK,0CAAL,WAAe,UAAU;QACjC,WAAY,YAAW;AACnB,cAAI;AACA,kBAAM,QAAQ,MAAM,sBAAK,yCAAL,WAAc,EAAE,QAAQ,cAAa;AACzD,mBAAO,UAAU,OAAO,WAAW;mBAC9B,OAAO;UAAA;AAChB,iBAAO;QACX,GAAE;QACF,cAAe,YAAW;AACtB,cAAI;AACA,kBAAM,QAAQ,MAAM,sBAAK,yCAAL,WAAc,EAAE,QAAQ,iBAAgB;AAC5D,mBAAO,UAAU,OAAO,WAAW;mBAC9B,OAAO;UAAA;AAChB,iBAAO;QACX,GAAE;OACL;AAED,UAAI,eAA8B;AAClC,UAAI,uBAAsC;AAG1C,YAAM,QAAQ,KAAK,WAAW,QAAQ,OAAO;AAC7C,UAAI,SAAS,MAAM,eAAe;AAC9B,+BAAwB,eAAe,OAAQ,cAAa,OAAO,YAAY;AAC/E,uBAAgB,MAAM,gBAAgBf,QAAQ;;AAGlD,aAAO,IAAI,QAAQ,UAAU,cAAc,oBAAoB;IACnE;AAGA,UAAM,SAAuC,QAAQ,UAAU,kDAAkD;AACjH,QAAI,QAAQ;AACR,YAAM,MAAM,IAAI,aAAa,OAAO,GAAG;AACvC,YAAM,UAAU,MAAM,OAAO,YAAY,gBAAgB,MAAM,GAAG;AAClE,aAAO,IAAI,QAAQ,QAAQ,UAAU,QAAQ,cAAc,QAAQ,oBAAoB;;AAG3F,WAAO,MAAM,eAAc;EAC/B;EAGA,MAAM,YAAY,KAAuB;AACrC,QAAI,KAAK,KAAK,uBAAuB,GAAG;AACxC,QAAI,UAAU,EAAE,GAAG;AAAE,WAAK,MAAM;;AAChC,WAAO,UAAU,MAAM,sBAAK,yCAAL,WAAc;MACjC,QAAQ;MAAe,aAAa;QACpC,WAAW;EACnB;EA6EA,MAAM,KAAK,KAAuB;AAC9B,UAAM,EAAE,IAAI,SAAQ,IAAK,MAAM,kBAAkB;MAC7C,IAAI,KAAK,uBAAuB,GAAG;MACnC,UAAU,KAAK,aAAa,IAAI,QAAQ;KAC3C;AAED,WAAO,MAAM,sBAAK,8CAAL,WAAmB,sBAAK,sCAAL,WAAW,IAAI,UAAU,IAAI,iBAAiB,IAAG;EACrF;EAcA,MAAM,WAAW,SAAsB,UAAmB;AACtD,WAAO,UAAU,MAAM,sBAAK,iDAAL,WAAsB,EAAE,QAAQ,aAAY,GAAI,SAAS,WAAW,WAAW;EAC1G;EAEA,MAAM,oBAAoB,SAAsB,UAAmB;AAC/D,WAAO,UAAU,MAAM,sBAAK,iDAAL,WAAsB,EAAE,QAAQ,sBAAqB,GAAI,SAAS,WAAW,WAAW;EACnH;EAEA,MAAM,QAAQ,SAAsB,UAAmB;AACnD,WAAO,QAAQ,MAAM,sBAAK,iDAAL,WAAsB,EAAE,QAAQ,UAAS,GAAI,SAAS,SAAS;EACxF;EAEA,MAAM,WAAW,SAAsB,WAAyB,UAAmB;AAC/E,UAAM,WAAW,UAAU,WAAW,UAAU;AAChD,WAAO,QAAQ,MAAM,sBAAK,iDAAL,WAAsB,EAAE,QAAQ,cAAc,SAAQ,GAAI,SAAS,SAAS;EACrG;;EAGA,MAAM,qBAAqB,UAAgB;AACvC,UAAM,EAAE,aAAa,MAAAG,OAAM,QAAO,IAAK,MAAM,kBAAkB;MAC1D,aAAa,KAAK,eAAc;MAChC,MAAM,KAAK,SAAS;QAChB,QAAQ;QACR,mBAAmB;OACtB;MACD,SAAS,KAAK,WAAU;KAC5B;AAED,UAAM,KAAK,YAAY,KAAK,QAAQ;AACpC,QAAI,GAAG,SAASA,OAAM;AAClB,YAAM,IAAI,MAAM,wCAAwC;;AAG5D,WAAO,KAAK,yBAA8B,IAAI,OAAO,EAAE,uBAAuB,WAAW;EAC7F;;EAoBA,MAAM,SAAS,OAA0B,aAAqB;AAC1D,UAAM,EAAE,SAAS,OAAM,IAAK,MAAM,kBAAkB;MAChD,SAAS,KAAK,WAAU;MACxB,QAAQ,sBAAK,0CAAL,WAAe,OAAO,CAAC,CAAC;KACnC;AACD,QAAI,UAAU,MAAM;AAAE,aAAO;;AAE7B,WAAO,KAAK,WAAW,QAAQ,OAAO;EAC1C;EAEA,MAAM,eAAeA,OAAY;AAC7B,UAAM,EAAE,SAAS,OAAM,IAAK,MAAM,kBAAkB;MAChD,SAAS,KAAK,WAAU;MACxB,QAAQ,sBAAK,yCAAL,WAAc,EAAE,QAAQ,kBAAkB,MAAAA,MAAI;KACzD;AACD,QAAI,UAAU,MAAM;AAAE,aAAO;;AAE7B,WAAO,KAAK,yBAAyB,QAAQ,OAAO;EACxD;EAEA,MAAM,sBAAsBA,OAAY;AACpC,UAAM,EAAE,SAAS,OAAM,IAAK,MAAM,kBAAkB;MAChD,SAAS,KAAK,WAAU;MACxB,QAAQ,sBAAK,yCAAL,WAAc,EAAE,QAAQ,yBAAyB,MAAAA,MAAI;KAChE;AACD,QAAI,UAAU,MAAM;AAAE,aAAO;;AAI7B,QAAI,OAAO,YAAY,QAAQ,OAAO,qBAAqB,MAAM;AAC7D,YAAM,KAAK,MAAM,sBAAK,yCAAL,WAAc,EAAE,QAAQ,kBAAkB,MAAAA,MAAI;AAC/D,UAAI,MAAM,MAAM;AAAE,cAAM,IAAI,MAAM,qDAAqD;;AACvF,aAAO,oBAAoB,GAAG;;AAGlC,WAAO,KAAK,wBAAwB,QAAQ,OAAO;EACvD;EAEA,MAAM,qBAAqBA,OAAY;AACnC,UAAM,EAAE,OAAM,IAAK,MAAM,kBAAkB;MACvC,SAAS,KAAK,WAAU;MACxB,QAAQ,sBAAK,yCAAL,WAAc,EAAE,QAAQ,wBAAwB,MAAAA,MAAI;KAC/D;AACD,QAAI,UAAU,MAAM;AAAE,aAAO;;AAC7B,WAAO,QAAQ,MAAM;EACzB;;EAGA,MAAM,QAAQa,UAAmC;AAC7C,QAAI,SAAS,KAAK,WAAWA,QAAO;AACpC,QAAI,UAAU,MAAM,GAAG;AAAE,eAAS,MAAM;;AAExC,UAAM,EAAE,SAAS,OAAM,IAAK,MAAM,kBAAkB;MAChD,SAAS,KAAK,WAAU;MACxB,QAAQ,sBAAK,yCAAL,WAAgC,EAAE,QAAQ,WAAW,OAAM;KACtE;AAED,WAAO,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,GAAG,OAAO,CAAC;EACtD;;EAGA,aAAa,SAAe;AACxB,WAAO,OAAO,6CAA6C,yBAAyB;MAChF,WAAW;KACd;EACL;EAEA,MAAM,YAAY,MAAY;AAC1B,WAAO,MAAM,YAAY,SAAS,MAAM,IAAI;EAChD;EAEA,MAAM,UAAU,MAAY;AACxB,UAAM,WAAW,MAAM,KAAK,YAAY,IAAI;AAC5C,QAAI,UAAU;AAAE,aAAO,MAAM,SAAS,UAAS;;AAC/C,WAAO;EACX;EAEA,MAAM,YAAY,MAAY;AAC1B,UAAM,WAAW,MAAM,KAAK,YAAY,IAAI;AAC5C,QAAI,UAAU;AAAE,aAAO,MAAM,SAAS,WAAU;;AAChD,WAAO;EACX;EAEA,MAAM,cAAc,SAAe;AAC/B,cAAU,WAAW,OAAO;AAC5B,UAAM,OAAO,SAAS,QAAQ,UAAU,CAAC,EAAE,YAAW,IAAK,eAAe;AAE1E,QAAI;AAEA,YAAM,UAAU,MAAM,YAAY,cAAc,IAAI;AACpD,YAAM,cAAc,IAAI,SAAS,SAAS;QACtC;SACD,IAAI;AAEP,YAAM,WAAW,MAAM,YAAY,SAAS,IAAI;AAChD,UAAI,YAAY,QAAQ,aAAa,aAAa;AAAE,eAAO;;AAE3D,YAAM,mBAAmB,IAAI,SAAS,UAAU;QAC5C;SACD,IAAI;AACP,YAAM,OAAO,MAAM,iBAAiB,KAAK,IAAI;AAG7C,YAAM,QAAQ,MAAM,KAAK,YAAY,IAAI;AACzC,UAAI,UAAU,SAAS;AAAE,eAAO;;AAEhC,aAAO;aAEF,OAAO;AAEZ,UAAI,QAAQ,OAAO,UAAU,KAAK,MAAM,UAAU,MAAM;AACpD,eAAO;;AAIX,UAAI,QAAQ,OAAO,gBAAgB,GAAG;AAAE,eAAO;;AAE/C,YAAM;;AAGV,WAAO;EACX;EAEA,MAAM,mBAAmBb,OAAc,WAA2B,SAAuB;AACrF,UAAM,WAAY,aAAa,OAAQ,YAAW;AAClD,QAAI,aAAa,GAAG;AAAE,aAAO,KAAK,sBAAsBA,KAAI;;AAE5D,WAAO,IAAI,QAAQ,OAAO,SAAS,WAAU;AACzC,UAAI,QAAsB;AAE1B,YAAM,WAAY,OAAO,gBAAuB;AAC5C,YAAI;AACA,gBAAM,UAAU,MAAM,KAAK,sBAAsBA,KAAI;AACrD,cAAI,WAAW,MAAM;AACjB,gBAAI,cAAc,QAAQ,cAAc,KAAK,UAAU;AACnD,sBAAQ,OAAO;AAEf,kBAAI,OAAO;AACP,6BAAa,KAAK;AAClB,wBAAQ;;AAEZ;;;iBAGH,OAAO;AACZ,kBAAQ,IAAI,OAAO,KAAK;;AAE5B,aAAK,KAAK,SAAS,QAAQ;MAC/B;AAEA,UAAI,WAAW,MAAM;AACjB,gBAAQ,WAAW,MAAK;AACpB,cAAI,SAAS,MAAM;AAAE;;AACrB,kBAAQ;AACR,eAAK,IAAI,SAAS,QAAQ;AAC1B,iBAAO,UAAU,WAAW,WAAW,EAAE,QAAQ,UAAS,CAAE,CAAC;QACjE,GAAG,OAAO;;AAGd,eAAS,MAAM,KAAK,eAAc,CAAE;IACxC,CAAC;EACL;EAEA,MAAM,aAAa,UAAmB;AAClC,WAAO,OAAO,uBAAuB,mBAAmB;MACpD,WAAW;KACd;EACL;;;;EAKA,cAAc,SAAe;AACzB,UAAM,QAAQ,mBAAK,SAAQ,IAAI,OAAO;AACtC,QAAI,CAAC,OAAO;AAAE;;AACd,QAAI,MAAM,OAAO;AAAE,mBAAa,MAAM,KAAK;;AAC3C,uBAAK,SAAQ,OAAO,OAAO;EAC/B;;;;;;;;;EAUA,YAAY,OAAmB,SAAgB;AAC3C,QAAI,WAAW,MAAM;AAAE,gBAAU;;AACjC,UAAM,UAAU,uBAAK,YAAL;AAChB,UAAM,OAAO,MAAK;AACd,yBAAK,SAAQ,OAAO,OAAO;AAC3B,YAAK;IACT;AAEA,QAAI,KAAK,QAAQ;AACb,yBAAK,SAAQ,IAAI,SAAS,EAAE,OAAO,MAAM,MAAM,MAAM,QAAO,CAAE;WAC3D;AACH,YAAM,QAAQ,WAAW,MAAM,OAAO;AACtC,yBAAK,SAAQ,IAAI,SAAS,EAAE,OAAO,MAAM,MAAME,SAAO,EAAE,CAAE;;AAG9D,WAAO;EACX;;;;EAKA,mBAAmB,MAA6B;AAC5C,eAAW,OAAO,mBAAK,OAAM,OAAM,GAAI;AACnC,WAAK,IAAI,UAAU;;EAE3B;;;;;EAMA,eAAe,KAAiB;AAC5B,YAAQ,IAAI,MAAM;MACd,KAAK;MACL,KAAK;MACL,KAAK;AACD,eAAO,IAAI,oBAAoB,IAAI,IAAI;MAC3C,KAAK,SAAS;AACV,cAAM,aAAa,IAAI,uBAAuB,IAAI;AAClD,mBAAW,kBAAkB,KAAK;AAClC,eAAO;;MAEX,KAAK;MAAQ,KAAK;AACd,eAAO,IAAI,0BAA0B,MAAM,IAAI,IAAI;MACvD,KAAK;AACD,eAAO,IAAI,uBAAuB,MAAM,IAAI,MAAM;MACtD,KAAK;AACD,eAAO,IAAI,6BAA6B,MAAM,IAAI,IAAI;MAC1D,KAAK;AACD,eAAO,IAAI,wBAAwB,MAAM,IAAI,MAAM;;AAG3D,UAAM,IAAI,MAAM,sBAAuB,IAAI,IAAK,EAAE;EACtD;;;;;;;;;;EAWA,mBAAmB,QAAoB,QAAkB;AACrD,eAAW,OAAO,mBAAK,OAAM,OAAM,GAAI;AACnC,UAAI,IAAI,eAAe,QAAQ;AAC3B,YAAI,IAAI,SAAS;AAAE,cAAI,WAAW,KAAI;;AACtC,YAAI,aAAa;AACjB,YAAI,IAAI,SAAS;AAAE,iBAAO,MAAK;;AAC/B,YAAI,mBAAK,iBAAgB,MAAM;AAAE,iBAAO,MAAM,mBAAK,aAAY;;AAC/D;;;EAGZ;EA+BA,MAAM,GAAG,OAAsB,UAAkB;AAC7C,UAAM,MAAM,MAAM,sBAAK,wCAAL,WAAa;AAC/B,QAAI,UAAU,KAAK,EAAE,UAAU,MAAM,MAAK,CAAE;AAC5C,QAAI,CAAC,IAAI,SAAS;AACd,UAAI,WAAW,MAAK;AACpB,UAAI,UAAU;AACd,UAAI,mBAAK,iBAAgB,MAAM;AAAE,YAAI,WAAW,MAAM,mBAAK,aAAY;;;AAE3E,WAAO;EACX;EAEA,MAAM,KAAK,OAAsB,UAAkB;AAC/C,UAAM,MAAM,MAAM,sBAAK,wCAAL,WAAa;AAC/B,QAAI,UAAU,KAAK,EAAE,UAAU,MAAM,KAAI,CAAE;AAC3C,QAAI,CAAC,IAAI,SAAS;AACd,UAAI,WAAW,MAAK;AACpB,UAAI,UAAU;AACd,UAAI,mBAAK,iBAAgB,MAAM;AAAE,YAAI,WAAW,MAAM,mBAAK,aAAY;;;AAE3E,WAAO;EACX;EAEA,MAAM,KAAK,UAAyB,MAAgB;AAChD,UAAM,MAAM,MAAM,sBAAK,wCAAL,WAAa,OAAO;AAGtC,QAAI,CAAC,OAAO,IAAI,UAAU,WAAW,GAAG;AAAE,aAAO;;AAAQ;AAEzD,UAAM,QAAQ,IAAI,UAAU;AAC5B,QAAI,YAAY,IAAI,UAAU,OAAO,CAAC,EAAE,UAAU,KAAI,MAAM;AACxD,YAAM,UAAU,IAAI,aAAa,MAAO,OAAO,OAAM,UAAW,KAAK;AACrE,UAAI;AACA,iBAAS,KAAK,MAAM,GAAG,MAAM,OAAO;eAChC,OAAO;MAAA;AACf,aAAO,CAAC;IACZ,CAAC;AAED,QAAI,IAAI,UAAU,WAAW,GAAG;AAC5B,UAAI,IAAI,SAAS;AAAE,YAAI,WAAW,KAAI;;AACtC,yBAAK,OAAM,OAAO,IAAI,GAAG;;AAG7B,WAAQ,QAAQ;EACpB;EAEA,MAAM,cAAc,OAAqB;AACrC,QAAI,OAAO;AACP,YAAM,MAAM,MAAM,sBAAK,wCAAL,WAAa;AAC/B,UAAI,CAAC,KAAK;AAAE,eAAO;;AACnB,aAAO,IAAI,UAAU;;AAGzB,QAAI,QAAQ;AACZ,eAAW,EAAE,UAAS,KAAM,mBAAK,OAAM,OAAM,GAAI;AAC7C,eAAS,UAAU;;AAEvB,WAAO;EACX;EAEA,MAAM,UAAU,OAAqB;AACjC,QAAI,OAAO;AACP,YAAM,MAAM,MAAM,sBAAK,wCAAL,WAAa;AAC/B,UAAI,CAAC,KAAK;AAAE,eAAQ,CAAA;;AACpB,aAAO,IAAI,UAAU,IAAI,CAAC,EAAE,SAAQ,MAAO,QAAQ;;AAEvD,QAAI,SAA0B,CAAA;AAC9B,eAAW,EAAE,UAAS,KAAM,mBAAK,OAAM,OAAM,GAAI;AAC7C,eAAS,OAAO,OAAO,UAAU,IAAI,CAAC,EAAE,SAAQ,MAAO,QAAQ,CAAC;;AAEpE,WAAO;EACX;EAEA,MAAM,IAAI,OAAsB,UAAmB;AAC/C,UAAM,MAAM,MAAM,sBAAK,wCAAL,WAAa;AAC/B,QAAI,CAAC,KAAK;AAAE,aAAO;;AAEnB,QAAI,UAAU;AACV,YAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,EAAE,UAAAY,UAAQ,MAAOA,SAAQ,EAAE,QAAQ,QAAQ;AAC5E,UAAI,SAAS,GAAG;AAAE,YAAI,UAAU,OAAO,OAAO,CAAC;;;AAGnD,QAAI,CAAC,YAAY,IAAI,UAAU,WAAW,GAAG;AACzC,UAAI,IAAI,SAAS;AAAE,YAAI,WAAW,KAAI;;AACtC,yBAAK,OAAM,OAAO,IAAI,GAAG;;AAG7B,WAAO;EACX;EAEA,MAAM,mBAAmB,OAAqB;AAC1C,QAAI,OAAO;AACP,YAAM,EAAE,KAAK,SAAS,WAAU,IAAK,MAAM,sBAAK,wCAAL,WAAa;AACxD,UAAI,SAAS;AAAE,mBAAW,KAAI;;AAC9B,yBAAK,OAAM,OAAO,GAAG;WAClB;AACH,iBAAW,CAAE,KAAK,EAAE,SAAS,WAAU,CAAE,KAAM,mBAAK,QAAO;AACvD,YAAI,SAAS;AAAE,qBAAW,KAAI;;AAC9B,2BAAK,OAAM,OAAO,GAAG;;;AAG7B,WAAO;EACX;;EAGA,MAAM,YAAY,OAAsB,UAAkB;AACvD,WAAO,MAAM,KAAK,GAAG,OAAO,QAAQ;EACvC;;EAGA,MAAM,eAAe,OAAsB,UAAkB;AAC1D,WAAO,KAAK,IAAI,OAAO,QAAQ;EAClC;;;;;;;;EASA,IAAI,YAAS;AACT,WAAO,mBAAK;EAChB;;;;;;;EAQA,UAAO;AAEH,SAAK,mBAAkB;AAGvB,eAAW,WAAW,mBAAK,SAAQ,KAAI,GAAI;AACvC,WAAK,cAAc,OAAO;;AAG9B,uBAAK,YAAa;EACtB;;;;;;;;;;;;EAaA,IAAI,SAAM;AAAc,WAAQ,mBAAK,iBAAgB;EAAO;EAC5D,IAAI,OAAO,OAAc;AACrB,QAAI,CAAC,CAAC,UAAU,KAAK,QAAQ;AAAE;;AAE/B,QAAI,KAAK,QAAQ;AACb,WAAK,OAAM;WACR;AACH,WAAK,MAAM,KAAK;;EAExB;;;;;;EAOA,MAAM,iBAAyB;AAC3B,uBAAK,kBAAmB;AAExB,QAAI,mBAAK,iBAAgB,MAAM;AAC3B,UAAI,mBAAK,iBAAgB,CAAC,CAAC,iBAAiB;AAAE;;AAC9C,aAAO,OAAO,0CAA0C,yBAAyB;QAC7E,WAAW;OACd;;AAGL,SAAK,mBAAmB,CAAC,MAAM,EAAE,MAAM,eAAe,CAAC;AACvD,uBAAK,cAAe,CAAC,CAAC;AAEtB,eAAW,SAAS,mBAAK,SAAQ,OAAM,GAAI;AAEvC,UAAI,MAAM,OAAO;AAAE,qBAAa,MAAM,KAAK;;AAG3C,YAAM,OAAOZ,SAAO,IAAK,MAAM;;EAEvC;;;;EAKA,SAAM;AACF,QAAI,mBAAK,iBAAgB,MAAM;AAAE;;AAEjC,SAAK,mBAAmB,CAAC,MAAM,EAAE,OAAM,CAAE;AACzC,uBAAK,cAAe;AACpB,eAAW,SAAS,mBAAK,SAAQ,OAAM,GAAI;AAEvC,UAAI,UAAU,MAAM;AACpB,UAAI,UAAU,GAAG;AAAE,kBAAU;;AAG7B,YAAM,OAAOA,SAAO;AAGpB,iBAAW,MAAM,MAAM,OAAO;;EAEtC;;AA3pCA;AACAC,YAAA;AAGA;AAEA;AAEA;AACS;AAET;AAGA;AAEA;AACA;AAEA;AAEAC,YAAA;AAvBE;AAuGI,aAAQ,eAAU,KAAyB;AAC7C,QAAM,UAAU,mBAAKA,WAAS;AAG9B,MAAI,UAAU,GAAG;AAAE,WAAO,MAAM,KAAK,SAAS,GAAG;;AAGjD,QAAM,MAAM,OAAO,IAAI,QAAQ,GAAG;AAElC,MAAI,UAAU,mBAAK,eAAc,IAAI,GAAG;AACxC,MAAI,CAAC,SAAS;AACV,cAAU,KAAK,SAAS,GAAG;AAE3B,uBAAK,eAAc,IAAI,KAAK,OAAO;AAEnC,eAAW,MAAK;AACZ,UAAI,mBAAK,eAAc,IAAI,GAAG,MAAM,SAAS;AACzC,2BAAK,eAAc,OAAO,GAAG;;IAErC,GAAG,OAAO;;AAGd,SAAO,MAAM;AACjB;AAmZM,UAAK,eAAC,IAA8B,UAAkB,SAAe;AACvE,SAAQ,UAAU,oBAAoB,2CAA2C,kBAAkB;IAC9F,QAAQ;IACR,aAAa,OAAO,OAAO,CAAA,GAAK,IAAI,EAAE,UAAU,gBAAgB,KAAI,CAAE;GACzE;AAGD,QAAM,cAAwC,YAAY,EAAE;AAE5D,MAAI;AACA,WAAO,QAAQ,MAAM,KAAK,SAAS,EAAE,QAAQ,QAAQ,aAAa,SAAQ,CAAE,CAAC;WAExE,OAAY;AAEjB,QAAI,CAAC,KAAK,mBAAmB,gBAAgB,KAAK,KAAK,MAAM,QAAQ,WAAW,KAAK,aAAa,YAAY,YAAY,MAAM,QAAQ,UAAU,MAAM,MAAM,GAAG,CAAC,MAAM,cAAc;AAClL,YAAME,QAAO,MAAM;AAEnB,YAAM,WAAW,MAAM,eAAe,YAAY,IAAI,IAAI;AAG1D,UAAI;AACJ,UAAI;AACA,mBAAW,oBAAoB,UAAU,MAAM,MAAM,CAAC,CAAC;eAClDS,QAAY;AACjB,eAAO,OAAOA,OAAM,SAAS,kBAAkB;UAC3C,QAAQ;UAAY;UAAa,MAAM,EAAE,MAAAT,MAAI;SAAI;;AAIzD,aAAO,SAAS,OAAO,YAAW,MAAO,SAAS,YAAW,GACzD,6BAA6B,kBAAkB;QAC3C,QAAQ;QACR,MAAAA;QACA,QAAQ;QACR;QACA,YAAY;QACZ,QAAQ;UACJ,WAAW;UACX,MAAM;UACN,MAAM,SAAS;;OAEtB;AAEL,YAAM,aAAa,MAAM,KAAK,cAAc,aAAa,SAAS,UAAU,SAAS,IAAI;AACzF,aAAO,cAAc,MAAM,kCAAkC,kBAAkB;QAC3E,QAAQ;QAAgB;QAAa,MAAM,EAAE,MAAM,MAAM,MAAM,WAAW,SAAS,UAAS;OAAI;AAEpG,YAAMU,MAAK;QACP,IAAI;QACJ,MAAM,OAAO,CAAE,SAAS,UAAU,YAAY,CAAE,YAAY,SAAS,SAAS,CAAE,CAAC,CAAE;;AAGvF,WAAK,KAAK,SAAS,EAAE,QAAQ,oBAAoB,aAAaA,IAAE,CAAE;AAClE,UAAI;AACA,cAAM,SAAS,MAAM,sBAAK,sCAAL,WAAWA,KAAI,UAAU,UAAU;AACxD,aAAK,KAAK,SAAS,EAAE,QAAQ,6BAA6B,aAAa,OAAO,OAAO,CAAA,GAAKA,GAAE,GAAG,OAAM,CAAE;AACvG,eAAO;eACFD,QAAO;AACZ,aAAK,KAAK,SAAS,EAAE,QAAQ,4BAA4B,aAAa,OAAO,OAAO,CAAA,GAAKC,GAAE,GAAG,OAAAD,OAAK,CAAE;AACrG,cAAMA;;;AAId,UAAM;;AAEf;AAEM,kBAAa,eAAI,SAAmB;AACtC,QAAM,EAAE,MAAK,IAAK,MAAM,kBAAkB;IACtC,SAAS,KAAK,WAAU;IACxB,OAAO;GACV;AACD,SAAO;AACX;AAYM,qBAAgB,eAAC,SAAiC,UAAuB,WAAoB;AAC/F,MAAI,UAAoC,KAAK,YAAY,QAAQ;AACjE,MAAI,WAAqC,KAAK,aAAa,SAAS;AAEpE,MAAI,OAAO,YAAa,YAAY,OAAO,aAAc,UAAU;AAC/D,KAAE,SAAS,QAAQ,IAAK,MAAM,QAAQ,IAAI,CAAE,SAAS,QAAQ,CAAE;;AAGnE,SAAO,MAAM,sBAAK,8CAAL,WAAmB,sBAAK,yCAAL,WAAc,OAAO,OAAO,SAAS,EAAE,SAAS,SAAQ,CAAE;AAC9F;AAsCM,cAAS,eAAC,OAA0B,qBAA4B;AAGlE,MAAI,YAAY,OAAO,EAAE,GAAG;AACxB,WAAO,MAAM,sBAAK,yCAAL,WAAc;MACvB,QAAQ;MAAY,WAAW;MAAO;;;AAI9C,MAAI,WAAW,KAAK,aAAa,KAAK;AACtC,MAAI,OAAO,aAAc,UAAU;AAAE,eAAW,MAAM;;AAEtD,SAAO,MAAM,sBAAK,yCAAL,WAAc;IACvB,QAAQ;IAAY;IAAU;;AAEtC;AA0QM,YAAO,eAAC,OAAsB,UAAqB;AACrD,MAAI,MAAM,MAAM,gBAAgB,OAAO,IAAI;AAG3C,MAAI,IAAI,SAAS,WAAW,YAAY,SAAS,SAAS,KAAK,SAAS,CAAC,EAAE,YAAY,MAAM;AACzF,UAAM,MAAM,gBAAgB,EAAE,QAAQ,YAAY,KAAK,SAAS,CAAC,EAAC,GAAI,IAAI;;AAE9E,SAAO,mBAAK,OAAM,IAAI,IAAI,GAAG,KAAK;AACtC;AAEM,YAAO,eAAC,OAAoB;AAC9B,QAAM,eAAe,MAAM,gBAAgB,OAAO,IAAI;AAGtD,QAAM,MAAM,aAAa;AAEzB,MAAI,MAAM,mBAAK,OAAM,IAAI,GAAG;AAC5B,MAAI,CAAC,KAAK;AACN,UAAM,aAAa,KAAK,eAAe,YAAY;AAEnD,UAAM,iBAAiB,oBAAI,QAAO;AAClC,UAAM,UAAU,oBAAI,IAAG;AACvB,UAAM,EAAE,YAAY,KAAK,gBAAgB,SAAS,SAAS,OAAO,WAAW,CAAA,EAAG;AAChF,uBAAK,OAAM,IAAI,KAAK,GAAG;;AAG3B,SAAO;AACX;AAwNJ,SAAS,aAAa,QAAgB,OAAa;AAC/C,MAAI;AACA,UAAME,SAAQ,YAAY,QAAQ,KAAK;AACvC,QAAIA,QAAO;AAAE,aAAO,aAAaA,MAAK;;WAClC,OAAO;EAAA;AACf,SAAO;AACX;AAEA,SAAS,YAAY,QAAgB,OAAa;AAC9C,MAAI,WAAW,MAAM;AAAE,WAAO;;AAC9B,MAAI;AACA,UAAM,SAAS,UAAU,UAAU,QAAQ,OAAO,QAAQ,EAAE,CAAC;AAC7D,UAAM,SAAS,UAAU,UAAU,QAAQ,QAAQ,SAAS,EAAE,CAAC;AAE/D,WAAO,UAAU,QAAQ,SAAS,IAAI,SAAS,KAAK,MAAM;WACrD,OAAO;EAAA;AAChB,SAAO;AACX;AAEA,SAAS,OAAO,OAAa;AACzB,QAAM,SAAS,UAAU,KAAK;AAC9B,MAAI,OAAO,SAAS,IAAI;AAAE,UAAM,IAAI,MAAM,6BAA6B;;AAEvE,QAAM,SAAS,IAAI,WAAW,EAAE;AAChC,SAAO,IAAI,QAAQ,KAAK,OAAO,MAAM;AACrC,SAAO;AACX;AAEA,SAAS,SAAS,OAAiB;AAC/B,MAAK,MAAM,SAAS,OAAQ,GAAG;AAAE,WAAO;;AAExC,QAAM,SAAS,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,IAAI,EAAE;AAC/D,SAAO,IAAI,KAAK;AAChB,SAAO;AACX;AAEA,IAAM,QAAoB,IAAI,WAAW,CAAA,CAAG;AAG5C,SAAS,YAAY,OAAuB;AACxC,QAAM,SAA4B,CAAA;AAElC,MAAI,YAAY;AAGhB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,WAAO,KAAK,KAAK;AACjB,iBAAa;;AAGjB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,UAAMX,QAAO,SAAS,MAAM,CAAC,CAAC;AAG9B,WAAO,CAAC,IAAI,OAAO,SAAS;AAG5B,WAAO,KAAK,OAAOA,MAAK,MAAM,CAAC;AAC/B,WAAO,KAAK,SAASA,KAAI,CAAC;AAC1B,iBAAa,KAAK,KAAK,KAAKA,MAAK,SAAS,EAAE,IAAI;;AAGpD,SAAO,OAAO,MAAM;AACxB;AAEA,IAAM,QAAQ;AACd,SAAS,oBAAoBA,OAAY;AACrC,QAAM,SAAmB;IACrB,QAAQ;IAAI,MAAM,CAAA;IAAK,UAAU;IAAI,UAAU;IAAI,WAAW;IAAI,WAAW,CAAA;;AAGjF,SAAO,WAAWA,KAAI,KAAK,IAAI,IAAI,oCAAoC,kBAAkB;IACrF,QAAQ;GACX;AAED,QAAM,SAAS,UAAUA,OAAM,GAAG,EAAE;AACpC,SAAO,UAAU,QAAQ,GAAG,EAAE,MAAM,UAAU,OAAO,GAAG,EAAE,GAAG,iCAAiC,kBAAkB;IAC5G,QAAQ;GACX;AACD,SAAO,SAAS,UAAU,QAAQ,EAAE;AAGpC,MAAI;AACA,UAAM,OAAsB,CAAA;AAC5B,UAAM,aAAa,UAAU,UAAUA,OAAM,IAAI,EAAE,CAAC;AACpD,UAAM,aAAa,UAAU,UAAUA,OAAM,YAAY,aAAa,EAAE,CAAC;AACzE,UAAM,WAAW,UAAUA,OAAM,aAAa,EAAE;AAChD,aAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,YAAM,MAAM,aAAa,UAAU,IAAI,EAAE;AACzC,UAAI,OAAO,MAAM;AAAE,cAAM,IAAI,MAAM,OAAO;;AAC1C,WAAK,KAAK,GAAG;;AAEjB,WAAO,OAAO;WACT,OAAO;AACZ,WAAO,OAAO,+BAA+B,kBAAkB;MAC3D,QAAQ;KACX;;AAIL,MAAI;AACA,UAAM,WAAW,YAAYA,OAAM,EAAE;AACrC,QAAI,YAAY,MAAM;AAAE,YAAM,IAAI,MAAM,OAAO;;AAC/C,WAAO,WAAW;WACb,OAAO;AACZ,WAAO,OAAO,mCAAmC,kBAAkB;MAC/D,QAAQ;KACX;;AAIL,SAAO,UAAUA,OAAM,KAAK,GAAG,MAAM,UAAU,OAAO,GAAG,EAAE,GAAG,4CAA4C,kBAAkB;IACxH,QAAQ;GACX;AACD,SAAO,WAAW,UAAUA,OAAM,IAAI,GAAG;AAGzC,MAAI;AACA,UAAM,YAAY,YAAYA,OAAM,GAAG;AACvC,QAAI,aAAa,MAAM;AAAE,YAAM,IAAI,MAAM,OAAO;;AAChD,WAAO,YAAY;WACd,OAAO;AACZ,WAAO,OAAO,oCAAoC,kBAAkB;MAChE,QAAQ;KACX;;AAGL,SAAO,YAAY,0CAA0C,MAAM,GAAG,EAAE,IAAI,CAAC,MAAY,OAAQ,CAAC,CAAC;AAEnG,SAAO;AACX;;;ACvsDA,SAAS,cAAc,QAAwB,WAAiB;AAC5D,MAAI,OAAO,UAAU;AAAE,WAAO,OAAO;;AACrC,SAAO,OAAO,oBAAoB,yBAAyB,EAAE,UAAS,CAAE;AAC5E;AAEA,eAAe,SAAS,QAAwB,IAAsB;AAClE,MAAI,MAAW,YAAY,EAAE;AAE7B,MAAI,IAAI,MAAM,MAAM;AAAE,QAAI,KAAK,eAAe,IAAI,IAAI,MAAM;;AAE5D,MAAI,IAAI,QAAQ,MAAM;AAClB,UAAM,OAAO,IAAI;AACjB,QAAI,OAAO,QAAQ,IAAI;MACnB,OAAO,WAAU;MACjB,eAAe,MAAM,MAAM;KAC9B,EAAE,KAAK,CAAC,CAAE,SAASY,KAAI,MAAM;AAC1B,qBAAe,QAAQ,YAAW,MAAOA,MAAK,YAAW,GACrD,6BAA6B,WAAWA,KAAI;AAChD,aAAO;IACX,CAAC;SACE;AACH,QAAI,OAAO,OAAO,WAAU;;AAGhC,SAAO,MAAM,kBAAkB,GAAG;AACtC;AASM,IAAgB,iBAAhB,MAA8B;;;;EAShC,YAAY,UAAY;AALf;;;;AAML,qBAAiC,MAAM,EAAE,UAAW,YAAY,KAAK,CAAE;EAC3E;EAeA,MAAM,SAAS,UAAmB;AAC9B,WAAO,cAAc,MAAM,qBAAqB,EAAE,oBAAoB,MAAM,KAAK,WAAU,GAAI,QAAQ;EAC3G;EAEA,MAAM,aAAa,IAAsB;AACrC,UAAM,MAAM,MAAM,SAAS,MAAM,EAAE;AACnC,WAAO;EACX;EAEA,MAAM,oBAAoB,IAAsB;AAC5C,UAAM,WAAW,cAAc,MAAM,qBAAqB;AAE1D,UAAM,MAAM,MAAM,SAAS,MAAM,EAAE;AAEnC,QAAI,IAAI,SAAS,MAAM;AACnB,UAAI,QAAQ,MAAM,KAAK,SAAS,SAAS;;AAG7C,QAAI,IAAI,YAAY,MAAM;AACtB,UAAI,WAAW,MAAM,KAAK,YAAY,GAAG;;AAI7C,UAAM,UAAU,MAAkB,KAAK,SAAW,WAAU;AAC5D,QAAI,IAAI,WAAW,MAAM;AACrB,YAAM,UAAU,UAAU,IAAI,OAAO;AACrC,qBAAe,YAAY,QAAQ,SAAS,gCAAgC,cAAc,GAAG,OAAO;WACjG;AACH,UAAI,UAAU,QAAQ;;AAI1B,UAAM,aAAc,IAAI,gBAAgB,QAAQ,IAAI,wBAAwB;AAC5E,QAAI,IAAI,YAAY,SAAS,IAAI,SAAS,KAAK,aAAa;AACxD,qBAAe,OAAO,gDAAgD,MAAM,EAAE;gBACtE,IAAI,SAAS,KAAK,IAAI,SAAS,MAAM,YAAY;AACzD,qBAAe,OAAO,6EAA6E,MAAM,EAAE;;AAG/G,SAAK,IAAI,SAAS,KAAK,IAAI,QAAQ,UAAU,IAAI,gBAAgB,QAAQ,IAAI,wBAAwB,OAAO;AAExG,UAAI,OAAO;eAEJ,IAAI,SAAS,KAAK,IAAI,SAAS,GAAG;AAIzC,YAAM,UAAU,MAAM,SAAS,WAAU;AAEzC,aAAO,QAAQ,YAAY,MAAM,qCAAqC,yBAAyB;QAC3F,WAAW;OAAe;AAG9B,UAAI,IAAI,YAAY,MAAM;AAAE,YAAI,WAAW,QAAQ;;WAEhD;AAGH,YAAM,UAAU,MAAM,SAAS,WAAU;AAEzC,UAAI,IAAI,QAAQ,MAAM;AAGlB,YAAI,QAAQ,gBAAgB,QAAQ,QAAQ,wBAAwB,MAAM;AAItE,cAAI,OAAO;AAEX,cAAI,IAAI,YAAY,MAAM;AAGtB,kBAAM,WAAW,IAAI;AACrB,mBAAO,IAAI;AACX,gBAAI,eAAe;AACnB,gBAAI,uBAAuB;iBAExB;AAGH,gBAAI,IAAI,gBAAgB,MAAM;AAC1B,kBAAI,eAAe,QAAQ;;AAG/B,gBAAI,IAAI,wBAAwB,MAAM;AAClC,kBAAI,uBAAuB,QAAQ;;;mBAIpC,QAAQ,YAAY,MAAM;AAIjC,iBAAO,CAAC,YAAY,qCAAqC,yBAAyB;YAC1E,WAAW;WAAuB;AAG1C,cAAI,IAAI,YAAY,MAAM;AACtB,gBAAI,WAAW,QAAQ;;AAK3B,cAAI,OAAO;eAET;AAEF,iBAAO,OAAO,qCAAqC,yBAAyB;YACxE,WAAW;WAAqB;;iBAGjC,IAAI,SAAS,KAAK,IAAI,SAAS,GAAG;AAIzC,YAAI,IAAI,gBAAgB,MAAM;AAC1B,cAAI,eAAe,QAAQ;;AAG/B,YAAI,IAAI,wBAAwB,MAAM;AAClC,cAAI,uBAAuB,QAAQ;;;;AAO/C,WAAO,MAAM,kBAAkB,GAAG;EACtC;EAEA,MAAM,YAAY,IAAsB;AACpC,WAAO,cAAc,MAAM,aAAa,EAAE,YAAY,MAAM,KAAK,aAAa,EAAE,CAAC;EACrF;EAEA,MAAM,KAAK,IAAsB;AAC7B,WAAO,cAAc,MAAM,MAAM,EAAE,KAAK,MAAM,KAAK,aAAa,EAAE,CAAC;EACvE;EAEA,MAAM,YAAY,MAAY;AAC1B,UAAM,WAAW,cAAc,MAAM,aAAa;AAClD,WAAO,MAAM,SAAS,YAAY,IAAI;EAC1C;EAEA,MAAM,gBAAgB,IAAsB;AACxC,UAAM,WAAW,cAAc,MAAM,iBAAiB;AAEtD,UAAM,MAAM,MAAM,KAAK,oBAAoB,EAAE;AAC7C,WAAO,IAAI;AACX,UAAM,QAAQ,YAAY,KAAK,GAAG;AAClC,WAAO,MAAM,SAAS,qBAAqB,MAAM,KAAK,gBAAgB,KAAK,CAAC;EAChF;;AA3OJ;AA0PM,IAAO,cAAP,MAAO,oBAAmB,eAAc;;;;;EAU1C,YAAY,SAAiB,UAA0B;AACnD,UAAM,QAAQ;AAXhB;AAIO;;;;AAQL,qBAA6B,MAAM,EAAE,QAAO,CAAE;EAClD;EAEA,MAAM,aAAU;AAAsB,WAAO,KAAK;EAAS;EAE3D,QAAQ,UAAyB;AAC7B,WAAO,IAAI,YAAW,KAAK,SAAS,QAAQ;EAChD;EAMA,MAAM,gBAAgB,IAAsB;AACxC,0BAAK,4CAAL,WAAuB,gBAAgB;EAC3C;EAEA,MAAM,YAAY,SAA4B;AAC1C,0BAAK,4CAAL,WAAuB,YAAY;EACvC;EAEA,MAAM,cAAc,QAAyB,OAA8C,OAA0B;AACjH,0BAAK,4CAAL,WAAuB,cAAc;EACzC;;AAnCE;AAqBF,sBAAiB,SAAC,QAAgB,WAAiB;AAC/C,SAAO,OAAO,0BAA2B,MAAO,IAAI,yBAAyB,EAAE,UAAS,CAAE;AAC9F;AAvBE,IAAO,aAAP;;;ACpON,IAAM,QAAqB,oBAAI,IAAG;AAU5B,SAAU,oBAAoB,SAAe;AAC/C,MAAI,MAAM,IAAI,OAAO,GAAG;AAAE;;AAC1B,QAAM,IAAI,OAAO;AAEjB,UAAQ,IAAI,4BAA4B;AACxC,UAAQ,IAAI,6BAA8B,OAAQ,sCAAsC;AACxF,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,2EAA2E;AACvF,UAAQ,IAAI,oEAAoE;AAChF,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,yEAAyE;AACrF,UAAQ,IAAI,wEAAwE;AACpF,UAAQ,IAAI,+EAA+E;AAC3F,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,qDAAsD;AAClE,UAAQ,IAAI,4BAA4B;AAC5C;;;ACvCA,SAASC,MAAK,KAAQ;AAClB,SAAO,KAAK,MAAM,KAAK,UAAU,GAAG,CAAC;AACzC;AAXA,IAAAC,YAAA,kBAAAC,UAAAC,WAAA,iDAAAC,UAAA;AAuBM,IAAO,qBAAP,MAAyB;;;;;;EAiB3B,YAAY,UAA4B;AAjBtC;AACF,uBAAAH;AAEA;AACA,uBAAAC;AAEA,uBAAAC;AAEA;AAEA;AAQI,uBAAKF,YAAY;AAEjB,uBAAK,kBAAmB;AACxB,uBAAKC,UAAU,sBAAK,+BAAAE,UAAM,KAAK,IAAI;AAEnC,uBAAKD,WAAW;AAEhB,uBAAK,UAAW;AAEhB,uBAAK,QAAS;EAClB;;;;EAKA,WAAW,UAA4B;AACnC,UAAM,IAAI,MAAM,+BAA+B;EACnD;;;;EAKA,aAAa,UAA4B,QAAkB;AACvD,UAAM,IAAI,MAAM,+BAA+B;EACnD;;;;EAKA,SAAS,UAA0B;AAC/B,UAAM,IAAI,MAAM,+BAA+B;EACnD;EAsDA,QAAK;AACD,QAAI,mBAAKA,YAAU;AAAE;;AACrB,uBAAKA,WAAW;AAEhB,0BAAK,+BAAAC,UAAL,WAAW;EACf;EAEA,OAAI;AACA,QAAI,CAAC,mBAAKD,YAAU;AAAE;;AACtB,uBAAKA,WAAW;AAEhB,uBAAK,QAAS;AACd,0BAAK,4CAAL;AACA,uBAAKF,YAAU,IAAI,SAAS,mBAAKC,SAAO;EAC5C;EAEA,MAAM,iBAAyB;AAC3B,QAAI,iBAAgB;AAAE,4BAAK,4CAAL;;AACtB,uBAAKD,YAAU,IAAI,SAAS,mBAAKC,SAAO;EAC5C;EAEA,SAAM;AAAW,SAAK,MAAK;EAAI;;AA3H/BD,aAAA;AAEA;AACAC,WAAA;AAEAC,YAAA;AAEA;AAEA;AAVE;AAmDIC,WAAK,eAAC,aAAmB;AAC3B,MAAI;AAEA,QAAI,mBAAK,qBAAoB,MAAM;AAC/B,yBAAK,kBAAmB,KAAK,WAAW,mBAAKH,WAAS;;AAI1D,QAAI,WAA0B;AAC9B,QAAI;AACA,iBAAW,MAAM,mBAAK;aACjB,OAAO;AACZ,UAAI,CAAC,QAAQ,OAAO,uBAAuB,KAAK,MAAM,cAAc,iBAAiB;AACjF,cAAM;;;AAMd,QAAI,YAAY,MAAM;AAClB,yBAAK,kBAAmB;AACxB,yBAAKA,YAAU,mBAAmB,MAAM,KAAK,SAAS,mBAAKA,WAAS,CAAC;AACrE;;AAGJ,UAAM,UAAU,MAAM,mBAAKA,YAAU,WAAU;AAC/C,QAAI,CAAC,mBAAK,WAAU;AAAE,yBAAK,UAAW;;AAEtC,QAAK,mBAAK,UAAqB,YAAY,QAAQ,SAAS;AACxD,YAAM,IAAI,MAAM,eAAe;;AAGnC,QAAI,mBAAK,SAAQ;AAAE;;AAEnB,UAAM,SAAS,MAAM,mBAAKA,YAAU,KAAK,wBAAwB,CAAE,QAAQ,CAAE;AAC7E,UAAM,KAAK,aAAa,mBAAKA,aAAW,MAAM;WACzC,OAAO;AAAE,YAAQ,IAAI,SAAS,KAAK;;AAE5C,qBAAKA,YAAU,KAAK,SAAS,mBAAKC,SAAO;AAC7C;AAEA,cAAS,WAAA;AACL,QAAM,kBAAkB,mBAAK;AAC7B,MAAI,iBAAiB;AACjB,uBAAK,kBAAmB;AACxB,oBAAgB,KAAK,CAAC,aAAY;AAC9B,UAAI,mBAAKD,YAAU,WAAW;AAAE;;AAChC,yBAAKA,YAAU,KAAK,uBAAuB,CAAE,QAAQ,CAAE;IAC3D,CAAC;;AAET;AA5HJ;AA2JM,IAAO,0BAAP,cAAuC,mBAAkB;;;;;EAO3D,YAAY,UAA8B,QAAmB;AACzD,UAAM,QAAQ;AAPlB;AAQI,uBAAK,QAASD,MAAK,MAAM;EAC7B;EAEA,SAAS,UAA0B;AAC/B,WAAO,IAAI,uBAAuB,UAAU,mBAAK,OAAM;EAC3D;EAEA,MAAM,WAAW,UAA4B;AACzC,UAAM,WAAW,MAAM,SAAS,KAAK,iBAAiB,CAAE,mBAAK,OAAM,CAAE;AACrE,WAAO;EACX;EAEA,MAAM,aAAa,UAA8B,SAAmB;AAChE,eAAW,UAAU,SAAS;AAC1B,eAAS,KAAK,mBAAK,SAAQ,SAAS,SAAS,QAAQ,SAAS,QAAQ,CAAC;;EAE/E;;AAxBA;AAgCE,IAAO,4BAAP,cAAyC,mBAAkB;EAC7D,MAAM,WAAW,UAA4B;AACzC,WAAO,MAAM,SAAS,KAAK,mCAAmC,CAAA,CAAG;EACrE;EAEA,MAAM,aAAa,UAA8B,SAAmB;AAChE,eAAW,UAAU,SAAS;AAC1B,eAAS,KAAK,WAAW,MAAM;;EAEvC;;;;AC1JJ,IAAM,YAAY,+CAA+C,MAAM,IAAI;AAE3E,SAAS,SAAkB,OAAQ;AAC/B,MAAI,SAAS,QAAQ,UAAU,QAAQ,OAAO,KAAM,KAAK,GAAG;AACxD,WAAO;;AAIX,MAAI,OAAa,MAAO,eAAgB,YAAY;AAChD,WAAO;;AAGX,MAAI,MAAM,QAAQ,KAAK,GAAG;AAAE,WAAa,MAAM,IAAI,QAAQ;;AAE3D,MAAI,OAAO,UAAW,UAAU;AAC5B,WAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,OAAO,QAAO;AAC5C,YAAM,GAAG,IAAU,MAAO,GAAG;AAC7B,aAAO;IACX,GAAQ,CAAA,CAAG;;AAGf,QAAM,IAAI,MAAM,sBAAuB,KAAM,KAAM,OAAO,KAAO,GAAG;AACxE;AAEA,SAAS,MAAM,UAAgB;AAC3B,SAAO,IAAI,QAAQ,CAAC,YAAW;AAAG,eAAW,SAAS,QAAQ;EAAG,CAAC;AACtE;AAEA,SAAS,aAAa,OAAa;AAC/B,MAAI,OAAO;AAAE,WAAO,MAAM,YAAW;;AACrC,SAAO;AACX;AAMA,SAAS,WAAW,OAAU;AAC1B,SAAQ,SAAS,OAAO,MAAM,oBAAqB;AACvD;AAsHA,IAAMK,kBAAiB;EACnB,SAAS;EACT,eAAe;EAEf,gBAAgB;EAChB,cAAe,KAAK;EACpB,eAAe;EAEf,cAAc;EACd,iBAAiB;;AA0Ef,IAAO,gBAAP,cAA6B,eAAkC;EAGjE,YAAY,UAA8B,SAAe;AACrD,UAAM,QAAQ;AAHlB;AAII,cAAU,WAAW,OAAO;AAC5B,qBAAgC,MAAM,EAAE,QAAO,CAAE;EACrD;EAEA,QAAQ,UAAyB;AAC7B,WAAO,OAAO,kCAAkC,yBAAyB;MACrE,WAAW;KACd;EACL;EAEA,MAAM,aAAU;AACZ,WAAO,KAAK;EAChB;;EAGA,MAAM,oBAAoB,IAAsB;AAC5C,WAAO,MAAM,KAAK,aAAa,EAAE;EACrC;;;EAIA,MAAM,yBAAyB,KAAuB;AAClD,UAAM,KAAK,SAAS,GAAG;AAEvB,UAAM,WAAiC,CAAA;AAGvC,QAAI,GAAG,MAAM;AACT,YAAM,QAAQ,GAAG;AACjB,eAAS,MAAM,YAAW;AACtB,cAAM,OAAO,MAAM,eAAe,OAAO,KAAK,QAAQ;AACtD,uBAAe,QAAQ,QAAQ,KAAK,YAAW,MAAO,KAAK,QAAQ,YAAW,GAC1E,yBAAyB,eAAe,GAAG;AAC/C,WAAG,OAAO;MACd,GAAE,CAAE;WACD;AACH,SAAG,OAAO,KAAK;;AAMnB,QAAI,GAAG,YAAY,MAAM;AACrB,eAAS,MAAM,YAAW;AACtB,WAAG,WAAW,MAAM,KAAK,SAAS,YAAY,EAAE,GAAG,IAAI,MAAM,KAAK,QAAO,CAAC;MAC9E,GAAE,CAAE;;AAIR,QAAI,GAAG,MAAM,MAAM;AACf,YAAMC,OAAM,GAAG;AACf,eAAS,MAAM,YAAW;AACtB,WAAG,KAAK,MAAM,eAAeA,MAAK,KAAK,QAAQ;MACnD,GAAE,CAAE;;AAIR,QAAI,SAAS,QAAQ;AAAE,YAAM,QAAQ,IAAI,QAAQ;;AAEjD,UAAM,QAAQ,KAAK,SAAS,kBAAkB,EAAE;AAEhD,WAAO,KAAK,SAAS,KAAK,uBAAuB,CAAE,KAAK,CAAE;EAC9D;EAEA,MAAM,gBAAgB,IAAsB;AAExC,UAAM,cAAc,MAAM,KAAK,SAAS,eAAc;AAGtD,UAAMC,QAAO,MAAM,KAAK,yBAAyB,EAAE;AAKnD,WAAO,MAAO,IAAI,QAAQ,CAAC,SAAS,WAAU;AAC1C,YAAM,WAAW,CAAE,KAAM,GAAG;AAC5B,UAAI,WAAW;AAEf,YAAM,UAAU,YAAW;AAEvB,YAAI;AAEA,gBAAMC,MAAK,MAAM,KAAK,SAAS,eAAeD,KAAI;AAElD,cAAIC,OAAM,MAAM;AACZ,oBAAQA,IAAG,uBAAuB,WAAW,CAAC;AAC9C;;iBAGC,OAAO;AAMZ,cAAI,QAAQ,OAAO,WAAW,KAAK,QAAQ,OAAO,UAAU,KACxD,QAAQ,OAAO,eAAe,KAAK,QAAQ,OAAO,uBAAuB,GAAG;AAE5E,gBAAI,MAAM,QAAQ,MAAM;AAAE,oBAAM,OAAO,CAAA;;AACvC,kBAAM,KAAK,sBAAsBD;AAEjC,mBAAO,KAAK;AACZ;;AAIJ,cAAI,QAAQ,OAAO,kBAAkB,GAAG;AACpC;AACA,gBAAI,MAAM,QAAQ,MAAM;AAAE,oBAAM,OAAO,CAAA;;AACvC,kBAAM,KAAK,sBAAsBA;AACjC,gBAAI,WAAW,IAAI;AACf,qBAAO,KAAK;AACZ;;;AAMR,eAAK,SAAS,KAAK,SAAS,UAAU,6DAA6D,iBAAiB,EAAE,MAAK,CAAE,CAAC;;AAIlI,aAAK,SAAS,YAAY,MAAK;AAAG,kBAAO;QAAI,GAAG,SAAS,IAAG,KAAM,GAAI;MAC1E;AACA,cAAO;IACX,CAAC;EACL;EAEA,MAAM,gBAAgB,KAAuB;AACzC,UAAM,KAAK,SAAS,GAAG;AAGvB,QAAI,GAAG,MAAM;AACT,YAAM,OAAO,MAAM,eAAe,GAAG,MAAM,KAAK,QAAQ;AACxD,qBAAe,QAAQ,QAAQ,KAAK,YAAW,MAAO,KAAK,QAAQ,YAAW,GAC1E,yBAAyB,eAAe,GAAG;AAC/C,SAAG,OAAO;WACP;AACH,SAAG,OAAO,KAAK;;AAGnB,UAAM,QAAQ,KAAK,SAAS,kBAAkB,EAAE;AAChD,WAAO,MAAM,KAAK,SAAS,KAAK,uBAAuB,CAAE,KAAK,CAAE;EACpE;EAGA,MAAM,YAAY,UAA6B;AAC3C,UAAM,UAAY,OAAO,aAAc,WAAY,YAAY,QAAQ,IAAG;AAC1E,WAAO,MAAM,KAAK,SAAS,KAAK,iBAAiB;MAC7C,QAAQ,OAAO;MAAG,KAAK,QAAQ,YAAW;KAAI;EACtD;EAEA,MAAM,cAAc,QAAyB,OAA8CE,SAA2B;AAClH,UAAM,QAAQ,SAASA,OAAM;AAG7B,UAAM,YAAY,MAAM,iBAAiB,aAAa,QAAQ,OAAO,OAAO,OAAOC,WAAiB;AAChG,YAAM,UAAU,MAAM,eAAeA,MAAK;AAC1C,qBAAe,WAAW,MAAM,2CAA2C,SAASA,MAAK;AACzF,aAAO;IACX,CAAC;AAED,WAAO,MAAM,KAAK,SAAS,KAAK,wBAAwB;MACpD,KAAK,QAAQ,YAAW;MACxB,KAAK,UAAU,iBAAiB,WAAW,UAAU,QAAQ,OAAO,UAAU,KAAK,CAAC;KACvF;EACL;EAEA,MAAM,OAAO,UAAgB;AACzB,WAAO,KAAK,SAAS,KAAK,0BAA0B;MAChD,KAAK,QAAQ,YAAW;MAAI;MAAU;KAAM;EACpD;;EAGA,MAAM,mBAAmB,UAA6B;AAClD,UAAM,UAAY,OAAO,aAAc,WAAY,YAAY,QAAQ,IAAG;AAC1E,WAAO,MAAM,KAAK,SAAS,KAAK,YAAY;MACxC,KAAK,QAAQ,YAAW;MAAI,QAAQ,OAAO;KAAG;EACtD;;AAldJ,IAAAC,WAAA,4CAAAC,WAAA;AAoeM,IAAgB,qBAAhB,cAA2C,iBAAgB;EAmG7D,YAAY,SAAsB,SAAmC;AACjE,UAAM,SAAS,OAAO;AApGxB;AAEF,uBAAAD;AAGA;;AAGA;;AACA;AAEA;AAKA,uBAAAC;AACA;AAqFI,uBAAK,SAAU;AACf,uBAAKD,WAAW,OAAO,OAAO,CAAA,GAAKN,iBAAgB,WAAW,CAAA,CAAG;AAEjE,uBAAK,WAAY,CAAA;AACjB,uBAAK,aAAc;AAEnB,uBAAKO,WAAW;AAChB,uBAAK,uBAAwB;AAE7B;AACI,UAAI,UAA0C;AAC9C,YAAM,UAAU,IAAI,QAAQ,CAAC,aAAmC;AAC5D,kBAAU;MACd,CAAC;AACD,yBAAK,WAAY,EAAE,SAAS,QAAO;;AAGvC,UAAM,gBAAgB,KAAK,WAAW,eAAe;AACrD,QAAI,OAAO,kBAAmB,WAAW;AACrC,qBAAe,CAAC,iBAAiB,YAAY,OAAO,yDAAyD,WAAW,OAAO;AAC/H,UAAI,iBAAiB,WAAW,MAAM;AAClC,2BAAKA,WAAW,QAAQ,KAAK,OAAO;;eAGjC,eAAe;AAEtB,qBAAe,WAAW,QAAQ,cAAc,QAAQ,OAAO,GAC3D,2CAA2C,WAAW,OAAO;AACjE,yBAAKA,WAAW;;EAExB;;;;;;EAOA,WAAsD,KAAM;AACxD,WAAO,mBAAKD,WAAS,GAAG;EAC5B;;;;;EAMA,IAAI,WAAQ;AACR,WAAQ,mBAAKC,YAAU,gCAAgC,eAAe;AACtE,WAAO,mBAAKA;EAChB;;;;;;;EAgBA,MAAM,SAAS,KAAyB;AAIpC,QAAI,IAAI,WAAW,UAAU,IAAI,WAAW,eAAe;AACvD,UAAI,KAAK,IAAI;AACb,UAAI,MAAM,GAAG,QAAQ,QAAQ,UAAU,GAAG,IAAI,GAAG;AAE7C,YAAI,GAAG,gBAAgB,QAAQ,GAAG,wBAAwB,MAAM;AAC5D,gBAAM,UAAU,MAAM,KAAK,WAAU;AACrC,cAAI,QAAQ,gBAAgB,QAAQ,QAAQ,wBAAwB,MAAM;AAEtE,kBAAM,OAAO,OAAO,CAAA,GAAK,KAAK;cAC1B,aAAa,OAAO,OAAO,CAAA,GAAK,IAAI,EAAE,MAAM,OAAS,CAAE;aAC1D;;;;;AAMjB,UAAM,UAAU,KAAK,cAAc,GAAG;AAEtC,QAAI,WAAW,MAAM;AACjB,aAAO,MAAM,KAAK,KAAK,QAAQ,QAAQ,QAAQ,IAAI;;AAGvD,WAAO,MAAM,SAAS,GAAG;EAC7B;;;;;;;;EASA,MAAM,iBAAc;AAChB,UAAM,UAAU,KAAK,WAAW,eAAe;AAC/C,QAAI,SAAS;AACT,UAAI,YAAY,MAAM;AAClB,YAAI,mBAAKA,YAAU;AAAE,iBAAO,mBAAKA;;aAC9B;AACH,eAAO;;;AAIf,QAAI,mBAAK,wBAAuB;AAC5B,aAAO,MAAM,mBAAK;;AAItB,QAAI,KAAK,OAAO;AACZ,yBAAK,wBAAyB,YAAW;AACrC,YAAI;AACA,gBAAM,SAAS,QAAQ,KAAK,UAAU,MAAM,KAAK,KAAK,eAAe,CAAA,CAAG,CAAC,CAAC;AAC1E,6BAAK,uBAAwB;AAC7B,iBAAO;iBACF,OAAO;AACZ,6BAAK,uBAAwB;AAC7B,gBAAM;;MAEd,GAAE;AACF,aAAO,MAAM,mBAAK;;AAItB,uBAAK,wBAAyB,YAAW;AACrC,YAAM,UAA0B;QAC5B,IAAI,uBAAK,SAAL;QAAgB,QAAQ;QAAe,QAAQ,CAAA;QAAK,SAAS;;AAGrE,WAAK,KAAK,SAAS,EAAE,QAAQ,kBAAkB,QAAO,CAAE;AAExD,UAAI;AACJ,UAAI;AACA,kBAAU,MAAM,KAAK,MAAM,OAAO,GAAG,CAAC;AACtC,2BAAK,uBAAwB;eACxB,OAAO;AACZ,2BAAK,uBAAwB;AAC7B,aAAK,KAAK,SAAS,EAAE,QAAQ,mBAAmB,MAAK,CAAE;AACvD,cAAM;;AAGV,WAAK,KAAK,SAAS,EAAE,QAAQ,oBAAoB,OAAM,CAAE;AAEzD,UAAI,YAAY,QAAQ;AACpB,eAAO,QAAQ,KAAK,UAAU,OAAO,MAAM,CAAC;;AAGhD,YAAM,KAAK,YAAY,SAAS,MAAM;IAC1C,GAAE;AAEF,WAAO,MAAM,mBAAK;EACtB;;;;;;;;EASA,SAAM;AACF,QAAI,mBAAK,cAAa,QAAQ,mBAAK,WAAU,WAAW,MAAM;AAAE;;AAEhE,uBAAK,WAAU,QAAO;AACtB,uBAAK,WAAY;AAEjB,KAAC,YAAW;AAGR,aAAO,mBAAKA,cAAY,QAAQ,CAAC,KAAK,WAAW;AAC7C,YAAI;AACA,6BAAKA,WAAW,MAAM,KAAK,eAAc;iBACpC,OAAO;AACZ,cAAI,KAAK,WAAW;AAAE;;AACtB,kBAAQ,IAAI,iIAAiI;AAC7I,eAAK,KAAK,SAAS,UAAU,yCAAyC,iBAAiB,EAAE,OAAO,6BAA6B,MAAM,EAAE,MAAK,EAAE,CAAE,CAAC;AAC/I,gBAAM,MAAM,GAAI;;;AAKxB,4BAAK,iDAAL;IACJ,GAAE;EACN;;;;;;EAOA,MAAM,kBAAe;AACjB,QAAI,mBAAK,cAAa,MAAM;AAAE;;AAC9B,WAAO,MAAM,mBAAK,WAAU;EAChC;;;;;;;EASA,eAAe,KAAiB;AAG5B,QAAI,IAAI,SAAS,WAAW;AAAE,aAAO,IAAI,0BAA0B,IAAI;;AAEvE,QAAI,IAAI,SAAS,SAAS;AACtB,UAAI,KAAK,WAAW,SAAS,GAAG;AAC5B,eAAO,IAAI,uBAAuB,MAAM,IAAI,MAAM;;AAEtD,aAAO,IAAI,wBAAwB,MAAM,IAAI,MAAM;;AAKvD,QAAI,IAAI,SAAS,YAAY,IAAI,OAAO,WAAW,YAAY;AAC3D,aAAO,IAAI,oBAAoB,QAAQ;;AAG3C,WAAO,MAAM,eAAe,GAAG;EACnC;;;;EAKA,IAAI,QAAK;AAAc,WAAO,mBAAK,cAAa;EAAM;;;;;;EAOtD,kBAAkB,IAAsB;AACpC,UAAM,SAAoC,CAAA;AAG1C,KAAC,WAAW,YAAY,YAAY,QAAQ,gBAAgB,wBAAwB,SAAS,OAAO,EAAE,QAAQ,CAAC,QAAO;AAClH,UAAU,GAAI,GAAG,KAAK,MAAM;AAAE;;AAC9B,UAAI,SAAS;AACb,UAAI,QAAQ,YAAY;AAAE,iBAAS;;AAC7B,aAAQ,MAAM,IAAI,WAAW,UAAgB,GAAI,GAAG,GAAG,MAAO,GAAI,EAAE,CAAC;IAC/E,CAAC;AAGD,KAAC,QAAQ,MAAM,MAAM,EAAE,QAAQ,CAAC,QAAO;AACnC,UAAU,GAAI,GAAG,KAAK,MAAM;AAAE;;AACxB,aAAQ,GAAG,IAAI,QAAc,GAAI,GAAG,CAAC;IAC/C,CAAC;AAGD,QAAI,GAAG,YAAY;AACf,aAAO,YAAY,IAAI,cAAc,GAAG,UAAU;;AAGtD,QAAI,GAAG,qBAAqB;AAElB,aAAQ,qBAAqB,IAAI,GAAG,oBAAoB,IAAI,OAAK,EAAE,YAAW,CAAE;;AAQ1F,WAAO;EACX;;;;;EAMA,cAAc,KAAyB;AACnC,YAAQ,IAAI,QAAQ;MAChB,KAAK;AACD,eAAO,EAAE,QAAQ,eAAe,MAAM,CAAA,EAAG;MAE7C,KAAK;AACD,eAAO,EAAE,QAAQ,mBAAmB,MAAM,CAAA,EAAG;MAEjD,KAAK;AACD,eAAO,EAAE,QAAQ,gBAAgB,MAAM,CAAA,EAAE;MAE7C,KAAK;AACD,eAAO,EAAE,QAAQ,4BAA4B,MAAM,CAAA,EAAG;MAE1D,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,aAAa,IAAI,OAAO,GAAG,IAAI,QAAQ;;MAGvD,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,aAAa,IAAI,OAAO,GAAG,IAAI,QAAQ;;MAGvD,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,aAAa,IAAI,OAAO,GAAG,IAAI,QAAQ;;MAGvD,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM;YACF,aAAa,IAAI,OAAO;YACvB,OAAO,IAAI,SAAS,SAAS,EAAE;YAChC,IAAI;;;MAIhB,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,IAAI,iBAAiB;;MAGrC,KAAK;AACD,YAAI,cAAc,KAAK;AACnB,iBAAO;YACH,QAAQ;YACR,MAAM,CAAE,IAAI,UAAU,CAAC,CAAC,IAAI,mBAAmB;;mBAE5C,eAAe,KAAK;AAC3B,iBAAO;YACH,QAAQ;YACR,MAAM,CAAE,IAAI,WAAW,CAAC,CAAC,IAAI,mBAAmB;;;AAGxD;MAEJ,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,IAAI,IAAI;;MAGxB,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,IAAI,IAAI;;MAGxB,KAAK;AACD,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,KAAK,kBAAkB,IAAI,WAAW,GAAG,IAAI,QAAQ;;MAGrE,KAAK,eAAe;AAChB,eAAO;UACH,QAAQ;UACR,MAAM,CAAE,KAAK,kBAAkB,IAAI,WAAW,CAAC;;;MAIvD,KAAK;AACD,YAAI,IAAI,UAAU,IAAI,OAAO,WAAW,MAAM;AAC1C,cAAI,MAAM,QAAQ,IAAI,OAAO,OAAO,GAAG;AACnC,gBAAI,OAAO,UAAU,IAAI,OAAO,QAAQ,IAAI,YAAY;iBACrD;AACH,gBAAI,OAAO,UAAU,aAAa,IAAI,OAAO,OAAO;;;AAG5D,eAAO,EAAE,QAAQ,eAAe,MAAM,CAAE,IAAI,MAAM,EAAE;;AAG5D,WAAO;EACX;;;;;;;EAQA,YAAY,SAAyBC,SAAoB;AACrD,UAAM,EAAE,OAAM,IAAK;AACnB,UAAM,EAAE,MAAK,IAAKA;AAElB,QAAI,WAAW,qBAAqB,MAAM,SAAS;AAC/C,YAAM,MAAM,MAAM;AAClB,UAAI,CAAC,IAAI,MAAM,SAAS,KAAK,IAAI,MAAM,qBAAqB,GAAG;AAC3D,eAAO,UAAU,sBAAsB,sBAAsB;UACzD,aAAoB,QAAS,OAAO,CAAC;UACrC,MAAM,EAAE,SAAS,MAAK;SACzB;;;AAIT,QAAI,WAAW,cAAc,WAAW,mBAAmB;AACvD,YAAM,SAAS,YAAY,KAAK;AAEhC,YAAM,IAAI,SAAS,wBACd,WAAW,aAAc,SAAQ,eAC3B,QAAS,OAAO,CAAC,GACvB,SAAS,OAAO,OAAM,IAAK;AAEhC,QAAE,OAAO,EAAE,OAAO,QAAO;AACzB,aAAO;;AAMX,UAAM,UAAU,KAAK,UAAU,eAAe,KAAK,CAAC;AAEpD,QAAI,OAAO,MAAM,YAAa,YAAY,MAAM,QAAQ,MAAM,iCAAiC,GAAG;AAC9F,YAAM,YAAuH;QACzH,UAAU;QACV,eAAe;QACf,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;QACrB,qBAAqB;QACrB,wBAAwB;;AAG5B,aAAO,UAAU,wBAAwB,mBAAmB;QACxD,QAAS,UAAU,MAAM,KAAK;QAC9B,QAAQ;QACR,MAAM,EAAE,SAAS,MAAK;OACzB;;AAGL,QAAI,WAAW,4BAA4B,WAAW,uBAAuB;AACzE,YAAM,cAA8C,QAAS,OAAO,CAAC;AAErE,UAAI,QAAQ,MAAM,gDAAgD,GAAG;AACjE,eAAO,UAAU,qDAAqD,sBAAsB;UACxF;UAAa,MAAM,EAAE,MAAK;SAC7B;;AAGL,UAAI,QAAQ,MAAM,QAAQ,KAAK,QAAQ,MAAM,UAAU,GAAG;AACtD,eAAO,UAAU,+BAA+B,iBAAiB,EAAE,aAAa,MAAM,EAAE,MAAK,EAAE,CAAE;;AAIrG,UAAI,QAAQ,MAAM,0BAA0B,KAAK,QAAQ,MAAM,cAAc,GAAG;AAC5E,eAAO,UAAU,2BAA2B,2BAA2B,EAAE,aAAa,MAAM,EAAE,MAAK,EAAE,CAAE;;AAG3G,UAAI,QAAQ,MAAM,wBAAwB,GAAG;AACzC,eAAO,UAAU,iDAAiD,yBAAyB;UACvF,WAAW;UAAQ,MAAM,EAAE,aAAa,MAAM,EAAE,MAAK,EAAE;SAC1D;;;AAIT,QAAI,cAAc,CAAC,CAAC,QAAQ,MAAM,+BAA+B;AACjE,QAAI,CAAC,aAAa;AACd,UAAI,SAAe,MAAO,WAAiB,MAAO,QAAQ,WAAW,sBAAsB,GAAG;AAC1F,sBAAc;;;AAItB,QAAI,aAAa;AACb,aAAO,UAAU,yBAAyB,yBAAyB;QAC/D,WAAW,QAAQ;QAAQ,MAAM,EAAE,OAAO,QAAO;OACpD;;AAGL,WAAO,UAAU,4BAA4B,iBAAiB,EAAE,OAAO,QAAO,CAAE;EACpF;;;;;;;;;;;;;;EAgBA,KAAK,QAAgB,QAAwC;AAIzD,QAAI,KAAK,WAAW;AAChB,aAAO,QAAQ,OAAO,UAAU,yCAAyC,yBAAyB,EAAE,WAAW,OAAM,CAAE,CAAC;;AAG5H,UAAMC,MAAK,uBAAK,SAAL;AACX,UAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAU;AAC5C,yBAAK,WAAU,KAAK;QAChB;QAAS;QACT,SAAS,EAAE,QAAQ,QAAQ,IAAAA,KAAI,SAAS,MAAK;OAChD;IACL,CAAC;AAGD,0BAAK,iDAAL;AAEA,WAA+B;EACnC;;;;;;;;;;;;;EAcA,MAAM,UAAU,SAAyB;AACrC,QAAI,WAAW,MAAM;AAAE,gBAAU;;AAEjC,UAAM,kBAAkB,KAAK,KAAK,gBAAgB,CAAA,CAAG;AAGrD,QAAI,OAAO,YAAa,UAAU;AAC9B,YAAMC,YAA2B,MAAM;AACvC,UAAI,WAAWA,UAAS,QAAQ;AAAE,cAAM,IAAI,MAAM,iBAAiB;;AACnE,aAAO,IAAI,cAAc,MAAMA,UAAS,OAAO,CAAC;;AAGpD,UAAM,EAAE,SAAQ,IAAK,MAAM,kBAAkB;MACzC,SAAS,KAAK,WAAU;MACxB,UAAU;KACb;AAGD,cAAU,WAAW,OAAO;AAC5B,eAAW,WAAW,UAAU;AAC5B,UAAI,WAAW,OAAO,MAAM,SAAS;AACjC,eAAO,IAAI,cAAc,MAAM,OAAO;;;AAI9C,UAAM,IAAI,MAAM,iBAAiB;EACrC;EAEA,MAAM,eAAY;AACd,UAAM,WAA0B,MAAM,KAAK,KAAK,gBAAgB,CAAA,CAAG;AACnE,WAAO,SAAS,IAAI,CAAC,MAAM,IAAI,cAAc,MAAM,CAAC,CAAC;EACzD;EAEA,UAAO;AAGH,QAAI,mBAAK,cAAa;AAClB,mBAAa,mBAAK,YAAW;AAC7B,yBAAK,aAAc;;AAIvB,eAAW,EAAE,SAAS,OAAM,KAAM,mBAAK,YAAW;AAC9C,aAAO,UAAU,yCAAyC,yBAAyB,EAAE,WAAW,QAAQ,OAAM,CAAE,CAAC;;AAGrH,uBAAK,WAAY,CAAA;AAGjB,UAAM,QAAO;EAEjB;;AAlqBAJ,YAAA;AAGA;AAGA;AACA;AAEA;AAKAC,YAAA;AACA;AAjBE;AAmBF,mBAAc,WAAA;AACV,MAAI,mBAAK,cAAa;AAAE;;AAGxB,QAAM,YAAa,KAAK,WAAW,eAAe,MAAM,IAAK,IAAG,KAAK,WAAW,gBAAgB;AAEhG,qBAAK,aAAc,WAAW,MAAK;AAC/B,uBAAK,aAAc;AAEnB,UAAM,WAAW,mBAAK;AACtB,uBAAK,WAAY,CAAA;AAEjB,WAAO,SAAS,QAAQ;AAGpB,YAAM,QAAQ,CAAY,SAAS,MAAK,CAAG;AAC3C,aAAO,SAAS,QAAQ;AACpB,YAAI,MAAM,WAAW,mBAAKD,WAAS,eAAe;AAAE;;AACpD,cAAM,KAAe,SAAS,MAAK,CAAG;AACtC,cAAMK,SAAQ,KAAK,UAAU,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC;AACxD,YAAIA,OAAM,SAAS,mBAAKL,WAAS,cAAc;AAC3C,mBAAS,QAAkB,MAAM,IAAG,CAAG;AACvC;;;AAKR,OAAC,YAAW;AACR,cAAM,UAAY,MAAM,WAAW,IAAK,MAAM,CAAC,EAAE,UAAS,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO;AAEpF,aAAK,KAAK,SAAS,EAAE,QAAQ,kBAAkB,QAAO,CAAE;AAExD,YAAI;AACA,gBAAM,SAAS,MAAM,KAAK,MAAM,OAAO;AACvC,eAAK,KAAK,SAAS,EAAE,QAAQ,oBAAoB,OAAM,CAAE;AAGzD,qBAAW,EAAE,SAAS,QAAQ,SAAAM,SAAO,KAAM,OAAO;AAE9C,gBAAI,KAAK,WAAW;AAChB,qBAAO,UAAU,yCAAyC,yBAAyB,EAAE,WAAWA,SAAQ,OAAM,CAAE,CAAC;AACjH;;AAIJ,kBAAM,OAAO,OAAO,OAAO,CAAC,MAAO,EAAE,OAAOA,SAAQ,EAAG,EAAE,CAAC;AAG1D,gBAAI,QAAQ,MAAM;AACd,oBAAM,QAAQ,UAAU,gCAAgC,YAAY;gBAChE,OAAO;gBAAQ,MAAM,EAAE,SAAAA,SAAO;eACjC;AACD,mBAAK,KAAK,SAAS,KAAK;AACxB,qBAAO,KAAK;AACZ;;AAIJ,gBAAI,WAAW,MAAM;AACjB,qBAAO,KAAK,YAAYA,UAAS,IAAI,CAAC;AACtC;;AAIJ,oBAAQ,KAAK,MAAM;;iBAGlB,OAAY;AACjB,eAAK,KAAK,SAAS,EAAE,QAAQ,mBAAmB,MAAK,CAAE;AAEvD,qBAAW,EAAE,OAAM,KAAM,OAAO;AAE5B,mBAAO,KAAK;;;MAGxB,GAAE;;EAEV,GAAG,SAAS;AAChB;AArkBJ;AAipCM,IAAgB,4BAAhB,cAAkD,mBAAkB;EAEtE,YAAY,SAAsB,SAAmC;AACjE,UAAM,SAAS,OAAO;AAF1B;AAII,QAAI,kBAAkB,KAAK,WAAW,iBAAiB;AACvD,QAAI,mBAAmB,MAAM;AAAE,wBAAkBZ,gBAAe;;AAEhE,uBAAK,kBAAmB;EAC5B;EAEA,eAAe,KAAiB;AAC5B,UAAM,aAAa,MAAM,eAAe,GAAG;AAC3C,QAAI,WAAW,UAAU,GAAG;AACxB,iBAAW,kBAAkB,mBAAK;;AAEtC,WAAO;EACX;;;;EAKA,IAAI,kBAAe;AAAa,WAAO,mBAAK;EAAkB;EAC9D,IAAI,gBAAgB,OAAa;AAC7B,QAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,GAAG;AAAE,YAAM,IAAI,MAAM,kBAAkB;;AAC/E,uBAAK,kBAAmB;AACxB,SAAK,mBAAmB,CAAC,QAAO;AAC5B,UAAI,WAAW,GAAG,GAAG;AACjB,YAAI,kBAAkB,mBAAK;;IAEnC,CAAC;EACL;;AA9BA;AAlpCJ;AA2rCM,IAAO,kBAAP,cAA+B,0BAAyB;EAG1D,YAAY,KAA6B,SAAsB,SAAmC;AAC9F,QAAI,OAAO,MAAM;AAAE,YAAM;;AACzB,UAAM,SAAS,OAAO;AAJ1B;AAMI,QAAI,OAAO,QAAS,UAAU;AAC1B,yBAAK,UAAW,IAAI,aAAa,GAAG;WACjC;AACH,yBAAK,UAAW,IAAI,MAAK;;EAEjC;EAEA,iBAAc;AACV,WAAO,mBAAK,UAAS,MAAK;EAC9B;EAEA,MAAM,KAAK,QAAgB,QAAwC;AAI/D,UAAM,KAAK,OAAM;AAEjB,WAAO,MAAM,MAAM,KAAK,QAAQ,MAAM;EAC1C;EAEA,MAAM,MAAM,SAA+C;AAEvD,UAAM,UAAU,KAAK,eAAc;AACnC,YAAQ,OAAO,KAAK,UAAU,OAAO;AACrC,YAAQ,UAAU,gBAAgB,kBAAkB;AACpD,UAAM,WAAW,MAAM,QAAQ,KAAI;AACnC,aAAS,SAAQ;AAEjB,QAAI,OAAO,SAAS;AACpB,QAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;AAAE,aAAO,CAAE,IAAI;;AAEzC,WAAO;EACX;;AAtCA;AAyCJ,SAAS,YAAY,OAAU;AAC3B,MAAI,SAAS,MAAM;AAAE,WAAO;;AAG5B,MAAI,OAAO,MAAM,YAAa,YAAY,MAAM,QAAQ,MAAM,SAAS,KAAK,YAAY,MAAM,IAAI,GAAG;AACjG,WAAO,EAAE,SAAS,MAAM,SAAS,MAAM,MAAM,KAAI;;AAIrD,MAAI,OAAO,UAAW,UAAU;AAC5B,eAAW,OAAO,OAAO;AACrB,YAAM,SAAS,YAAY,MAAM,GAAG,CAAC;AACrC,UAAI,QAAQ;AAAE,eAAO;;;AAEzB,WAAO;;AAIX,MAAI,OAAO,UAAW,UAAU;AAC5B,QAAI;AACA,aAAO,YAAY,KAAK,MAAM,KAAK,CAAC;aAC/B,OAAO;IAAA;;AAGpB,SAAO;AACX;AAEA,SAAS,gBAAgB,OAAY,QAAqB;AACtD,MAAI,SAAS,MAAM;AAAE;;AAGrB,MAAI,OAAO,MAAM,YAAa,UAAU;AACpC,WAAO,KAAK,MAAM,OAAO;;AAI7B,MAAI,OAAO,UAAW,UAAU;AAC5B,eAAW,OAAO,OAAO;AACrB,sBAAgB,MAAM,GAAG,GAAG,MAAM;;;AAK1C,MAAI,OAAO,UAAW,UAAU;AAC5B,QAAI;AACA,aAAO,gBAAgB,KAAK,MAAM,KAAK,GAAG,MAAM;aAC3C,OAAO;IAAA;;AAExB;AAEA,SAAS,eAAe,OAAU;AAC9B,QAAM,SAAwB,CAAA;AAC9B,kBAAgB,OAAO,MAAM;AAC7B,SAAO;AACX;;;ACtvCA,IAAM,gBAAgB;AAEtB,SAAS,QAAQ,MAAY;AACzB,UAAQ,MAAM;IACV,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IAEX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;;AAGf,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAYM,IAAO,eAAP,MAAO,sBAAqB,gBAAe;;;;;;;EAa7C,YAAYa,WAAuB,QAAsB;AACrD,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,QAAI,UAAU,MAAM;AAAE,eAAS;;AAG/B,UAAM,UAAU,EAAE,SAAS,MAAM,eAAe,QAAO;AAEvD,UAAM,UAAU,cAAa,WAAW,SAAS,MAAM;AACvD,UAAM,SAAS,SAAS,OAAO;AAjB1B;;;;AAmBL,qBAA+B,MAAM,EAAE,OAAM,CAAE;EACnD;EAEA,aAAa,SAAe;AACxB,QAAI;AACA,aAAO,IAAI,cAAa,SAAS,KAAK,MAAM;aACvC,OAAO;IAAA;AAChB,WAAO,MAAM,aAAa,OAAO;EACrC;;;;;EAMA,OAAO,WAAW,SAAkB,QAAsB;AACtD,QAAI,UAAU,MAAM;AAAE,eAAS;;AAE/B,UAAM,UAAU,IAAI,aAAa,WAAa,QAAQ,QAAQ,IAAI,CAAE,IAAK,MAAO,EAAE;AAClF,YAAQ,YAAY;AAEpB,QAAI,WAAW,eAAe;AAC1B,cAAQ,YAAY,OAAOC,UAAS,UAAU,YAAW;AACrD,4BAAoB,cAAc;AAClC,eAAO;MACX;;AAGJ,WAAO;EACX;EAEA,YAAY,SAAyB,OAAmB;AACpD,QAAI,QAAQ,WAAW,0BAA0B;AAC7C,UAAI,SAAS,MAAM,SAAS,MAAM,MAAM,YAAY,iDAAiD;AACjG,cAAM,MAAM,UAAU;;;AAI9B,WAAO,MAAM,YAAY,SAAS,KAAK;EAC3C;EAEA,sBAAmB;AACf,WAAQ,KAAK,WAAW;EAC5B;;;;AChHJ,IAAMC,iBAAgB;AAEtB,SAASC,SAAQ,MAAY;AACzB,UAAO,MAAM;IACT,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IAEX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;;AAGf,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAaM,IAAO,kBAAP,MAAO,yBAAwB,gBAAe;EAGhD,YAAYC,WAAuB,QAAsB;AACrD,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,QAAI,UAAU,MAAM;AAAE,eAASF;;AAE/B,UAAM,UAAU,iBAAgB,WAAW,SAAS,MAAM;AAC1D,UAAM,SAAS,SAAS,EAAE,eAAe,QAAO,CAAE;AAR7C;AAUL,qBAAkC,MAAM,EAAE,OAAM,CAAE;EACtD;EAEA,aAAa,SAAe;AACxB,QAAI;AACA,aAAO,IAAI,iBAAgB,SAAS,KAAK,MAAM;aAC1C,OAAO;IAAA;AAChB,WAAO,MAAM,aAAa,OAAO;EACrC;EAEA,MAAM,SAAS,KAAyB;AAGpC,QAAI,IAAI,WAAW,wBAAwB;AACvC,YAAM,EAAE,OAAO,GAAE,IAAK,MAAM,kBAAkB;QAC1C,OAAO,KAAK,KAAK,qBAAqB,CAAE,IAAI,IAAI,CAAE;QAClD,IAAI,KAAK,eAAe,IAAI,IAAI;OACnC;AACD,UAAI,SAAS,QAAQ,MAAM,MAAM;AAAE,eAAO;;AAE1C,UAAIG;AACJ,UAAI,QAAQ;AACZ,UAAI;AACA,QAAAA,QAAO,MAAM,CAAC,EAAE,OAAO;AACvB,gBAAS,MAAM,CAAC,EAAE,UAAU;eACvBC,QAAO;MAAA;AAEhB,UAAID,OAAM;AACN,eAAO,CAAC,OAAO,mDAAmD,kBAAkB;UAChF,QAAQ;UACR,MAAAA;UACA,QAAQ;UACR,aAAa;UACb,YAAY;UACZ,QAAQ;;SACX;AACD,eAAOA;;AAGX,aAAO,OAAO,gCAAgC,YAAY,EAAE,OAAO,MAAK,CAAE;;AAG9E,WAAO,MAAM,MAAM,SAAS,GAAG;EACnC;EAEA,sBAAmB;AACf,WAAQ,KAAK,WAAWH;EAC5B;EAEA,OAAO,WAAW,SAAkB,QAAe;AAC/C,QAAI,UAAU,MAAM;AAAE,eAASA;;AAE/B,UAAM,UAAU,IAAI,aAAa,WAAaC,SAAQ,QAAQ,IAAI,CAAE,OAAQ,MAAO,EAAE;AACrF,YAAQ,YAAY;AAEpB,QAAI,WAAWD,gBAAe;AAC1B,cAAQ,YAAY,OAAOK,UAAS,UAAU,YAAW;AACrD,4BAAoB,SAAS;AAC7B,eAAO;MACX;;AAGJ,WAAO;EACX;;;;AC1IJ,SAAS,UAAU,MAAY;AAC3B,UAAQ,MAAM;IACV,KAAK;AAAW,aAAO;IACvB,KAAK;AAAY,aAAO;IACxB,KAAK;AAAO,aAAO;IACnB,KAAK;AAAS,aAAO;;AAGzB,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAEA,SAASC,SAAQ,MAAY;AACzB,UAAO,MAAM;IACT,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;;AAGf,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAWM,IAAO,qBAAP,MAAO,4BAA2B,gBAAe;;;;EASnD,YAAYC,WAAuB,QAAsB;AACrD,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AAErC,QAAI,UAAU,MAAM;AAAE,eAAS,UAAU,QAAQ,IAAI;;AAErD,UAAM,UAAU,oBAAmB,WAAW,SAAS,MAAM;AAC7D,UAAM,SAAS,SAAS,EAAE,eAAe,QAAO,CAAE;AAZ7C;;;;AAcL,qBAAqC,MAAM,EAAE,OAAM,CAAE;EACzD;EAEA,aAAa,SAAe;AACxB,QAAI;AACA,aAAO,IAAI,oBAAmB,SAAS,KAAK,MAAM;aAC7C,OAAO;IAAA;AAChB,WAAO,MAAM,aAAa,OAAO;EACrC;EAEA,sBAAmB;AACf,WAAQ,KAAK,WAAW,UAAU,KAAK,SAAS,IAAI;EACxD;;;;;EAMA,OAAO,WAAW,SAAkB,QAAsB;AACtD,QAAI,UAAU,MAAM;AAAE,eAAS,UAAU,QAAQ,IAAI;;AAErD,UAAM,UAAU,IAAI,aAAa,WAAaD,SAAQ,QAAQ,IAAI,CAAE,IAAK,MAAO,EAAE;AAClF,YAAQ,YAAY;AAEpB,QAAI,WAAW,UAAU,QAAQ,IAAI,GAAG;AACpC,cAAQ,YAAY,OAAOE,UAAS,UAAU,YAAW;AACrD,4BAAoB,oBAAoB;AACxC,eAAO;MACX;;AAGJ,WAAO;EACX;;;;AC/FE,IAAO,qBAAP,cAAkC,gBAAe;EACnD,YAAYC,WAAqB;AAC7B,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,mBAAe,QAAQ,SAAS,WAAW,uBAAuB,WAAWA,SAAQ;AACrF,UAAM,+BAAgC,SAAS,EAAE,eAAe,QAAO,CAAE;EAC7E;;;;AC0BJ,IAAM,WAAW;AAEjB,SAASC,WAAmB,OAAU;AAClC,SAAQ,SAAS,OAAO,MAAM,SAAU;AAC5C;AAyBA,IAAM,oBAAoB;AAQpB,IAAO,kBAAP,MAAO,yBAAwB,cAAa;;;;;EAU9C,YAAY,SAAe;AACvB,UAAM,iBAAiB;AAPlB;;;;AAQL,qBAAkC,MAAM,EAAE,QAAO,CAAE;EACvD;EAEA,QAAK;AACD,WAAO,IAAI,iBAAgB,KAAK,OAAO;EAC3C;;AAGJ,IAAM,WAAW,CAAE,gBAAgB;AAEnC,IAAI,SAAS;AA3Gb;AAuHM,IAAO,oBAAP,cAAiC,iBAAgB;;;;EAiBnD,YAAYC,WAAuB,SAAgB;AAC/C,UAAM,SAAU,WAAW,OAAQ,UAAS;AAE5C,UAAK;AAfA;;;;AAKA;;;;AAEA;AAUL,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AAErC,uBAAK,SAAU,QAAQ,UAA2B,iBAAiB;AAEnE,qBAAoC,MAAM,EAAE,QAAQ,QAAO,CAAE;AAG7D,SAAK,WAAU;EACnB;;;;;;;;EASA,aAAU;AACN,QAAI,mBAAK,UAAS;AAAE,aAAO,mBAAK,SAAQ;;AAExC,YAAO,KAAK,QAAQ,MAAM;MACtB,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MAEX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACZ,KAAK;AACA,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MACX,KAAK;AACD,eAAO;MAEX;;AAGJ,mBAAe,OAAO,uBAAuB,WAAW,KAAK,OAAO;EACxE;;;;EAKA,OAAOC,SAAgB,QAA8B;AACjD,UAAM,QAAQ,OAAO,KAAK,MAAM,EAAE,OAAO,CAAC,OAAO,QAAO;AACpD,YAAM,QAAQ,OAAO,GAAG;AACxB,UAAI,SAAS,MAAM;AACf,iBAAS,IAAK,GAAI,IAAK,KAAM;;AAEjC,aAAO;IACX,GAAG,EAAE;AACL,UAAM,SAAW,KAAK,SAAU,WAAY,KAAK,MAAO,KAAI;AAC5D,WAAO,GAAI,KAAK,WAAU,CAAG,eAAgBA,OAAO,GAAI,KAAM,GAAI,MAAO;EAC7E;;;;EAKA,aAAU;AACN,WAAO,GAAI,KAAK,WAAU,CAAG;EACjC;;;;EAKA,YAAYA,SAAgB,QAA2B;AACnD,WAAO,SAASA;AAChB,WAAO,SAAS,KAAK;AACrB,WAAO;EACX;EAEA,MAAM,gBAAa;AACf,WAAO,KAAK;EAChB;;;;;;EAOA,MAAM,MAAMA,SAAgB,QAA6B,MAAc;AACnE,UAAMC,MAAK;AAEX,UAAM,MAAO,OAAO,KAAK,WAAU,IAAI,KAAK,OAAOD,SAAQ,MAAM;AACjE,UAAM,UAAW,OAAO,KAAK,YAAYA,SAAQ,MAAM,IAAG;AAE1D,SAAK,KAAK,SAAS,EAAE,QAAQ,eAAe,IAAAC,KAAI,KAAK,QAAgB,CAAE;AAEvE,UAAM,UAAU,IAAI,aAAa,GAAG;AACpC,YAAQ,kBAAkB,EAAE,cAAc,IAAI,CAAE;AAChD,YAAQ,YAAY,CAAC,KAAK,MAAM,YAAmB;AAC/C,UAAI,KAAK,oBAAmB,GAAI;AAC5B,4BAAoB,WAAW;;AAEnC,aAAO,QAAQ,QAAQ,IAAI;IAC/B;AACA,YAAQ,cAAc,OAAOC,UAASC,cAAY;AAC9C,YAAMC,UAASD,UAAS,QAAO,IAAK,KAAK,MAAM,aAAaA,UAAS,IAAI,CAAC,IAAG,CAAA;AAC7E,YAAM,YAAa,OAAOC,QAAO,WAAY,WAAYA,QAAO,SAAQ,IAAI,YAAW,EAAG,QAAQ,YAAY,KAAK;AACnH,UAAIJ,YAAW,SAAS;AAEpB,YAAII,WAAUA,QAAO,UAAU,KAAKA,QAAO,WAAW,WAAW,UAAU;AACvE,eAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAH,KAAI,QAAQ,eAAe,OAAOG,QAAM,CAAE;AACvF,UAAAD,UAAS,mBAAmBC,QAAO,QAAQ,QAAQ;;aAEpD;AACH,YAAI,UAAU;AACV,eAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAH,KAAI,QAAQ,eAAe,OAAOG,QAAO,OAAM,CAAE;AAC9F,UAAAD,UAAS,mBAAmBC,QAAO,QAAQ,QAAQ;;;AAG3D,aAAOD;IACX;AAEA,QAAI,SAAS;AACT,cAAQ,UAAU,gBAAgB,kDAAkD;AACpF,cAAQ,OAAO,OAAO,KAAK,OAAO,EAAE,IAAI,CAAC,MAAM,GAAI,CAAE,IAAK,QAAQ,CAAC,CAAE,EAAE,EAAE,KAAK,GAAG;;AAGrF,UAAM,WAAW,MAAM,QAAQ,KAAI;AACnC,QAAI;AACA,eAAS,SAAQ;aACZ,OAAO;AACZ,WAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAF,KAAI,OAAO,QAAQ,WAAU,CAAE;AAC5E,aAAO,OAAO,kBAAkB,gBAAgB,EAAE,SAAS,SAAQ,CAAE;;AAGzE,QAAI,CAAC,SAAS,QAAO,GAAI;AACrB,WAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAA,KAAI,OAAO,gBAAgB,QAAQ,YAAW,CAAE;AAC7F,aAAO,OAAO,oBAAoB,gBAAgB,EAAE,SAAS,SAAQ,CAAE;;AAG3E,UAAM,SAAS,KAAK,MAAM,aAAa,SAAS,IAAI,CAAC;AACrD,QAAID,YAAW,SAAS;AACpB,UAAI,OAAO,WAAW,OAAO;AACzB,aAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAC,KAAI,QAAQ,QAAQ,mBAAkB,CAAE;AACrF,eAAO,OAAO,qDAAqD,gBAAgB,EAAE,SAAS,UAAU,MAAM,EAAE,OAAM,EAAE,CAAE;;AAG9H,UAAI,OAAO,OAAO;AACd,aAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAA,KAAI,QAAQ,QAAQ,iBAAgB,CAAE;AACnF,eAAO,OAAO,kBAAkB,gBAAgB,EAAE,SAAS,UAAU,MAAM,EAAE,OAAM,EAAE,CAAE;;AAG3F,WAAK,KAAK,SAAS,EAAE,QAAQ,kBAAkB,IAAAA,KAAI,OAAM,CAAE;AAE3D,aAAO,OAAO;WAEX;AAEH,UAAI,OAAO,UAAU,MAAM,OAAO,YAAY,sBAAsB,OAAO,YAAY,0BAA0B;AAC7G,aAAK,KAAK,SAAS,EAAE,QAAQ,kBAAkB,IAAAA,KAAI,OAAM,CAAE;AAC3D,eAAO,OAAO;;AAGlB,UAAI,OAAO,UAAU,KAAM,OAAO,OAAO,YAAa,YAAY,CAAC,OAAO,QAAQ,MAAM,KAAK,GAAI;AAC7F,aAAK,KAAK,SAAS,EAAE,QAAQ,gBAAgB,IAAAA,KAAI,OAAM,CAAE;AACzD,eAAO,OAAO,kBAAkB,gBAAgB,EAAE,SAAS,UAAU,MAAM,EAAE,OAAM,EAAE,CAAE;;AAG3F,WAAK,KAAK,SAAS,EAAE,QAAQ,kBAAkB,IAAAA,KAAI,OAAM,CAAE;AAE3D,aAAO,OAAO;;EAEtB;;;;EAKA,wBAAwB,aAA+B;AACnD,UAAM,SAAiC,CAAA;AACvC,aAAS,OAAO,aAAa;AACzB,UAAI,SAAS,QAAQ,GAAG,KAAK,GAAG;AAAE;;AAElC,UAAU,YAAa,GAAG,KAAK,MAAM;AAAE;;AACvC,UAAI,QAAc,YAAa,GAAG;AAClC,UAAI,QAAQ,UAAU,UAAU,GAAG;AAAE;;AACrC,UAAI,QAAQ,cAAc,UAAU,UAAU;AAAE;;AAGhD,UAAU,EAAE,MAAM,MAAM,UAAU,MAAM,UAAU,MAAM,aAAa,MAAM,sBAAsB,MAAM,OAAO,MAAM,OAAO,KAAI,EAAI,GAAG,GAAG;AACrI,gBAAQ,WAAW,KAAK;iBAEjB,QAAQ,cAAc;AAC7B,gBAAQ,MAAM,cAAc,KAAK,EAAE,IAAI,CAAC,QAAO;AAC3C,iBAAO,aAAc,IAAI,OAAQ,mBAAoB,IAAI,YAAY,KAAK,KAAK,CAAE;QACrF,CAAC,EAAE,KAAK,GAAG,IAAI;iBAER,QAAQ,uBAAuB;AACtC,YAAI,MAAM,WAAW,GAAG;AAAE;;AAG1B,eAAO,OAAO,sDAAsD,yBAAyB;UACzF,WAAW;UACX,MAAM,EAAE,YAAW;SACtB;aAEE;AACH,gBAAQ,QAAQ,KAAK;;AAEzB,aAAO,GAAG,IAAI;;AAElB,WAAO;EACX;;;;EAKA,YAAY,KAA2B,OAAc,aAAgB;AAGjE,QAAI,UAAU;AACd,QAAI,QAAQ,OAAO,cAAc,GAAG;AAEhC,UAAI;AACA,kBAAgB,MAAO,KAAK,OAAO,MAAM;eACpC,GAAG;MAAA;AAEZ,UAAI,CAAC,SAAS;AACV,YAAI;AACA,oBAAgB,MAAO,KAAK;iBACvB,GAAG;QAAA;;;AAIpB,QAAI,IAAI,WAAW,eAAe;AAC9B,UAAI,CAAC,QAAQ,MAAM,SAAS,KAAK,QAAQ,MAAM,qBAAqB,GAAG;AACnE,eAAO,OAAO,sBAAsB,sBAAsB;UACtD,aAAa,IAAI;SACpB;;;AAIT,QAAI,IAAI,WAAW,UAAU,IAAI,WAAW,eAAe;AACvD,UAAI,QAAQ,MAAM,qBAAqB,GAAG;AACtC,YAAII,QAAO;AACX,YAAI;AACA,UAAAA,QAAa,MAAO,KAAK,OAAO,MAAM;iBACjCC,QAAO;QAAA;AAEhB,cAAM,IAAI,SAAS,wBAAwB,IAAI,QAAa,IAAI,aAAaD,KAAI;AACjF,UAAE,OAAO,EAAE,SAAS,KAAK,MAAK;AAC9B,cAAM;;;AAId,QAAI,SAAS;AACT,UAAI,IAAI,WAAW,wBAAwB;AACvC,cAAME,eAAc,YAAY,KAAK,IAAI,iBAAiB;AAC1D,YAAI,QAAQ,MAAM,cAAc,KAAK,QAAQ,MAAM,cAAc,GAAG;AAChE,iBAAO,OAAO,2BAA2B,2BAA2B;YAChE,aAAAA;WACH;;AAGL,YAAI,QAAQ,MAAM,oBAAoB,GAAG;AACrC,iBAAO,OAAO,qDAAqD,sBAAsB;YACtF,aAAAA;WACF;;AAGL,YAAI,QAAQ,MAAM,2EAA2E,GAAG;AAC5F,iBAAO,OAAO,+BAA+B,iBAAiB;YAC3D,aAAAA;WACF;;;;AAMb,UAAM;EACV;EAEA,MAAM,iBAAc;AAChB,WAAO,KAAK;EAChB;EAEA,MAAM,SAAS,KAAyB;AACpC,YAAQ,IAAI,QAAQ;MAChB,KAAK;AACD,eAAO,KAAK,QAAQ;MAExB,KAAK;AACD,eAAO,KAAK,MAAM,SAAS,EAAE,QAAQ,kBAAiB,CAAE;MAE5D,KAAK;AACD,eAAO,KAAK,MAAM,SAAS,EAAE,QAAQ,eAAc,CAAE;MAEzD,KAAK;AAED,YAAI,KAAK,QAAQ,SAAS,WAAW;AACjC,iBAAO;mBACA,KAAK,QAAQ,SAAS,YAAY;AACzC,iBAAO;eACJ;AACH,gBAAM,IAAI,MAAM,4CAA4C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8BpE,KAAK;AAED,eAAO,KAAK,MAAM,WAAW;UACzB,QAAQ;UACR,SAAS,IAAI;UACb,KAAK,IAAI;SACZ;MAEN,KAAK;AACA,eAAO,KAAK,MAAM,SAAS;UACvB,QAAQ;UACR,SAAS,IAAI;UACb,KAAK,IAAI;SACZ;MAEL,KAAK;AACD,eAAO,KAAK,MAAM,SAAS;UACvB,QAAQ;UACR,SAAS,IAAI;UACb,KAAK,IAAI;SACZ;MAEL,KAAK;AACD,eAAO,KAAK,MAAM,SAAS;UACvB,QAAQ;UACR,SAAS,IAAI;UACb,UAAU,IAAI;UACd,KAAK,IAAI;SACZ;MAEL,KAAK;AACD,eAAO,KAAK,MAAM,SAAS;UACvB,QAAQ;UACR,KAAK,IAAI;WACV,IAAI,EAAE,MAAM,CAAC,UAAS;AACrB,iBAAO,KAAK,YAAY,KAAY,OAAO,IAAI,iBAAiB;QACpE,CAAC;MAEL,KAAK;AACD,YAAI,cAAc,KAAK;AACnB,iBAAO,KAAK,MAAM,SAAS;YACvB,QAAQ;YACR,KAAK,IAAI;YACT,SAAU,IAAI,sBAAsB,SAAQ;WAC/C;;AAGL,eAAO,OAAO,oDAAoD,yBAAyB;UACvF,WAAW;SACd;MAEL,KAAK;AACD,eAAO,KAAK,MAAM,SAAS;UACvB,QAAQ;UACR,QAAQ,IAAI;SACf;MAEL,KAAK;AACD,eAAO,KAAK,MAAM,SAAS;UACvB,QAAQ;UACR,QAAQ,IAAI;SACf;MAEL,KAAK,QAAQ;AACT,YAAI,IAAI,aAAa,UAAU;AAC3B,gBAAM,IAAI,MAAM,sDAAsD;;AAG1E,cAAM,WAAW,KAAK,wBAAwB,IAAI,WAAW;AAC7D,iBAAS,SAAS;AAClB,iBAAS,SAAS;AAElB,YAAI;AACA,iBAAO,MAAM,KAAK,MAAM,SAAS,UAAU,IAAI;iBAC1C,OAAO;AACZ,iBAAO,KAAK,YAAY,KAAY,OAAO,IAAI,WAAW;;;MAIlE,KAAK,eAAe;AAChB,cAAM,WAAW,KAAK,wBAAwB,IAAI,WAAW;AAC7D,iBAAS,SAAS;AAClB,iBAAS,SAAS;AAElB,YAAI;AACA,iBAAO,MAAM,KAAK,MAAM,SAAS,UAAU,IAAI;iBAC1C,OAAO;AACZ,iBAAO,KAAK,YAAY,KAAY,OAAO,IAAI,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwDlE;AACI;;AAGR,WAAO,MAAM,SAAS,GAAG;EAC7B;EAEA,MAAM,aAAU;AACZ,WAAO,KAAK;EAChB;;;;;;EAOA,MAAM,gBAAa;AACf,QAAI,KAAK,QAAQ,SAAS,WAAW;AAAE,aAAO;;AAC9C,WAAO,YAAY,MAAM,KAAK,MAAM,SAAS,EAAE,QAAQ,WAAU,CAAE,GAAG,MAAM;EAChF;;;;;EAMA,MAAM,YAAY,UAAgB;AAC9B,QAAI,UAAU,KAAK,YAAY,QAAQ;AACvC,QAAIT,WAAU,OAAO,GAAG;AAAE,gBAAU,MAAM;;AAE1C,QAAI;AACA,YAAM,OAAO,MAAM,KAAK,MAAM,YAAY;QAC1C,QAAQ;QAAU;OAAS;AAC3B,YAAM,MAAM,KAAK,MAAM,IAAI;AAC3B,aAAO,IAAI,SAAS,SAAS,KAAK,IAAI;aACjC,OAAO;AACZ,aAAO;;EAEf;EAEA,sBAAmB;AACf,WAAQ,KAAK,UAAU;EAC3B;;AA1hBS;;;ACnIb,oBAAkC;AAClC,sBAAqB;AACrB,oBAAmB;AACnB,uBAAsB;AACtB,8BAA4B;;;ACJ5B,IAAAU,YAAAC,UAAA;AAmCM,IAAO,mBAAP,MAAuB;;;;;EAmBzB,YAAY,UAA0B,QAAkB;AAlBxD,uBAAAD;AAEA,uBAAAC;AAOA;AACA;AAEA;AAOI,uBAAKD,YAAY;AACjB,uBAAKC,UAAU,KAAK,UAAU,MAAM;AACpC,uBAAK,WAAY;AACjB,uBAAK,SAAU;AACf,uBAAK,cAAe;EACxB;;;;EAjBA,IAAI,SAAM;AAAiB,WAAO,KAAK,MAAM,mBAAKA,SAAO;EAAG;EAmB5D,QAAK;AACD,uBAAK,WAAY,mBAAKD,YAAU,KAAK,iBAAiB,KAAK,MAAM,EAAE,KAAK,CAAC,aAAY;AAAE;AACnF,yBAAKA,YAAU,UAAU,UAAU,IAAI;AACvC,aAAO;IACX,CAAC;EACL;EAEA,OAAI;AACkB,IAAC,mBAAK,WAAY,KAAK,CAAC,aAAY;AAClD,UAAI,mBAAKA,YAAU,WAAW;AAAE;;AAChC,yBAAKA,YAAU,KAAK,mBAAmB,CAAE,QAAQ,CAAE;IACvD,CAAC;AACD,uBAAK,WAAY;EACrB;;;EAIA,MAAM,iBAAyB;AAC3B,WAAO,iBAAiB,oEACpB,yBAAyB,EAAE,WAAW,eAAc,CAAE;AAC1D,uBAAK,SAAU,CAAC,CAAC;EACrB;EAEA,SAAM;AACF,uBAAK,SAAU;EACnB;;;;EAKA,eAAe,SAAY;AACvB,QAAI,mBAAK,cAAa,MAAM;AAAE;;AAC9B,QAAI,mBAAK,aAAY,MAAM;AACvB,UAAI,cAAoC,mBAAK;AAC7C,UAAI,eAAe,MAAM;AACrB,sBAAc,KAAK,MAAM,mBAAKA,aAAW,OAAO;aAC7C;AACH,sBAAc,YAAY,KAAK,YAAW;AACtC,gBAAM,KAAK,MAAM,mBAAKA,aAAW,OAAO;QAC5C,CAAC;;AAEL,yBAAK,cAAe,YAAY,KAAK,MAAK;AACtC,YAAI,mBAAK,kBAAiB,aAAa;AACnC,6BAAK,cAAe;;MAE5B,CAAC;;EAET;;;;;EAMA,MAAM,MAAM,UAA0B,SAAY;AAC9C,UAAM,IAAI,MAAM,yCAAyC;EAC7D;;AAjFAA,aAAA;AAEAC,WAAA;AAOA;AACA;AAEA;AA4EE,IAAO,wBAAP,cAAqC,iBAAgB;;;;EAIvD,YAAY,UAAwB;AAChC,UAAM,UAAU,CAAE,UAAU,CAAE;EAClC;EAEA,MAAM,MAAM,UAA0B,SAAY;AAC9C,aAAS,KAAK,SAAS,SAAS,QAAQ,MAAM,CAAC;EACnD;;AAOE,IAAO,0BAAP,cAAuC,iBAAgB;;;;EAKzD,YAAY,UAAwB;AAChC,UAAM,UAAU,CAAE,wBAAwB,CAAE;EAChD;EAEA,MAAM,MAAM,UAA0B,SAAY;AAC9C,aAAS,KAAK,WAAW,OAAO;EACpC;;AAxJJ;AA8JM,IAAO,wBAAP,cAAqC,iBAAgB;;;;EAWvD,YAAY,UAA0B,QAAmB;AACrD,UAAM,UAAU,CAAE,QAAQ,MAAM,CAAE;AAXtC;AAYI,uBAAK,YAAa,KAAK,UAAU,MAAM;EAC3C;;;;EARA,IAAI,YAAS;AAAkB,WAAO,KAAK,MAAM,mBAAK,WAAU;EAAG;EAUnE,MAAM,MAAM,UAA0B,SAAY;AAC9C,aAAS,KAAK,KAAK,WAAW,SAAS,SAAS,SAAS,SAAS,QAAQ,CAAC;EAC/E;;AAjBA;AA/JJ,gBAAAC,QAAA;AAwLM,IAAO,iBAAP,cAA8B,mBAAkB;;;;;;EAelD,YAAY,SAAsBC,WAAoC;AAElE,UAAM,UAAU,OAAO,OAAO,CAAA,GAAMA,aAAY,OAAQA,YAAU,CAAA,CAAG;AAKrE,mBAAe,QAAQ,iBAAiB,QAAQ,QAAQ,kBAAkB,GACtE,kDAAkD,yBAAyBA,SAAQ;AACvF,YAAQ,gBAAgB;AAKxB,QAAI,QAAQ,iBAAiB,MAAM;AAAE,cAAQ,gBAAgB;;AAE7D,UAAM,SAAS,OAAO;AA9B1B;AAGA;uBAAAD;AAIA;;;AAwBI,uBAAK,YAAa,oBAAI,IAAG;AACzB,uBAAKA,QAAQ,oBAAI,IAAG;AACpB,uBAAK,UAAW,oBAAI,IAAG;EAC3B;;;;;;;;;;EAYA,eAAe,KAAiB;AAC5B,YAAQ,IAAI,MAAM;MACd,KAAK;AACD,eAAO,IAAI,oBAAoB,OAAO;MAC1C,KAAK;AACD,eAAO,IAAI,sBAAsB,IAAI;MACzC,KAAK;AACD,eAAO,IAAI,wBAAwB,IAAI;MAC3C,KAAK;AACD,eAAO,IAAI,sBAAsB,MAAM,IAAI,MAAM;MACrD,KAAK;AAGD,YAAI,IAAI,OAAO,WAAW,YAAY;AAClC,iBAAO,IAAI,oBAAoB,UAAU;;;AAGrD,WAAO,MAAM,eAAe,GAAG;EACnC;;;;;EAMA,UAAU,UAA2B,YAA4B;AAC7D,uBAAKA,QAAM,IAAI,UAAU,UAAU;AACnC,UAAM,UAAU,mBAAK,UAAS,IAAI,QAAQ;AAC1C,QAAI,SAAS;AACT,iBAAW,WAAW,SAAS;AAC3B,mBAAW,eAAe,OAAO;;AAErC,yBAAK,UAAS,OAAO,QAAQ;;EAErC;EAEA,MAAM,MAAM,SAA+C;AAEvD,mBAAe,CAAC,MAAM,QAAQ,OAAO,GAAG,yCAAyC,WAAW,OAAO;AAKnG,UAAM,UAAU,IAAI,QAAQ,CAAC,SAAS,WAAU;AAC5C,yBAAK,YAAW,IAAI,QAAQ,IAAI,EAAE,SAAS,SAAS,OAAM,CAAE;IAChE,CAAC;AAGD,UAAM,KAAK,gBAAe;AAG1B,UAAM,KAAK,OAAO,KAAK,UAAU,OAAO,CAAC;AAEzC,WAA4C,CAAE,MAAM,OAAO;EAC/D;;;;;;;;;;;;;;;;;;;EAqBA,MAAM,gBAAgB,SAAe;AACjC,UAAM,SAA8D,KAAK,MAAM,OAAO;AAEtF,QAAI,UAAU,OAAO,WAAY,YAAY,QAAQ,QAAQ;AACzD,YAAM,WAAW,mBAAK,YAAW,IAAI,OAAO,EAAE;AAC9C,UAAI,YAAY,MAAM;AAClB,aAAK,KAAK,SAAS,UAAU,kCAAkC,iBAAiB;UAC5E,YAAY;UACZ;SACH,CAAC;AACF;;AAEJ,yBAAK,YAAW,OAAO,OAAO,EAAE;AAEhC,eAAS,QAAQ,MAAM;eAEhB,UAAU,OAAO,WAAW,oBAAoB;AACvD,YAAM,WAAW,OAAO,OAAO;AAC/B,YAAM,aAAa,mBAAKA,QAAM,IAAI,QAAQ;AAC1C,UAAI,YAAY;AACZ,mBAAW,eAAe,OAAO,OAAO,MAAM;aAC3C;AACH,YAAI,UAAU,mBAAK,UAAS,IAAI,QAAQ;AACxC,YAAI,WAAW,MAAM;AACjB,oBAAU,CAAA;AACV,6BAAK,UAAS,IAAI,UAAU,OAAO;;AAEvC,gBAAQ,KAAK,OAAO,OAAO,MAAM;;WAGlC;AACH,WAAK,KAAK,SAAS,UAAU,+BAA+B,iBAAiB;QACzE,YAAY;QACZ;OACH,CAAC;AACF;;EAER;;;;;EAMA,MAAM,OAAO,SAAe;AACxB,UAAM,IAAI,MAAM,gCAAgC;EACpD;;AArKA;AAGAA,SAAA;AAIA;;;AC9LJ,IAAAE,WAAA;AAqCM,IAAO,oBAAP,cAAiC,eAAc;EASjD,YAAY,KAAgD,SAAsB,SAAmC;AACjH,UAAM,SAAS,OAAO;AAT1B,uBAAAA;AAEA;AAQI,QAAI,OAAO,QAAS,UAAU;AAC1B,yBAAKA,WAAW,MAAK;AAAG,eAAO,IAAI,iBAAAC,QAAW,GAAG;MAAG;AACpD,yBAAK,YAAa,mBAAKD,WAAL;eACX,OAAO,QAAS,YAAY;AACnC,yBAAKA,WAAW;AAChB,yBAAK,YAAa,IAAG;WAClB;AACH,yBAAKA,WAAW;AAChB,yBAAK,YAAa;;AAGtB,SAAK,UAAU,SAAS,YAAW;AAC/B,UAAI;AACA,cAAM,KAAK,OAAM;AACjB,aAAK,OAAM;eACN,OAAO;AACZ,gBAAQ,IAAI,qCAAqC,KAAK;;IAG9D;AAEA,SAAK,UAAU,YAAY,CAAC,YAA6B;AACrD,WAAK,gBAAgB,QAAQ,IAAI;IACrC;EAgBJ;EA9CA,IAAI,YAAS;AACT,QAAI,mBAAK,eAAc,MAAM;AAAE,YAAM,IAAI,MAAM,kBAAkB;;AACjE,WAAO,mBAAK;EAChB;EA6CA,MAAM,OAAO,SAAe;AACxB,SAAK,UAAU,KAAK,OAAO;EAC/B;EAEA,MAAM,UAAO;AACT,QAAI,mBAAK,eAAc,MAAM;AACzB,yBAAK,YAAW,MAAK;AACrB,yBAAK,YAAa;;AAEtB,UAAM,QAAO;EACjB;;AA7DAA,YAAA;AAEA;;;ACCJ,IAAM,mBAAmB;AAEzB,SAASE,SAAQ,MAAY;AACzB,UAAO,MAAM;IACT,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IAEX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;;AAGf,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAWM,IAAO,0BAAP,cAAuC,kBAAiB;;;;EAkB1D,YAAY,SAAsB,WAAkB;AAChD,UAAM,WAAW,IAAI,eAAe,SAAS,SAAS;AAEtD,UAAM,MAAM,SAAS,eAAc;AACnC,WAAO,CAAC,IAAI,aAAa,gDACrB,yBAAyB,EAAE,WAAW,wCAAuC,CAAE;AAEnF,UAAM,MAAM,IAAI,IAAI,QAAQ,UAAU,IAAI,EAAE,QAAQ,QAAQ,SAAS;AACrE,UAAM,KAAK,SAAS,QAAQ;AArBvB;;;;AAQA;;;;;;;AAeL,qBAA0C,MAAM;MAC5C,WAAW,SAAS;MACpB,eAAe,SAAS;KAC3B;EACL;EAEA,sBAAmB;AACf,WAAQ,KAAK,cAAc;EAC/B;;AAYE,IAAO,iBAAP,MAAO,wBAAuB,gBAAe;;;;EAiB/C,YAAYC,WAAuB,WAA2B,eAA6B;AACvF,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,QAAI,aAAa,MAAM;AAAE,kBAAY;;AACrC,QAAI,iBAAiB,MAAM;AAAE,sBAAgB;;AAE7C,UAAM,UAAU,gBAAe,WAAW,SAAS,WAAW,aAAa;AAC3E,UAAM,SAAS,SAAS,EAAE,eAAe,QAAO,CAAE;AApB7C;;;;AAQA;;;;;;;AAcL,qBAAiC,MAAM,EAAE,WAAW,cAAa,CAAE;EACvE;EAEA,aAAa,SAAe;AACxB,QAAI;AACA,aAAO,IAAI,gBAAe,SAAS,KAAK,WAAW,KAAK,aAAa;aAChE,OAAO;IAAA;AAChB,WAAO,MAAM,aAAa,OAAO;EACrC;EAEA,sBAAmB;AACf,WAAQ,KAAK,cAAc;EAC/B;;;;EAKA,OAAO,qBAAqB,SAAsB,WAAkB;AAChE,WAAO,IAAI,wBAAwB,SAAS,SAAS;EACzD;;;;;EAMA,OAAO,WAAW,SAAkB,WAA2B,eAA6B;AACxF,QAAI,aAAa,MAAM;AAAE,kBAAY;;AACrC,QAAI,iBAAiB,MAAM;AAAE,sBAAgB;;AAE7C,UAAM,UAAU,IAAI,aAAa,WAAaD,SAAQ,QAAQ,IAAI,CAAE,OAAQ,SAAU,EAAE;AACxF,YAAQ,YAAY;AACpB,QAAI,eAAe;AAAE,cAAQ,eAAe,IAAI,aAAa;;AAE7D,QAAI,cAAc,kBAAkB;AAChC,cAAQ,YAAY,OAAOE,UAAS,UAAU,YAAW;AACrD,4BAAoB,gBAAgB;AACpC,eAAO;MACX;;AAGJ,WAAO;EACX;;;;ACjLJ,IAAM,eAAe;AAErB,SAASC,SAAQ,MAAY;AACzB,UAAO,MAAM;IACT,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IAEX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;;AAGf,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAyCM,IAAO,oBAAP,MAAO,2BAA0B,gBAAe;;;;EASlD,YAAYC,WAAuB,OAAqB;AACpD,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,QAAI,SAAS,MAAM;AAAE,cAAQ;;AAE7B,UAAM,UAAU,mBAAkB,WAAW,SAAS,KAAK;AAC3D,UAAM,SAAS,SAAS,EAAE,eAAe,QAAO,CAAE;AAX7C;;;;AAaL,qBAAoC,MAAM,EAAE,MAAK,CAAE;EACvD;EAEA,aAAa,SAAe;AACxB,QAAI;AACA,aAAO,IAAI,mBAAkB,SAAS,KAAK,KAAK;aAC3C,OAAO;IAAA;AAChB,WAAO,MAAM,aAAa,OAAO;EACrC;EAEA,sBAAmB;AACf,WAAQ,KAAK,UAAU;EAC3B;;;;;EAMA,OAAO,WAAW,SAAkB,OAAqB;AACrD,QAAI,SAAS,MAAM;AAAE,cAAQ;;AAE7B,UAAM,UAAU,IAAI,aAAa,WAAaD,SAAQ,QAAQ,IAAI,CAAE,IAAK,KAAM,EAAE;AACjF,YAAQ,YAAY;AAGpB,QAAI,UAAU,cAAc;AACxB,cAAQ,YAAY,OAAOE,UAAS,UAAU,YAAW;AACrD,4BAAoB,mBAAmB;AACvC,eAAO;MACX;;AAGJ,WAAO;EACX;;;;AC/JJ,IAAMC,QAAO,OAAO,GAAG;AACvB,IAAMC,QAAO,OAAO,GAAG;AAEvB,SAAS,QAAiB,OAAe;AACrC,WAAS,IAAI,MAAM,SAAS,GAAG,IAAI,GAAG,KAAK;AACvC,UAAM,IAAI,KAAK,MAAM,KAAK,OAAM,KAAM,IAAI,EAAE;AAC5C,UAAM,MAAM,MAAM,CAAC;AACnB,UAAM,CAAC,IAAI,MAAM,CAAC;AAClB,UAAM,CAAC,IAAI;;AAEnB;AAEA,SAASC,OAAM,UAAgB;AAC3B,SAAO,IAAI,QAAQ,CAAC,YAAW;AAAG,eAAW,SAAS,QAAQ;EAAG,CAAC;AACtE;AAEA,SAASC,WAAO;AAAa,UAAQ,oBAAI,KAAI,GAAI,QAAO;AAAI;AAE5D,SAASC,WAAU,OAAU;AACzB,SAAO,KAAK,UAAU,OAAO,CAAC,KAAKC,WAAS;AACxC,QAAI,OAAOA,WAAW,UAAU;AAC5B,aAAO,EAAE,MAAM,UAAU,OAAOA,OAAM,SAAQ,EAAE;;AAEpD,WAAOA;EACX,CAAC;AACL;AA+BA,IAAM,gBAAgB,EAAE,cAAc,KAAK,UAAU,GAAG,QAAQ,EAAC;AA0DjE,IAAM,eAAe;EACjB,aAAa;EAAI,UAAU;EAAG,eAAe;EAAG,gBAAgB;EAChE,WAAW;EAAI,mBAAmB;EAAG,iBAAiB;EAAG,OAAO;EAChE,UAAU;EAAM,eAAe;EAAM,YAAY;EACjD,iBAAiB;EAAM,0BAA0B;;AAIrD,eAAe,YAAY,QAAgB,aAAmB;AAC1D,SAAO,OAAO,cAAc,KAAK,OAAO,cAAc,aAAa;AAC/D,QAAI,CAAC,OAAO,eAAe;AACvB,aAAO,iBAAiB,YAAW;AAC/B,YAAI;AACA,gBAAMC,eAAc,MAAM,OAAO,SAAS,eAAc;AACxD,cAAIA,eAAc,OAAO,aAAa;AAClC,mBAAO,cAAcA;;iBAEpB,OAAY;AACjB,iBAAO,cAAc;AACrB,iBAAO,kBAAkB;AACzB,iBAAO,2BAA2BC,SAAO;;AAE7C,eAAO,gBAAgB;MAC3B,GAAE;;AAEN,UAAM,OAAO;AACb,WAAO;AACP,QAAI,OAAO,iBAAiB;AAAE;;;AAEtC;AAkCA,SAAS,WAAW,OAAU;AAC1B,MAAI,SAAS,MAAM;AAAE,WAAO;;AAE5B,MAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,WAAO,MAAO,MAAM,IAAI,UAAU,EAAG,KAAK,GAAG,IAAI;;AAGrD,MAAI,OAAO,UAAW,YAAY,OAAO,MAAM,WAAY,YAAY;AACnE,WAAO,WAAW,MAAM,OAAM,CAAE;;AAGpC,UAAQ,OAAO,OAAQ;IACnB,KAAK;IAAW,KAAK;AACjB,aAAO,MAAM,SAAQ;IACzB,KAAK;IAAU,KAAK;AAChB,aAAO,OAAO,KAAK,EAAE,SAAQ;IACjC,KAAK;AACD,aAAO,KAAK,UAAU,KAAK;IAC/B,KAAK,UAAU;AACX,YAAM,OAAO,OAAO,KAAK,KAAK;AAC9B,WAAK,KAAI;AACT,aAAO,MAAM,KAAK,IAAI,CAAC,MAAM,GAAI,KAAK,UAAU,CAAC,CAAE,IAAK,WAAW,MAAM,CAAC,CAAC,CAAE,EAAE,EAAE,KAAK,GAAG,IAAI;;;AAIrG,UAAQ,IAAI,uBAAuB,KAAK;AACxC,QAAM,IAAI,MAAM,QAAQ;AAC5B;AAEA,SAAS,gBAAgB,OAAmB;AAExC,MAAI,WAAW,OAAO;AAClB,UAAM,QAAQ,MAAM;AACpB,WAAO,EAAE,KAAK,WAAW,KAAK,GAAG,OAAO,MAAK;;AAGjD,QAAM,SAAS,MAAM;AACrB,SAAO,EAAE,KAAK,WAAW,MAAM,GAAG,OAAO,OAAM;AACnD;AAUA,SAAS,YAAY,QAAgB,SAA2B;AAC5D,QAAM,QAAqD,oBAAI,IAAG;AAClE,aAAW,EAAE,OAAO,KAAK,OAAM,KAAM,SAAS;AAC1C,UAAM,IAAI,MAAM,IAAI,GAAG,KAAK,EAAE,OAAO,QAAQ,EAAC;AAC9C,MAAE,UAAU;AACZ,UAAM,IAAI,KAAK,CAAC;;AAGpB,MAAI,OAA8C;AAElD,aAAW,KAAK,MAAM,OAAM,GAAI;AAC5B,QAAI,EAAE,UAAU,WAAW,CAAC,QAAQ,EAAE,SAAS,KAAK,SAAS;AACzD,aAAO;;;AAIf,MAAI,MAAM;AAAE,WAAO,KAAK;;AAExB,SAAO;AACX;AAEA,SAAS,UAAU,QAAgB,SAA2B;AAC1D,MAAI,eAAe;AAEnB,QAAM,WAA0D,oBAAI,IAAG;AACvE,MAAI,YAAqD;AAEzD,QAAM,SAAwB,CAAA;AAC9B,aAAW,EAAE,OAAO,KAAK,OAAM,KAAM,SAAS;AAC1C,QAAI,iBAAiB,OAAO;AACxB,YAAM,IAAI,SAAS,IAAI,GAAG,KAAK,EAAE,OAAO,QAAQ,EAAC;AACjD,QAAE,UAAU;AACZ,eAAS,IAAI,KAAK,CAAC;AAEnB,UAAI,aAAa,QAAQ,EAAE,SAAS,UAAU,QAAQ;AAAE,oBAAY;;WACjE;AACH,aAAO,KAAK,OAAO,KAAK,CAAC;AACzB,sBAAgB;;;AAIxB,MAAI,eAAe,QAAQ;AAEvB,QAAI,aAAa,UAAU,UAAU,QAAQ;AAAE,aAAO,UAAU;;AAGhE,WAAO;;AAIX,SAAO,KAAK,CAAC,GAAGC,OAAQ,IAAIA,KAAK,KAAKA,KAAI,IAAK,IAAG,CAAE;AAEpD,QAAM,MAAM,KAAK,MAAM,OAAO,SAAS,CAAC;AAGxC,MAAI,OAAO,SAAS,GAAG;AAAE,WAAO,OAAO,GAAG;;AAG1C,UAAQ,OAAO,MAAM,CAAC,IAAI,OAAO,GAAG,IAAIC,SAAQC;AACpD;AAEA,SAAS,aAAa,QAAgB,SAA2B;AAE7D,QAAM,SAAS,YAAY,QAAQ,OAAO;AAC1C,MAAI,WAAW,QAAW;AAAE,WAAO;;AAGnC,aAAW,KAAK,SAAS;AACrB,QAAI,EAAE,OAAO;AAAE,aAAO,EAAE;;;AAI5B,SAAO;AACX;AAEA,SAAS,aAAa,QAAgB,SAA2B;AAC7D,MAAI,WAAW,GAAG;AAAE,WAAO,UAAkB,UAAU,QAAQ,OAAO,GAAG,WAAW;;AAEpF,QAAM,QAAyD,oBAAI,IAAG;AACtE,QAAM,MAAM,CAAC,QAAgB,WAAkB;AAC3C,UAAM,IAAI,MAAM,IAAI,MAAM,KAAK,EAAE,QAAQ,QAAQ,EAAC;AAClD,MAAE,UAAU;AACZ,UAAM,IAAI,QAAQ,CAAC;EACvB;AAEA,aAAW,EAAE,QAAQ,MAAK,KAAM,SAAS;AACrC,UAAM,IAAI,UAAU,KAAK;AACzB,QAAI,IAAI,GAAG,MAAM;AACjB,QAAI,GAAG,MAAM;AACb,QAAI,IAAI,GAAG,MAAM;;AAGrB,MAAI,aAAa;AACjB,MAAI,aAAiC;AAErC,aAAW,EAAE,QAAQ,OAAM,KAAM,MAAM,OAAM,GAAI;AAI7C,QAAI,UAAU,WAAW,SAAS,cAAe,cAAc,QAAQ,WAAW,cAAc,SAAS,aAAc;AACnH,mBAAa;AACb,mBAAa;;;AAIrB,SAAO;AACX;AA3VA;AAoWM,IAAO,mBAAP,cAAgC,iBAAgB;;;;;;;;EA8BlD,YAAY,WAA6D,SAAsB,SAAiC;AAC5H,UAAM,SAAS,OAAO;AA/BxB;AAMO;;;;;AAKA;;;;AAKA;;;;AAEA;AAET;AACA;AAYI,uBAAK,UAAW,UAAU,IAAI,CAAC,MAAK;AAChC,UAAI,aAAa,kBAAkB;AAC/B,eAAO,OAAO,OAAO,EAAE,UAAU,EAAC,GAAI,eAAe,YAAY;aAC9D;AACH,eAAO,OAAO,OAAO,CAAA,GAAK,eAAe,GAAG,YAAY;;IAEhE,CAAC;AAED,uBAAK,SAAU;AACf,uBAAK,qBAAsB;AAE3B,QAAI,WAAW,QAAQ,UAAU,MAAM;AACnC,WAAK,SAAS,QAAQ;WACnB;AACH,WAAK,SAAS,KAAK,KAAK,mBAAK,UAAS,OAAO,CAAC,OAAO,WAAU;AAC3D,iBAAS,OAAO;AAChB,eAAO;MACX,GAAG,CAAC,IAAI,CAAC;;AAGb,SAAK,cAAc;AACnB,SAAK,eAAe;AAEpB,mBAAe,KAAK,UAAU,mBAAK,UAAS,OAAO,CAAC,GAAG,MAAO,IAAI,EAAE,QAAS,CAAC,GAC1E,iCAAiC,UAAU,KAAK,MAAM;EAC9D;EAEA,IAAI,kBAAe;AACf,WAAO,mBAAK,UAAS,IAAI,CAAC,MAAK;AAC3B,YAAM,SAAc,OAAO,OAAO,CAAA,GAAK,CAAC;AACxC,iBAAW,OAAO,QAAQ;AACtB,YAAI,IAAI,CAAC,MAAM,KAAK;AAAE,iBAAO,OAAO,GAAG;;;AAE3C,aAAO;IACX,CAAC;EACL;EAEA,MAAM,iBAAc;AAChB,WAAO,QAAQ,KAAK,UAAU,MAAM,KAAK,SAAS,EAAE,QAAQ,UAAS,CAAE,CAAC,CAAC;EAC7E;;;;;;;;EAUA,MAAM,kBAAkB,UAA4B,KAAyB;AACzE,YAAQ,IAAI,QAAQ;MAChB,KAAK;AACD,eAAO,MAAM,SAAS,qBAAqB,IAAI,iBAAiB;MACpE,KAAK;AACD,eAAO,MAAM,SAAS,KAAK,OAAO,OAAO,CAAA,GAAK,IAAI,aAAa,EAAE,UAAU,IAAI,SAAQ,CAAE,CAAC;MAC9F,KAAK;AACD,gBAAQ,MAAM,SAAS,WAAU,GAAI;MACzC,KAAK;AACD,eAAO,MAAM,SAAS,YAAY,IAAI,WAAW;MACrD,KAAK;AACD,eAAO,MAAM,SAAS,WAAW,IAAI,SAAS,IAAI,QAAQ;MAC9D,KAAK,YAAY;AACb,cAAM,QAAS,eAAe,MAAO,IAAI,YAAW,IAAI;AACxD,eAAO,MAAM,SAAS,SAAS,OAAO,IAAI,mBAAmB;;MAEjE,KAAK;AACD,eAAO,MAAM,SAAS,eAAc;MACxC,KAAK;AACD,eAAO,MAAM,SAAS,QAAQ,IAAI,SAAS,IAAI,QAAQ;MAC3D,KAAK;AACD,gBAAQ,MAAM,SAAS,WAAU,GAAI;MACzC,KAAK;AACD,gBAAQ,MAAM,SAAS,WAAU,GAAI;MACzC,KAAK;AACD,eAAO,MAAM,SAAS,QAAQ,IAAI,MAAM;MAC5C,KAAK;AACD,eAAO,MAAM,SAAS,WAAW,IAAI,SAAS,IAAI,UAAU,IAAI,QAAQ;MAC5E,KAAK;AACD,eAAO,MAAM,SAAS,eAAe,IAAI,IAAI;MACjD,KAAK;AACD,eAAO,MAAM,SAAS,oBAAoB,IAAI,SAAS,IAAI,QAAQ;MACvE,KAAK;AACD,eAAO,MAAM,SAAS,sBAAsB,IAAI,IAAI;MACxD,KAAK;AACD,eAAO,MAAM,SAAS,qBAAqB,IAAI,IAAI;;EAE/D;EAwOA,MAAM,SAAkB,KAAyB;AAI7C,QAAI,IAAI,WAAW,wBAAwB;AAGvC,YAAM,UAAqC,mBAAK,UAAS,IAAI,CAAC,MAAM,IAAI;AACxE,YAAM,aAAa,mBAAK,UAAS,IAAI,OAAO,EAAE,UAAU,OAAM,GAAI,UAAS;AACvE,YAAI;AACA,gBAAMC,UAAS,MAAM,SAAS,SAAS,GAAG;AAC1C,kBAAQ,KAAK,IAAI,OAAO,OAAO,gBAAgB,EAAE,QAAAA,QAAM,CAAE,GAAG,EAAE,OAAM,CAAE;iBACjE,OAAY;AACjB,kBAAQ,KAAK,IAAI,OAAO,OAAO,gBAAgB,EAAE,MAAK,CAAE,GAAG,EAAE,OAAM,CAAE;;MAE7E,CAAC;AAGD,aAAO,MAAM;AAET,cAAM,OAAmB,QAAQ,OAAO,CAAC,MAAO,KAAK,IAAK;AAC1D,mBAAW,EAAE,MAAK,KAAM,MAAM;AAC1B,cAAI,EAAE,iBAAiB,QAAQ;AAAE,mBAAO;;;AAS5C,cAAMA,UAAS,YAAY,KAAK,QAAoB,QAAQ,OAAO,CAAC,MAAO,KAAK,IAAK,CAAC;AACtF,YAAI,QAAQA,SAAQ,oBAAoB,GAAG;AACvC,gBAAMA;;AAIV,cAAM,UAAU,WAAW,OAAO,CAACH,IAAG,MAAO,QAAQ,CAAC,KAAK,IAAK;AAChE,YAAI,QAAQ,WAAW,GAAG;AAAE;;AAC5B,cAAM,QAAQ,KAAK,OAAO;;AAK9B,YAAMG,UAAS,aAAa,KAAK,QAAoB,OAAO;AAC5D,aAAOA,YAAW,QAAW,8BAA8B,gBAAgB;QACvE,SAAS;QACT,MAAM,EAAE,SAAS,KAAK,SAAS,QAAQ,IAAIC,UAAS,EAAC;OACxD;AACD,UAAID,mBAAkB,OAAO;AAAE,cAAMA;;AACrC,aAAOA;;AAGX,UAAM,sBAAK,6CAAL;AAGN,UAAM,UAA4B,oBAAI,IAAG;AACzC,QAAI,iBAAiB;AACrB,WAAO,MAAM;AACT,YAAM,SAAS,sBAAK,2CAAL,WAAgB,SAAS;AACxC,UAAI,UAAU,MAAM;AAAE;;AACtB,wBAAkB,OAAO,OAAO;AAChC,UAAI,kBAAkB,KAAK,QAAQ;AAAE;;;AAGzC,UAAM,SAAS,MAAM,sBAAK,+CAAL,WAAoB,SAAS;AAIlD,eAAW,UAAU,SAAS;AAC1B,UAAI,OAAO,WAAW,OAAO,UAAU,MAAM;AACzC,eAAO,OAAO;;;AAItB,WAAO;EACX;EAEA,MAAM,UAAO;AACT,eAAW,EAAE,SAAQ,KAAM,mBAAK,WAAU;AACtC,eAAS,QAAO;;AAEpB,UAAM,QAAO;EACjB;;AAhaS;AAET;AACA;AArBE;;;AA2HF,mBAAc,SAAC,SAAyB;AAKpC,QAAM,UAAU,MAAM,KAAK,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAGvD,QAAM,aAAa,mBAAK,UAAS,MAAK;AACtC,UAAQ,UAAU;AAClB,aAAW,KAAK,CAAC,GAAGH,OAAO,EAAE,WAAWA,GAAE,QAAS;AAEnD,aAAW,UAAU,YAAY;AAC7B,QAAI,OAAO,iBAAiB;AAAE;;AAC9B,QAAI,QAAQ,QAAQ,MAAM,MAAM,IAAI;AAAE,aAAO;;;AAGjD,SAAO;AACX;;AAGA,eAAU,SAAC,SAA2B,KAAyB;AAC3D,QAAM,SAAS,sBAAK,+CAAL,WAAoB;AAGnC,MAAI,UAAU,MAAM;AAAE,WAAO;;AAG7B,QAAM,SAAsB;IACxB;IAAQ,QAAQ;IAAM,SAAS;IAC/B,SAAS;IAAM,SAAS;;AAG5B,QAAM,MAAMD,SAAO;AAGnB,SAAO,WAAW,YAAW;AACzB,QAAI;AACA,aAAO;AACP,YAAM,SAAS,MAAM,KAAK,kBAAkB,OAAO,UAAU,GAAG;AAChE,aAAO,SAAS,EAAE,OAAM;aACnB,OAAY;AACjB,aAAO;AACP,aAAO,SAAS,EAAE,MAAK;;AAG3B,UAAM,KAAMA,SAAO,IAAK;AACxB,WAAO,cAAc;AAErB,WAAO,kBAAkB,OAAO,OAAO,kBAAkB,OAAO;AAEhE,WAAO,UAAU;EACrB,GAAE;AAIF,SAAO,WAAW,YAAW;AACzB,UAAMM,OAAM,OAAO,YAAY;AAC/B,WAAO,UAAU;EACrB,GAAE;AAEF,UAAQ,IAAI,MAAM;AAClB,SAAO;AACX;AAIM,iBAAY,iBAAA;AACd,MAAI,cAAc,mBAAK;AACvB,MAAI,CAAC,aAAa;AACd,UAAM,WAAgC,CAAA;AACtC,uBAAK,UAAS,QAAQ,CAAC,WAAU;AAC7B,eAAS,MAAM,YAAW;AACtB,cAAM,YAAY,QAAQ,CAAC;AAC3B,YAAI,CAAC,OAAO,iBAAiB;AACzB,iBAAO,WAAW,MAAM,OAAO,SAAS,WAAU;;MAE1D,GAAE,CAAE;IACR,CAAC;AAED,uBAAK,qBAAsB,eAAe,YAAW;AAEjD,YAAM,QAAQ,IAAI,QAAQ;AAG1B,UAAI,UAAyB;AAC7B,iBAAW,UAAU,mBAAK,WAAU;AAChC,YAAI,OAAO,iBAAiB;AAAE;;AAC9B,cAAM,UAAoB,OAAO;AACjC,YAAI,WAAW,MAAM;AACjB,oBAAU,QAAQ;mBACX,QAAQ,YAAY,SAAS;AACpC,iBAAO,OAAO,8CAA8C,yBAAyB;YACjF,WAAW;WACd;;;IAGb,GAAE;;AAGN,QAAM;AACV;AAGM,iBAAY,eAAC,SAA2B,KAAyB;AAEnE,QAAM,UAA8B,CAAA;AACpC,aAAW,UAAU,SAAS;AAC1B,QAAI,OAAO,UAAU,MAAM;AACvB,YAAM,EAAE,KAAK,MAAK,IAAK,gBAAgB,OAAO,MAAM;AACpD,cAAQ,KAAK,EAAE,KAAK,OAAO,QAAQ,OAAO,OAAO,OAAM,CAAE;;;AAKjE,MAAI,QAAQ,OAAO,CAAC,GAAG,MAAO,IAAI,EAAE,QAAS,CAAC,IAAI,KAAK,QAAQ;AAC3D,WAAO;;AAGX,UAAQ,IAAI,QAAQ;IAChB,KAAK,kBAAkB;AAEnB,UAAI,mBAAK,aAAY,IAAI;AACrB,2BAAK,SAAU,KAAK,KAAK,UAAkB,UAAU,KAAK,QAAQ,mBAAK,UAAS,OAAO,CAAC,MAAO,CAAC,EAAE,eAAgB,EAAE,IAAI,CAAC,OAAO;UAC5H,OAAO,EAAE;UACT,KAAK,UAAU,EAAE,WAAW,EAAE,SAAQ;UACtC,QAAQ,EAAE;UACZ,CAAC,CAAC,CAAC;;AAKT,YAAM,OAAO,aAAa,KAAK,QAAQ,OAAO;AAC9C,UAAI,SAAS,QAAW;AAAE,eAAO;;AACjC,UAAI,OAAO,mBAAK,UAAS;AAAE,2BAAK,SAAU;;AAC1C,aAAO,mBAAK;;IAGhB,KAAK;IACL,KAAK;IACL,KAAK;AACD,aAAO,UAAU,KAAK,QAAQ,OAAO;IAEzC,KAAK;AAGD,UAAI,cAAc,OAAO,IAAI,aAAa,WAAW;AACjD,eAAO,aAAa,KAAK,QAAQ,OAAO;;AAE5C,aAAO,YAAY,KAAK,QAAQ,OAAO;IAE3C,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;AACD,aAAO,YAAY,KAAK,QAAQ,OAAO;IAE3C,KAAK;AACD,aAAO,aAAa,KAAK,QAAQ,OAAO;;AAGhD,SAAO,OAAO,sBAAsB,yBAAyB;IACzD,WAAW,YAAaD,WAAgB,IAAK,MAAM,CAAE;GACxD;AACL;AAEM,mBAAc,eAAC,SAA2B,KAAyB;AACrE,MAAI,QAAQ,SAAS,GAAG;AAAE,UAAM,IAAI,MAAM,cAAc;;AAIxD,QAAM,cAAoC,CAAA;AAE1C,MAAI,aAAa;AACjB,aAAW,UAAU,SAAS;AAG1B,QAAI,OAAO,SAAS;AAChB,kBAAY,KAAK,OAAO,OAAO;;AAInC,QAAI,OAAO,SAAS;AAChB,kBAAY,KAAK,OAAO,OAAO;AAC/B;;AAIJ,QAAI,OAAO,SAAS;AAAE;;AAGtB,WAAO,UAAU;AACjB;;AAIJ,QAAM,QAAQ,MAAM,sBAAK,6CAAL,WAAkB,SAAS;AAC/C,MAAI,UAAU,QAAW;AACrB,QAAI,iBAAiB,OAAO;AAAE,YAAM;;AACpC,WAAO;;AAKX,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACjC,0BAAK,2CAAL,WAAgB,SAAS;;AAK7B,SAAO,YAAY,SAAS,GAAG,kBAAkB,gBAAgB;IAC7D,SAAS;IACT,MAAM,EAAE,SAAS,KAAK,SAAS,MAAM,KAAK,OAAO,EAAE,IAAI,CAAC,MAAMA,WAAU,EAAE,MAAM,CAAC,EAAC;GACrF;AAGD,QAAM,QAAQ,KAAK,WAAW;AAI9B,SAAO,MAAM,sBAAK,+CAAL,WAAoB,SAAS;AAC9C;;;AC5qBJ,SAAS,gBAAgB,OAAU;AAC/B,SAAQ,SAAS,OAAO,MAAM,SAAU,cACpC,OAAO,MAAM,UAAW;AAChC;AAEA,IAAM,WAAW,sFAAsF,MAAM,GAAG;AA8C1G,SAAU,mBAAmB,SAA+C,SAAa;AAC3F,MAAI,WAAW,MAAM;AAAE,cAAU,CAAA;;AAEjC,QAAM,eAAe,CAAC,SAAgB;AAClC,QAAI,QAAQ,IAAI,MAAM,KAAK;AAAE,aAAO;;AACpC,QAAI,OAAO,QAAQ,cAAe,UAAU;AACxC,aAAQ,SAAS,QAAQ;;AAE7B,QAAI,MAAM,QAAQ,QAAQ,SAAS,GAAG;AAClC,aAAQ,QAAQ,UAAU,QAAQ,IAAI,MAAM;;AAEhD,WAAO;EACX;AAEA,MAAI,OAAO,YAAa,YAAY,QAAQ,MAAM,UAAU,GAAG;AAC3D,WAAO,IAAI,gBAAgB,OAAO;;AAGtC,MAAI,OAAO,YAAa,YAAY,QAAQ,MAAM,QAAQ,KAAK,gBAAgB,OAAO,GAAG;AACrF,WAAO,IAAI,kBAAkB,OAAO;;AAIxC,MAAI,gBAAgC;AACpC,MAAI;AACA,oBAAgB,QAAQ,KAAK,OAAO;WAC/B,OAAO;EAAA;AAGhB,QAAM,YAAqC,CAAA;AAE3C,MAAI,aAAa,eAAe,KAAK,eAAe;AAChD,QAAI,cAAc,SAAS,SAAS;AAChC,gBAAU,KAAK,IAAI,gBAAgB,4BAA6B,eAAe,EAAE,cAAa,CAAE,CAAC;eAC1F,cAAc,SAAS,cAAc;AAC5C,gBAAU,KAAK,IAAI,gBAAgB,wCAAyC,eAAe,EAAE,cAAa,CAAE,CAAC;;;AAIrH,MAAI,aAAa,SAAS,GAAG;AACzB,QAAI;AACA,gBAAU,KAAK,IAAI,gBAAgB,SAAS,QAAQ,OAAO,CAAC;aACvD,OAAO;IAAA;;AAGpB,MAAI,aAAa,MAAM,KAAK,QAAQ,QAAQ,MAAM;AAC9C,QAAI;AACA,gBAAU,KAAK,IAAI,aAAa,SAAS,QAAQ,IAAI,CAAC;aACjD,OAAO;IAAA;;AAGpB,MAAI,aAAa,YAAY,GAAG;AAC5B,QAAI;AACA,gBAAU,KAAK,IAAI,mBAAmB,SAAS,QAAQ,UAAU,CAAC;aAC7D,OAAO;IAAA;;AAGpB,MAAI,aAAa,YAAY,GAAG;AAC5B,QAAI;AACA,gBAAU,KAAK,IAAI,mBAAmB,OAAO,CAAC;aACzC,OAAO;IAAA;;AAGpB,MAAI,aAAa,WAAW,GAAG;AAC3B,QAAI;AACA,gBAAU,KAAK,IAAI,kBAAkB,SAAS,QAAQ,SAAS,CAAC;aAC3D,OAAO;IAAA;;AAGpB,MAAI,aAAa,QAAQ,GAAG;AACxB,QAAI;AACA,UAAI,YAAY,QAAQ;AACxB,UAAI,gBAAoC;AACxC,UAAI,OAAO,cAAe,UAAU;AAChC,wBAAgB,UAAU;AAC1B,oBAAY,UAAU;;AAE1B,gBAAU,KAAK,IAAI,eAAe,SAAS,WAAW,aAAa,CAAC;aAC/D,OAAO;IAAA;;AAiBpB,MAAI,aAAa,WAAW,GAAG;AAC3B,QAAI;AACA,UAAI,QAAQ,QAAQ;AACpB,gBAAU,KAAK,IAAI,kBAAkB,SAAS,KAAK,CAAC;aAC/C,OAAO;IAAA;;AAGpB,SAAO,UAAU,QAAQ,+BAA+B,yBAAyB;IAC7E,WAAW;GACd;AAGD,MAAI,UAAU,WAAW,GAAG;AAAE,WAAO,UAAU,CAAC;;AAIhD,MAAI,SAAS,KAAK,MAAM,UAAU,SAAS,CAAC;AAC5C,MAAI,SAAS,GAAG;AAAE,aAAS;;AAI3B,MAAI,iBAAiB,SAAS,QAAQ,cAAc,IAAI,MAAM,IAAI;AAAE,aAAS;;AAG7E,MAAI,WAAW,QAAQ,QAAQ;AAAE,aAAS,QAAQ;;AAElD,SAAO,IAAI,iBAAiB,WAAW,QAAW,EAAE,OAAM,CAAE;AAChE;;;AClMA;AAgBM,IAAO,gBAAP,MAAO,sBAAqB,eAAc;;;;EAY5C,YAAY,QAAc;AACtB,UAAM,OAAO,QAAQ;AATzB;;;;AAEA;AACA;AAOI,qBAA+B,MAAM,EAAE,OAAM,CAAE;AAE/C,uBAAK,eAAgB;AACrB,uBAAK,QAAS;EAClB;EAEA,MAAM,aAAU;AACZ,WAAO,KAAK,OAAO,WAAU;EACjC;EAEA,QAAQ,UAAyB;AAC7B,WAAO,IAAI,cAAa,KAAK,OAAO,QAAQ,QAAQ,CAAC;EACzD;EAEA,MAAM,SAAS,UAAmB;AAC9B,QAAI,aAAa,WAAW;AACxB,UAAI,mBAAK,kBAAiB,MAAM;AAC5B,2BAAK,eAAgB,MAAM,SAAS,SAAS;;AAGjD,YAAM,QAAQ,mBAAK;AACnB,aAAQ,MAAM,mBAAK,iBAAiB;;AAGxC,WAAO,MAAM,SAAS,QAAQ;EAClC;;;;;EAMA,YAAS;AACL,2BAAK,QAAL;EACJ;;;;;EAMA,QAAK;AACD,uBAAK,QAAS;AACd,uBAAK,eAAgB;EACzB;EAEA,MAAM,gBAAgB,IAAsB;AACxC,UAAM,eAAe,KAAK,SAAS,SAAS;AAC5C,SAAK,UAAS;AAEd,SAAK,MAAM,KAAK,OAAO,oBAAoB,EAAE;AAC7C,OAAG,QAAQ,MAAM;AAIjB,WAAO,MAAM,KAAK,OAAO,gBAAgB,EAAE;EAC/C;EAEA,gBAAgB,IAAsB;AAClC,WAAO,KAAK,OAAO,gBAAgB,EAAE;EACzC;EAEA,YAAY,SAA4B;AACpC,WAAO,KAAK,OAAO,YAAY,OAAO;EAC1C;EAEA,cAAc,QAAyB,OAA8C,OAA0B;AAC3G,WAAO,KAAK,OAAO,cAAc,QAAQ,OAAO,KAAK;EACzD;;AA1EA;AACA;AAPE,IAAO,eAAP;;;AChBN,IAAAE;AAmDM,IAAO,kBAAP,cAA+B,0BAAyB;;;;;EAO1D,YAAY,UAA2B,SAAsBC,WAAiC;AAE1F,UAAM,UAAqC,OAAO,OAAO,CAAA,GACrDA,aAAY,OAAQA,YAAU,CAAA,GAChC,EAAE,eAAe,EAAC,CAAE;AAEtB,mBAAe,YAAY,SAAS,SAAS,6BAA6B,YAAY,QAAQ;AAE9F,UAAM,SAAS,OAAO;AAd1B,uBAAAD;AAgBI,uBAAKA,WAAW,OAAO,QAAgB,WAA4C;AAC/E,YAAM,UAAU,EAAE,QAAQ,OAAM;AAChC,WAAK,KAAK,SAAS,EAAE,QAAQ,sBAAsB,QAAO,CAAE;AAC5D,UAAI;AACA,cAAM,SAAS,MAAM,SAAS,QAAQ,OAAO;AAC7C,aAAK,KAAK,SAAS,EAAE,QAAQ,wBAAwB,OAAM,CAAE;AAC7D,eAAO;eACF,GAAQ;AACb,cAAM,QAAQ,IAAI,MAAM,EAAE,OAAO;AAC3B,cAAO,OAAO,EAAE;AAChB,cAAO,OAAO,EAAE;AAChB,cAAO,UAAU;AACvB,aAAK,KAAK,SAAS,EAAE,QAAQ,uBAAuB,MAAK,CAAE;AAC3D,cAAM;;IAEd;EACJ;EAEA,MAAM,KAAK,QAAgB,QAAwC;AAC/D,UAAM,KAAK,OAAM;AAEjB,WAAO,MAAM,MAAM,KAAK,QAAQ,MAAM;EAC1C;EAEA,MAAM,MAAM,SAA+C;AACvD,mBAAe,CAAC,MAAM,QAAQ,OAAO,GAAG,2CAA2C,WAAW,OAAO;AAErG,QAAI;AACA,YAAM,SAAS,MAAM,mBAAKA,WAAL,WAAc,QAAQ,QAAQ,QAAQ,UAAU,CAAA;AACrE,aAAO,CAAE,EAAE,IAAI,QAAQ,IAAI,OAAM,CAAE;aAC9B,GAAQ;AACb,aAAO,CAAE;QACL,IAAI,QAAQ;QACZ,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,EAAE,MAAM,SAAS,EAAE,QAAO;OAC1D;;EAET;EAEA,YAAY,SAAyB,OAAmB;AAEpD,YAAQ,KAAK,MAAM,KAAK,UAAU,KAAK,CAAC;AAIxC,YAAQ,MAAM,MAAM,QAAQ,IAAI;MAC5B,KAAK;AACD,cAAM,MAAM,UAAU,uBAAwB,MAAM,MAAM,OAAQ;AAClE;MACJ,KAAK;AACD,cAAM,MAAM,UAAU,uBAAwB,MAAM,MAAM,OAAQ;AAClE;;AAGR,WAAO,MAAM,YAAY,SAAS,KAAK;EAC3C;;;;EAKA,MAAM,UAAU,SAAwB;AACpC,QAAI,WAAW,MAAM;AAAE,gBAAU;;AAEjC,UAAM,WAAW,MAAM,KAAK,KAAK,gBAAgB,CAAA,CAAG;AACpD,QAAI,OAAO,YAAa,UAAU;AAC9B,aAAQ,SAAS,SAAS;;AAG9B,cAAU,QAAQ,YAAW;AAC7B,WAAO,SAAS,OAAO,CAAC,MAAe,EAAE,YAAW,MAAO,OAAQ,EAAE,WAAW;EACpF;EAEA,MAAM,UAAU,SAAyB;AACrC,QAAI,WAAW,MAAM;AAAE,gBAAU;;AAEjC,QAAI,CAAE,MAAM,KAAK,UAAU,OAAO,GAAI;AAClC,UAAI;AAEA,cAAM,mBAAKA,WAAL,WAAc,uBAAuB,CAAA;eAGtC,OAAY;AACjB,cAAM,UAAU,MAAM;AACtB,cAAM,KAAK,YAAY,SAAS,EAAE,IAAI,QAAQ,IAAI,MAAK,CAAE;;;AAIjE,WAAO,MAAM,MAAM,UAAU,OAAO;EACxC;;AAvGAA,YAAA;;;AC3BJ,IAAM,uBAAuB;AAE7B,SAASE,SAAQ,MAAY;AACzB,UAAQ,MAAM;IACV,KAAK;AACD,aAAQ;IACZ,KAAK;AACD,aAAO;IAEX,KAAK;AACD,aAAO;IACX,KAAK;AACD,aAAO;;AAGf,iBAAe,OAAO,uBAAuB,WAAW,IAAI;AAChE;AAYM,IAAO,iBAAP,MAAO,wBAAuB,gBAAe;;;;;;;EAmB/C,YAAYC,WAAuB,eAA+B,mBAAiC;AAC/F,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW;;AACnC,UAAM,UAAU,QAAQ,KAAKA,SAAQ;AACrC,QAAI,iBAAiB,MAAM;AAAE,sBAAgB;;AAC7C,QAAI,qBAAqB,MAAM;AAAE,0BAAoB;;AAErD,UAAM,UAAU,EAAE,eAAe,QAAO;AAExC,UAAM,UAAU,gBAAe,WAAW,SAAS,eAAe,iBAAiB;AACnF,UAAM,SAAS,SAAS,OAAO;AAvB1B;;;;AAMA;;;;;AAmBL,qBAAiC,MAAM,EAAE,eAAe,kBAAiB,CAAE;EAC/E;EAEA,aAAa,SAAe;AACxB,QAAI;AACA,aAAO,IAAI,gBAAe,SAAS,KAAK,eAAe,KAAK,iBAAiB;aACxE,OAAO;IAAA;AAChB,WAAO,MAAM,aAAa,OAAO;EACrC;;;;;EAMA,OAAO,WAAW,SAAkB,eAA+B,mBAAiC;AAChG,QAAI,iBAAiB,MAAM;AAAE,sBAAgB;;AAE7C,UAAM,UAAU,IAAI,aAAa,WAAaD,SAAQ,QAAQ,IAAI,CAAE,UAAW,aAAc,EAAE;AAC/F,YAAQ,YAAY;AAEpB,QAAI,mBAAmB;AACnB,cAAQ,eAAe,IAAI,iBAAiB;;AAGhD,QAAI,kBAAkB,sBAAsB;AACxC,cAAQ,YAAY,OAAOE,UAAS,UAAU,YAAW;AACrD,4BAAoB,gBAAgB;AACpC,eAAO;MACX;;AAGJ,WAAO;EACX;EAEA,sBAAmB;AACf,WAAQ,KAAK,kBAAkB;EACnC;;;;ACtHJ,iBAAwB;AAWxB,SAAS,YAAYC,OAAY;AAC7B,QAAM,WAA0B,CAAA;AAEhC,MAAI,YAAY;AAChB,SAAO,MAAM;AACT,UAAM,KAAKA,MAAK,QAAQ,IAAI,SAAS;AACrC,QAAI,OAAO,IAAI;AAAE;;AACjB,aAAS,KAAKA,MAAK,SAAS,WAAW,EAAE,EAAE,SAAQ,EAAG,KAAI,CAAE;AAC5D,gBAAY,KAAK;;AAGrB,SAAO,EAAE,UAAU,WAAWA,MAAK,SAAS,SAAS,EAAC;AAC1D;AAvBA;AA8BM,IAAO,oBAAP,cAAiC,eAAc;EAQjD,YAAY,MAAc,SAAsB,SAAmC;AAC/E,UAAM,SAAS,OAAO;AAR1B;AASI,uBAAK,aAAU,oBAAQ,IAAI;AAE3B,SAAK,OAAO,GAAG,SAAS,YAAW;AAC/B,UAAI;AACA,cAAM,KAAK,OAAM;eACZ,OAAO;AACZ,gBAAQ,IAAI,qCAAqC,KAAK;;IAG9D,CAAC;AAED,QAAI,WAAW,OAAO,MAAM,CAAC;AAC7B,SAAK,OAAO,GAAG,QAAQ,CAACA,UAAQ;AAC5B,iBAAW,OAAO,OAAO,CAAE,UAAUA,KAAI,CAAE;AAC3C,YAAM,EAAE,UAAU,UAAS,IAAK,YAAY,QAAQ;AACpD,eAAS,QAAQ,CAAC,YAAW;AACzB,aAAK,gBAAgB,OAAO;MAChC,CAAC;AACD,iBAAW;IACf,CAAC;AAED,SAAK,OAAO,GAAG,OAAO,MAAK;AACvB,WAAK,KAAK,OAAO;AACjB,WAAK,OAAO,QAAO;AACnB,WAAK,OAAO,IAAG;IACnB,CAAC;EACL;;;;EA9BA,IAAI,SAAM;AAAa,WAAO,mBAAK;EAAS;EAgC5C,UAAO;AACH,SAAK,OAAO,QAAO;AACnB,SAAK,OAAO,IAAG;AAEf,UAAM,QAAO;EACjB;EAEA,MAAM,OAAO,SAAe;AACxB,SAAK,OAAO,MAAM,OAAO;EAC7B;;AA9CA;;;AChCJ;AAyBM,IAAO,cAAP,MAAO,oBAAmB,eAAc;;;;;;;;EAe1C,YAAY,YAAwB,UAA0B;AAC1D,UAAM,QAAQ;AAZT;;;;AAEA;AAYL,mBAAe,cAAc,OAAO,WAAW,SAAU,YAAY,uBAAuB,cAAc,cAAc;AAExH,uBAAK,aAAc;AAEnB,UAAM,UAAU,eAAe,KAAK,WAAW,SAAS;AACxD,qBAA6B,MAAM,EAAE,QAAO,CAAE;EAClD;;;;;;EAQA,IAAI,aAAU;AAAiB,WAAO,mBAAK;EAAa;;;;EAKxD,IAAI,aAAU;AAAa,WAAO,KAAK,WAAW;EAAY;EAE9D,MAAM,aAAU;AAAsB,WAAO,KAAK;EAAS;EAE3D,QAAQ,UAAyB;AAC7B,WAAO,IAAI,YAAW,mBAAK,cAAa,QAAQ;EACpD;EAEA,MAAM,gBAAgB,IAAsB;AACxC,SAAK,YAAY,EAAE;AAGnB,UAAM,EAAE,IAAI,KAAI,IAAK,MAAM,kBAAkB;MACzC,IAAK,GAAG,KAAK,eAAe,GAAG,IAAI,KAAK,QAAQ,IAAG;MACnD,MAAO,GAAG,OAAO,eAAe,GAAG,MAAM,KAAK,QAAQ,IAAG;KAC5D;AAED,QAAI,MAAM,MAAM;AAAE,SAAG,KAAK;;AAC1B,QAAI,QAAQ,MAAM;AAAE,SAAG,OAAO;;AAE9B,QAAI,GAAG,QAAQ,MAAM;AACjB,qBAAe,WAAoB,GAAG,IAAK,MAAM,KAAK,SAClD,qCAAqC,WAAW,GAAG,IAAI;AAC3D,aAAO,GAAG;;AAId,UAAM,MAAM,YAAY,KAA8B,EAAE;AACxD,QAAI,YAAY,KAAK,WAAW,KAAK,IAAI,YAAY;AAErD,WAAO,IAAI;EACf;EAEA,MAAM,YAAY,SAA4B;AAC1C,WAAO,KAAK,gBAAgB,OAAO;EACvC;;;;;;EAOA,gBAAgB,SAA4B;AACxC,WAAO,KAAK,WAAW,KAAK,YAAY,OAAO,CAAC,EAAE;EACtD;EAEA,MAAM,cAAc,QAAyB,OAA8C,OAA0B;AAGjH,UAAM,YAAY,MAAM,iBAAiB,aAAa,QAAQ,OAAO,OAAO,OAAO,SAAgB;AAI/F,aAAO,KAAK,YAAY,MAAM,+CAA+C,yBAAyB;QAClG,WAAW;QACX,MAAM,EAAE,KAAI;OACf;AAED,YAAM,UAAU,MAAM,KAAK,SAAS,YAAY,IAAI;AACpD,aAAO,WAAW,MAAM,yBAAyB,qBAAqB;QAClE,OAAO;OACV;AAED,aAAO;IACX,CAAC;AAED,WAAO,KAAK,WAAW,KAAK,iBAAiB,KAAK,UAAU,QAAQ,OAAO,UAAU,KAAK,CAAC,EAAE;EACjG;;AAlGS;AANP,IAAO,aAAP;;;ACtBN,IAAM,WAAW;AACjB,IAAM,OAAO;AAEb,SAAS,OAAOC,QAAsB,KAAW;AAC7C,MAAI,UAAU;AACd,SAAOA,OAAM,OAAO,CAAC,OAAO,SAAQ;AAChC,QAAI,SAAS,KAAK;AACd;eACO,KAAK,MAAM,IAAI,GAAG;AACzB,YAAM,KAAK,OAAO,aAAa,OAAO,IAAI,IAAI;WAC3C;AACH,gBAAU;AACV,YAAM,KAAK,IAAI;;AAEnB,WAAO;EACX,GAAkB,CAAA,CAAE;AACxB;AAKM,SAAU,OAAOC,OAAc,MAAY;AAG7C,WAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,IAAAA,QAAOA,MAAK,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,KAAK,UAAU,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC;;AAIxE,QAAM,SAAwB,CAAA;AAC9B,QAAM,WAAWA,MAAK,QAAQ,8BAA8B,CAAC,KAAK,MAAM,MAAM,SAAQ;AAClF,QAAI,MAAM;AACN,eAAS,IAAI,SAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAAE,eAAO,KAAK,GAAG;;WACxD;AACH,aAAO,KAAK,KAAK,YAAW,CAAE;;AAElC,WAAO;EACX,CAAC;AAED,MAAI,UAAU;AAAE,UAAM,IAAI,MAAM,cAAe,KAAK,UAAU,QAAQ,CAAE,EAAE;;AAG1E,SAAO,OAAO,OAAO,QAAQ,GAAG,GAAG,GAAG;AAC1C;AAKM,SAAU,UAAUA,OAAY;AAClC,iBAAeA,MAAK,CAAC,MAAM,KAAK,yBAAyB,QAAQA,KAAI;AAErE,SAAO,OACHA,MAAK,UAAU,IAAI,IAAI,SAAS,MAAM,GACtCA,MAAK,UAAU,GAAG,IAAI,IAAI,SAAS,MAAM,CAAC;AAClD;;;AClDM,IAAgB,WAAhB,MAAwB;;;;;;;;;;;EAa1B,YAAY,QAAc;AAZ1B;AAaI,qBAA2B,MAAM,EAAE,OAAM,CAAE;EAC/C;;;;;;;;EASA,MAAM,QAAc;AAChB,WAAO,OAAO,YAAW,EAAG,MAAM,MAAM;EAC5C;;;;;;;EAQA,KAAKC,QAAoB;AACrB,WAAOA,OAAM,KAAK,GAAG;EACzB;;;;AC1CJ,IAAAC,QAAA;AAqBM,IAAO,cAAP,cAA2B,SAAQ;;;;;EAQrC,YAAY,QAAgBC,OAAcC,WAAgB;AACtD,UAAM,MAAM;AATd;AACF,uBAAAF;AACA;AAyBA;AAjBI,uBAAKA,QAAQC;AACb,uBAAK,WAAYC;AACjB,uBAAK,QAAS;EAClB;;;;EAKA,IAAI,QAAK;AAAa,WAAO,mBAAKF;EAAO;;;;EAKzC,eAAY;AACR,WAAO,UAAU,mBAAKA,OAAK;EAC/B;EAoBA,QAAQ,OAAa;AACjB,UAAMG,SAAQ,sBAAK,sCAAL;AACd,mBAAe,SAAS,KAAK,QAAQA,OAAM,QAAQ,uBAAwB,KAAM,IAAI,SAAS,KAAK;AACnG,WAAOA,OAAM,KAAK;EACtB;EAEA,aAAa,MAAY;AACrB,WAAO,sBAAK,sCAAL,WAAkB,QAAQ,IAAI;EACzC;;AApDAH,SAAA;AACA;AAyBA;AA3BE;AA4BF,eAAU,WAAA;AACN,MAAI,mBAAK,WAAU,MAAM;AACrB,UAAMG,SAAQ,KAAK,aAAY;AAG/B,UAAMD,YAAW,GAAGC,OAAM,KAAK,IAAI,IAAI,IAAI;AAE3C,QAAID,cAAa,mBAAK,YAAW;AAC7B,YAAM,IAAI,MAAM,sBAAuB,KAAK,MAAO,SAAS;;AAIhE,uBAAK,QAASC;;AAElB,SAAO,mBAAK;AAChB;;;AC/DJ,IAAM,QAAQ;AACd,IAAM,WAAW;AAEjB,IAAI,WAA0B;AAOxB,IAAO,SAAP,MAAO,gBAAe,YAAW;;;;;;;;;EAUnC,cAAA;AAAgB,UAAM,MAAM,OAAO,QAAQ;EAAG;;;;;EAM9C,OAAO,WAAQ;AACX,QAAI,YAAY,MAAM;AAAE,iBAAW,IAAI,QAAM;;AAC7C,WAAO;EACX;;;;ACpBJ,SAAS,aAAa,MAAY;AAC/B,UAAS,KAAK,QAAQ,KAAO,IAAI,OAAQ;AAC5C;AAGA,SAAS,aAAa,MAAY;AAC/B,UAAS,KAAK,QAAQ,IAAK;AAC9B;AAGA,SAAS,kBAAkB,UAAkBC,WAA0B;AACnE,kBAAgB,MAAM;AAEtB,MAAIA,aAAY,MAAM;AAAE,IAAAA,YAAW,OAAO,SAAQ;;AAElD,QAAMC,SAAQD,UAAS,MAAM,QAAQ;AACrC,iBAAgBC,OAAM,SAAS,MAAO,KAAKA,OAAM,UAAU,MAAMA,OAAM,UAAU,IAC7E,2BAA2B,YAAY,cAAc;AAEzD,QAAM,UAAU,IAAI,WAAW,KAAK,KAAK,KAAKA,OAAM,SAAS,CAAC,CAAC;AAE/D,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAIA,OAAM,QAAQ,KAAK;AACnC,QAAI,QAAQD,UAAS,aAAaC,OAAM,CAAC,EAAE,UAAU,MAAM,CAAC;AAC5D,mBAAe,SAAS,GAAG,kCAAmC,CAAE,IAAI,YAAY,cAAc;AAE9F,aAAS,MAAM,GAAG,MAAM,IAAI,OAAO;AAC/B,UAAI,QAAS,KAAM,KAAK,KAAO;AAC3B,gBAAQ,UAAU,CAAC,KAAM,KAAM,IAAK,SAAS;;AAEjD;;;AAIR,QAAM,cAAc,KAAKA,OAAM,SAAS;AAGxC,QAAM,eAAeA,OAAM,SAAS;AACpC,QAAM,eAAe,aAAa,YAAY;AAE9C,QAAMC,YAAW,SAASC,QAAO,QAAQ,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI;AAE1E,iBAAeD,eAAc,QAAQ,QAAQ,SAAS,CAAC,IAAI,eACvD,6BAA6B,YAAY,cAAc;AAE3D,SAAO,QAAQ,QAAQ,MAAM,GAAG,cAAc,CAAC,CAAC;AACpD;AAEA,SAAS,kBAAkB,SAAqBF,WAA0B;AAEtE,iBAAgB,QAAQ,SAAS,MAAO,KAAK,QAAQ,UAAU,MAAM,QAAQ,UAAU,IACnF,wBAAwB,WAAW,cAAc;AAErD,MAAIA,aAAY,MAAM;AAAE,IAAAA,YAAW,OAAO,SAAQ;;AAElD,QAAM,UAAyB,CAAE,CAAC;AAElC,MAAI,gBAAgB;AACpB,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AAGrC,QAAI,gBAAgB,GAAG;AACnB,cAAQ,QAAQ,SAAS,CAAC,MAAM;AAChC,cAAQ,QAAQ,SAAS,CAAC,KAAK,QAAQ,CAAC;AAExC,uBAAiB;WAGd;AACH,cAAQ,QAAQ,SAAS,CAAC,MAAM;AAChC,cAAQ,QAAQ,SAAS,CAAC,KAAK,QAAQ,CAAC,KAAM,IAAI;AAGlD,cAAQ,KAAK,QAAQ,CAAC,IAAI,aAAa,IAAI,aAAa,CAAC;AAEzD,uBAAiB;;;AAKzB,QAAM,eAAe,QAAQ,SAAS;AACtC,QAAME,YAAW,SAASC,QAAO,OAAO,EAAE,UAAU,GAAG,CAAC,GAAG,EAAE,IAAI,aAAa,YAAY;AAG1F,UAAQ,QAAQ,SAAS,CAAC,MAAM;AAChC,UAAQ,QAAQ,SAAS,CAAC,KAAMD,aAAa,IAAI;AAEjD,SAAOF,UAAS,KAAK,QAAQ,IAAI,CAAC,UAAqBA,UAAU,QAAQ,KAAK,CAAC,CAAC;AACpF;AAEA,IAAMI,UAAS,CAAA;AAMT,IAAO,WAAP,MAAO,UAAQ;;;;EA2BjB,YAAY,OAAY,SAAiB,QAAgB,UAA0BJ,WAA0B;AArBpG;;;;;;AAMA;;;;;AAKA;;;;AAKA;;;;AAML,QAAI,YAAY,MAAM;AAAE,iBAAW;;AACnC,QAAIA,aAAY,MAAM;AAAE,MAAAA,YAAW,OAAO,SAAQ;;AAClD,kBAAc,OAAOI,SAAQ,UAAU;AACvC,qBAA2B,MAAM,EAAE,QAAQ,UAAU,UAAAJ,WAAU,QAAO,CAAE;EAC5E;;;;EAKA,cAAW;AACP,UAAM,OAAO,YAAY,aAAa,KAAK,UAAU,MAAM;AAC3D,WAAO,OAAO,YAAY,KAAK,QAAQ,MAAM,GAAG,MAAM,MAAM,IAAI,QAAQ;EAC5E;;;;;;;EAQA,OAAO,WAAW,QAAgB,UAA0BA,WAA0B;AAElF,UAAM,UAAU,kBAAkB,QAAQA,SAAQ;AAClD,aAAS,kBAAkB,SAAS,OAAO,GAAGA,SAAQ;AACtD,WAAO,IAAI,UAASI,SAAQ,SAAS,QAAQ,UAAUJ,SAAQ;EACnE;;;;;;;EAQA,OAAO,YAAY,UAAqB,UAA0BA,WAA0B;AACxF,UAAM,UAAU,SAAS,UAAU,SAAS;AAC5C,UAAM,SAAS,kBAAkB,SAASA,SAAQ;AAClD,WAAO,IAAI,UAASI,SAAQ,QAAQ,OAAO,GAAG,QAAQ,UAAUJ,SAAQ;EAC5E;;;;EAKA,OAAO,gBAAgB,UAAqBA,WAA0B;AAClE,UAAM,UAAU,SAAS,UAAU,SAAS;AAC5C,WAAO,kBAAkB,SAASA,SAAQ;EAC9C;;;;EAKA,OAAO,gBAAgB,QAAgBA,WAA0B;AAC7D,WAAO,kBAAkB,QAAQA,SAAQ;EAC7C;;;;;;;EAQA,OAAO,gBAAgB,QAAgBA,WAA0B;AAC7D,QAAI;AACA,wBAAkB,QAAQA,SAAQ;AAClC,aAAO;aACF,OAAO;IAAA;AAChB,WAAO;EACX;;;;;;;;;;;;;;;;;;ACtMJ,IAAM,iBAAyC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAE;AAGvE,IAAM,OAAO,CAAC,GAAM,GAAM,GAAM,GAAM,IAAM,IAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAI;AAGhM,IAAM,IAAI,CAAC,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,GAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,GAAM,KAAM,IAAM,KAAM,IAAM,KAAM,GAAM,KAAM,GAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,GAAM,KAAM,IAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,GAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,IAAM,KAAM,GAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,GAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,EAAI;AACzgD,IAAM,KAAI,CAAC,IAAM,GAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,GAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,GAAM,KAAM,KAAM,IAAM,GAAM,KAAM,IAAM,IAAM,KAAM,KAAM,IAAM,IAAM,GAAM,KAAM,KAAM,KAAM,GAAM,GAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,KAAM,IAAM,KAAM,GAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,IAAM,KAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,IAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,IAAM,KAAM,IAAM,IAAM,IAAM,GAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAI;AAGzgD,IAAMK,MAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,GAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAC1gG,IAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,GAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAC1gG,IAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,GAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAC1gG,IAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,GAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,SAAU;AAG1gG,IAAM,KAAK,CAAC,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,GAAY,WAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,IAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,GAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,UAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,IAAM,KAAK,CAAC,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,GAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,IAAM,KAAK,CAAC,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,YAAY,UAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,UAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,GAAY,YAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,WAAY,YAAY,UAAU;AAG1gG,IAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,IAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,IAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,YAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAU;AAC1gG,IAAM,KAAK,CAAC,GAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,UAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,UAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,YAAY,WAAY,WAAY,WAAY,WAAY,UAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,WAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,YAAY,WAAY,UAAY,WAAY,WAAY,WAAY,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",
  "names": ["exports", "module", "createWebSocketStream", "data", "err", "exports", "module", "exports", "module", "concat", "mask", "output", "data", "exports", "module", "exports", "module", "data", "exports", "module", "exports", "module", "concat", "Receiver", "n", "data", "exports", "module", "Sender", "data", "mask", "dataLength", "exports", "module", "data", "exports", "module", "exports", "module", "https", "http", "randomBytes", "createHash", "Receiver", "Sender", "WebSocket", "data", "mask", "key", "exports", "module", "protocol", "exports", "module", "http", "createHash", "WebSocket", "WebSocketServer", "version", "exports", "data", "b", "bytes2", "exports", "_a", "retBuf", "retView", "padding", "output", "i", "object", "require_build", "exports", "n", "concat", "_a", "retView", "number", "tempBufferView", "object", "Primitive", "OctetString", "b", "Integer", "hex", "bytes", "Sequence", "Set", "data", "verifySchema", "import_buffer", "defaultPath", "randomBytes", "ripemd160", "scrypt", "sha256", "wordlists", "copy", "data", "bytes", "_value", "mask", "hex", "BN_0", "_value", "bytes", "data", "bytes", "output", "bytes", "http", "https", "headers", "body", "process", "_request", "_a", "response", "delay", "_headers", "_body", "stall", "BN_0", "BN_1", "signed", "_value", "b", "_format", "data", "offset", "_data", "object", "length", "data", "randomBytes", "bytes", "_guard", "names", "args", "_names", "object", "bytes", "data", "_data", "_a", "locked", "data", "_data", "n", "b", "hash", "n", "crypto", "data", "randomBytes", "crypto", "data", "bytes", "locked", "data", "_data", "isLE", "_32n", "data", "locked", "data", "ripemd160", "_data", "locked", "locked", "randomBytes", "b", "T1", "T2", "hash", "hash", "pbkdf2", "rotl", "b", "N", "pbkdf2", "Pi", "N", "scrypt", "data", "sha256", "_data", "concatBytes", "utf8ToBytes", "_0n", "_1n", "_2n", "u8a", "bytes", "hex", "n", "data", "b", "gen", "object", "_0n", "_1n", "_2n", "b", "number", "n", "S", "Fp", "n2", "f", "_0n", "_1n", "n", "bitLen", "isLE", "_0n", "f", "_1n", "b", "bytes", "isLE", "_1n", "_0n", "_1n", "n", "f", "mask", "Fp", "data", "hex", "s", "_0n", "_1n", "_2n", "_3n", "_4n", "toBytes", "concatBytes", "bytes", "b", "n", "pointPrecomputes", "Point", "U1", "U2", "f", "a", "number", "Signature", "hash", "randomBytes", "_sig", "r", "hash", "randomBytes", "_1n", "_2n", "b", "_3n", "_6n", "n", "_0n", "BN_0", "BN_1", "_guard", "_value", "bytes", "r", "s", "v", "_r", "_v", "bytes", "randomBytes", "ripemd160", "scrypt", "sha256", "BN_0", "checksum", "BN_0", "signed", "_value", "_value", "_value", "_value", "data", "BN_0", "BN_1", "signed", "_value", "_value", "_value", "bytes", "N", "b", "n", "decode", "S", "N", "b", "V", "n", "split", "split", "output", "g", "decomposed", "Zeros", "bytes", "b", "BN_0", "BN_2", "BN_27", "BN_28", "BN_35", "version", "hash", "sha256", "_value", "data", "b", "_data", "_blobs", "signed", "signed", "value", "sha256", "BN_0", "BN_1", "BN_MAX_UINT256", "bytes", "BN_1", "BN_0", "_value", "signed", "BN_MAX_UINT256", "name", "_types", "type", "n", "b", "value", "_offset", "throwError", "_guard", "result", "process", "value", "type", "indexed", "name", "_a", "inputs", "data", "bytes", "bytes", "data", "hash", "PanicReasons", "f", "names", "b", "data", "bytes", "_data", "value", "BN_0", "getValue", "b", "getValue", "hash", "number", "data", "BN_0", "blockNumber", "_timeout", "receipt", "iface", "_iface", "BN_0", "iface", "internal", "fragment", "t", "listener", "passProperties", "addr", "target", "code", "hash", "iface", "data", "output", "data", "data", "error", "bytes", "_a", "iface", "BN_0", "allowNull", "BN_0", "value", "_url", "_chainId", "parseUnits", "_value", "name", "b", "_provider", "_filter", "hash", "_poller", "_running", "_blockNumber", "poll_fn", "BN_2", "copy", "_event", "hash", "t", "getTime", "_plugins", "_options", "_network", "data", "b", "fromBlock", "toBlock", "address", "filter", "_request", "_filter", "listener", "error", "tx", "bytes", "from", "copy", "_provider", "_poller", "_running", "poll_fn", "defaultOptions", "_to", "hash", "tx", "_value", "value", "_options", "_network", "_error", "id", "accounts", "bytes", "payload", "_network", "request", "defaultApiKey", "getHost", "_network", "data", "error", "request", "getHost", "_network", "request", "_network", "isPromise", "_network", "module", "id", "request", "response", "result", "data", "error", "transaction", "_provider", "_filter", "_subs", "_options", "_connect", "WebSocket", "getHost", "_network", "request", "getHost", "_network", "request", "BN_1", "BN_2", "stall", "getTime", "stringify", "value", "blockNumber", "getTime", "b", "BN_1", "BN_2", "result", "stringify", "stall", "_request", "_options", "getHost", "_network", "request", "data", "words", "data", "words", "_data", "data", "checksum", "words", "wordlist", "words", "checksum", "sha256", "_guard", "T1", "bytes", "i", "__classPrivateFieldSet", "__classPrivateFieldGet", "data", "__classPrivateFieldGet", "__classPrivateFieldSet", "__classPrivateFieldGet", "_a", "data", "object", "data", "version", "N", "salt", "dkLen", "key", "stall", "scrypt", "randomBytes", "defaultPath", "N", "Nibbles", "zpad", "_value", "sha256", "bytes", "_guard", "data", "ripemd160", "wordlist", "_a", "randomBytes", "data", "stall", "_a", "wallet", "data", "maxValue", "data", "accents", "words", "data", "checksum", "words", "checksum", "wordlist", "words", "checksum", "wordlist", "words", "accents", "checksum", "wordlist", "toString", "data", "wordlist", "b", "checksum", "words", "data", "_wordlist", "loadWords", "wordlist", "checksum", "words", "words", "checksum", "wordlist", "words", "checksum", "wordlist", "data", "_wordlist", "codes", "loadWords", "wordlist", "bytes", "i", "checksum", "words", "wordlists", "number", "n", "bytes", "b", "hash", "number", "exists", "output", "U32_MASK64", "_32n", "fromBig", "n", "split", "rotlSH", "rotlSL", "rotlBH", "rotlBL", "nc", "crypto", "u32", "createView", "rotr", "isLE", "utf8ToBytes", "toBytes", "data", "bytes", "concatBytes", "Hash", "toStr", "wrapConstructor", "toBytes", "wrapXOFConstructorWithOpts", "toBytes", "randomBytes", "crypto", "SHA3_PI", "SHA3_ROTL", "_SHA3_IOTA", "_0n", "_1n", "_2n", "_7n", "_256n", "_0x71n", "SHA3_IOTA_H", "SHA3_IOTA_L", "split", "rotlH", "rotlBH", "rotlSH", "rotlL", "rotlBL", "rotlSL", "keccakP", "Keccak", "Hash", "number", "u32", "isLE", "data", "exists", "toBytes", "bytes", "output", "gen", "wrapConstructor", "sha3_224", "sha3_256", "sha3_384", "sha3_512", "keccak_224", "keccak_256", "keccak_384", "keccak_512", "genShake", "wrapXOFConstructorWithOpts", "shake128", "shake256", "iface", "data", "setBigUint64", "isLE", "_32n", "Chi", "b", "Maj", "Hash", "createView", "data", "exists", "toBytes", "output", "SHA256_K", "SHA256_W", "SHA256", "rotr", "T1", "Chi", "T2", "Maj", "sha256", "wrapConstructor", "SHA256", "HMAC", "Hash", "hash", "toBytes", "exists", "bytes", "hmac", "utils_exports", "bitGet", "bitLen", "bitMask", "bitSet", "bytesToHex", "bytesToNumberBE", "bytesToNumberLE", "concatBytes", "createHmacDrbg", "ensureBytes", "equalBytes", "hexToBytes", "hexToNumber", "isBytes", "numberToBytesBE", "numberToBytesLE", "numberToHexUnpadded", "numberToVarBytesBE", "utf8ToBytes", "validateObject", "_0n", "_1n", "_2n", "hexes", "bytes", "hex", "n", "b", "u8n", "data", "u8fr", "gen", "validatorFns", "object", "_0n", "_1n", "_2n", "_3n", "_4n", "_5n", "_8n", "_9n", "_16n", "mod", "b", "pow", "invert", "number", "_0n", "mod", "b", "_1n", "n", "tonelliShanks", "_2n", "S", "pow", "_4n", "Fp", "FpSqrt", "_3n", "_8n", "_5n", "n2", "_16n", "_9n", "FIELD_FIELDS", "validateField", "validateObject", "FpPow", "f", "_0n", "_1n", "FpInvertBatch", "_1n", "_2n", "f", "nLength", "n", "Field", "bitLen", "isLE", "_0n", "FpSqrt", "bitMask", "mod", "FpPow", "invert", "FpInvertBatch", "b", "numberToBytesLE", "numberToBytesBE", "bytes", "bytesToNumberLE", "bytesToNumberBE", "getFieldBytesLength", "getMinHashLength", "mapHashToField", "isLE", "bytesToNumberBE", "bytesToNumberLE", "mod", "_1n", "numberToBytesLE", "numberToBytesBE", "_0n", "_1n", "wNAF", "n", "f", "mask", "bitLen", "wbits", "validateBasic", "validateField", "validateObject", "nLength", "validatePointOpts", "validateBasic", "validateObject", "Fp", "b2n", "h2b", "utils_exports", "DER", "DERErr", "data", "numberToHexUnpadded", "b", "_0n", "hex", "_1n", "_2n", "_3n", "_4n", "weierstrassPoints", "Field", "toBytes", "concatBytes", "bytes", "N", "isBytes", "bytesToHex", "bytesToNumberBE", "ensureBytes", "mod", "Point", "U1", "U2", "n", "f", "a", "wNAF", "validateOpts", "weierstrass", "invert", "numberToBytesBE", "number", "Signature", "hexToBytes", "getMinHashLength", "mapHashToField", "bitMask", "hash", "randomBytes", "createHmacDrbg", "_sig", "r", "s", "getHash", "hash", "hmac", "concatBytes", "randomBytes", "bytesToNumberBE", "b", "concatBytes", "utf8ToBytes", "validateObject", "hash", "mod", "Point", "_0n", "_1n", "_2n", "_3n", "Fp", "Fr", "Fp2", "Fp6", "Fp12", "weierstrassPoints", "G2", "f", "getMinHashLength", "mapHashToField", "Signature", "ensureBytes", "S", "msg", "_0n", "_1n", "_2n", "_3n", "Fp", "Fp2", "psi", "psi2", "G2psi", "G2psi2", "Field", "FpLegendre", "b", "n", "bitLen", "bitMask", "FpPow", "FpInvertBatch", "concatBytes", "Fp6", "Fp4Square", "b2", "Fp12", "_1n", "_2n", "_3n", "bitLen", "Field", "Fp", "Fp2", "n", "bitGet", "num", "sha256", "randomBytes", "weierstrass", "getHash", "keccak_256", "G2psi", "G2psi2", "psi", "bn254", "randomBytes", "Fp", "validateField", "b", "BufferPolyfill", "keccak_256", "bn254", "bn254", "bn254", "n", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_data", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_bytecode", "isSuperArgs", "_abi", "_abi", "_abi", "_abi", "_abi", "_abi", "_bytecode", "isSuperArgs", "_data", "_abi", "keccak_256", "id", "bytes", "b", "data"]
}
