arc200-client 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +16 -20
- package/dist/index.d.ts +16 -20
- package/dist/index.js +49 -358
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +50 -364
- package/dist/index.mjs.map +1 -1
- package/package.json +20 -16
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../contracts/artifacts/Arc200Client.ts","../src/getArc200Client.ts"],"sourcesContent":["import { Arc200Client, Arc200Factory, type ApprovalStruct } from '../contracts/artifacts/Arc200Client';\nimport { getArc200Client } from './getArc200Client';\nexport { Arc200Client, Arc200Factory, type ApprovalStruct };\nexport { getArc200Client };\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client';\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app';\nimport {\n Arc56Contract,\n getArc56ReturnValue,\n getABIStructFromABITuple,\n} from '@algorandfoundation/algokit-utils/types/app-arc56';\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client';\nimport {\n AppFactory as _AppFactory,\n AppFactoryAppClientParams,\n AppFactoryResolveAppClientByCreatorAndNameParams,\n AppFactoryDeployParams,\n AppFactoryParams,\n CreateSchema,\n} from '@algorandfoundation/algokit-utils/types/app-factory';\nimport {\n TransactionComposer,\n AppCallMethodCall,\n AppMethodCallTransactionArgument,\n SimulateOptions,\n RawSimulateOptions,\n SkipSignaturesSimulateOptions,\n} from '@algorandfoundation/algokit-utils/types/composer';\nimport {\n SendParams,\n SendSingleTransactionResult,\n SendAtomicTransactionComposerResults,\n} from '@algorandfoundation/algokit-utils/types/transaction';\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk';\nimport { SimulateResponse } from 'algosdk/dist/types/client/v2/algod/models/types';\n\nexport const APP_SPEC: Arc56Contract = {\n name: 'Arc200',\n structs: {\n ApprovalStruct: [\n { name: 'approvalAmount', type: 'uint256' },\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n },\n methods: [\n {\n name: 'bootstrap',\n args: [\n { type: 'byte[]', name: 'name' },\n { type: 'byte[]', name: 'symbol' },\n { type: 'uint8', name: 'decimals' },\n { type: 'uint256', name: 'totalSupply' },\n ],\n returns: { type: 'bool' },\n actions: { create: [], call: ['NoOp'] },\n readonly: false,\n events: [\n {\n name: 'arc200_Transfer',\n args: [\n { type: 'address', name: 'from' },\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: 'arc200_name',\n args: [],\n returns: { type: 'byte[32]', desc: 'The name of the token' },\n actions: { create: [], call: ['NoOp'] },\n readonly: true,\n desc: 'Returns the name of the token',\n events: [],\n recommendations: {},\n },\n {\n name: 'arc200_symbol',\n args: [],\n returns: { type: 'byte[8]', desc: 'The symbol of the token' },\n actions: { create: [], call: ['NoOp'] },\n readonly: true,\n desc: 'Returns the symbol of the token',\n events: [],\n recommendations: {},\n },\n {\n name: 'arc200_decimals',\n args: [],\n returns: { type: 'uint8', desc: 'The decimals of the token' },\n actions: { create: [], call: ['NoOp'] },\n readonly: true,\n desc: 'Returns the decimals of the token',\n events: [],\n recommendations: {},\n },\n {\n name: 'arc200_totalSupply',\n args: [],\n returns: { type: 'uint256', desc: 'The total supply of the token' },\n actions: { create: [], call: ['NoOp'] },\n readonly: true,\n desc: 'Returns the total supply of the token',\n events: [],\n recommendations: {},\n },\n {\n name: 'arc200_balanceOf',\n args: [{ type: 'address', name: 'owner', desc: 'The address of the owner of the token' }],\n returns: { type: 'uint256', desc: 'The current balance of the holder of the token' },\n actions: { create: [], call: ['NoOp'] },\n readonly: true,\n desc: 'Returns the current balance of the owner of the token',\n events: [],\n recommendations: {},\n },\n {\n name: 'arc200_transfer',\n args: [\n { type: 'address', name: 'to', desc: 'The destination of the transfer' },\n { type: 'uint256', name: 'value', desc: 'Amount of tokens to transfer' },\n ],\n returns: { type: 'bool', desc: 'Success' },\n actions: { create: [], call: ['NoOp'] },\n readonly: false,\n desc: 'Transfers tokens',\n events: [\n {\n name: 'arc200_Transfer',\n args: [\n { type: 'address', name: 'from' },\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: 'arc200_transferFrom',\n args: [\n { type: 'address', name: 'from', desc: 'The source of the transfer' },\n { type: 'address', name: 'to', desc: 'The destination of the transfer' },\n { type: 'uint256', name: 'value', desc: 'Amount of tokens to transfer' },\n ],\n returns: { type: 'bool', desc: 'Success' },\n actions: { create: [], call: ['NoOp'] },\n readonly: false,\n desc: 'Transfers tokens from source to destination as approved spender',\n events: [\n {\n name: 'arc200_Approval',\n args: [\n { type: 'address', name: 'owner' },\n { type: 'address', name: 'spender' },\n { type: 'uint256', name: 'value' },\n ],\n },\n {\n name: 'arc200_Transfer',\n args: [\n { type: 'address', name: 'from' },\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: 'arc200_approve',\n args: [\n { type: 'address', name: 'spender', desc: \"Who is allowed to take tokens on owner's behalf\" },\n { type: 'uint256', name: 'value', desc: 'Amount of tokens to be taken by spender' },\n ],\n returns: { type: 'bool', desc: 'Success' },\n actions: { create: [], call: ['NoOp'] },\n readonly: false,\n desc: 'Approve spender for a token',\n events: [\n {\n name: 'arc200_Approval',\n args: [\n { type: 'address', name: 'owner' },\n { type: 'address', name: 'spender' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: 'arc200_allowance',\n args: [\n { type: 'address', name: 'owner', desc: \"Owner's account\" },\n { type: 'address', name: 'spender', desc: \"Who is allowed to take tokens on owner's behalf\" },\n ],\n returns: { type: 'uint256', desc: 'The remaining allowance' },\n actions: { create: [], call: ['NoOp'] },\n readonly: true,\n desc: 'Returns the current allowance of the spender of the tokens of the owner',\n events: [],\n recommendations: {},\n },\n ],\n arcs: [22, 28],\n desc: 'Smart Contract Token Base Interface',\n networks: {},\n state: {\n schema: { global: { ints: 0, bytes: 4 }, local: { ints: 0, bytes: 0 } },\n keys: {\n global: {\n name: { keyType: 'AVMString', valueType: 'byte[]', key: 'bg==', desc: 'Name of the asset. Max 32 bytes' },\n symbol: { keyType: 'AVMString', valueType: 'byte[]', key: 'cw==', desc: 'Symbol of the asset. Max 8 bytes' },\n decimals: {\n keyType: 'AVMString',\n valueType: 'uint8',\n key: 'ZA==',\n desc: 'Decimals of the asset. Recommended is 6 decimal places.',\n },\n totalSupply: { keyType: 'AVMString', valueType: 'uint256', key: 'dA==', desc: 'Minted supply' },\n },\n local: {},\n box: {},\n },\n maps: {\n global: {},\n local: {},\n box: {\n balances: { keyType: 'address', valueType: 'uint256', prefix: 'Yg==' },\n approvals: { keyType: 'byte[32]', valueType: 'ApprovalStruct', prefix: 'YQ==' },\n },\n },\n },\n bareActions: { create: ['NoOp'], call: [] },\n sourceInfo: {\n approval: {\n sourceInfo: [\n { pc: [593, 723], errorMessage: 'Box must have value' },\n { pc: [724], errorMessage: 'Index access is out of bounds' },\n { pc: [614], errorMessage: 'Insufficient balance at the sender account' },\n { pc: [371], errorMessage: 'Name of the asset must be longer or equal to 1 character' },\n { pc: [374], errorMessage: 'Name of the asset must be shorter or equal to 32 characters' },\n { pc: [145, 167, 189, 214, 236, 255, 271, 287, 303, 319], errorMessage: 'OnCompletion is not NoOp' },\n { pc: [363], errorMessage: 'Only deployer of this smart contract can call bootstrap method' },\n { pc: [382], errorMessage: 'Symbol of the asset must be longer or equal to 1 character' },\n { pc: [385], errorMessage: 'Symbol of the asset must be shorter or equal to 8 characters' },\n { pc: [392], errorMessage: 'This method can be called only once' },\n { pc: [352], errorMessage: 'can only call when creating' },\n { pc: [148, 170, 192, 217, 239, 258, 274, 290, 306, 322], errorMessage: 'can only call when not creating' },\n { pc: [443, 458, 473, 478], errorMessage: 'check GlobalState exists' },\n { pc: [518], errorMessage: 'insufficient approval' },\n { pc: [451, 466, 692], errorMessage: 'invalid size' },\n { pc: [526, 632, 654], errorMessage: 'overflow' },\n ],\n pcOffsetMethod: 'none',\n },\n clear: { sourceInfo: [], pcOffsetMethod: 'none' },\n },\n source: {\n approval:\n 'I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMSAzMiAwIDgKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiYiIgInQiIDB4ODAgMHg3OTgzYzM1YyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4biBOdW1BcHBBcmdzCiAgICBieiBtYWluX2JhcmVfcm91dGluZ0AxNQogICAgcHVzaGJ5dGVzcyAweDk3NTM4MmUyIDB4NjU3ZDEzZWMgMHhiNmFlMWEyNSAweDg0ZWMxM2Q1IDB4ZWM5OTYwNDEgMHg4MmU1NzNjNCAweGRhNzAyNWI5IDB4NGE5NjhmOGYgMHhiNTQyMjEyNSAweGJiYjMxOWYzIC8vIG1ldGhvZCAiYm9vdHN0cmFwKGJ5dGVbXSxieXRlW10sdWludDgsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfbmFtZSgpYnl0ZVszMl0iLCBtZXRob2QgImFyYzIwMF9zeW1ib2woKWJ5dGVbOF0iLCBtZXRob2QgImFyYzIwMF9kZWNpbWFscygpdWludDgiLCBtZXRob2QgImFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NiIsIG1ldGhvZCAiYXJjMjAwX2JhbGFuY2VPZihhZGRyZXNzKXVpbnQyNTYiLCBtZXRob2QgImFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX2FsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDI1NiIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fYm9vdHN0cmFwX3JvdXRlQDMgbWFpbl9hcmMyMDBfbmFtZV9yb3V0ZUA0IG1haW5fYXJjMjAwX3N5bWJvbF9yb3V0ZUA1IG1haW5fYXJjMjAwX2RlY2ltYWxzX3JvdXRlQDYgbWFpbl9hcmMyMDBfdG90YWxTdXBwbHlfcm91dGVANyBtYWluX2FyYzIwMF9iYWxhbmNlT2Zfcm91dGVAOCBtYWluX2FyYzIwMF90cmFuc2Zlcl9yb3V0ZUA5IG1haW5fYXJjMjAwX3RyYW5zZmVyRnJvbV9yb3V0ZUAxMCBtYWluX2FyYzIwMF9hcHByb3ZlX3JvdXRlQDExIG1haW5fYXJjMjAwX2FsbG93YW5jZV9yb3V0ZUAxMgoKbWFpbl9hZnRlcl9pZl9lbHNlQDE5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgaW50Y18yIC8vIDAKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfYWxsb3dhbmNlX3JvdXRlQDEyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfYXBwcm92ZV9yb3V0ZUAxMToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNzQKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGFyYzIwMF9hcHByb3ZlCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF90cmFuc2ZlckZyb21fcm91dGVAMTA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU3CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgY2FsbHN1YiBhcmMyMDBfdHJhbnNmZXJGcm9tCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF90cmFuc2Zlcl9yb3V0ZUA5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ0CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0NAogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgYXJjMjAwX3RyYW5zZmVyCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF9iYWxhbmNlT2Zfcm91dGVAODoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NAogICAgLy8gZXhwb3J0IGNsYXNzIEFyYzIwMCBleHRlbmRzIENvbnRyYWN0IHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBjYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMCAvLyAxCiAgICByZXR1cm4KCm1haW5fYXJjMjAwX3RvdGFsU3VwcGx5X3JvdXRlQDc6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTIxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFyYzIwMF90b3RhbFN1cHBseQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfZGVjaW1hbHNfcm91dGVANjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMTEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjMjAwX2RlY2ltYWxzCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2FyYzIwMF9zeW1ib2xfcm91dGVANToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMDEKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYXJjMjAwX3N5bWJvbAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9hcmMyMDBfbmFtZV9yb3V0ZUA0OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjkxCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGFyYzIwMF9uYW1lCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzAgLy8gMQogICAgcmV0dXJuCgptYWluX2Jvb3RzdHJhcF9yb3V0ZUAzOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjY1CiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIGJvb3RzdHJhcAogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKbWFpbl9iYXJlX3JvdXRpbmdAMTU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDQKICAgIC8vIGV4cG9ydCBjbGFzcyBBcmMyMDAgZXh0ZW5kcyBDb250cmFjdCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDE5CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgIQogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBjcmVhdGluZwogICAgaW50Y18wIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmJvb3RzdHJhcChuYW1lOiBieXRlcywgc3ltYm9sOiBieXRlcywgZGVjaW1hbHM6IGJ5dGVzLCB0b3RhbFN1cHBseTogYnl0ZXMpIC0+IGJ5dGVzOgpib290c3RyYXA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjUtNjYKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYm9vdHN0cmFwKG5hbWU6IER5bmFtaWNCeXRlcywgc3ltYm9sOiBEeW5hbWljQnl0ZXMsIGRlY2ltYWxzOiBVaW50TjgsIHRvdGFsU3VwcGx5OiBVaW50TjI1Nik6IEJvb2wgewogICAgcHJvdG8gNCAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjcKICAgIC8vIGFzc2VydChUeG4uc2VuZGVyID09PSBHbG9iYWwuY3JlYXRvckFkZHJlc3MsICdPbmx5IGRlcGxveWVyIG9mIHRoaXMgc21hcnQgY29udHJhY3QgY2FuIGNhbGwgYm9vdHN0cmFwIG1ldGhvZCcpOwogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgZGVwbG95ZXIgb2YgdGhpcyBzbWFydCBjb250cmFjdCBjYW4gY2FsbCBib290c3RyYXAgbWV0aG9kCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjgKICAgIC8vIGFzc2VydChuYW1lLm5hdGl2ZS5sZW5ndGggPiAwLCAnTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXInKTsKICAgIGZyYW1lX2RpZyAtNAogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgZHVwCiAgICBhc3NlcnQgLy8gTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2OQogICAgLy8gYXNzZXJ0KG5hbWUubmF0aXZlLmxlbmd0aCA8PSAzMiwgJ05hbWUgb2YgdGhlIGFzc2V0IG11c3QgYmUgc2hvcnRlciBvciBlcXVhbCB0byAzMiBjaGFyYWN0ZXJzJyk7CiAgICBpbnRjXzEgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDMyIGNoYXJhY3RlcnMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3MAogICAgLy8gYXNzZXJ0KHN5bWJvbC5uYXRpdmUubGVuZ3RoID4gMCwgJ1N5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXInKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZXh0cmFjdCAyIDAKICAgIGxlbgogICAgZHVwCiAgICBhc3NlcnQgLy8gU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIGxvbmdlciBvciBlcXVhbCB0byAxIGNoYXJhY3RlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjcxCiAgICAvLyBhc3NlcnQoc3ltYm9sLm5hdGl2ZS5sZW5ndGggPD0gOCwgJ1N5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDggY2hhcmFjdGVycycpOwogICAgaW50Y18zIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIHNob3J0ZXIgb3IgZXF1YWwgdG8gOCBjaGFyYWN0ZXJzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjAKICAgIC8vIHB1YmxpYyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPFVpbnROMjU2Pih7IGtleTogJ3QnIH0pOwogICAgaW50Y18yIC8vIDAKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzIKICAgIC8vIGFzc2VydCghdGhpcy50b3RhbFN1cHBseS5oYXNWYWx1ZSwgJ1RoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYnVyeSAxCiAgICAhCiAgICBhc3NlcnQgLy8gVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBvbmx5IG9uY2UKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0OAogICAgLy8gcHVibGljIG5hbWUgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAnbicgfSk7CiAgICBwdXNoYnl0ZXMgIm4iCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzQKICAgIC8vIHRoaXMubmFtZS52YWx1ZSA9IG5hbWU7CiAgICBmcmFtZV9kaWcgLTQKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIHB1YmxpYyBzeW1ib2wgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAncycgfSk7CiAgICBwdXNoYnl0ZXMgInMiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzUKICAgIC8vIHRoaXMuc3ltYm9sLnZhbHVlID0gc3ltYm9sOwogICAgZnJhbWVfZGlnIC0zCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYwCiAgICAvLyBwdWJsaWMgdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTxVaW50TjI1Nj4oeyBrZXk6ICd0JyB9KTsKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzYKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgPSB0b3RhbFN1cHBseTsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1NgogICAgLy8gcHVibGljIGRlY2ltYWxzID0gR2xvYmFsU3RhdGU8VWludE44Pih7IGtleTogJ2QnIH0pOwogICAgcHVzaGJ5dGVzICJkIgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjc3CiAgICAvLyB0aGlzLmRlY2ltYWxzLnZhbHVlID0gZGVjaW1hbHM7CiAgICBmcmFtZV9kaWcgLTIKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzgKICAgIC8vIGNvbnN0IHNlbmRlciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYyCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZGlnIDEKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjgwCiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSB0b3RhbFN1cHBseTsKICAgIGZyYW1lX2RpZyAtMQogICAgYm94X3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjgyCiAgICAvLyBlbWl0KG5ldyBhcmMyMDBfVHJhbnNmZXIoeyBmcm9tOiBuZXcgQWRkcmVzcyhHbG9iYWwuemVyb0FkZHJlc3MpLCB0bzogc2VuZGVyLCB2YWx1ZTogdG90YWxTdXBwbHkgfSkpOwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBieXRlYyA0IC8vIG1ldGhvZCAiYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODMKICAgIC8vIHJldHVybiBuZXcgQm9vbCh0cnVlKTsKICAgIGJ5dGVjXzMgLy8gMHg4MAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX25hbWUoKSAtPiBieXRlczoKYXJjMjAwX25hbWU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NDgKICAgIC8vIHB1YmxpYyBuYW1lID0gR2xvYmFsU3RhdGU8RHluYW1pY0J5dGVzPih7IGtleTogJ24nIH0pOwogICAgaW50Y18yIC8vIDAKICAgIHB1c2hieXRlcyAibiIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OTMKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KHRoaXMubmFtZS52YWx1ZS5uYXRpdmUpOwogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzEgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfc3ltYm9sKCkgLT4gYnl0ZXM6CmFyYzIwMF9zeW1ib2w6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIHB1YmxpYyBzeW1ib2wgPSBHbG9iYWxTdGF0ZTxEeW5hbWljQnl0ZXM+KHsga2V5OiAncycgfSk7CiAgICBpbnRjXzIgLy8gMAogICAgcHVzaGJ5dGVzICJzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMDMKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8OD4odGhpcy5zeW1ib2wudmFsdWUubmF0aXZlKTsKICAgIGV4dHJhY3QgMiAwCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBzaXplCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfZGVjaW1hbHMoKSAtPiBieXRlczoKYXJjMjAwX2RlY2ltYWxzOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjU2CiAgICAvLyBwdWJsaWMgZGVjaW1hbHMgPSBHbG9iYWxTdGF0ZTxVaW50Tjg+KHsga2V5OiAnZCcgfSk7CiAgICBpbnRjXzIgLy8gMAogICAgcHVzaGJ5dGVzICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMTMKICAgIC8vIHJldHVybiB0aGlzLmRlY2ltYWxzLnZhbHVlOwogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RvdGFsU3VwcGx5KCkgLT4gYnl0ZXM6CmFyYzIwMF90b3RhbFN1cHBseToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2MAogICAgLy8gcHVibGljIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8VWludE4yNTY+KHsga2V5OiAndCcgfSk7CiAgICBpbnRjXzIgLy8gMAogICAgYnl0ZWNfMiAvLyAidCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTIzCiAgICAvLyByZXR1cm4gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF9iYWxhbmNlT2Yob3duZXI6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX2JhbGFuY2VPZjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzItMTMzCiAgICAvLyBAYXJjNC5hYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcHVibGljIGFyYzIwMF9iYWxhbmNlT2Yob3duZXI6IEFkZHJlc3MpOiBhcmM0LlVpbnROMjU2IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjEzNAogICAgLy8gcmV0dXJuIHRoaXMuX2JhbGFuY2VPZihvd25lcik7CiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2JhbGFuY2VPZgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RyYW5zZmVyKHRvOiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX3RyYW5zZmVyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0NC0xNDUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXJjMjAwX3RyYW5zZmVyKHRvOiBBZGRyZXNzLCB2YWx1ZTogYXJjNC5VaW50TjI1Nik6IGFyYzQuQm9vbCB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNDYKICAgIC8vIHJldHVybiB0aGlzLl90cmFuc2ZlcihuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKSwgdG8sIHZhbHVlKTsKICAgIHR4biBTZW5kZXIKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF90cmFuc2ZlcgogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RyYW5zZmVyRnJvbShmcm9tOiBieXRlcywgdG86IGJ5dGVzLCB2YWx1ZTogYnl0ZXMpIC0+IGJ5dGVzOgphcmMyMDBfdHJhbnNmZXJGcm9tOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE1Ny0xNTgKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgYXJjMjAwX3RyYW5zZmVyRnJvbShmcm9tOiBBZGRyZXNzLCB0bzogQWRkcmVzcywgdmFsdWU6IGFyYzQuVWludE4yNTYpOiBhcmM0LkJvb2wgewogICAgcHJvdG8gMyAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU5CiAgICAvLyBjb25zdCBzcGVuZGVyID0gbmV3IEFkZHJlc3MoVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTYwCiAgICAvLyBjb25zdCBzcGVuZGVyX2FsbG93YW5jZSA9IHRoaXMuX2FsbG93YW5jZShmcm9tLCBzcGVuZGVyKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZGlnIDEKICAgIGNhbGxzdWIgX2FsbG93YW5jZQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE2MQogICAgLy8gYXNzZXJ0KHNwZW5kZXJfYWxsb3dhbmNlLm5hdGl2ZSA+PSB2YWx1ZS5uYXRpdmUsICdpbnN1ZmZpY2llbnQgYXBwcm92YWwnKTsKICAgIGR1cAogICAgZnJhbWVfZGlnIC0xCiAgICBiPj0KICAgIGFzc2VydCAvLyBpbnN1ZmZpY2llbnQgYXBwcm92YWwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNjIKICAgIC8vIGNvbnN0IG5ld19zcGVuZGVyX2FsbG93YW5jZSA9IG5ldyBVaW50TjI1NihzcGVuZGVyX2FsbG93YW5jZS5uYXRpdmUgLSB2YWx1ZS5uYXRpdmUpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiLQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAzMgogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18xIC8vIDMyCiAgICBiemVybwogICAgYnwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNjMKICAgIC8vIHRoaXMuX2FwcHJvdmUoZnJvbSwgc3BlbmRlciwgbmV3X3NwZW5kZXJfYWxsb3dhbmNlKTsKICAgIGZyYW1lX2RpZyAtMwogICAgY292ZXIgMgogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTY0CiAgICAvLyByZXR1cm4gdGhpcy5fdHJhbnNmZXIoZnJvbSwgdG8sIHZhbHVlKTsKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX3RyYW5zZmVyCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYXBwcm92ZShzcGVuZGVyOiBieXRlcywgdmFsdWU6IGJ5dGVzKSAtPiBieXRlczoKYXJjMjAwX2FwcHJvdmU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTc0LTE3NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIC8vIHB1YmxpYyBhcmMyMDBfYXBwcm92ZShzcGVuZGVyOiBBZGRyZXNzLCB2YWx1ZTogYXJjNC5VaW50TjI1Nik6IEJvb2wgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTc2CiAgICAvLyBjb25zdCBvd25lciA9IG5ldyBBZGRyZXNzKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE3NwogICAgLy8gcmV0dXJuIHRoaXMuX2FwcHJvdmUob3duZXIsIHNwZW5kZXIsIHZhbHVlKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9hcHByb3ZlCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYWxsb3dhbmNlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IGJ5dGVzOgphcmMyMDBfYWxsb3dhbmNlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4Ni0xODcKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwdWJsaWMgYXJjMjAwX2FsbG93YW5jZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IGFyYzQuVWludE4yNTYgewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTg4CiAgICAvLyByZXR1cm4gdGhpcy5fYWxsb3dhbmNlKG93bmVyLCBzcGVuZGVyKTsKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjYWxsc3ViIF9hbGxvd2FuY2UKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl9iYWxhbmNlT2Yob3duZXI6IGJ5dGVzKSAtPiBieXRlczoKX2JhbGFuY2VPZjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTEKICAgIC8vIHByaXZhdGUgX2JhbGFuY2VPZihvd25lcjogQWRkcmVzcyk6IFVpbnROMjU2IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYyCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIGR1cAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2VzKG93bmVyKS5leGlzdHMpIHJldHVybiBuZXcgVWludE4yNTYoMCk7CiAgICBib3hfbGVuCiAgICBidXJ5IDEKICAgIGJueiBfYmFsYW5jZU9mX2FmdGVyX2lmX2Vsc2VAMgogICAgYnl0ZWMgNSAvLyAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKICAgIHN3YXAKICAgIHJldHN1YgoKX2JhbGFuY2VPZl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTkzCiAgICAvLyByZXR1cm4gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWU7CiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl90cmFuc2ZlcihzZW5kZXI6IGJ5dGVzLCByZWNpcGllbnQ6IGJ5dGVzLCBhbW91bnQ6IGJ5dGVzKSAtPiBieXRlczoKX3RyYW5zZmVyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NgogICAgLy8gcHJpdmF0ZSBfdHJhbnNmZXIoc2VuZGVyOiBBZGRyZXNzLCByZWNpcGllbnQ6IEFkZHJlc3MsIGFtb3VudDogVWludE4yNTYpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NwogICAgLy8gY29uc3Qgc2VuZGVyX2JhbGFuY2UgPSB0aGlzLl9iYWxhbmNlT2Yoc2VuZGVyKTsKICAgIGZyYW1lX2RpZyAtMwogICAgY2FsbHN1YiBfYmFsYW5jZU9mCiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTgKICAgIC8vIGNvbnN0IHJlY2lwaWVudF9iYWxhbmNlID0gdGhpcy5fYmFsYW5jZU9mKHJlY2lwaWVudCk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgX2JhbGFuY2VPZgogICAgc3dhcAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5OQogICAgLy8gYXNzZXJ0KHNlbmRlcl9iYWxhbmNlLm5hdGl2ZSA+PSBhbW91bnQubmF0aXZlLCAnSW5zdWZmaWNpZW50IGJhbGFuY2UgYXQgdGhlIHNlbmRlciBhY2NvdW50Jyk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGI+PQogICAgYXNzZXJ0IC8vIEluc3VmZmljaWVudCBiYWxhbmNlIGF0IHRoZSBzZW5kZXIgYWNjb3VudAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwMQogICAgLy8gaWYgKHNlbmRlciAhPT0gcmVjaXBpZW50KSB7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgIT0KICAgIGJ6IF90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDMKICAgIC8vIHRoaXMuYmFsYW5jZXMoc2VuZGVyKS52YWx1ZSA9IG5ldyBVaW50TjI1NihzZW5kZXJfYmFsYW5jZS5uYXRpdmUgLSBhbW91bnQubmF0aXZlKTsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzEgLy8gMzIKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2MgogICAgLy8gcHVibGljIGJhbGFuY2VzID0gQm94TWFwPEFkZHJlc3MsIFVpbnROMjU2Pih7IGtleVByZWZpeDogJ2InIH0pOwogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjAzCiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSBuZXcgVWludE4yNTYoc2VuZGVyX2JhbGFuY2UubmF0aXZlIC0gYW1vdW50Lm5hdGl2ZSk7CiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjA0CiAgICAvLyB0aGlzLmJhbGFuY2VzKHJlY2lwaWVudCkudmFsdWUgPSBuZXcgVWludE4yNTYocmVjaXBpZW50X2JhbGFuY2UubmF0aXZlICsgYW1vdW50Lm5hdGl2ZSkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGIrCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBifAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYyCiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludE4yNTY+KHsga2V5UHJlZml4OiAnYicgfSk7CiAgICBieXRlY18xIC8vICJiIgogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDQKICAgIC8vIHRoaXMuYmFsYW5jZXMocmVjaXBpZW50KS52YWx1ZSA9IG5ldyBVaW50TjI1NihyZWNpcGllbnRfYmFsYW5jZS5uYXRpdmUgKyBhbW91bnQubmF0aXZlKQogICAgc3dhcAogICAgYm94X3B1dAoKX3RyYW5zZmVyX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDYKICAgIC8vIGVtaXQobmV3IGFyYzIwMF9UcmFuc2Zlcih7IGZyb206IHNlbmRlciwgdG86IHJlY2lwaWVudCwgdmFsdWU6IGFtb3VudCB9KSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImFyYzIwMF9UcmFuc2ZlcihhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwNwogICAgLy8gcmV0dXJuIG5ldyBCb29sKHRydWUpOwogICAgYnl0ZWNfMyAvLyAweDgwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl9hcHByb3ZhbEtleShvd25lcjogYnl0ZXMsIHNwZW5kZXI6IGJ5dGVzKSAtPiBieXRlczoKX2FwcHJvdmFsS2V5OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwOQogICAgLy8gcHJpdmF0ZSBfYXBwcm92YWxLZXkob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiBTdGF0aWNCeXRlczwzMj4gewogICAgcHJvdG8gMiAxCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjEwCiAgICAvLyByZXR1cm4gbmV3IFN0YXRpY0J5dGVzPDMyPihvcC5zaGEyNTYob3AuY29uY2F0KG93bmVyLmJ5dGVzLCBzcGVuZGVyLmJ5dGVzKSkpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgc2hhMjU2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgc2l6ZQogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuX2FsbG93YW5jZShvd25lcjogYnl0ZXMsIHNwZW5kZXI6IGJ5dGVzKSAtPiBieXRlczoKX2FsbG93YW5jZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMTMKICAgIC8vIHByaXZhdGUgX2FsbG93YW5jZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IFVpbnROMjU2IHsKICAgIHByb3RvIDIgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxNAogICAgLy8gY29uc3Qga2V5ID0gdGhpcy5fYXBwcm92YWxLZXkob3duZXIsIHNwZW5kZXIpOwogICAgZnJhbWVfZGlnIC0yCiAgICBmcmFtZV9kaWcgLTEKICAgIGNhbGxzdWIgX2FwcHJvdmFsS2V5CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjQKICAgIC8vIHB1YmxpYyBhcHByb3ZhbHMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBBcHByb3ZhbFN0cnVjdD4oeyBrZXlQcmVmaXg6ICdhJyB9KTsKICAgIHB1c2hieXRlcyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjE1CiAgICAvLyBpZiAoIXRoaXMuYXBwcm92YWxzKGtleSkuZXhpc3RzKSByZXR1cm4gbmV3IFVpbnROMjU2KDApOwogICAgYm94X2xlbgogICAgYnVyeSAxCiAgICBibnogX2FsbG93YW5jZV9hZnRlcl9pZl9lbHNlQDIKICAgIGJ5dGVjIDUgLy8gMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCiAgICBzd2FwCiAgICByZXRzdWIKCl9hbGxvd2FuY2VfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxNgogICAgLy8gcmV0dXJuIHRoaXMuYXBwcm92YWxzKGtleSkudmFsdWUuYXBwcm92YWxBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGV4dHJhY3QgMCAzMiAvLyBvbiBlcnJvcjogSW5kZXggYWNjZXNzIGlzIG91dCBvZiBib3VuZHMKICAgIHN3YXAKICAgIHJldHN1YgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLl9hcHByb3ZlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMsIGFtb3VudDogYnl0ZXMpIC0+IGJ5dGVzOgpfYXBwcm92ZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMTkKICAgIC8vIHByaXZhdGUgX2FwcHJvdmUob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MsIGFtb3VudDogVWludE4yNTYpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyMAogICAgLy8gY29uc3Qga2V5ID0gdGhpcy5fYXBwcm92YWxLZXkob3duZXIsIHNwZW5kZXIpOwogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgIGNhbGxzdWIgX2FwcHJvdmFsS2V5CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjIxLTIyNQogICAgLy8gY29uc3QgYXBwcm92YWxCb3g6IEFwcHJvdmFsU3RydWN0ID0gbmV3IEFwcHJvdmFsU3RydWN0KHsKICAgIC8vICAgYXBwcm92YWxBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgb3duZXI6IG93bmVyLAogICAgLy8gICBzcGVuZGVyOiBzcGVuZGVyLAogICAgLy8gfSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAtMwogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjY0CiAgICAvLyBwdWJsaWMgYXBwcm92YWxzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgQXBwcm92YWxTdHJ1Y3Q+KHsga2V5UHJlZml4OiAnYScgfSk7CiAgICBwdXNoYnl0ZXMgImEiCiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyNgogICAgLy8gdGhpcy5hcHByb3ZhbHMoa2V5KS52YWx1ZSA9IGFwcHJvdmFsQm94LmNvcHkoKTsKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjcKICAgIC8vIGVtaXQobmV3IGFyYzIwMF9BcHByb3ZhbCh7IG93bmVyOiBvd25lciwgc3BlbmRlcjogc3BlbmRlciwgdmFsdWU6IGFtb3VudCB9KSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MTk2OWY4NjUgLy8gbWV0aG9kICJhcmMyMDBfQXBwcm92YWwoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjgKICAgIC8vIHJldHVybiBuZXcgQm9vbCh0cnVlKTsKICAgIGJ5dGVjXzMgLy8gMHg4MAogICAgcmV0c3ViCg==',\n clear:\n 'I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==',\n },\n byteCode: {\n approval:\n 'CiAEASAACCYGBBUffHUBYgF0AYAEeYPDXCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEbQQEZggoEl1OC4gRlfRPsBLauGiUEhOwT1QTsmWBBBILlc8QE2nAluQRKlo+PBLVCISUEu7MZ8zYaAI4KALAAoACQAIAAcABdAEcALgAYAAIkQzEZFEQxGEQ2GgE2GgKIAZMoTFCwIkMxGRREMRhENhoBNhoCiAFwKExQsCJDMRkURDEYRDYaATYaAjYaA4gBKShMULAiQzEZFEQxGEQ2GgE2GgKIAQYoTFCwIkMxGRREMRhENhoBiADqKExQsCJDMRkURDEYRIgA1ShMULAiQzEZFEQxGESIAL4oTFCwIkMxGRREMRhEiACfKExQsCJDMRkURDEYRIgAgChMULAiQzEZFEQxGEQ2GgE2GgI2GgM2GgSIABEoTFCwIkMxGUD/LzEYFEQiQ4oEATEAMgkSRIv8VwIAFUlEIw5Ei/1XAgAVSUQlDkQkKmVFARREgAFui/xngAFzi/1nKov/Z4ABZIv+ZzEAKUsBUIv/vzIDTFCL/1AnBExQsCuJJIABbmVEVwIASRUjEkSJJIABc2VEVwIASRUlEkSJJIABZGVEiSQqZUSJigEBi/+IAFSJigIBMQCL/ov/iABfiYoDATEAi/1LAYgAtEmL/6dEi/+hSRUjDkQjr6uL/U4CiADASIv9i/6L/4gAMYmKAgExAIv+i/+IAKmJigIBi/6L/4gAe4mKAQEpi/9QSb1FAUAABCcFTImLAL5ETImKAwGL/Yj/4EmL/oj/2kyL/6dEi/2L/hNBACeLAIv/oUkVIw5EI69MSwGrKYv9UEy/iwGL/6BJFSMORKspi/5QTL+L/Yv+UIv/UCcETFCwK4wAiYoCAYv+i/9QAUkVIxJEiYoCAYv+i/+I/+eAAWFMUEm9RQFAAAQnBUyJiwC+RFcAIEyJigMBi/2L/oj/xIv/i/1Qi/5QgAFhTwJQTL+L/Yv+UIv/UIAEGWn4ZUxQsCuJ',\n clear: 'CoEBQw==',\n },\n compilerInfo: { compiler: 'puya', compilerVersion: { major: 4, minor: 7, patch: 0 } },\n events: [\n {\n name: 'arc200_Transfer',\n args: [\n { type: 'address', name: 'from' },\n { type: 'address', name: 'to' },\n { type: 'uint256', name: 'value' },\n ],\n },\n {\n name: 'arc200_Approval',\n args: [\n { type: 'address', name: 'owner' },\n { type: 'address', name: 'spender' },\n { type: 'uint256', name: 'value' },\n ],\n },\n ],\n templateVariables: {},\n} as unknown as Arc56Contract;\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined;\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined;\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value;\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined;\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never;\n\n// Type definitions for ARC-56 structs\n\nexport type ApprovalStruct = {\n approvalAmount: bigint;\n owner: string;\n spender: string;\n};\n\n/**\n * Converts the ABI tuple representation of a ApprovalStruct to the struct representation\n */\nexport function ApprovalStructFromTuple(abiTuple: [bigint, string, string]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ApprovalStruct, APP_SPEC.structs) as ApprovalStruct;\n}\n\n/**\n * The argument types for the Arc200 contract\n */\nexport type Arc200Args = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'bootstrap(byte[],byte[],uint8,uint256)bool': {\n name: Uint8Array;\n symbol: Uint8Array;\n decimals: bigint | number;\n totalSupply: bigint | number;\n };\n 'arc200_name()byte[32]': Record<string, never>;\n 'arc200_symbol()byte[8]': Record<string, never>;\n 'arc200_decimals()uint8': Record<string, never>;\n 'arc200_totalSupply()uint256': Record<string, never>;\n 'arc200_balanceOf(address)uint256': {\n /**\n * The address of the owner of the token\n */\n owner: string;\n };\n 'arc200_transfer(address,uint256)bool': {\n /**\n * The destination of the transfer\n */\n to: string;\n /**\n * Amount of tokens to transfer\n */\n value: bigint | number;\n };\n 'arc200_transferFrom(address,address,uint256)bool': {\n /**\n * The source of the transfer\n */\n from: string;\n /**\n * The destination of the transfer\n */\n to: string;\n /**\n * Amount of tokens to transfer\n */\n value: bigint | number;\n };\n 'arc200_approve(address,uint256)bool': {\n /**\n * Who is allowed to take tokens on owner's behalf\n */\n spender: string;\n /**\n * Amount of tokens to be taken by spender\n */\n value: bigint | number;\n };\n 'arc200_allowance(address,address)uint256': {\n /**\n * Owner's account\n */\n owner: string;\n /**\n * Who is allowed to take tokens on owner's behalf\n */\n spender: string;\n };\n };\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'bootstrap(byte[],byte[],uint8,uint256)bool': [\n name: Uint8Array,\n symbol: Uint8Array,\n decimals: bigint | number,\n totalSupply: bigint | number,\n ];\n 'arc200_name()byte[32]': [];\n 'arc200_symbol()byte[8]': [];\n 'arc200_decimals()uint8': [];\n 'arc200_totalSupply()uint256': [];\n 'arc200_balanceOf(address)uint256': [owner: string];\n 'arc200_transfer(address,uint256)bool': [to: string, value: bigint | number];\n 'arc200_transferFrom(address,address,uint256)bool': [from: string, to: string, value: bigint | number];\n 'arc200_approve(address,uint256)bool': [spender: string, value: bigint | number];\n 'arc200_allowance(address,address)uint256': [owner: string, spender: string];\n };\n};\n\n/**\n * The return type for each method\n */\nexport type Arc200Returns = {\n 'bootstrap(byte[],byte[],uint8,uint256)bool': boolean;\n 'arc200_name()byte[32]': Uint8Array;\n 'arc200_symbol()byte[8]': Uint8Array;\n 'arc200_decimals()uint8': number;\n 'arc200_totalSupply()uint256': bigint;\n 'arc200_balanceOf(address)uint256': bigint;\n 'arc200_transfer(address,uint256)bool': boolean;\n 'arc200_transferFrom(address,address,uint256)bool': boolean;\n 'arc200_approve(address,uint256)bool': boolean;\n 'arc200_allowance(address,address)uint256': bigint;\n};\n\n/**\n * Defines the types of available calls and state of the Arc200 smart contract.\n */\nexport type Arc200Types = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods: Record<\n 'bootstrap(byte[],byte[],uint8,uint256)bool' | 'bootstrap',\n {\n argsObj: Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'];\n argsTuple: Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool'];\n returns: Arc200Returns['bootstrap(byte[],byte[],uint8,uint256)bool'];\n }\n > &\n Record<\n 'arc200_name()byte[32]' | 'arc200_name',\n {\n argsObj: Arc200Args['obj']['arc200_name()byte[32]'];\n argsTuple: Arc200Args['tuple']['arc200_name()byte[32]'];\n /**\n * The name of the token\n */\n returns: Arc200Returns['arc200_name()byte[32]'];\n }\n > &\n Record<\n 'arc200_symbol()byte[8]' | 'arc200_symbol',\n {\n argsObj: Arc200Args['obj']['arc200_symbol()byte[8]'];\n argsTuple: Arc200Args['tuple']['arc200_symbol()byte[8]'];\n /**\n * The symbol of the token\n */\n returns: Arc200Returns['arc200_symbol()byte[8]'];\n }\n > &\n Record<\n 'arc200_decimals()uint8' | 'arc200_decimals',\n {\n argsObj: Arc200Args['obj']['arc200_decimals()uint8'];\n argsTuple: Arc200Args['tuple']['arc200_decimals()uint8'];\n /**\n * The decimals of the token\n */\n returns: Arc200Returns['arc200_decimals()uint8'];\n }\n > &\n Record<\n 'arc200_totalSupply()uint256' | 'arc200_totalSupply',\n {\n argsObj: Arc200Args['obj']['arc200_totalSupply()uint256'];\n argsTuple: Arc200Args['tuple']['arc200_totalSupply()uint256'];\n /**\n * The total supply of the token\n */\n returns: Arc200Returns['arc200_totalSupply()uint256'];\n }\n > &\n Record<\n 'arc200_balanceOf(address)uint256' | 'arc200_balanceOf',\n {\n argsObj: Arc200Args['obj']['arc200_balanceOf(address)uint256'];\n argsTuple: Arc200Args['tuple']['arc200_balanceOf(address)uint256'];\n /**\n * The current balance of the holder of the token\n */\n returns: Arc200Returns['arc200_balanceOf(address)uint256'];\n }\n > &\n Record<\n 'arc200_transfer(address,uint256)bool' | 'arc200_transfer',\n {\n argsObj: Arc200Args['obj']['arc200_transfer(address,uint256)bool'];\n argsTuple: Arc200Args['tuple']['arc200_transfer(address,uint256)bool'];\n /**\n * Success\n */\n returns: Arc200Returns['arc200_transfer(address,uint256)bool'];\n }\n > &\n Record<\n 'arc200_transferFrom(address,address,uint256)bool' | 'arc200_transferFrom',\n {\n argsObj: Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'];\n argsTuple: Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool'];\n /**\n * Success\n */\n returns: Arc200Returns['arc200_transferFrom(address,address,uint256)bool'];\n }\n > &\n Record<\n 'arc200_approve(address,uint256)bool' | 'arc200_approve',\n {\n argsObj: Arc200Args['obj']['arc200_approve(address,uint256)bool'];\n argsTuple: Arc200Args['tuple']['arc200_approve(address,uint256)bool'];\n /**\n * Success\n */\n returns: Arc200Returns['arc200_approve(address,uint256)bool'];\n }\n > &\n Record<\n 'arc200_allowance(address,address)uint256' | 'arc200_allowance',\n {\n argsObj: Arc200Args['obj']['arc200_allowance(address,address)uint256'];\n argsTuple: Arc200Args['tuple']['arc200_allowance(address,address)uint256'];\n /**\n * The remaining allowance\n */\n returns: Arc200Returns['arc200_allowance(address,address)uint256'];\n }\n >;\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * Name of the asset. Max 32 bytes\n */\n name: Uint8Array;\n /**\n * Symbol of the asset. Max 8 bytes\n */\n symbol: Uint8Array;\n /**\n * Decimals of the asset. Recommended is 6 decimal places.\n */\n decimals: number;\n /**\n * Minted supply\n */\n totalSupply: bigint;\n };\n maps: {};\n };\n box: {\n keys: {};\n maps: {\n balances: Map<string, bigint>;\n approvals: Map<Uint8Array, ApprovalStruct>;\n };\n };\n };\n};\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type Arc200Signatures = keyof Arc200Types['methods'];\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type Arc200NonVoidMethodSignatures = keyof Arc200Types['methods'] extends infer T\n ? T extends keyof Arc200Types['methods']\n ? MethodReturn<T> extends void\n ? never\n : T\n : never\n : never;\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> & {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>;\n }\n>;\n/**\n * Maps a method signature from the Arc200 smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends Arc200Signatures> = Arc200Types['methods'][TSignature][\n | 'argsObj'\n | 'argsTuple'];\n/**\n * Maps a method signature from the Arc200 smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends Arc200Signatures> = Arc200Types['methods'][TSignature]['returns'];\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = Arc200Types['state']['global']['keys'];\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = Arc200Types['state']['box']['keys'];\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type Arc200CreateCallParams = Expand<\n AppClientBareCallParams & { method?: never } & { onComplete?: OnApplicationComplete.NoOpOC } & CreateSchema\n>;\n/**\n * Defines arguments required for the deploy method.\n */\nexport type Arc200DeployParams = Expand<\n Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: Arc200CreateCallParams;\n }\n>;\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Arc200 smart contract\n */\nexport abstract class Arc200ParamsFactory {\n /**\n * Constructs a no op call for the bootstrap(byte[],byte[],uint8,uint256)bool ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static bootstrap(\n params: CallParams<\n | Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'bootstrap(byte[],byte[],uint8,uint256)bool' as const,\n args: Array.isArray(params.args)\n ? params.args\n : [params.args.name, params.args.symbol, params.args.decimals, params.args.totalSupply],\n };\n }\n /**\n * Constructs a no op call for the arc200_name()byte[32] ABI method\n *\n * Returns the name of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Name(\n params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_name()byte[32]' as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the arc200_symbol()byte[8] ABI method\n *\n * Returns the symbol of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Symbol(\n params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_symbol()byte[8]' as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the arc200_decimals()uint8 ABI method\n *\n * Returns the decimals of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Decimals(\n params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_decimals()uint8' as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the arc200_totalSupply()uint256 ABI method\n *\n * Returns the total supply of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200TotalSupply(\n params: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_totalSupply()uint256' as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the arc200_balanceOf(address)uint256 ABI method\n *\n * Returns the current balance of the owner of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200BalanceOf(\n params: CallParams<\n Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_balanceOf(address)uint256' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.owner],\n };\n }\n /**\n * Constructs a no op call for the arc200_transfer(address,uint256)bool ABI method\n *\n * Transfers tokens\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Transfer(\n params: CallParams<\n | Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_transfer(address,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.to, params.args.value],\n };\n }\n /**\n * Constructs a no op call for the arc200_transferFrom(address,address,uint256)bool ABI method\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200TransferFrom(\n params: CallParams<\n | Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_transferFrom(address,address,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.from, params.args.to, params.args.value],\n };\n }\n /**\n * Constructs a no op call for the arc200_approve(address,uint256)bool ABI method\n *\n * Approve spender for a token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Approve(\n params: CallParams<\n | Arc200Args['obj']['arc200_approve(address,uint256)bool']\n | Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_approve(address,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.spender, params.args.value],\n };\n }\n /**\n * Constructs a no op call for the arc200_allowance(address,address)uint256 ABI method\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Allowance(\n params: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_allowance(address,address)uint256' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.owner, params.args.spender],\n };\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Arc200 smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class Arc200Factory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory;\n\n /**\n * Creates a new instance of `Arc200Factory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n });\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName;\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC;\n }\n\n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand;\n }\n\n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new Arc200Client(this.appFactory.getAppClientById(params));\n }\n\n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams) {\n return new Arc200Client(await this.appFactory.getAppClientByCreatorAndName(params));\n }\n\n /**\n * Idempotently deploys the Arc200 smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: Arc200DeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n });\n return { result: result.result, appClient: new Arc200Client(result.appClient) };\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Arc200 smart contract using a bare call.\n *\n * @param params The params for the bare (raw) call\n * @returns The params for a create call\n */\n bare: (\n params?: Expand<\n AppClientBareCallParams &\n AppClientCompilationParams &\n CreateSchema & { onComplete?: OnApplicationComplete.NoOpOC }\n >\n ) => {\n return this.appFactory.params.bare.create(params);\n },\n },\n };\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Arc200 smart contract using a bare call.\n *\n * @param params The params for the bare (raw) call\n * @returns The transaction for a create call\n */\n bare: (\n params?: Expand<\n AppClientBareCallParams &\n AppClientCompilationParams &\n CreateSchema & { onComplete?: OnApplicationComplete.NoOpOC }\n >\n ) => {\n return this.appFactory.createTransaction.bare.create(params);\n },\n },\n };\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Arc200 smart contract using a bare call.\n *\n * @param params The params for the bare (raw) call\n * @returns The create result\n */\n bare: async (\n params?: Expand<\n AppClientBareCallParams &\n AppClientCompilationParams &\n CreateSchema &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n >\n ) => {\n const result = await this.appFactory.send.bare.create(params);\n return { result: result.result, appClient: new Arc200Client(result.appClient) };\n },\n },\n };\n}\n/**\n * A client to make calls to the Arc200 smart contract\n */\nexport class Arc200Client {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient;\n\n /**\n * Creates a new instance of `Arc200Client`\n *\n * @param appClient An `AppClient` instance which has been created with the Arc200 app spec\n */\n constructor(appClient: _AppClient);\n /**\n * Creates a new instance of `Arc200Client`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>);\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient =\n appClientOrParams instanceof _AppClient\n ? appClientOrParams\n : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n });\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends Arc200NonVoidMethodSignatures>(\n method: TSignature,\n returnValue: ABIReturn | undefined\n ) {\n return returnValue !== undefined\n ? getArc56ReturnValue<MethodReturn<TSignature>>(\n returnValue,\n this.appClient.getABIMethod(method),\n APP_SPEC.structs\n )\n : undefined;\n }\n\n /**\n * Returns a new `Arc200Client` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(\n params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>\n ): Promise<Arc200Client> {\n return new Arc200Client(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));\n }\n\n /**\n * Returns an `Arc200Client` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(params: Omit<ResolveAppClientByNetwork, 'appSpec'>): Promise<Arc200Client> {\n return new Arc200Client(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId;\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress;\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName;\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec;\n }\n\n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand;\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n bootstrap: (\n params: CallParams<\n | Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.bootstrap(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The name of the token\n */\n arc200Name: (\n params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Name(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The symbol of the token\n */\n arc200Symbol: (\n params: CallParams<\n Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Symbol(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The decimals of the token\n */\n arc200Decimals: (\n params: CallParams<\n Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Decimals(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The total supply of the token\n */\n arc200TotalSupply: (\n params: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200TotalSupply(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The current balance of the holder of the token\n */\n arc200BalanceOf: (\n params: CallParams<\n Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200BalanceOf(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.\n *\n * Transfers tokens\n *\n * @param params The params for the smart contract call\n * @returns The call params: Success\n */\n arc200Transfer: (\n params: CallParams<\n | Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Transfer(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params The params for the smart contract call\n * @returns The call params: Success\n */\n arc200TransferFrom: (\n params: CallParams<\n | Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200TransferFrom(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.\n *\n * Approve spender for a token\n *\n * @param params The params for the smart contract call\n * @returns The call params: Success\n */\n arc200Approve: (\n params: CallParams<\n | Arc200Args['obj']['arc200_approve(address,uint256)bool']\n | Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Approve(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call params: The remaining allowance\n */\n arc200Allowance: (\n params: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Allowance(params));\n },\n };\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n bootstrap: (\n params: CallParams<\n | Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.bootstrap(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The name of the token\n */\n arc200Name: (\n params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Name(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The symbol of the token\n */\n arc200Symbol: (\n params: CallParams<\n Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Symbol(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The decimals of the token\n */\n arc200Decimals: (\n params: CallParams<\n Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Decimals(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The total supply of the token\n */\n arc200TotalSupply: (\n params: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TotalSupply(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The current balance of the holder of the token\n */\n arc200BalanceOf: (\n params: CallParams<\n Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200BalanceOf(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.\n *\n * Transfers tokens\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: Success\n */\n arc200Transfer: (\n params: CallParams<\n | Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Transfer(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: Success\n */\n arc200TransferFrom: (\n params: CallParams<\n | Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TransferFrom(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.\n *\n * Approve spender for a token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: Success\n */\n arc200Approve: (\n params: CallParams<\n | Arc200Args['obj']['arc200_approve(address,uint256)bool']\n | Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Approve(params));\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The remaining allowance\n */\n arc200Allowance: (\n params: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Allowance(params));\n },\n };\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n bootstrap: async (\n params: CallParams<\n | Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.bootstrap(params));\n return {\n ...result,\n return: result.return as unknown as undefined | Arc200Returns['bootstrap(byte[],byte[],uint8,uint256)bool'],\n };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The name of the token\n */\n arc200Name: async (\n params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params));\n return { ...result, return: result.return as unknown as undefined | Arc200Returns['arc200_name()byte[32]'] };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The symbol of the token\n */\n arc200Symbol: async (\n params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params));\n return { ...result, return: result.return as unknown as undefined | Arc200Returns['arc200_symbol()byte[8]'] };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The decimals of the token\n */\n arc200Decimals: async (\n params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params));\n return { ...result, return: result.return as unknown as undefined | Arc200Returns['arc200_decimals()uint8'] };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The total supply of the token\n */\n arc200TotalSupply: async (\n params: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params));\n return {\n ...result,\n return: result.return as unknown as undefined | Arc200Returns['arc200_totalSupply()uint256'],\n };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The current balance of the holder of the token\n */\n arc200BalanceOf: async (\n params: CallParams<\n Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params));\n return {\n ...result,\n return: result.return as unknown as undefined | Arc200Returns['arc200_balanceOf(address)uint256'],\n };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.\n *\n * Transfers tokens\n *\n * @param params The params for the smart contract call\n * @returns The call result: Success\n */\n arc200Transfer: async (\n params: CallParams<\n | Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Transfer(params));\n return {\n ...result,\n return: result.return as unknown as undefined | Arc200Returns['arc200_transfer(address,uint256)bool'],\n };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params The params for the smart contract call\n * @returns The call result: Success\n */\n arc200TransferFrom: async (\n params: CallParams<\n | Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TransferFrom(params));\n return {\n ...result,\n return: result.return as unknown as\n | undefined\n | Arc200Returns['arc200_transferFrom(address,address,uint256)bool'],\n };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.\n *\n * Approve spender for a token\n *\n * @param params The params for the smart contract call\n * @returns The call result: Success\n */\n arc200Approve: async (\n params: CallParams<\n | Arc200Args['obj']['arc200_approve(address,uint256)bool']\n | Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Approve(params));\n return {\n ...result,\n return: result.return as unknown as undefined | Arc200Returns['arc200_approve(address,uint256)bool'],\n };\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call result: The remaining allowance\n */\n arc200Allowance: async (\n params: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params));\n return {\n ...result,\n return: result.return as unknown as undefined | Arc200Returns['arc200_allowance(address,address)uint256'],\n };\n },\n };\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new Arc200Client(this.appClient.clone(params));\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The name of the token\n */\n async arc200Name(\n params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> = {\n args: [],\n }\n ) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params));\n return result.return as unknown as Arc200Returns['arc200_name()byte[32]'];\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The symbol of the token\n */\n async arc200Symbol(\n params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> = {\n args: [],\n }\n ) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params));\n return result.return as unknown as Arc200Returns['arc200_symbol()byte[8]'];\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The decimals of the token\n */\n async arc200Decimals(\n params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> = {\n args: [],\n }\n ) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params));\n return result.return as unknown as Arc200Returns['arc200_decimals()uint8'];\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The total supply of the token\n */\n async arc200TotalSupply(\n params: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n > = { args: [] }\n ) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params));\n return result.return as unknown as Arc200Returns['arc200_totalSupply()uint256'];\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The current balance of the holder of the token\n */\n async arc200BalanceOf(\n params: CallParams<\n Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n >\n ) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params));\n return result.return as unknown as Arc200Returns['arc200_balanceOf(address)uint256'];\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call result: The remaining allowance\n */\n async arc200Allowance(\n params: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n >\n ) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params));\n return result.return as unknown as Arc200Returns['arc200_allowance(address,address)uint256'];\n }\n\n /**\n * Methods to access state for the current Arc200 app\n */\n state = {\n /**\n * Methods to access global state for the current Arc200 app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll();\n return {\n name: result.name,\n symbol: result.symbol,\n decimals: result.decimals,\n totalSupply: result.totalSupply,\n };\n },\n /**\n * Get the current value of the name key in global state\n */\n name: async (): Promise<Uint8Array | undefined> => {\n return (await this.appClient.state.global.getValue('name')) as Uint8Array | undefined;\n },\n /**\n * Get the current value of the symbol key in global state\n */\n symbol: async (): Promise<Uint8Array | undefined> => {\n return (await this.appClient.state.global.getValue('symbol')) as Uint8Array | undefined;\n },\n /**\n * Get the current value of the decimals key in global state\n */\n decimals: async (): Promise<number | undefined> => {\n return (await this.appClient.state.global.getValue('decimals')) as number | undefined;\n },\n /**\n * Get the current value of the totalSupply key in global state\n */\n totalSupply: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue('totalSupply')) as bigint | undefined;\n },\n },\n /**\n * Methods to access box state for the current Arc200 app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll();\n return {};\n },\n /**\n * Get values from the balances map in box state\n */\n balances: {\n /**\n * Get all current values of the balances map in box state\n */\n getMap: async (): Promise<Map<string, bigint>> => {\n return (await this.appClient.state.box.getMap('balances')) as Map<string, bigint>;\n },\n /**\n * Get a current value of the balances map by key from box state\n */\n value: async (key: string): Promise<bigint | undefined> => {\n return (await this.appClient.state.box.getMapValue('balances', key)) as bigint | undefined;\n },\n },\n /**\n * Get values from the approvals map in box state\n */\n approvals: {\n /**\n * Get all current values of the approvals map in box state\n */\n getMap: async (): Promise<Map<Uint8Array, ApprovalStruct>> => {\n return (await this.appClient.state.box.getMap('approvals')) as Map<Uint8Array, ApprovalStruct>;\n },\n /**\n * Get a current value of the approvals map by key from box state\n */\n value: async (key: Uint8Array): Promise<ApprovalStruct | undefined> => {\n return (await this.appClient.state.box.getMapValue('approvals', key)) as ApprovalStruct | undefined;\n },\n },\n },\n };\n\n public newGroup(): Arc200Composer {\n const client = this;\n const composer = this.algorand.newGroup();\n let promiseChain: Promise<unknown> = Promise.resolve();\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = [];\n return {\n /**\n * Add a bootstrap(byte[],byte[],uint8,uint256)bool method call against the Arc200 contract\n */\n bootstrap(\n params: CallParams<\n | Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.bootstrap(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('bootstrap(byte[],byte[],uint8,uint256)bool', v));\n return this;\n },\n /**\n * Add a arc200_name()byte[32] method call against the Arc200 contract\n */\n arc200Name(\n params: CallParams<\n Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200Name(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_name()byte[32]', v));\n return this;\n },\n /**\n * Add a arc200_symbol()byte[8] method call against the Arc200 contract\n */\n arc200Symbol(\n params: CallParams<\n Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200Symbol(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_symbol()byte[8]', v));\n return this;\n },\n /**\n * Add a arc200_decimals()uint8 method call against the Arc200 contract\n */\n arc200Decimals(\n params: CallParams<\n Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200Decimals(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_decimals()uint8', v));\n return this;\n },\n /**\n * Add a arc200_totalSupply()uint256 method call against the Arc200 contract\n */\n arc200TotalSupply(\n params: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200TotalSupply(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_totalSupply()uint256', v));\n return this;\n },\n /**\n * Add a arc200_balanceOf(address)uint256 method call against the Arc200 contract\n */\n arc200BalanceOf(\n params: CallParams<\n | Arc200Args['obj']['arc200_balanceOf(address)uint256']\n | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200BalanceOf(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_balanceOf(address)uint256', v));\n return this;\n },\n /**\n * Add a arc200_transfer(address,uint256)bool method call against the Arc200 contract\n */\n arc200Transfer(\n params: CallParams<\n | Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200Transfer(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_transfer(address,uint256)bool', v));\n return this;\n },\n /**\n * Add a arc200_transferFrom(address,address,uint256)bool method call against the Arc200 contract\n */\n arc200TransferFrom(\n params: CallParams<\n | Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200TransferFrom(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_transferFrom(address,address,uint256)bool', v));\n return this;\n },\n /**\n * Add a arc200_approve(address,uint256)bool method call against the Arc200 contract\n */\n arc200Approve(\n params: CallParams<\n | Arc200Args['obj']['arc200_approve(address,uint256)bool']\n | Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200Approve(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_approve(address,uint256)bool', v));\n return this;\n },\n /**\n * Add a arc200_allowance(address,address)uint256 method call against the Arc200 contract\n */\n arc200Allowance(\n params: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.arc200Allowance(params))\n );\n resultMappers.push((v) => client.decodeReturnValue('arc200_allowance(address,address)uint256', v));\n return this;\n },\n /**\n * Add a clear state call to the Arc200 contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));\n return this;\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));\n return this;\n },\n async composer() {\n await promiseChain;\n return composer;\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain;\n const result = await (!options ? composer.simulate() : composer.simulate(options));\n return {\n ...result,\n returns: result.returns?.map((val, i) =>\n resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue\n ),\n };\n },\n async send(params?: SendParams) {\n await promiseChain;\n const result = await composer.send(params);\n return {\n ...result,\n returns: result.returns?.map((val, i) =>\n resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue\n ),\n };\n },\n } as unknown as Arc200Composer;\n }\n}\nexport type Arc200Composer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the bootstrap(byte[],byte[],uint8,uint256)bool ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n bootstrap(\n params?: CallParams<\n | Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['bootstrap(byte[],byte[],uint8,uint256)bool'] | undefined]>;\n\n /**\n * Calls the arc200_name()byte[32] ABI method.\n *\n * Returns the name of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Name(\n params?: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']>\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_name()byte[32]'] | undefined]>;\n\n /**\n * Calls the arc200_symbol()byte[8] ABI method.\n *\n * Returns the symbol of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Symbol(\n params?: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']>\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_symbol()byte[8]'] | undefined]>;\n\n /**\n * Calls the arc200_decimals()uint8 ABI method.\n *\n * Returns the decimals of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Decimals(\n params?: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']>\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_decimals()uint8'] | undefined]>;\n\n /**\n * Calls the arc200_totalSupply()uint256 ABI method.\n *\n * Returns the total supply of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200TotalSupply(\n params?: CallParams<\n Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_totalSupply()uint256'] | undefined]>;\n\n /**\n * Calls the arc200_balanceOf(address)uint256 ABI method.\n *\n * Returns the current balance of the owner of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200BalanceOf(\n params?: CallParams<\n Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_balanceOf(address)uint256'] | undefined]>;\n\n /**\n * Calls the arc200_transfer(address,uint256)bool ABI method.\n *\n * Transfers tokens\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Transfer(\n params?: CallParams<\n | Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_transfer(address,uint256)bool'] | undefined]>;\n\n /**\n * Calls the arc200_transferFrom(address,address,uint256)bool ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200TransferFrom(\n params?: CallParams<\n | Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_transferFrom(address,address,uint256)bool'] | undefined]>;\n\n /**\n * Calls the arc200_approve(address,uint256)bool ABI method.\n *\n * Approve spender for a token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Approve(\n params?: CallParams<\n | Arc200Args['obj']['arc200_approve(address,uint256)bool']\n | Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_approve(address,uint256)bool'] | undefined]>;\n\n /**\n * Calls the arc200_allowance(address,address)uint256 ABI method.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Allowance(\n params?: CallParams<\n | Arc200Args['obj']['arc200_allowance(address,address)uint256']\n | Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n >\n ): Arc200Composer<[...TReturns, Arc200Returns['arc200_allowance(address,address)uint256'] | undefined]>;\n\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): Arc200Composer<[...TReturns, undefined]>;\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): Arc200Composer<TReturns>;\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>;\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<Arc200ComposerResults<TReturns> & { simulateResponse: SimulateResponse }>;\n simulate(\n options: SkipSignaturesSimulateOptions\n ): Promise<Arc200ComposerResults<TReturns> & { simulateResponse: SimulateResponse }>;\n simulate(\n options: RawSimulateOptions\n ): Promise<Arc200ComposerResults<TReturns> & { simulateResponse: SimulateResponse }>;\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<Arc200ComposerResults<TReturns>>;\n};\nexport type Arc200ComposerResults<TReturns extends [...any[]]> = Expand<\n SendAtomicTransactionComposerResults & {\n returns: TReturns;\n }\n>;\n","import { Address, Algodv2, ProgramSourceMap, TransactionSigner } from 'algosdk';\nimport { SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction';\nimport { Arc200Client } from '../contracts/artifacts/Arc200Client';\nimport { AppClient } from '@algorandfoundation/algokit-utils/types/app-client';\nimport { AlgorandClient } from '@algorandfoundation/algokit-utils';\n\ninterface IGetClientInput {\n algorand: AlgorandClient;\n appId: bigint;\n appName: string | undefined;\n approvalSourceMap: ProgramSourceMap | undefined;\n clearSourceMap: ProgramSourceMap | undefined;\n defaultSender: string | Address | undefined;\n defaultSigner: TransactionSigner | undefined;\n}\n\nexport const getArc200Client = (input: IGetClientInput) => {\n return new Arc200Client({\n algorand: input.algorand,\n appId: input.appId,\n appName: input.appName,\n approvalSourceMap: input.approvalSourceMap,\n clearSourceMap: input.clearSourceMap,\n defaultSender: input.defaultSender,\n defaultSigner: input.defaultSigner,\n });\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACQA,uBAIO;AACP,wBAUO;AACP,yBAOO;AAiBA,IAAM,WAA0B;AAAA,EACrC,MAAM;AAAA,EACN,SAAS;AAAA,IACP,gBAAgB;AAAA,MACd,EAAE,MAAM,kBAAkB,MAAM,UAAU;AAAA,MAC1C,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,IACrC;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,UAAU,MAAM,OAAO;AAAA,QAC/B,EAAE,MAAM,UAAU,MAAM,SAAS;AAAA,QACjC,EAAE,MAAM,SAAS,MAAM,WAAW;AAAA,QAClC,EAAE,MAAM,WAAW,MAAM,cAAc;AAAA,MACzC;AAAA,MACA,SAAS,EAAE,MAAM,OAAO;AAAA,MACxB,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,EAAE,MAAM,WAAW,MAAM,OAAO;AAAA,YAChC,EAAE,MAAM,WAAW,MAAM,KAAK;AAAA,YAC9B,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,MACP,SAAS,EAAE,MAAM,YAAY,MAAM,wBAAwB;AAAA,MAC3D,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,MACP,SAAS,EAAE,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAC5D,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,MACP,SAAS,EAAE,MAAM,SAAS,MAAM,4BAA4B;AAAA,MAC5D,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC;AAAA,MACP,SAAS,EAAE,MAAM,WAAW,MAAM,gCAAgC;AAAA,MAClE,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM,CAAC,EAAE,MAAM,WAAW,MAAM,SAAS,MAAM,wCAAwC,CAAC;AAAA,MACxF,SAAS,EAAE,MAAM,WAAW,MAAM,iDAAiD;AAAA,MACnF,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,MAAM,MAAM,kCAAkC;AAAA,QACvE,EAAE,MAAM,WAAW,MAAM,SAAS,MAAM,+BAA+B;AAAA,MACzE;AAAA,MACA,SAAS,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzC,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,EAAE,MAAM,WAAW,MAAM,OAAO;AAAA,YAChC,EAAE,MAAM,WAAW,MAAM,KAAK;AAAA,YAC9B,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,QAAQ,MAAM,6BAA6B;AAAA,QACpE,EAAE,MAAM,WAAW,MAAM,MAAM,MAAM,kCAAkC;AAAA,QACvE,EAAE,MAAM,WAAW,MAAM,SAAS,MAAM,+BAA+B;AAAA,MACzE;AAAA,MACA,SAAS,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzC,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,YACjC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,YACnC,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,UACnC;AAAA,QACF;AAAA,QACA;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,EAAE,MAAM,WAAW,MAAM,OAAO;AAAA,YAChC,EAAE,MAAM,WAAW,MAAM,KAAK;AAAA,YAC9B,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,WAAW,MAAM,kDAAkD;AAAA,QAC5F,EAAE,MAAM,WAAW,MAAM,SAAS,MAAM,0CAA0C;AAAA,MACpF;AAAA,MACA,SAAS,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MACzC,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ;AAAA,QACN;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,YACJ,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,YACjC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,YACnC,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,SAAS,MAAM,kBAAkB;AAAA,QAC1D,EAAE,MAAM,WAAW,MAAM,WAAW,MAAM,kDAAkD;AAAA,MAC9F;AAAA,MACA,SAAS,EAAE,MAAM,WAAW,MAAM,0BAA0B;AAAA,MAC5D,SAAS,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE;AAAA,MACtC,UAAU;AAAA,MACV,MAAM;AAAA,MACN,QAAQ,CAAC;AAAA,MACT,iBAAiB,CAAC;AAAA,IACpB;AAAA,EACF;AAAA,EACA,MAAM,CAAC,IAAI,EAAE;AAAA,EACb,MAAM;AAAA,EACN,UAAU,CAAC;AAAA,EACX,OAAO;AAAA,IACL,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE;AAAA,IACtE,MAAM;AAAA,MACJ,QAAQ;AAAA,QACN,MAAM,EAAE,SAAS,aAAa,WAAW,UAAU,KAAK,QAAQ,MAAM,kCAAkC;AAAA,QACxG,QAAQ,EAAE,SAAS,aAAa,WAAW,UAAU,KAAK,QAAQ,MAAM,mCAAmC;AAAA,QAC3G,UAAU;AAAA,UACR,SAAS;AAAA,UACT,WAAW;AAAA,UACX,KAAK;AAAA,UACL,MAAM;AAAA,QACR;AAAA,QACA,aAAa,EAAE,SAAS,aAAa,WAAW,WAAW,KAAK,QAAQ,MAAM,gBAAgB;AAAA,MAChG;AAAA,MACA,OAAO,CAAC;AAAA,MACR,KAAK,CAAC;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ,CAAC;AAAA,MACT,OAAO,CAAC;AAAA,MACR,KAAK;AAAA,QACH,UAAU,EAAE,SAAS,WAAW,WAAW,WAAW,QAAQ,OAAO;AAAA,QACrE,WAAW,EAAE,SAAS,YAAY,WAAW,kBAAkB,QAAQ,OAAO;AAAA,MAChF;AAAA,IACF;AAAA,EACF;AAAA,EACA,aAAa,EAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE;AAAA,EAC1C,YAAY;AAAA,IACV,UAAU;AAAA,MACR,YAAY;AAAA,QACV,EAAE,IAAI,CAAC,KAAK,GAAG,GAAG,cAAc,sBAAsB;AAAA,QACtD,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,gCAAgC;AAAA,QAC3D,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,6CAA6C;AAAA,QACxE,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,2DAA2D;AAAA,QACtF,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,8DAA8D;AAAA,QACzF,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,cAAc,2BAA2B;AAAA,QACnG,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,iEAAiE;AAAA,QAC5F,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,6DAA6D;AAAA,QACxF,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,+DAA+D;AAAA,QAC1F,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,sCAAsC;AAAA,QACjE,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,8BAA8B;AAAA,QACzD,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG,GAAG,cAAc,kCAAkC;AAAA,QAC1G,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK,GAAG,GAAG,cAAc,2BAA2B;AAAA,QACrE,EAAE,IAAI,CAAC,GAAG,GAAG,cAAc,wBAAwB;AAAA,QACnD,EAAE,IAAI,CAAC,KAAK,KAAK,GAAG,GAAG,cAAc,eAAe;AAAA,QACpD,EAAE,IAAI,CAAC,KAAK,KAAK,GAAG,GAAG,cAAc,WAAW;AAAA,MAClD;AAAA,MACA,gBAAgB;AAAA,IAClB;AAAA,IACA,OAAO,EAAE,YAAY,CAAC,GAAG,gBAAgB,OAAO;AAAA,EAClD;AAAA,EACA,QAAQ;AAAA,IACN,UACE;AAAA,IACF,OACE;AAAA,EACJ;AAAA,EACA,UAAU;AAAA,IACR,UACE;AAAA,IACF,OAAO;AAAA,EACT;AAAA,EACA,cAAc,EAAE,UAAU,QAAQ,iBAAiB,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,EAAE,EAAE;AAAA,EACpF,QAAQ;AAAA,IACN;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,OAAO;AAAA,QAChC,EAAE,MAAM,WAAW,MAAM,KAAK;AAAA,QAC9B,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,MACnC;AAAA,IACF;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,MAAM;AAAA,QACJ,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,QACjC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,QACnC,EAAE,MAAM,WAAW,MAAM,QAAQ;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EACA,mBAAmB,CAAC;AACtB;AAsXO,IAAe,sBAAf,MAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOxC,OAAO,UACL,QAK4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAC3B,OAAO,OACP,CAAC,OAAO,KAAK,MAAM,OAAO,KAAK,QAAQ,OAAO,KAAK,UAAU,OAAO,KAAK,WAAW;AAAA,IAC1F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WACL,QAE4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,aACL,QAE4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,eACL,QAE4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,kBACL,QAI4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,gBACL,QAI4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,KAAK;AAAA,IACrE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,eACL,QAK4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK;AAAA,IACrF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,mBACL,QAK4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,MAAM,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK;AAAA,IACvG;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,cACL,QAK4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,SAAS,OAAO,KAAK,KAAK;AAAA,IAC1F;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,gBACL,QAK4C;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,MAAM,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,OAAO,OAAO,KAAK,OAAO;AAAA,IAC1F;AAAA,EACF;AACF;AAKO,IAAM,gBAAN,MAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWzB,YAAY,QAA2C;AA+DvD;AAAA;AAAA;AAAA,SAAS,SAAS;AAAA;AAAA;AAAA;AAAA,MAIhB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAON,MAAM,CACJ,WAKG;AACH,iBAAO,KAAK,WAAW,OAAO,KAAK,OAAO,MAAM;AAAA,QAClD;AAAA,MACF;AAAA,IACF;AAKA;AAAA;AAAA;AAAA,SAAS,oBAAoB;AAAA;AAAA;AAAA;AAAA,MAI3B,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAON,MAAM,CACJ,WAKG;AACH,iBAAO,KAAK,WAAW,kBAAkB,KAAK,OAAO,MAAM;AAAA,QAC7D;AAAA,MACF;AAAA,IACF;AAKA;AAAA;AAAA;AAAA,SAAS,OAAO;AAAA;AAAA;AAAA;AAAA,MAId,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAON,MAAM,OACJ,WAMG;AACH,gBAAM,SAAS,MAAM,KAAK,WAAW,KAAK,KAAK,OAAO,MAAM;AAC5D,iBAAO,EAAE,QAAQ,OAAO,QAAQ,WAAW,IAAI,aAAa,OAAO,SAAS,EAAE;AAAA,QAChF;AAAA,MACF;AAAA,IACF;AAzIE,SAAK,aAAa,IAAI,mBAAAA,WAAY;AAAA,MAChC,GAAG;AAAA,MACH,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA;AAAA,EAGA,IAAW,UAAU;AACnB,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA;AAAA,EAGA,IAAI,UAAU;AACZ,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,IAAW,WAA2B;AACpC,WAAO,KAAK,WAAW;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUO,iBAAiB,QAAmC;AACzD,WAAO,IAAI,aAAa,KAAK,WAAW,iBAAiB,MAAM,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAa,6BAA6B,QAA0D;AAClG,WAAO,IAAI,aAAa,MAAM,KAAK,WAAW,6BAA6B,MAAM,CAAC;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAa,OAAO,SAA6B,CAAC,GAAG;AACnD,UAAM,SAAS,MAAM,KAAK,WAAW,OAAO;AAAA,MAC1C,GAAG;AAAA,IACL,CAAC;AACD,WAAO,EAAE,QAAQ,OAAO,QAAQ,WAAW,IAAI,aAAa,OAAO,SAAS,EAAE;AAAA,EAChF;AAiFF;AAIO,IAAM,eAAN,MAAM,cAAa;AAAA,EAkBxB,YAAY,mBAAkE;AA6E9E;AAAA;AAAA;AAAA,SAAS,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOhB,YAAY,CAAC,WAA6C;AACxD,eAAO,KAAK,UAAU,OAAO,KAAK,WAAW,MAAM;AAAA,MACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,WAAW,CACT,WAIG;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,UAAU,MAAM,CAAC;AAAA,MACzE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,YAAY,CACV,SAEI,EAAE,MAAM,CAAC,EAAE,MACZ;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,WAAW,MAAM,CAAC;AAAA,MAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,cAAc,CACZ,SAEoD,EAAE,MAAM,CAAC,EAAE,MAC5D;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,aAAa,MAAM,CAAC;AAAA,MAC5E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,gBAAgB,CACd,SAEoD,EAAE,MAAM,CAAC,EAAE,MAC5D;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,eAAe,MAAM,CAAC;AAAA,MAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,mBAAmB,CACjB,SAEoD,EAAE,MAAM,CAAC,EAAE,MAC5D;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,kBAAkB,MAAM,CAAC;AAAA,MACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,iBAAiB,CACf,WAGG;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AAAA,MAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,gBAAgB,CACd,WAIG;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,eAAe,MAAM,CAAC;AAAA,MAC9E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,oBAAoB,CAClB,WAIG;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,mBAAmB,MAAM,CAAC;AAAA,MAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,eAAe,CACb,WAIG;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,cAAc,MAAM,CAAC;AAAA,MAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,iBAAiB,CACf,WAIG;AACH,eAAO,KAAK,UAAU,OAAO,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AAAA,MAC/E;AAAA,IACF;AAKA;AAAA;AAAA;AAAA,SAAS,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3B,YAAY,CAAC,WAA6C;AACxD,eAAO,KAAK,UAAU,kBAAkB,KAAK,WAAW,MAAM;AAAA,MAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,WAAW,CACT,WAIG;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,UAAU,MAAM,CAAC;AAAA,MACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,YAAY,CACV,SAEI,EAAE,MAAM,CAAC,EAAE,MACZ;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,WAAW,MAAM,CAAC;AAAA,MACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,cAAc,CACZ,SAEoD,EAAE,MAAM,CAAC,EAAE,MAC5D;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,aAAa,MAAM,CAAC;AAAA,MACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,gBAAgB,CACd,SAEoD,EAAE,MAAM,CAAC,EAAE,MAC5D;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,eAAe,MAAM,CAAC;AAAA,MACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,mBAAmB,CACjB,SAEoD,EAAE,MAAM,CAAC,EAAE,MAC5D;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,kBAAkB,MAAM,CAAC;AAAA,MAC5F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,iBAAiB,CACf,WAGG;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AAAA,MAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,gBAAgB,CACd,WAIG;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,eAAe,MAAM,CAAC;AAAA,MACzF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,oBAAoB,CAClB,WAIG;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,mBAAmB,MAAM,CAAC;AAAA,MAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,eAAe,CACb,WAIG;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,cAAc,MAAM,CAAC;AAAA,MACxF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,iBAAiB,CACf,WAIG;AACH,eAAO,KAAK,UAAU,kBAAkB,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AAAA,MAC1F;AAAA,IACF;AAKA;AAAA;AAAA;AAAA,SAAS,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAOd,YAAY,CAAC,WAA0D;AACrE,eAAO,KAAK,UAAU,KAAK,KAAK,WAAW,MAAM;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,WAAW,OACT,WAKG;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,UAAU,MAAM,CAAC;AACnF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,YAAY,OACV,SAC+D,EAAE,MAAM,CAAC,EAAE,MACvE;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,WAAW,MAAM,CAAC;AACpF,eAAO,EAAE,GAAG,QAAQ,QAAQ,OAAO,OAAwE;AAAA,MAC7G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,cAAc,OACZ,SAC+D,EAAE,MAAM,CAAC,EAAE,MACvE;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,aAAa,MAAM,CAAC;AACtF,eAAO,EAAE,GAAG,QAAQ,QAAQ,OAAO,OAAyE;AAAA,MAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,gBAAgB,OACd,SAC+D,EAAE,MAAM,CAAC,EAAE,MACvE;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,eAAe,MAAM,CAAC;AACxF,eAAO,EAAE,GAAG,QAAQ,QAAQ,OAAO,OAAyE;AAAA,MAC9G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,mBAAmB,OACjB,SAG+D,EAAE,MAAM,CAAC,EAAE,MACvE;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,kBAAkB,MAAM,CAAC;AAC3F,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,iBAAiB,OACf,WAIG;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AACzF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,gBAAgB,OACd,WAKG;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,eAAe,MAAM,CAAC;AACxF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,oBAAoB,OAClB,WAKG;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,mBAAmB,MAAM,CAAC;AAC5F,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QAGjB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAUA,eAAe,OACb,WAKG;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,cAAc,MAAM,CAAC;AACvF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAYA,iBAAiB,OACf,WAKG;AACH,cAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AACzF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,OAAO;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAkIA;AAAA;AAAA;AAAA,iBAAQ;AAAA;AAAA;AAAA;AAAA,MAIN,QAAQ;AAAA;AAAA;AAAA;AAAA,QAIN,QAAQ,YAAuD;AAC7D,gBAAM,SAAS,MAAM,KAAK,UAAU,MAAM,OAAO,OAAO;AACxD,iBAAO;AAAA,YACL,MAAM,OAAO;AAAA,YACb,QAAQ,OAAO;AAAA,YACf,UAAU,OAAO;AAAA,YACjB,aAAa,OAAO;AAAA,UACtB;AAAA,QACF;AAAA;AAAA;AAAA;AAAA,QAIA,MAAM,YAA6C;AACjD,iBAAQ,MAAM,KAAK,UAAU,MAAM,OAAO,SAAS,MAAM;AAAA,QAC3D;AAAA;AAAA;AAAA;AAAA,QAIA,QAAQ,YAA6C;AACnD,iBAAQ,MAAM,KAAK,UAAU,MAAM,OAAO,SAAS,QAAQ;AAAA,QAC7D;AAAA;AAAA;AAAA;AAAA,QAIA,UAAU,YAAyC;AACjD,iBAAQ,MAAM,KAAK,UAAU,MAAM,OAAO,SAAS,UAAU;AAAA,QAC/D;AAAA;AAAA;AAAA;AAAA,QAIA,aAAa,YAAyC;AACpD,iBAAQ,MAAM,KAAK,UAAU,MAAM,OAAO,SAAS,aAAa;AAAA,QAClE;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAIA,KAAK;AAAA;AAAA;AAAA;AAAA,QAIH,QAAQ,YAAoD;AAC1D,gBAAM,SAAS,MAAM,KAAK,UAAU,MAAM,IAAI,OAAO;AACrD,iBAAO,CAAC;AAAA,QACV;AAAA;AAAA;AAAA;AAAA,QAIA,UAAU;AAAA;AAAA;AAAA;AAAA,UAIR,QAAQ,YAA0C;AAChD,mBAAQ,MAAM,KAAK,UAAU,MAAM,IAAI,OAAO,UAAU;AAAA,UAC1D;AAAA;AAAA;AAAA;AAAA,UAIA,OAAO,OAAO,QAA6C;AACzD,mBAAQ,MAAM,KAAK,UAAU,MAAM,IAAI,YAAY,YAAY,GAAG;AAAA,UACpE;AAAA,QACF;AAAA;AAAA;AAAA;AAAA,QAIA,WAAW;AAAA;AAAA;AAAA;AAAA,UAIT,QAAQ,YAAsD;AAC5D,mBAAQ,MAAM,KAAK,UAAU,MAAM,IAAI,OAAO,WAAW;AAAA,UAC3D;AAAA;AAAA;AAAA;AAAA,UAIA,OAAO,OAAO,QAAyD;AACrE,mBAAQ,MAAM,KAAK,UAAU,MAAM,IAAI,YAAY,aAAa,GAAG;AAAA,UACrE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAh4BE,SAAK,YACH,6BAA6B,kBAAAC,YACzB,oBACA,IAAI,kBAAAA,UAAW;AAAA,MACb,GAAG;AAAA,MACH,SAAS;AAAA,IACX,CAAC;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBACE,QACA,aACA;AACA,WAAO,gBAAgB,aACnB;AAAA,MACE;AAAA,MACA,KAAK,UAAU,aAAa,MAAM;AAAA,MAClC,SAAS;AAAA,IACX,IACA;AAAA,EACN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAoB,mBAClB,QACuB;AACvB,WAAO,IAAI,cAAa,MAAM,kBAAAA,UAAW,mBAAmB,EAAE,GAAG,QAAQ,SAAS,SAAS,CAAC,CAAC;AAAA,EAC/F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,aAAa,YAAY,QAA2E;AAClG,WAAO,IAAI,cAAa,MAAM,kBAAAA,UAAW,YAAY,EAAE,GAAG,QAAQ,SAAS,SAAS,CAAC,CAAC;AAAA,EACxF;AAAA;AAAA,EAGA,IAAW,QAAQ;AACjB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA,EAGA,IAAW,aAAa;AACtB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA,EAGA,IAAW,UAAU;AACnB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA,EAGA,IAAW,UAAU;AACnB,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA,EAGA,IAAW,WAA2B;AACpC,WAAO,KAAK,UAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAumBO,MAAM,QAA8B;AACzC,WAAO,IAAI,cAAa,KAAK,UAAU,MAAM,MAAM,CAAC;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,WACJ,SAAgH;AAAA,IAC9G,MAAM,CAAC;AAAA,EACT,GACA;AACA,UAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,WAAW,MAAM,CAAC;AACpF,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,aACJ,SAAkH;AAAA,IAChH,MAAM,CAAC;AAAA,EACT,GACA;AACA,UAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,aAAa,MAAM,CAAC;AACtF,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,eACJ,SAAkH;AAAA,IAChH,MAAM,CAAC;AAAA,EACT,GACA;AACA,UAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,eAAe,MAAM,CAAC;AACxF,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,kBACJ,SAEI,EAAE,MAAM,CAAC,EAAE,GACf;AACA,UAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,kBAAkB,MAAM,CAAC;AAC3F,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,gBACJ,QAGA;AACA,UAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AACzF,WAAO,OAAO;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,gBACJ,QAIA;AACA,UAAM,SAAS,MAAM,KAAK,UAAU,KAAK,KAAK,oBAAoB,gBAAgB,MAAM,CAAC;AACzF,WAAO,OAAO;AAAA,EAChB;AAAA,EA+FO,WAA2B;AAChC,UAAM,SAAS;AACf,UAAM,WAAW,KAAK,SAAS,SAAS;AACxC,QAAI,eAAiC,QAAQ,QAAQ;AACrD,UAAM,gBAAwE,CAAC;AAC/E,WAAO;AAAA;AAAA;AAAA;AAAA,MAIL,UACE,QAIA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,UAAU,MAAM,CAAC;AAAA,QACrE;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,8CAA8C,CAAC,CAAC;AACnG,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,WACE,QAGA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,WAAW,MAAM,CAAC;AAAA,QACtE;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,yBAAyB,CAAC,CAAC;AAC9E,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,aACE,QAGA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,aAAa,MAAM,CAAC;AAAA,QACxE;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,0BAA0B,CAAC,CAAC;AAC/E,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,eACE,QAGA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,eAAe,MAAM,CAAC;AAAA,QAC1E;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,0BAA0B,CAAC,CAAC;AAC/E,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,kBACE,QAGA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,kBAAkB,MAAM,CAAC;AAAA,QAC7E;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,+BAA+B,CAAC,CAAC;AACpF,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,gBACE,QAIA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,gBAAgB,MAAM,CAAC;AAAA,QAC3E;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,oCAAoC,CAAC,CAAC;AACzF,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,eACE,QAIA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,eAAe,MAAM,CAAC;AAAA,QAC1E;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,wCAAwC,CAAC,CAAC;AAC7F,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,mBACE,QAIA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,mBAAmB,MAAM,CAAC;AAAA,QAC9E;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,oDAAoD,CAAC,CAAC;AACzG,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,cACE,QAIA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,cAAc,MAAM,CAAC;AAAA,QACzE;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,uCAAuC,CAAC,CAAC;AAC5F,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,gBACE,QAIA;AACA,uBAAe,aAAa;AAAA,UAAK,YAC/B,SAAS,qBAAqB,MAAM,OAAO,OAAO,gBAAgB,MAAM,CAAC;AAAA,QAC3E;AACA,sBAAc,KAAK,CAAC,MAAM,OAAO,kBAAkB,4CAA4C,CAAC,CAAC;AACjG,eAAO;AAAA,MACT;AAAA;AAAA;AAAA;AAAA,MAIA,WAAW,QAAiC;AAC1C,uBAAe,aAAa,KAAK,MAAM,SAAS,WAAW,OAAO,OAAO,WAAW,MAAM,CAAC,CAAC;AAC5F,eAAO;AAAA,MACT;AAAA,MACA,eAAe,KAAkB,QAA4B;AAC3D,uBAAe,aAAa,KAAK,MAAM,SAAS,eAAe,KAAK,MAAM,CAAC;AAC3E,eAAO;AAAA,MACT;AAAA,MACA,MAAM,WAAW;AACf,cAAM;AACN,eAAO;AAAA,MACT;AAAA,MACA,MAAM,SAAS,SAA2B;AACxC,cAAM;AACN,cAAM,SAAS,OAAO,CAAC,UAAU,SAAS,SAAS,IAAI,SAAS,SAAS,OAAO;AAChF,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,OAAO,SAAS;AAAA,YAAI,CAAC,KAAK,MACjC,cAAc,CAAC,MAAM,SAAY,cAAc,CAAC,EAAG,GAAG,IAAI,IAAI;AAAA,UAChE;AAAA,QACF;AAAA,MACF;AAAA,MACA,MAAM,KAAK,QAAqB;AAC9B,cAAM;AACN,cAAM,SAAS,MAAM,SAAS,KAAK,MAAM;AACzC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,OAAO,SAAS;AAAA,YAAI,CAAC,KAAK,MACjC,cAAc,CAAC,MAAM,SAAY,cAAc,CAAC,EAAG,GAAG,IAAI,IAAI;AAAA,UAChE;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AChlEO,IAAM,kBAAkB,CAAC,UAA2B;AACzD,SAAO,IAAI,aAAa;AAAA,IACtB,UAAU,MAAM;AAAA,IAChB,OAAO,MAAM;AAAA,IACb,SAAS,MAAM;AAAA,IACf,mBAAmB,MAAM;AAAA,IACzB,gBAAgB,MAAM;AAAA,IACtB,eAAe,MAAM;AAAA,IACrB,eAAe,MAAM;AAAA,EACvB,CAAC;AACH;","names":["_AppFactory","_AppClient"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../contracts/artifacts/Arc200Client.ts","../src/getArc200Client.ts"],"sourcesContent":["import { Arc200Client, Arc200Factory, type ApprovalStruct } from '../contracts/artifacts/Arc200Client';\nimport { getArc200Client } from './getArc200Client';\nexport { Arc200Client, Arc200Factory, type ApprovalStruct };\nexport { getArc200Client };\n","/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from '@algorandfoundation/algokit-utils/types/algorand-client'\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from '@algorandfoundation/algokit-utils/types/app'\nimport { Arc56Contract, getArc56ReturnValue, getABIStructFromABITuple } from '@algorandfoundation/algokit-utils/types/app-arc56'\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from '@algorandfoundation/algokit-utils/types/app-client'\nimport { AppFactory as _AppFactory, AppFactoryAppClientParams, AppFactoryResolveAppClientByCreatorAndNameParams, AppFactoryDeployParams, AppFactoryParams, CreateSchema } from '@algorandfoundation/algokit-utils/types/app-factory'\nimport { TransactionComposer, AppCallMethodCall, AppMethodCallTransactionArgument, SimulateOptions, RawSimulateOptions, SkipSignaturesSimulateOptions } from '@algorandfoundation/algokit-utils/types/composer'\nimport { SendParams, SendSingleTransactionResult, SendAtomicTransactionComposerResults } from '@algorandfoundation/algokit-utils/types/transaction'\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from 'algosdk'\n\nexport const APP_SPEC: Arc56Contract = {\"name\":\"Arc200\",\"structs\":{\"ApprovalStruct\":[{\"name\":\"approvalAmount\",\"type\":\"uint256\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"spender\",\"type\":\"address\"}]},\"methods\":[{\"name\":\"bootstrap\",\"args\":[{\"type\":\"byte[]\",\"name\":\"name\"},{\"type\":\"byte[]\",\"name\":\"symbol\"},{\"type\":\"uint8\",\"name\":\"decimals\"},{\"type\":\"uint256\",\"name\":\"totalSupply\"}],\"returns\":{\"type\":\"bool\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"events\":[{\"name\":\"arc200_Transfer\",\"args\":[{\"type\":\"address\",\"name\":\"from\"},{\"type\":\"address\",\"name\":\"to\"},{\"type\":\"uint256\",\"name\":\"value\"}]}],\"recommendations\":{}},{\"name\":\"arc200_name\",\"args\":[],\"returns\":{\"type\":\"byte[32]\",\"desc\":\"The name of the token\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"desc\":\"Returns the name of the token\",\"events\":[],\"recommendations\":{}},{\"name\":\"arc200_symbol\",\"args\":[],\"returns\":{\"type\":\"byte[8]\",\"desc\":\"The symbol of the token\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"desc\":\"Returns the symbol of the token\",\"events\":[],\"recommendations\":{}},{\"name\":\"arc200_decimals\",\"args\":[],\"returns\":{\"type\":\"uint8\",\"desc\":\"The decimals of the token\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"desc\":\"Returns the decimals of the token\",\"events\":[],\"recommendations\":{}},{\"name\":\"arc200_totalSupply\",\"args\":[],\"returns\":{\"type\":\"uint256\",\"desc\":\"The total supply of the token\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"desc\":\"Returns the total supply of the token\",\"events\":[],\"recommendations\":{}},{\"name\":\"arc200_balanceOf\",\"args\":[{\"type\":\"address\",\"name\":\"owner\",\"desc\":\"The address of the owner of the token\"}],\"returns\":{\"type\":\"uint256\",\"desc\":\"The current balance of the holder of the token\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"desc\":\"Returns the current balance of the owner of the token\",\"events\":[],\"recommendations\":{}},{\"name\":\"arc200_transfer\",\"args\":[{\"type\":\"address\",\"name\":\"to\",\"desc\":\"The destination of the transfer\"},{\"type\":\"uint256\",\"name\":\"value\",\"desc\":\"Amount of tokens to transfer\"}],\"returns\":{\"type\":\"bool\",\"desc\":\"Success\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"Transfers tokens\",\"events\":[{\"name\":\"arc200_Transfer\",\"args\":[{\"type\":\"address\",\"name\":\"from\"},{\"type\":\"address\",\"name\":\"to\"},{\"type\":\"uint256\",\"name\":\"value\"}]}],\"recommendations\":{}},{\"name\":\"arc200_transferFrom\",\"args\":[{\"type\":\"address\",\"name\":\"from\",\"desc\":\"The source of the transfer\"},{\"type\":\"address\",\"name\":\"to\",\"desc\":\"The destination of the transfer\"},{\"type\":\"uint256\",\"name\":\"value\",\"desc\":\"Amount of tokens to transfer\"}],\"returns\":{\"type\":\"bool\",\"desc\":\"Success\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"Transfers tokens from source to destination as approved spender\",\"events\":[{\"name\":\"arc200_Approval\",\"args\":[{\"type\":\"address\",\"name\":\"owner\"},{\"type\":\"address\",\"name\":\"spender\"},{\"type\":\"uint256\",\"name\":\"value\"}]},{\"name\":\"arc200_Transfer\",\"args\":[{\"type\":\"address\",\"name\":\"from\"},{\"type\":\"address\",\"name\":\"to\"},{\"type\":\"uint256\",\"name\":\"value\"}]}],\"recommendations\":{}},{\"name\":\"arc200_approve\",\"args\":[{\"type\":\"address\",\"name\":\"spender\",\"desc\":\"Who is allowed to take tokens on owner's behalf\"},{\"type\":\"uint256\",\"name\":\"value\",\"desc\":\"Amount of tokens to be taken by spender\"}],\"returns\":{\"type\":\"bool\",\"desc\":\"Success\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":false,\"desc\":\"Approve spender for a token\",\"events\":[{\"name\":\"arc200_Approval\",\"args\":[{\"type\":\"address\",\"name\":\"owner\"},{\"type\":\"address\",\"name\":\"spender\"},{\"type\":\"uint256\",\"name\":\"value\"}]}],\"recommendations\":{}},{\"name\":\"arc200_allowance\",\"args\":[{\"type\":\"address\",\"name\":\"owner\",\"desc\":\"Owner's account\"},{\"type\":\"address\",\"name\":\"spender\",\"desc\":\"Who is allowed to take tokens on owner's behalf\"}],\"returns\":{\"type\":\"uint256\",\"desc\":\"The remaining allowance\"},\"actions\":{\"create\":[],\"call\":[\"NoOp\"]},\"readonly\":true,\"desc\":\"Returns the current allowance of the spender of the tokens of the owner\",\"events\":[],\"recommendations\":{}}],\"arcs\":[22,28],\"desc\":\"Smart Contract Token Base Interface\",\"networks\":{},\"state\":{\"schema\":{\"global\":{\"ints\":0,\"bytes\":4},\"local\":{\"ints\":0,\"bytes\":0}},\"keys\":{\"global\":{\"name\":{\"keyType\":\"AVMString\",\"valueType\":\"byte[]\",\"key\":\"bg==\",\"desc\":\"Name of the asset. Max 32 bytes\"},\"symbol\":{\"keyType\":\"AVMString\",\"valueType\":\"byte[]\",\"key\":\"cw==\",\"desc\":\"Symbol of the asset. Max 8 bytes\"},\"decimals\":{\"keyType\":\"AVMString\",\"valueType\":\"uint8\",\"key\":\"ZA==\",\"desc\":\"Decimals of the asset. Recommended is 6 decimal places.\"},\"totalSupply\":{\"keyType\":\"AVMString\",\"valueType\":\"uint256\",\"key\":\"dA==\",\"desc\":\"Minted supply\"}},\"local\":{},\"box\":{}},\"maps\":{\"global\":{},\"local\":{},\"box\":{\"balances\":{\"keyType\":\"address\",\"valueType\":\"uint256\",\"prefix\":\"Yg==\"},\"approvals\":{\"keyType\":\"byte[32]\",\"valueType\":\"ApprovalStruct\",\"prefix\":\"YQ==\"}}}},\"bareActions\":{\"create\":[\"NoOp\"],\"call\":[]},\"sourceInfo\":{\"approval\":{\"sourceInfo\":[{\"pc\":[534,650],\"errorMessage\":\"Box must have value\"},{\"pc\":[555],\"errorMessage\":\"Insufficient balance at the sender account\"},{\"pc\":[213],\"errorMessage\":\"Name of the asset must be longer or equal to 1 character\"},{\"pc\":[216],\"errorMessage\":\"Name of the asset must be shorter or equal to 32 characters\"},{\"pc\":[66],\"errorMessage\":\"OnCompletion must be NoOp\"},{\"pc\":[155],\"errorMessage\":\"OnCompletion must be NoOp && can only call when creating\"},{\"pc\":[205],\"errorMessage\":\"Only deployer of this smart contract can call bootstrap method\"},{\"pc\":[224],\"errorMessage\":\"Symbol of the asset must be longer or equal to 1 character\"},{\"pc\":[228],\"errorMessage\":\"Symbol of the asset must be shorter or equal to 8 characters\"},{\"pc\":[235],\"errorMessage\":\"This method can be called only once\"},{\"pc\":[289,309,330,340],\"errorMessage\":\"check GlobalState exists\"},{\"pc\":[430],\"errorMessage\":\"insufficient approval\"},{\"pc\":[163,176],\"errorMessage\":\"invalid array length header\"},{\"pc\":[170,183],\"errorMessage\":\"invalid number of bytes for arc4.dynamic_array<arc4.uint8>\"},{\"pc\":[354,371,400,408,466,495,503],\"errorMessage\":\"invalid number of bytes for arc4.static_array<arc4.uint8, 32>\"},{\"pc\":[199,379,416,474],\"errorMessage\":\"invalid number of bytes for arc4.uint256\"},{\"pc\":[191],\"errorMessage\":\"invalid number of bytes for arc4.uint8\"},{\"pc\":[297,318],\"errorMessage\":\"invalid size\"},{\"pc\":[438,573,595],\"errorMessage\":\"overflow\"}],\"pcOffsetMethod\":\"none\"},\"clear\":{\"sourceInfo\":[],\"pcOffsetMethod\":\"none\"}},\"source\":{\"approval\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMzIgMSAwIDIKICAgIGJ5dGVjYmxvY2sgMHgxNTFmN2M3NSAiYiIgInQiICJuIiAweDc5ODNjMzVjIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE51bUFwcEFyZ3MKICAgIGJ6IG1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydAogICAgcHVzaGJ5dGVzcyAweDk3NTM4MmUyIDB4NjU3ZDEzZWMgMHhiNmFlMWEyNSAweDg0ZWMxM2Q1IDB4ZWM5OTYwNDEgMHg4MmU1NzNjNCAweGRhNzAyNWI5IDB4NGE5NjhmOGYgMHhiNTQyMjEyNSAweGJiYjMxOWYzIC8vIG1ldGhvZCAiYm9vdHN0cmFwKGJ5dGVbXSxieXRlW10sdWludDgsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfbmFtZSgpYnl0ZVszMl0iLCBtZXRob2QgImFyYzIwMF9zeW1ib2woKWJ5dGVbOF0iLCBtZXRob2QgImFyYzIwMF9kZWNpbWFscygpdWludDgiLCBtZXRob2QgImFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NiIsIG1ldGhvZCAiYXJjMjAwX2JhbGFuY2VPZihhZGRyZXNzKXVpbnQyNTYiLCBtZXRob2QgImFyYzIwMF90cmFuc2ZlcihhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX3RyYW5zZmVyRnJvbShhZGRyZXNzLGFkZHJlc3MsdWludDI1Nilib29sIiwgbWV0aG9kICJhcmMyMDBfYXBwcm92ZShhZGRyZXNzLHVpbnQyNTYpYm9vbCIsIG1ldGhvZCAiYXJjMjAwX2FsbG93YW5jZShhZGRyZXNzLGFkZHJlc3MpdWludDI1NiIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGJvb3RzdHJhcCBhcmMyMDBfbmFtZSBhcmMyMDBfc3ltYm9sIGFyYzIwMF9kZWNpbWFscyBhcmMyMDBfdG90YWxTdXBwbHkgYXJjMjAwX2JhbGFuY2VPZiBhcmMyMDBfdHJhbnNmZXIgYXJjMjAwX3RyYW5zZmVyRnJvbSBhcmMyMDBfYXBwcm92ZSBhcmMyMDBfYWxsb3dhbmNlCiAgICBlcnIKCm1haW5fX19hbGdvdHNfXy5kZWZhdWx0Q3JlYXRlQDE3OgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgQXJjMjAwIGV4dGVuZHMgQ29udHJhY3QgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICEKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgTm9PcCAmJiBjYW4gb25seSBjYWxsIHdoZW4gY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5ib290c3RyYXBbcm91dGluZ10oKSAtPiB2b2lkOgpib290c3RyYXA6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjMKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICBkdXAKICAgIGludGNfMiAvLyAwCiAgICBleHRyYWN0X3VpbnQxNiAvLyBvbiBlcnJvcjogaW52YWxpZCBhcnJheSBsZW5ndGggaGVhZGVyCiAgICBpbnRjXzMgLy8gMgogICAgKwogICAgZGlnIDEKICAgIGxlbgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5keW5hbWljX2FycmF5PGFyYzQudWludDg+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDgKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDI1NgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjY1CiAgICAvLyBhc3NlcnQoVHhuLnNlbmRlciA9PT0gR2xvYmFsLmNyZWF0b3JBZGRyZXNzLCAnT25seSBkZXBsb3llciBvZiB0aGlzIHNtYXJ0IGNvbnRyYWN0IGNhbiBjYWxsIGJvb3RzdHJhcCBtZXRob2QnKQogICAgdHhuIFNlbmRlcgogICAgZ2xvYmFsIENyZWF0b3JBZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgZGVwbG95ZXIgb2YgdGhpcyBzbWFydCBjb250cmFjdCBjYW4gY2FsbCBib290c3RyYXAgbWV0aG9kCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjYKICAgIC8vIGFzc2VydChuYW1lLm5hdGl2ZS5sZW5ndGggPiAwLCAnTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXInKQogICAgZGlnIDMKICAgIGV4dHJhY3QgMiAwCiAgICBsZW4KICAgIGR1cAogICAgYXNzZXJ0IC8vIE5hbWUgb2YgdGhlIGFzc2V0IG11c3QgYmUgbG9uZ2VyIG9yIGVxdWFsIHRvIDEgY2hhcmFjdGVyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjcKICAgIC8vIGFzc2VydChuYW1lLm5hdGl2ZS5sZW5ndGggPD0gMzIsICdOYW1lIG9mIHRoZSBhc3NldCBtdXN0IGJlIHNob3J0ZXIgb3IgZXF1YWwgdG8gMzIgY2hhcmFjdGVycycpCiAgICBpbnRjXzAgLy8gMzIKICAgIDw9CiAgICBhc3NlcnQgLy8gTmFtZSBvZiB0aGUgYXNzZXQgbXVzdCBiZSBzaG9ydGVyIG9yIGVxdWFsIHRvIDMyIGNoYXJhY3RlcnMKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2OAogICAgLy8gYXNzZXJ0KHN5bWJvbC5uYXRpdmUubGVuZ3RoID4gMCwgJ1N5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXInKQogICAgZGlnIDIKICAgIGV4dHJhY3QgMiAwCiAgICBsZW4KICAgIGR1cAogICAgYXNzZXJ0IC8vIFN5bWJvbCBvZiB0aGUgYXNzZXQgbXVzdCBiZSBsb25nZXIgb3IgZXF1YWwgdG8gMSBjaGFyYWN0ZXIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2OQogICAgLy8gYXNzZXJ0KHN5bWJvbC5uYXRpdmUubGVuZ3RoIDw9IDgsICdTeW1ib2wgb2YgdGhlIGFzc2V0IG11c3QgYmUgc2hvcnRlciBvciBlcXVhbCB0byA4IGNoYXJhY3RlcnMnKQogICAgcHVzaGludCA4IC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gU3ltYm9sIG9mIHRoZSBhc3NldCBtdXN0IGJlIHNob3J0ZXIgb3IgZXF1YWwgdG8gOCBjaGFyYWN0ZXJzCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzAKICAgIC8vIGFzc2VydCghdGhpcy50b3RhbFN1cHBseS5oYXNWYWx1ZSwgJ1RoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlJykKICAgIGludGNfMiAvLyAwCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTcKICAgIC8vIHB1YmxpYyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPFVpbnQyNTY+KHsga2V5OiAndCcgfSkKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzAKICAgIC8vIGFzc2VydCghdGhpcy50b3RhbFN1cHBseS5oYXNWYWx1ZSwgJ1RoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgb25seSBvbmNlJykKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgICEKICAgIGFzc2VydCAvLyBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIG9ubHkgb25jZQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgbmFtZSA9IEdsb2JhbFN0YXRlPER5bmFtaWNCeXRlcz4oeyBrZXk6ICduJyB9KQogICAgYnl0ZWNfMyAvLyAibiIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3MgogICAgLy8gdGhpcy5uYW1lLnZhbHVlID0gbmFtZQogICAgdW5jb3ZlciA0CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQ3CiAgICAvLyBwdWJsaWMgc3ltYm9sID0gR2xvYmFsU3RhdGU8RHluYW1pY0J5dGVzPih7IGtleTogJ3MnIH0pCiAgICBwdXNoYnl0ZXMgInMiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzMKICAgIC8vIHRoaXMuc3ltYm9sLnZhbHVlID0gc3ltYm9sCiAgICB1bmNvdmVyIDMKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTcKICAgIC8vIHB1YmxpYyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPFVpbnQyNTY+KHsga2V5OiAndCcgfSkKICAgIGJ5dGVjXzIgLy8gInQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzQKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgPSB0b3RhbFN1cHBseQogICAgZGlnIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NTIKICAgIC8vIHB1YmxpYyBkZWNpbWFscyA9IEdsb2JhbFN0YXRlPFVpbnQ4Pih7IGtleTogJ2QnIH0pCiAgICBwdXNoYnl0ZXMgImQiCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NzUKICAgIC8vIHRoaXMuZGVjaW1hbHMudmFsdWUgPSBkZWNpbWFscwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjc2CiAgICAvLyBjb25zdCBzZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjU5CiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludDI1Nj4oeyBrZXlQcmVmaXg6ICdiJyB9KQogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo3OAogICAgLy8gdGhpcy5iYWxhbmNlcyhzZW5kZXIpLnZhbHVlID0gdG90YWxTdXBwbHkKICAgIGRpZyAyCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6ODAKICAgIC8vIGVtaXQobmV3IGFyYzIwMF9UcmFuc2Zlcih7IGZyb206IG5ldyBBZGRyZXNzKEdsb2JhbC56ZXJvQWRkcmVzcyksIHRvOiBzZW5kZXIsIHZhbHVlOiB0b3RhbFN1cHBseSB9KSkKICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgc3dhcAogICAgY29uY2F0CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGJ5dGVjIDQgLy8gbWV0aG9kICJhcmMyMDBfVHJhbnNmZXIoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo2MwogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1ODAKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF9uYW1lW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjMjAwX25hbWU6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OTEKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KHRoaXMubmFtZS52YWx1ZS5uYXRpdmUpCiAgICBpbnRjXzIgLy8gMAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjQyCiAgICAvLyBwdWJsaWMgbmFtZSA9IEdsb2JhbFN0YXRlPER5bmFtaWNCeXRlcz4oeyBrZXk6ICduJyB9KQogICAgYnl0ZWNfMyAvLyAibiIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo5MQogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczwzMj4odGhpcy5uYW1lLnZhbHVlLm5hdGl2ZSkKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBleHRyYWN0IDIgMAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo4OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfc3ltYm9sW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjMjAwX3N5bWJvbDoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMDEKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8OD4odGhpcy5zeW1ib2wudmFsdWUubmF0aXZlKQogICAgaW50Y18yIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo0NwogICAgLy8gcHVibGljIHN5bWJvbCA9IEdsb2JhbFN0YXRlPER5bmFtaWNCeXRlcz4oeyBrZXk6ICdzJyB9KQogICAgcHVzaGJ5dGVzICJzIgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjEwMQogICAgLy8gcmV0dXJuIG5ldyBTdGF0aWNCeXRlczw4Pih0aGlzLnN5bWJvbC52YWx1ZS5uYXRpdmUpCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZXh0cmFjdCAyIDAKICAgIGR1cAogICAgbGVuCiAgICBwdXNoaW50IDggLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIHNpemUKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo5OQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfZGVjaW1hbHNbcm91dGluZ10oKSAtPiB2b2lkOgphcmMyMDBfZGVjaW1hbHM6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTExCiAgICAvLyByZXR1cm4gdGhpcy5kZWNpbWFscy52YWx1ZQogICAgaW50Y18yIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1MgogICAgLy8gcHVibGljIGRlY2ltYWxzID0gR2xvYmFsU3RhdGU8VWludDg+KHsga2V5OiAnZCcgfSkKICAgIHB1c2hieXRlcyAiZCIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMTEKICAgIC8vIHJldHVybiB0aGlzLmRlY2ltYWxzLnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjEwOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfdG90YWxTdXBwbHlbcm91dGluZ10oKSAtPiB2b2lkOgphcmMyMDBfdG90YWxTdXBwbHk6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTIxCiAgICAvLyByZXR1cm4gdGhpcy50b3RhbFN1cHBseS52YWx1ZQogICAgaW50Y18yIC8vIDAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1NwogICAgLy8gcHVibGljIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8VWludDI1Nj4oeyBrZXk6ICd0JyB9KQogICAgYnl0ZWNfMiAvLyAidCIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMjEKICAgIC8vIHJldHVybiB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjExOQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYmFsYW5jZU9mW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjMjAwX2JhbGFuY2VPZjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzIKICAgIC8vIHJldHVybiB0aGlzLl9iYWxhbmNlT2Yob3duZXIpCiAgICBjYWxsc3ViIF9iYWxhbmNlT2YKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxMzAKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX3RyYW5zZmVyW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjMjAwX3RyYW5zZmVyOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE0MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50MjU2CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTQ0CiAgICAvLyByZXR1cm4gdGhpcy5fdHJhbnNmZXIobmV3IEFkZHJlc3MoVHhuLnNlbmRlciksIHRvLCB2YWx1ZSkKICAgIHR4biBTZW5kZXIKICAgIGNvdmVyIDIKICAgIGNhbGxzdWIgX3RyYW5zZmVyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTQyCiAgICAvLyBAYXJjNC5hYmltZXRob2QoKQogICAgYnl0ZWNfMCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo6QXJjMjAwLmFyYzIwMF90cmFuc2ZlckZyb21bcm91dGluZ10oKSAtPiB2b2lkOgphcmMyMDBfdHJhbnNmZXJGcm9tOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE1NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMCAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQyNTYKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNTcKICAgIC8vIGNvbnN0IHNwZW5kZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE1OAogICAgLy8gY29uc3Qgc3BlbmRlcl9hbGxvd2FuY2UgPSB0aGlzLl9hbGxvd2FuY2UoZnJvbSwgc3BlbmRlcikKICAgIGRpZyAzCiAgICBkaWcgMQogICAgY2FsbHN1YiBfYWxsb3dhbmNlCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTU5CiAgICAvLyBhc3NlcnQoc3BlbmRlcl9hbGxvd2FuY2UuYXNCaWdVaW50KCkgPj0gdmFsdWUuYXNCaWdVaW50KCksICdpbnN1ZmZpY2llbnQgYXBwcm92YWwnKQogICAgZHVwCiAgICBkaWcgMwogICAgYj49CiAgICBhc3NlcnQgLy8gaW5zdWZmaWNpZW50IGFwcHJvdmFsCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTYwCiAgICAvLyBjb25zdCBuZXdfc3BlbmRlcl9hbGxvd2FuY2UgPSBuZXcgVWludDI1NihzcGVuZGVyX2FsbG93YW5jZS5hc0JpZ1VpbnQoKSAtIHZhbHVlLmFzQmlnVWludCgpKQogICAgZGlnIDIKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMzIKICAgIGJ6ZXJvCiAgICBifAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE2MQogICAgLy8gdGhpcy5fYXBwcm92ZShmcm9tLCBzcGVuZGVyLCBuZXdfc3BlbmRlcl9hbGxvd2FuY2UpCiAgICBkaWcgNAogICAgY292ZXIgMgogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgcG9wCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTYyCiAgICAvLyByZXR1cm4gdGhpcy5fdHJhbnNmZXIoZnJvbSwgdG8sIHZhbHVlKQogICAgY2FsbHN1YiBfdHJhbnNmZXIKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNTUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICBieXRlY18wIC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuYXJjMjAwX2FwcHJvdmVbcm91dGluZ10oKSAtPiB2b2lkOgphcmMyMDBfYXBwcm92ZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxNzIKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCgpCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDI1NgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE3NAogICAgLy8gY29uc3Qgb3duZXIgPSBuZXcgQWRkcmVzcyhUeG4uc2VuZGVyKQogICAgdHhuIFNlbmRlcgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE3NQogICAgLy8gcmV0dXJuIHRoaXMuX2FwcHJvdmUob3duZXIsIHNwZW5kZXIsIHZhbHVlKQogICAgY292ZXIgMgogICAgY2FsbHN1YiBfYXBwcm92ZQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE3MgogICAgLy8gQGFyYzQuYWJpbWV0aG9kKCkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5hcmMyMDBfYWxsb3dhbmNlW3JvdXRpbmddKCkgLT4gdm9pZDoKYXJjMjAwX2FsbG93YW5jZToKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxODUKICAgIC8vIEBhcmM0LmFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzAgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NwogICAgLy8gcmV0dXJuIHRoaXMuX2FsbG93YW5jZShvd25lciwgc3BlbmRlcikKICAgIGNhbGxzdWIgX2FsbG93YW5jZQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE4NQogICAgLy8gQGFyYzQuYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGJ5dGVjXzAgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5fYmFsYW5jZU9mKG93bmVyOiBieXRlcykgLT4gYnl0ZXM6Cl9iYWxhbmNlT2Y6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MTkwCiAgICAvLyBwcml2YXRlIF9iYWxhbmNlT2Yob3duZXI6IEFkZHJlc3MpOiBVaW50MjU2IHsKICAgIHByb3RvIDEgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjU5CiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludDI1Nj4oeyBrZXlQcmVmaXg6ICdiJyB9KQogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBkdXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTEKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzKSByZXR1cm4gbmV3IFVpbnQyNTYoMCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IF9iYWxhbmNlT2ZfYWZ0ZXJfaWZfZWxzZUAyCiAgICBieXRlYyA1IC8vIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgc3dhcAogICAgcmV0c3ViCgpfYmFsYW5jZU9mX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTIKICAgIC8vIHJldHVybiB0aGlzLmJhbGFuY2VzKG93bmVyKS52YWx1ZQogICAgZnJhbWVfZGlnIDAKICAgIGJveF9nZXQKICAgIGFzc2VydCAvLyBCb3ggbXVzdCBoYXZlIHZhbHVlCiAgICBzd2FwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5fdHJhbnNmZXIoc2VuZGVyOiBieXRlcywgcmVjaXBpZW50OiBieXRlcywgYW1vdW50OiBieXRlcykgLT4gYnl0ZXM6Cl90cmFuc2ZlcjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTUKICAgIC8vIHByaXZhdGUgX3RyYW5zZmVyKHNlbmRlcjogQWRkcmVzcywgcmVjaXBpZW50OiBBZGRyZXNzLCBhbW91bnQ6IFVpbnQyNTYpOiBCb29sIHsKICAgIHByb3RvIDMgMQogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NgogICAgLy8gY29uc3Qgc2VuZGVyX2JhbGFuY2UgPSB0aGlzLl9iYWxhbmNlT2Yoc2VuZGVyKQogICAgZnJhbWVfZGlnIC0zCiAgICBjYWxsc3ViIF9iYWxhbmNlT2YKICAgIGR1cAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjE5NwogICAgLy8gY29uc3QgcmVjaXBpZW50X2JhbGFuY2UgPSB0aGlzLl9iYWxhbmNlT2YocmVjaXBpZW50KQogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIF9iYWxhbmNlT2YKICAgIHN3YXAKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoxOTgKICAgIC8vIGFzc2VydChzZW5kZXJfYmFsYW5jZS5hc0JpZ1VpbnQoKSA+PSBhbW91bnQuYXNCaWdVaW50KCksICdJbnN1ZmZpY2llbnQgYmFsYW5jZSBhdCB0aGUgc2VuZGVyIGFjY291bnQnKQogICAgZnJhbWVfZGlnIC0xCiAgICBiPj0KICAgIGFzc2VydCAvLyBJbnN1ZmZpY2llbnQgYmFsYW5jZSBhdCB0aGUgc2VuZGVyIGFjY291bnQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMDAKICAgIC8vIGlmIChzZW5kZXIgIT09IHJlY2lwaWVudCkgewogICAgZnJhbWVfZGlnIC0zCiAgICBmcmFtZV9kaWcgLTIKICAgICE9CiAgICBieiBfdHJhbnNmZXJfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjAyCiAgICAvLyB0aGlzLmJhbGFuY2VzKHNlbmRlcikudmFsdWUgPSBuZXcgVWludDI1NihzZW5kZXJfYmFsYW5jZS5hc0JpZ1VpbnQoKSAtIGFtb3VudC5hc0JpZ1VpbnQoKSkKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgLTEKICAgIGItCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzAgLy8gMzIKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czo1OQogICAgLy8gcHVibGljIGJhbGFuY2VzID0gQm94TWFwPEFkZHJlc3MsIFVpbnQyNTY+KHsga2V5UHJlZml4OiAnYicgfSkKICAgIGJ5dGVjXzEgLy8gImIiCiAgICBmcmFtZV9kaWcgLTMKICAgIGNvbmNhdAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwMgogICAgLy8gdGhpcy5iYWxhbmNlcyhzZW5kZXIpLnZhbHVlID0gbmV3IFVpbnQyNTYoc2VuZGVyX2JhbGFuY2UuYXNCaWdVaW50KCkgLSBhbW91bnQuYXNCaWdVaW50KCkpCiAgICBzd2FwCiAgICBib3hfcHV0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjAzCiAgICAvLyB0aGlzLmJhbGFuY2VzKHJlY2lwaWVudCkudmFsdWUgPSBuZXcgVWludDI1NihyZWNpcGllbnRfYmFsYW5jZS5hc0JpZ1VpbnQoKSArIGFtb3VudC5hc0JpZ1VpbnQoKSkKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgLTEKICAgIGIrCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18wIC8vIDMyCiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBifAogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjU5CiAgICAvLyBwdWJsaWMgYmFsYW5jZXMgPSBCb3hNYXA8QWRkcmVzcywgVWludDI1Nj4oeyBrZXlQcmVmaXg6ICdiJyB9KQogICAgYnl0ZWNfMSAvLyAiYiIKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjAzCiAgICAvLyB0aGlzLmJhbGFuY2VzKHJlY2lwaWVudCkudmFsdWUgPSBuZXcgVWludDI1NihyZWNpcGllbnRfYmFsYW5jZS5hc0JpZ1VpbnQoKSArIGFtb3VudC5hc0JpZ1VpbnQoKSkKICAgIHN3YXAKICAgIGJveF9wdXQKCl90cmFuc2Zlcl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjA1CiAgICAvLyBlbWl0KG5ldyBhcmMyMDBfVHJhbnNmZXIoeyBmcm9tOiBzZW5kZXIsIHRvOiByZWNpcGllbnQsIHZhbHVlOiBhbW91bnQgfSkpCiAgICBmcmFtZV9kaWcgLTMKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICBmcmFtZV9kaWcgLTEKICAgIGNvbmNhdAogICAgYnl0ZWMgNCAvLyBtZXRob2QgImFyYzIwMF9UcmFuc2ZlcihhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIwNgogICAgLy8gcmV0dXJuIG5ldyBCb29sKHRydWUpCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6OkFyYzIwMC5fYWxsb3dhbmNlKG93bmVyOiBieXRlcywgc3BlbmRlcjogYnl0ZXMpIC0+IGJ5dGVzOgpfYWxsb3dhbmNlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxMwogICAgLy8gcHJpdmF0ZSBfYWxsb3dhbmNlKG93bmVyOiBBZGRyZXNzLCBzcGVuZGVyOiBBZGRyZXNzKTogVWludDI1NiB7CiAgICBwcm90byAyIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMTAKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KG9wLnNoYTI1NihvcC5jb25jYXQob3duZXIuYnl0ZXMsIHNwZW5kZXIuYnl0ZXMpKSkKICAgIGZyYW1lX2RpZyAtMgogICAgZnJhbWVfZGlnIC0xCiAgICBjb25jYXQKICAgIHNoYTI1NgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjYxCiAgICAvLyBwdWJsaWMgYXBwcm92YWxzID0gQm94TWFwPFN0YXRpY0J5dGVzPDMyPiwgQXBwcm92YWxTdHJ1Y3Q+KHsga2V5UHJlZml4OiAnYScgfSkKICAgIHB1c2hieXRlcyAiYSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZHVwCiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjE1CiAgICAvLyBpZiAoIXRoaXMuYXBwcm92YWxzKGtleSkuZXhpc3RzKSByZXR1cm4gbmV3IFVpbnQyNTYoMCkKICAgIGJveF9sZW4KICAgIGJ1cnkgMQogICAgYm56IF9hbGxvd2FuY2VfYWZ0ZXJfaWZfZWxzZUAyCiAgICBieXRlYyA1IC8vIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAogICAgc3dhcAogICAgcmV0c3ViCgpfYWxsb3dhbmNlX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMTYKICAgIC8vIHJldHVybiB0aGlzLmFwcHJvdmFscyhrZXkpLnZhbHVlLmFwcHJvdmFsQW1vdW50CiAgICBmcmFtZV9kaWcgMAogICAgYm94X2dldAogICAgYXNzZXJ0IC8vIEJveCBtdXN0IGhhdmUgdmFsdWUKICAgIGV4dHJhY3QgMCAzMgogICAgc3dhcAogICAgcmV0c3ViCgoKLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjpBcmMyMDAuX2FwcHJvdmUob3duZXI6IGJ5dGVzLCBzcGVuZGVyOiBieXRlcywgYW1vdW50OiBieXRlcykgLT4gYnl0ZXM6Cl9hcHByb3ZlOgogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIxOQogICAgLy8gcHJpdmF0ZSBfYXBwcm92ZShvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcywgYW1vdW50OiBVaW50MjU2KTogQm9vbCB7CiAgICBwcm90byAzIDEKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMTAKICAgIC8vIHJldHVybiBuZXcgU3RhdGljQnl0ZXM8MzI+KG9wLnNoYTI1NihvcC5jb25jYXQob3duZXIuYnl0ZXMsIHNwZW5kZXIuYnl0ZXMpKSkKICAgIGZyYW1lX2RpZyAtMwogICAgZnJhbWVfZGlnIC0yCiAgICBjb25jYXQKICAgIGR1cAogICAgc2hhMjU2CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6MjIxLTIyNQogICAgLy8gY29uc3QgYXBwcm92YWxCb3g6IEFwcHJvdmFsU3RydWN0ID0gbmV3IEFwcHJvdmFsU3RydWN0KHsKICAgIC8vICAgYXBwcm92YWxBbW91bnQ6IGFtb3VudCwKICAgIC8vICAgb3duZXI6IG93bmVyLAogICAgLy8gICBzcGVuZGVyOiBzcGVuZGVyLAogICAgLy8gfSkKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIC0zCiAgICBjb25jYXQKICAgIGZyYW1lX2RpZyAtMgogICAgY29uY2F0CiAgICAvLyBjb250cmFjdHMvYXJjMjAwLmFsZ28udHM6NjEKICAgIC8vIHB1YmxpYyBhcHByb3ZhbHMgPSBCb3hNYXA8U3RhdGljQnl0ZXM8MzI+LCBBcHByb3ZhbFN0cnVjdD4oeyBrZXlQcmVmaXg6ICdhJyB9KQogICAgcHVzaGJ5dGVzICJhIgogICAgdW5jb3ZlciAyCiAgICBjb25jYXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjYKICAgIC8vIHRoaXMuYXBwcm92YWxzKGtleSkudmFsdWUgPSBjbG9uZShhcHByb3ZhbEJveCkKICAgIHN3YXAKICAgIGJveF9wdXQKICAgIC8vIGNvbnRyYWN0cy9hcmMyMDAuYWxnby50czoyMjcKICAgIC8vIGVtaXQobmV3IGFyYzIwMF9BcHByb3ZhbCh7IG93bmVyOiBvd25lciwgc3BlbmRlcjogc3BlbmRlciwgdmFsdWU6IGFtb3VudCB9KSkKICAgIGZyYW1lX2RpZyAtMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgxOTY5Zjg2NSAvLyBtZXRob2QgImFyYzIwMF9BcHByb3ZhbChhZGRyZXNzLGFkZHJlc3MsdWludDI1NikiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gY29udHJhY3RzL2FyYzIwMC5hbGdvLnRzOjIyOAogICAgLy8gcmV0dXJuIG5ldyBCb29sKHRydWUpCiAgICBwdXNoYnl0ZXMgMHg4MAogICAgcmV0c3ViCg==\",\"clear\":\"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\"},\"byteCode\":{\"approval\":\"CyAEIAEAAiYGBBUffHUBYgF0AW4EeYPDXCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEbQQBVMRkURDEYRIIKBJdTguIEZX0T7AS2rholBITsE9UE7JlgQQSC5XPEBNpwJbkESpaPjwS1QiElBLuzGfM2GgCOCgALAIsAnQCyAL4AyADZAPYBOAFVADEZFDEYFBBEI0M2GgFJJFklCEsBFRJENhoCSSRZJQhLARUSRDYaA0kVIxJENhoESRUiEkQxADIJEkRLA1cCABVJRCIOREsCVwIAFUlEgQgORCQqZUUBFEQrTwRngAFzTwNnKksBZ4ABZE8CZzEAKUsBUEsCvzIDTFBMUCcETFCwgAUVH3x1gLAjQyQrZURXAgBJFSISRChMULAjQySAAXNlRFcCAEkVgQgSRChMULAjQySAAWRlRChMULAjQyQqZUQoTFCwI0M2GgFJFSISRIgAmyhMULAjQzYaAUkVIhJENhoCSRUiEkQxAE4CiACWKExQsCNDNhoBSRUiEkQ2GgJJFSISRDYaA0kVIhJEMQBLA0sBiADESUsDp0RLAqFJFSIORCKvq0sETgKIAM9IiABUKExQsCNDNhoBSRUiEkQ2GgJJFSISRDEATgKIAK4oTFCwI0M2GgFJFSISRDYaAkkVIhJEiABzKExQsCNDigEBKYv/UEm9RQFAAAQnBUyJiwC+REyJigMBi/2I/+BJi/6I/9pMi/+nRIv9i/4TQQAniwCL/6FJFSIORCKvTEsBqymL/VBMv4sBi/+gSRUiDkSrKYv+UEy/i/2L/lCL/1AnBExQsIABgIwAiYoCAYv+i/9QAYABYUxQSb1FAUAABCcFTImLAL5EVwAgTImKAwGL/Yv+UEkBi/+L/VCL/lCAAWFPAlBMv4v/UIAEGWn4ZUxQsIABgIk=\",\"clear\":\"C4EBQw==\"},\"events\":[{\"name\":\"arc200_Transfer\",\"args\":[{\"type\":\"address\",\"name\":\"from\"},{\"type\":\"address\",\"name\":\"to\"},{\"type\":\"uint256\",\"name\":\"value\"}]},{\"name\":\"arc200_Approval\",\"args\":[{\"type\":\"address\",\"name\":\"owner\"},{\"type\":\"address\",\"name\":\"spender\"},{\"type\":\"uint256\",\"name\":\"value\"}]}],\"templateVariables\":{}} as unknown as Arc56Contract\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString('utf-8') : undefined\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never\n\n\n// Type definitions for ARC-56 structs\n\nexport type ApprovalStruct = {\n approvalAmount: bigint,\n owner: string,\n spender: string\n}\n\n\n/**\n * Converts the ABI tuple representation of a ApprovalStruct to the struct representation\n */\nexport function ApprovalStructFromTuple(abiTuple: [bigint, string, string]) {\n return getABIStructFromABITuple(abiTuple, APP_SPEC.structs.ApprovalStruct, APP_SPEC.structs) as ApprovalStruct\n}\n\n/**\n * The argument types for the Arc200 contract\n */\nexport type Arc200Args = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n 'bootstrap(byte[],byte[],uint8,uint256)bool': {\n name: Uint8Array\n symbol: Uint8Array\n decimals: bigint | number\n totalSupply: bigint | number\n }\n 'arc200_name()byte[32]': Record<string, never>\n 'arc200_symbol()byte[8]': Record<string, never>\n 'arc200_decimals()uint8': Record<string, never>\n 'arc200_totalSupply()uint256': Record<string, never>\n 'arc200_balanceOf(address)uint256': {\n /**\n * The address of the owner of the token\n */\n owner: string\n }\n 'arc200_transfer(address,uint256)bool': {\n /**\n * The destination of the transfer\n */\n to: string\n /**\n * Amount of tokens to transfer\n */\n value: bigint | number\n }\n 'arc200_transferFrom(address,address,uint256)bool': {\n /**\n * The source of the transfer\n */\n from: string\n /**\n * The destination of the transfer\n */\n to: string\n /**\n * Amount of tokens to transfer\n */\n value: bigint | number\n }\n 'arc200_approve(address,uint256)bool': {\n /**\n * Who is allowed to take tokens on owner's behalf\n */\n spender: string\n /**\n * Amount of tokens to be taken by spender\n */\n value: bigint | number\n }\n 'arc200_allowance(address,address)uint256': {\n /**\n * Owner's account\n */\n owner: string\n /**\n * Who is allowed to take tokens on owner's behalf\n */\n spender: string\n }\n }\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n 'bootstrap(byte[],byte[],uint8,uint256)bool': [name: Uint8Array, symbol: Uint8Array, decimals: bigint | number, totalSupply: bigint | number]\n 'arc200_name()byte[32]': []\n 'arc200_symbol()byte[8]': []\n 'arc200_decimals()uint8': []\n 'arc200_totalSupply()uint256': []\n 'arc200_balanceOf(address)uint256': [owner: string]\n 'arc200_transfer(address,uint256)bool': [to: string, value: bigint | number]\n 'arc200_transferFrom(address,address,uint256)bool': [from: string, to: string, value: bigint | number]\n 'arc200_approve(address,uint256)bool': [spender: string, value: bigint | number]\n 'arc200_allowance(address,address)uint256': [owner: string, spender: string]\n }\n}\n\n/**\n * The return type for each method\n */\nexport type Arc200Returns = {\n 'bootstrap(byte[],byte[],uint8,uint256)bool': boolean\n 'arc200_name()byte[32]': Uint8Array\n 'arc200_symbol()byte[8]': Uint8Array\n 'arc200_decimals()uint8': number\n 'arc200_totalSupply()uint256': bigint\n 'arc200_balanceOf(address)uint256': bigint\n 'arc200_transfer(address,uint256)bool': boolean\n 'arc200_transferFrom(address,address,uint256)bool': boolean\n 'arc200_approve(address,uint256)bool': boolean\n 'arc200_allowance(address,address)uint256': bigint\n}\n\n/**\n * Defines the types of available calls and state of the Arc200 smart contract.\n */\nexport type Arc200Types = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods:\n & Record<'bootstrap(byte[],byte[],uint8,uint256)bool' | 'bootstrap', {\n argsObj: Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool']\n argsTuple: Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']\n returns: Arc200Returns['bootstrap(byte[],byte[],uint8,uint256)bool']\n }>\n & Record<'arc200_name()byte[32]' | 'arc200_name', {\n argsObj: Arc200Args['obj']['arc200_name()byte[32]']\n argsTuple: Arc200Args['tuple']['arc200_name()byte[32]']\n /**\n * The name of the token\n */\n returns: Arc200Returns['arc200_name()byte[32]']\n }>\n & Record<'arc200_symbol()byte[8]' | 'arc200_symbol', {\n argsObj: Arc200Args['obj']['arc200_symbol()byte[8]']\n argsTuple: Arc200Args['tuple']['arc200_symbol()byte[8]']\n /**\n * The symbol of the token\n */\n returns: Arc200Returns['arc200_symbol()byte[8]']\n }>\n & Record<'arc200_decimals()uint8' | 'arc200_decimals', {\n argsObj: Arc200Args['obj']['arc200_decimals()uint8']\n argsTuple: Arc200Args['tuple']['arc200_decimals()uint8']\n /**\n * The decimals of the token\n */\n returns: Arc200Returns['arc200_decimals()uint8']\n }>\n & Record<'arc200_totalSupply()uint256' | 'arc200_totalSupply', {\n argsObj: Arc200Args['obj']['arc200_totalSupply()uint256']\n argsTuple: Arc200Args['tuple']['arc200_totalSupply()uint256']\n /**\n * The total supply of the token\n */\n returns: Arc200Returns['arc200_totalSupply()uint256']\n }>\n & Record<'arc200_balanceOf(address)uint256' | 'arc200_balanceOf', {\n argsObj: Arc200Args['obj']['arc200_balanceOf(address)uint256']\n argsTuple: Arc200Args['tuple']['arc200_balanceOf(address)uint256']\n /**\n * The current balance of the holder of the token\n */\n returns: Arc200Returns['arc200_balanceOf(address)uint256']\n }>\n & Record<'arc200_transfer(address,uint256)bool' | 'arc200_transfer', {\n argsObj: Arc200Args['obj']['arc200_transfer(address,uint256)bool']\n argsTuple: Arc200Args['tuple']['arc200_transfer(address,uint256)bool']\n /**\n * Success\n */\n returns: Arc200Returns['arc200_transfer(address,uint256)bool']\n }>\n & Record<'arc200_transferFrom(address,address,uint256)bool' | 'arc200_transferFrom', {\n argsObj: Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool']\n argsTuple: Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']\n /**\n * Success\n */\n returns: Arc200Returns['arc200_transferFrom(address,address,uint256)bool']\n }>\n & Record<'arc200_approve(address,uint256)bool' | 'arc200_approve', {\n argsObj: Arc200Args['obj']['arc200_approve(address,uint256)bool']\n argsTuple: Arc200Args['tuple']['arc200_approve(address,uint256)bool']\n /**\n * Success\n */\n returns: Arc200Returns['arc200_approve(address,uint256)bool']\n }>\n & Record<'arc200_allowance(address,address)uint256' | 'arc200_allowance', {\n argsObj: Arc200Args['obj']['arc200_allowance(address,address)uint256']\n argsTuple: Arc200Args['tuple']['arc200_allowance(address,address)uint256']\n /**\n * The remaining allowance\n */\n returns: Arc200Returns['arc200_allowance(address,address)uint256']\n }>\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n /**\n * Name of the asset. Max 32 bytes\n */\n name: Uint8Array\n /**\n * Symbol of the asset. Max 8 bytes\n */\n symbol: Uint8Array\n /**\n * Decimals of the asset. Recommended is 6 decimal places.\n */\n decimals: number\n /**\n * Minted supply\n */\n totalSupply: bigint\n }\n maps: {}\n }\n box: {\n keys: {}\n maps: {\n balances: Map<string, bigint>\n approvals: Map<Uint8Array, ApprovalStruct>\n }\n }\n }\n}\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type Arc200Signatures = keyof Arc200Types['methods']\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type Arc200NonVoidMethodSignatures = keyof Arc200Types['methods'] extends infer T ? T extends keyof Arc200Types['methods'] ? MethodReturn<T> extends void ? never : T : never : never\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, 'method' | 'args' | 'onComplete'> &\n {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>\n }\n>\n/**\n * Maps a method signature from the Arc200 smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends Arc200Signatures> = Arc200Types['methods'][TSignature]['argsObj' | 'argsTuple']\n/**\n * Maps a method signature from the Arc200 smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends Arc200Signatures> = Arc200Types['methods'][TSignature]['returns']\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = Arc200Types['state']['global']['keys']\n\n/**\n * Defines the shape of the keyed box state of the application.\n */\nexport type BoxKeysState = Arc200Types['state']['box']['keys']\n\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type Arc200CreateCallParams =\n | Expand<AppClientBareCallParams & {method?: never} & {onComplete?: OnApplicationComplete.NoOpOC} & CreateSchema>\n/**\n * Defines arguments required for the deploy method.\n */\nexport type Arc200DeployParams = Expand<Omit<AppFactoryDeployParams, 'createParams' | 'updateParams' | 'deleteParams'> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: Arc200CreateCallParams\n}>\n\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Arc200 smart contract\n */\nexport abstract class Arc200ParamsFactory {\n /**\n * Constructs a no op call for the bootstrap(byte[],byte[],uint8,uint256)bool ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static bootstrap(params: CallParams<Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'] | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'bootstrap(byte[],byte[],uint8,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.name, params.args.symbol, params.args.decimals, params.args.totalSupply],\n }\n }\n /**\n * Constructs a no op call for the arc200_name()byte[32] ABI method\n *\n * Returns the name of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Name(params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_name()byte[32]' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the arc200_symbol()byte[8] ABI method\n *\n * Returns the symbol of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Symbol(params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_symbol()byte[8]' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the arc200_decimals()uint8 ABI method\n *\n * Returns the decimals of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Decimals(params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_decimals()uint8' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the arc200_totalSupply()uint256 ABI method\n *\n * Returns the total supply of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200TotalSupply(params: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_totalSupply()uint256' as const,\n args: Array.isArray(params.args) ? params.args : [],\n }\n }\n /**\n * Constructs a no op call for the arc200_balanceOf(address)uint256 ABI method\n *\n * Returns the current balance of the owner of the token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200BalanceOf(params: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_balanceOf(address)uint256' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.owner],\n }\n }\n /**\n * Constructs a no op call for the arc200_transfer(address,uint256)bool ABI method\n *\n * Transfers tokens\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Transfer(params: CallParams<Arc200Args['obj']['arc200_transfer(address,uint256)bool'] | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_transfer(address,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.to, params.args.value],\n }\n }\n /**\n * Constructs a no op call for the arc200_transferFrom(address,address,uint256)bool ABI method\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200TransferFrom(params: CallParams<Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'] | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_transferFrom(address,address,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.from, params.args.to, params.args.value],\n }\n }\n /**\n * Constructs a no op call for the arc200_approve(address,uint256)bool ABI method\n *\n * Approve spender for a token\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Approve(params: CallParams<Arc200Args['obj']['arc200_approve(address,uint256)bool'] | Arc200Args['tuple']['arc200_approve(address,uint256)bool']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_approve(address,uint256)bool' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.spender, params.args.value],\n }\n }\n /**\n * Constructs a no op call for the arc200_allowance(address,address)uint256 ABI method\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static arc200Allowance(params: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']> & CallOnComplete): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: 'arc200_allowance(address,address)uint256' as const,\n args: Array.isArray(params.args) ? params.args : [params.args.owner, params.args.spender],\n }\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Arc200 smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class Arc200Factory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory\n\n /**\n * Creates a new instance of `Arc200Factory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, 'appSpec'>) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n })\n }\n \n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName\n }\n \n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC\n }\n \n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand\n }\n \n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new Arc200Client(this.appFactory.getAppClientById(params))\n }\n \n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(\n params: AppFactoryResolveAppClientByCreatorAndNameParams,\n ) {\n return new Arc200Client(await this.appFactory.getAppClientByCreatorAndName(params))\n }\n\n /**\n * Idempotently deploys the Arc200 smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: Arc200DeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n })\n return { result: result.result, appClient: new Arc200Client(result.appClient) }\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Arc200 smart contract using a bare call.\n *\n * @param params The params for the bare (raw) call\n * @returns The params for a create call\n */\n bare: (params?: Expand<AppClientBareCallParams & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}>) => {\n return this.appFactory.params.bare.create(params)\n },\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Arc200 smart contract using a bare call.\n *\n * @param params The params for the bare (raw) call\n * @returns The transaction for a create call\n */\n bare: (params?: Expand<AppClientBareCallParams & AppClientCompilationParams & CreateSchema & {onComplete?: OnApplicationComplete.NoOpOC}>) => {\n return this.appFactory.createTransaction.bare.create(params)\n },\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Arc200 smart contract using a bare call.\n *\n * @param params The params for the bare (raw) call\n * @returns The create result\n */\n bare: async (params?: Expand<AppClientBareCallParams & AppClientCompilationParams & CreateSchema & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}>) => {\n const result = await this.appFactory.send.bare.create(params)\n return { result: result.result, appClient: new Arc200Client(result.appClient) }\n },\n },\n\n }\n\n}\n/**\n * A client to make calls to the Arc200 smart contract\n */\nexport class Arc200Client {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient\n\n /**\n * Creates a new instance of `Arc200Client`\n *\n * @param appClient An `AppClient` instance which has been created with the Arc200 app spec\n */\n constructor(appClient: _AppClient)\n /**\n * Creates a new instance of `Arc200Client`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, 'appSpec'>)\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, 'appSpec'>) {\n this.appClient = appClientOrParams instanceof _AppClient ? appClientOrParams : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n })\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends Arc200NonVoidMethodSignatures>(method: TSignature, returnValue: ABIReturn | undefined) {\n return returnValue !== undefined ? getArc56ReturnValue<MethodReturn<TSignature>>(returnValue, this.appClient.getABIMethod(method), APP_SPEC.structs) : undefined\n }\n\n /**\n * Returns a new `Arc200Client` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(params: Omit<ResolveAppClientByCreatorAndName, 'appSpec'>): Promise<Arc200Client> {\n return new Arc200Client(await _AppClient.fromCreatorAndName({...params, appSpec: APP_SPEC}))\n }\n \n /**\n * Returns an `Arc200Client` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(\n params: Omit<ResolveAppClientByNetwork, 'appSpec'>\n ): Promise<Arc200Client> {\n return new Arc200Client(await _AppClient.fromNetwork({...params, appSpec: APP_SPEC}))\n }\n \n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId\n }\n \n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress\n }\n \n /** The name of the app. */\n public get appName() {\n return this.appClient.appName\n }\n \n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec\n }\n \n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n bootstrap: (params: CallParams<Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'] | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(Arc200ParamsFactory.bootstrap(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The name of the token\n */\n arc200Name: (params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Name(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The symbol of the token\n */\n arc200Symbol: (params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Symbol(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The decimals of the token\n */\n arc200Decimals: (params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Decimals(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The total supply of the token\n */\n arc200TotalSupply: (params: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200TotalSupply(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call params: The current balance of the holder of the token\n */\n arc200BalanceOf: (params: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200BalanceOf(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.\n *\n * Transfers tokens\n *\n * @param params The params for the smart contract call\n * @returns The call params: Success\n */\n arc200Transfer: (params: CallParams<Arc200Args['obj']['arc200_transfer(address,uint256)bool'] | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Transfer(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params The params for the smart contract call\n * @returns The call params: Success\n */\n arc200TransferFrom: (params: CallParams<Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'] | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200TransferFrom(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.\n *\n * Approve spender for a token\n *\n * @param params The params for the smart contract call\n * @returns The call params: Success\n */\n arc200Approve: (params: CallParams<Arc200Args['obj']['arc200_approve(address,uint256)bool'] | Arc200Args['tuple']['arc200_approve(address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Approve(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call params: The remaining allowance\n */\n arc200Allowance: (params: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.params.call(Arc200ParamsFactory.arc200Allowance(params))\n },\n\n }\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n bootstrap: (params: CallParams<Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'] | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.bootstrap(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The name of the token\n */\n arc200Name: (params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Name(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The symbol of the token\n */\n arc200Symbol: (params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Symbol(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The decimals of the token\n */\n arc200Decimals: (params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Decimals(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The total supply of the token\n */\n arc200TotalSupply: (params: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']> & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TotalSupply(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The current balance of the holder of the token\n */\n arc200BalanceOf: (params: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200BalanceOf(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.\n *\n * Transfers tokens\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: Success\n */\n arc200Transfer: (params: CallParams<Arc200Args['obj']['arc200_transfer(address,uint256)bool'] | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Transfer(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: Success\n */\n arc200TransferFrom: (params: CallParams<Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'] | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200TransferFrom(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.\n *\n * Approve spender for a token\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: Success\n */\n arc200Approve: (params: CallParams<Arc200Args['obj']['arc200_approve(address,uint256)bool'] | Arc200Args['tuple']['arc200_approve(address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Approve(params))\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: The remaining allowance\n */\n arc200Allowance: (params: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n return this.appClient.createTransaction.call(Arc200ParamsFactory.arc200Allowance(params))\n },\n\n }\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params)\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `bootstrap(byte[],byte[],uint8,uint256)bool` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n bootstrap: async (params: CallParams<Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'] | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.bootstrap(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['bootstrap(byte[],byte[],uint8,uint256)bool'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The name of the token\n */\n arc200Name: async (params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_name()byte[32]'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The symbol of the token\n */\n arc200Symbol: async (params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_symbol()byte[8]'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The decimals of the token\n */\n arc200Decimals: async (params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_decimals()uint8'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The total supply of the token\n */\n arc200TotalSupply: async (params: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC} = {args: []}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_totalSupply()uint256'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The current balance of the holder of the token\n */\n arc200BalanceOf: async (params: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_balanceOf(address)uint256'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transfer(address,uint256)bool` ABI method.\n *\n * Transfers tokens\n *\n * @param params The params for the smart contract call\n * @returns The call result: Success\n */\n arc200Transfer: async (params: CallParams<Arc200Args['obj']['arc200_transfer(address,uint256)bool'] | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Transfer(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_transfer(address,uint256)bool'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_transferFrom(address,address,uint256)bool` ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param params The params for the smart contract call\n * @returns The call result: Success\n */\n arc200TransferFrom: async (params: CallParams<Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'] | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TransferFrom(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_transferFrom(address,address,uint256)bool'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_approve(address,uint256)bool` ABI method.\n *\n * Approve spender for a token\n *\n * @param params The params for the smart contract call\n * @returns The call result: Success\n */\n arc200Approve: async (params: CallParams<Arc200Args['obj']['arc200_approve(address,uint256)bool'] | Arc200Args['tuple']['arc200_approve(address,uint256)bool']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Approve(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_approve(address,uint256)bool'])}\n },\n\n /**\n * Makes a call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call result: The remaining allowance\n */\n arc200Allowance: async (params: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']> & SendParams & {onComplete?: OnApplicationComplete.NoOpOC}) => {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params))\n return {...result, return: result.return as unknown as (undefined | Arc200Returns['arc200_allowance(address,address)uint256'])}\n },\n\n }\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new Arc200Client(this.appClient.clone(params))\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_name()byte[32]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the name of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The name of the token\n */\n async arc200Name(params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> = {args: []}) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Name(params))\n return result.return as unknown as Arc200Returns['arc200_name()byte[32]']\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_symbol()byte[8]` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the symbol of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The symbol of the token\n */\n async arc200Symbol(params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> = {args: []}) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Symbol(params))\n return result.return as unknown as Arc200Returns['arc200_symbol()byte[8]']\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_decimals()uint8` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the decimals of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The decimals of the token\n */\n async arc200Decimals(params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> = {args: []}) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Decimals(params))\n return result.return as unknown as Arc200Returns['arc200_decimals()uint8']\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_totalSupply()uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the total supply of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The total supply of the token\n */\n async arc200TotalSupply(params: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']> = {args: []}) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200TotalSupply(params))\n return result.return as unknown as Arc200Returns['arc200_totalSupply()uint256']\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_balanceOf(address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current balance of the owner of the token\n *\n * @param params The params for the smart contract call\n * @returns The call result: The current balance of the holder of the token\n */\n async arc200BalanceOf(params: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']>) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200BalanceOf(params))\n return result.return as unknown as Arc200Returns['arc200_balanceOf(address)uint256']\n }\n\n /**\n * Makes a readonly (simulated) call to the Arc200 smart contract using the `arc200_allowance(address,address)uint256` ABI method.\n * \n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param params The params for the smart contract call\n * @returns The call result: The remaining allowance\n */\n async arc200Allowance(params: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']>) {\n const result = await this.appClient.send.call(Arc200ParamsFactory.arc200Allowance(params))\n return result.return as unknown as Arc200Returns['arc200_allowance(address,address)uint256']\n }\n\n /**\n * Methods to access state for the current Arc200 app\n */\n state = {\n /**\n * Methods to access global state for the current Arc200 app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll()\n return {\n name: result.name,\n symbol: result.symbol,\n decimals: result.decimals,\n totalSupply: result.totalSupply,\n }\n },\n /**\n * Get the current value of the name key in global state\n */\n name: async (): Promise<Uint8Array | undefined> => { return (await this.appClient.state.global.getValue(\"name\")) as Uint8Array | undefined },\n /**\n * Get the current value of the symbol key in global state\n */\n symbol: async (): Promise<Uint8Array | undefined> => { return (await this.appClient.state.global.getValue(\"symbol\")) as Uint8Array | undefined },\n /**\n * Get the current value of the decimals key in global state\n */\n decimals: async (): Promise<number | undefined> => { return (await this.appClient.state.global.getValue(\"decimals\")) as number | undefined },\n /**\n * Get the current value of the totalSupply key in global state\n */\n totalSupply: async (): Promise<bigint | undefined> => { return (await this.appClient.state.global.getValue(\"totalSupply\")) as bigint | undefined },\n },\n /**\n * Methods to access box state for the current Arc200 app\n */\n box: {\n /**\n * Get all current keyed values from box state\n */\n getAll: async (): Promise<Partial<Expand<BoxKeysState>>> => {\n const result = await this.appClient.state.box.getAll()\n return {\n }\n },\n /**\n * Get values from the balances map in box state\n */\n balances: {\n /**\n * Get all current values of the balances map in box state\n */\n getMap: async (): Promise<Map<string, bigint>> => { return (await this.appClient.state.box.getMap(\"balances\")) as Map<string, bigint> },\n /**\n * Get a current value of the balances map by key from box state\n */\n value: async (key: string): Promise<bigint | undefined> => { return await this.appClient.state.box.getMapValue(\"balances\", key) as bigint | undefined },\n },\n /**\n * Get values from the approvals map in box state\n */\n approvals: {\n /**\n * Get all current values of the approvals map in box state\n */\n getMap: async (): Promise<Map<Uint8Array, ApprovalStruct>> => { return (await this.appClient.state.box.getMap(\"approvals\")) as Map<Uint8Array, ApprovalStruct> },\n /**\n * Get a current value of the approvals map by key from box state\n */\n value: async (key: Uint8Array): Promise<ApprovalStruct | undefined> => { return await this.appClient.state.box.getMapValue(\"approvals\", key) as ApprovalStruct | undefined },\n },\n },\n }\n\n public newGroup(): Arc200Composer {\n const client = this\n const composer = this.algorand.newGroup()\n let promiseChain:Promise<unknown> = Promise.resolve()\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = []\n return {\n /**\n * Add a bootstrap(byte[],byte[],uint8,uint256)bool method call against the Arc200 contract\n */\n bootstrap(params: CallParams<Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'] | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.bootstrap(params)))\n resultMappers.push((v) => client.decodeReturnValue('bootstrap(byte[],byte[],uint8,uint256)bool', v))\n return this\n },\n /**\n * Add a arc200_name()byte[32] method call against the Arc200 contract\n */\n arc200Name(params: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200Name(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_name()byte[32]', v))\n return this\n },\n /**\n * Add a arc200_symbol()byte[8] method call against the Arc200 contract\n */\n arc200Symbol(params: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200Symbol(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_symbol()byte[8]', v))\n return this\n },\n /**\n * Add a arc200_decimals()uint8 method call against the Arc200 contract\n */\n arc200Decimals(params: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200Decimals(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_decimals()uint8', v))\n return this\n },\n /**\n * Add a arc200_totalSupply()uint256 method call against the Arc200 contract\n */\n arc200TotalSupply(params: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200TotalSupply(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_totalSupply()uint256', v))\n return this\n },\n /**\n * Add a arc200_balanceOf(address)uint256 method call against the Arc200 contract\n */\n arc200BalanceOf(params: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200BalanceOf(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_balanceOf(address)uint256', v))\n return this\n },\n /**\n * Add a arc200_transfer(address,uint256)bool method call against the Arc200 contract\n */\n arc200Transfer(params: CallParams<Arc200Args['obj']['arc200_transfer(address,uint256)bool'] | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200Transfer(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_transfer(address,uint256)bool', v))\n return this\n },\n /**\n * Add a arc200_transferFrom(address,address,uint256)bool method call against the Arc200 contract\n */\n arc200TransferFrom(params: CallParams<Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'] | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200TransferFrom(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_transferFrom(address,address,uint256)bool', v))\n return this\n },\n /**\n * Add a arc200_approve(address,uint256)bool method call against the Arc200 contract\n */\n arc200Approve(params: CallParams<Arc200Args['obj']['arc200_approve(address,uint256)bool'] | Arc200Args['tuple']['arc200_approve(address,uint256)bool']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200Approve(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_approve(address,uint256)bool', v))\n return this\n },\n /**\n * Add a arc200_allowance(address,address)uint256 method call against the Arc200 contract\n */\n arc200Allowance(params: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']> & {onComplete?: OnApplicationComplete.NoOpOC}) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.arc200Allowance(params)))\n resultMappers.push((v) => client.decodeReturnValue('arc200_allowance(address,address)uint256', v))\n return this\n },\n /**\n * Add a clear state call to the Arc200 contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)))\n return this\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer))\n return this\n },\n async composer() {\n await promiseChain\n return composer\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain\n const result = await (!options ? composer.simulate() : composer.simulate(options))\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n },\n async send(params?: SendParams) {\n await promiseChain\n const result = await composer.send(params)\n return {\n ...result,\n returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue)\n }\n }\n } as unknown as Arc200Composer\n }\n}\nexport type Arc200Composer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the bootstrap(byte[],byte[],uint8,uint256)bool ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n bootstrap(params?: CallParams<Arc200Args['obj']['bootstrap(byte[],byte[],uint8,uint256)bool'] | Arc200Args['tuple']['bootstrap(byte[],byte[],uint8,uint256)bool']>): Arc200Composer<[...TReturns, Arc200Returns['bootstrap(byte[],byte[],uint8,uint256)bool'] | undefined]>\n\n /**\n * Calls the arc200_name()byte[32] ABI method.\n *\n * Returns the name of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Name(params?: CallParams<Arc200Args['obj']['arc200_name()byte[32]'] | Arc200Args['tuple']['arc200_name()byte[32]']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_name()byte[32]'] | undefined]>\n\n /**\n * Calls the arc200_symbol()byte[8] ABI method.\n *\n * Returns the symbol of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Symbol(params?: CallParams<Arc200Args['obj']['arc200_symbol()byte[8]'] | Arc200Args['tuple']['arc200_symbol()byte[8]']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_symbol()byte[8]'] | undefined]>\n\n /**\n * Calls the arc200_decimals()uint8 ABI method.\n *\n * Returns the decimals of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Decimals(params?: CallParams<Arc200Args['obj']['arc200_decimals()uint8'] | Arc200Args['tuple']['arc200_decimals()uint8']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_decimals()uint8'] | undefined]>\n\n /**\n * Calls the arc200_totalSupply()uint256 ABI method.\n *\n * Returns the total supply of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200TotalSupply(params?: CallParams<Arc200Args['obj']['arc200_totalSupply()uint256'] | Arc200Args['tuple']['arc200_totalSupply()uint256']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_totalSupply()uint256'] | undefined]>\n\n /**\n * Calls the arc200_balanceOf(address)uint256 ABI method.\n *\n * Returns the current balance of the owner of the token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200BalanceOf(params?: CallParams<Arc200Args['obj']['arc200_balanceOf(address)uint256'] | Arc200Args['tuple']['arc200_balanceOf(address)uint256']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_balanceOf(address)uint256'] | undefined]>\n\n /**\n * Calls the arc200_transfer(address,uint256)bool ABI method.\n *\n * Transfers tokens\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Transfer(params?: CallParams<Arc200Args['obj']['arc200_transfer(address,uint256)bool'] | Arc200Args['tuple']['arc200_transfer(address,uint256)bool']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_transfer(address,uint256)bool'] | undefined]>\n\n /**\n * Calls the arc200_transferFrom(address,address,uint256)bool ABI method.\n *\n * Transfers tokens from source to destination as approved spender\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200TransferFrom(params?: CallParams<Arc200Args['obj']['arc200_transferFrom(address,address,uint256)bool'] | Arc200Args['tuple']['arc200_transferFrom(address,address,uint256)bool']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_transferFrom(address,address,uint256)bool'] | undefined]>\n\n /**\n * Calls the arc200_approve(address,uint256)bool ABI method.\n *\n * Approve spender for a token\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Approve(params?: CallParams<Arc200Args['obj']['arc200_approve(address,uint256)bool'] | Arc200Args['tuple']['arc200_approve(address,uint256)bool']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_approve(address,uint256)bool'] | undefined]>\n\n /**\n * Calls the arc200_allowance(address,address)uint256 ABI method.\n *\n * Returns the current allowance of the spender of the tokens of the owner\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n arc200Allowance(params?: CallParams<Arc200Args['obj']['arc200_allowance(address,address)uint256'] | Arc200Args['tuple']['arc200_allowance(address,address)uint256']>): Arc200Composer<[...TReturns, Arc200Returns['arc200_allowance(address,address)uint256'] | undefined]>\n\n /**\n * Makes a clear_state call to an existing instance of the Arc200 smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): Arc200Composer<[...TReturns, undefined]>\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): Arc200Composer<TReturns>\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<Arc200ComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: SkipSignaturesSimulateOptions): Promise<Arc200ComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n simulate(options: RawSimulateOptions): Promise<Arc200ComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<Arc200ComposerResults<TReturns>>\n}\nexport type Arc200ComposerResults<TReturns extends [...any[]]> = Expand<SendAtomicTransactionComposerResults & {\n returns: TReturns\n}>\n\n","import { Address, Algodv2, ProgramSourceMap, TransactionSigner } from 'algosdk';\nimport { SendTransactionFrom } from '@algorandfoundation/algokit-utils/types/transaction';\nimport { Arc200Client } from '../contracts/artifacts/Arc200Client';\nimport { AppClient } from '@algorandfoundation/algokit-utils/types/app-client';\nimport { AlgorandClient } from '@algorandfoundation/algokit-utils';\n\ninterface IGetClientInput {\n algorand: AlgorandClient;\n appId: bigint;\n appName: string | undefined;\n approvalSourceMap: ProgramSourceMap | undefined;\n clearSourceMap: ProgramSourceMap | undefined;\n defaultSender: string | Address | undefined;\n defaultSigner: TransactionSigner | undefined;\n}\n\nexport const getArc200Client = (input: IGetClientInput) => {\n return new Arc200Client({\n algorand: input.algorand,\n appId: input.appId,\n appName: input.appName,\n approvalSourceMap: input.approvalSourceMap,\n clearSourceMap: input.clearSourceMap,\n defaultSender: input.defaultSender,\n defaultSigner: input.defaultSigner,\n });\n};\n"],"mappings":"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","names":["_AppFactory","_AppClient"]}
|