/* eslint-disable */ // @ts-nocheck /** * This file was automatically generated by @algorandfoundation/algokit-client-generator. * DO NOT MODIFY IT BY HAND. * requires: @algorandfoundation/algokit-utils: ^2 */ import * as algokit from '@algorandfoundation/algokit-utils' import type { ABIAppCallArg, AppCallTransactionResult, AppCallTransactionResultOfType, AppCompilationResult, AppReference, AppState, AppStorageSchema, CoreAppCallArgs, RawAppCallArgs, TealTemplateParams, } from '@algorandfoundation/algokit-utils/types/app' import type { AppClientCallCoreParams, AppClientCompilationParams, AppClientDeployCoreParams, AppDetails, ApplicationClient, } from '@algorandfoundation/algokit-utils/types/app-client' import type { AppSpec } from '@algorandfoundation/algokit-utils/types/app-spec' import type { SendTransactionResult, TransactionToSign, SendTransactionFrom, SendTransactionParams } from '@algorandfoundation/algokit-utils/types/transaction' import type { ABIResult, TransactionWithSigner } from 'algosdk' import { Algodv2, OnApplicationComplete, Transaction, AtomicTransactionComposer, modelsv2 } from 'algosdk' export const APP_SPEC: AppSpec = { "hints": { "arc200_name()byte[32]": { "call_config": { "no_op": "CALL" } }, "arc200_symbol()byte[8]": { "call_config": { "no_op": "CALL" } }, "arc200_decimals()uint8": { "call_config": { "no_op": "CALL" } }, "arc200_totalSupply()uint256": { "call_config": { "no_op": "CALL" } }, "arc200_balanceOf(address)uint256": { "call_config": { "no_op": "CALL" } }, "arc200_allowance(address,address)uint256": { "call_config": { "no_op": "CALL" } }, "arc200_transfer(address,uint256)bool": { "call_config": { "no_op": "CALL" } }, "arc200_approve(address,uint256)bool": { "call_config": { "no_op": "CALL" } }, "arc200_transferFrom(address,address,uint256)bool": { "call_config": { "no_op": "CALL" } }, "supportsInterface(byte[4])bool": { "call_config": { "no_op": "CALL" } }, "zeroAddress()address": { "call_config": { "no_op": "CALL" } }, "hasBox(address,address)bool": { "call_config": { "no_op": "CALL" } }, "createBalanceBox(address)bool": { "call_config": { "no_op": "CALL" } }, "createAllowanceBox(address,address)bool": { "call_config": { "no_op": "CALL" } }, "noop(uint64)void": { "call_config": { "no_op": "CALL" } }, "updateApplication()void": { "call_config": { "update_application": "CALL" } }, "deleteApplication()void": { "call_config": { "delete_application": "CALL" } }, "manager()address": { "call_config": { "no_op": "CALL" } }, "grant(address)void": { "call_config": { "no_op": "CALL" } }, "createApplication(address,byte[32],byte[8],uint8,uint256)void": { "call_config": { "no_op": "CREATE" } }, "bootstrap(pay)void": { "call_config": { "no_op": "CALL" } } }, "bare_call_config": { "no_op": "NEVER", "opt_in": "NEVER", "close_out": "NEVER", "update_application": "NEVER", "delete_application": "NEVER" }, "schema": { "local": { "declared": {}, "reserved": {} }, "global": { "declared": { "name": { "type": "bytes", "key": "name" }, "symbol": { "type": "bytes", "key": "symbol" }, "decimals": { "type": "bytes", "key": "decimals" }, "totalSupply": { "type": "bytes", "key": "total_supply" }, "initialized": { "type": "bytes", "key": "initialized" }, "warden": { "type": "bytes", "key": "warden" } }, "reserved": {} } }, "state": { "global": { "num_byte_slices": 6, "num_uints": 0 }, "local": { "num_byte_slices": 0, "num_uints": 0 } }, "source": { "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjEwMi4wCi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbGdvcmFuZGZvdW5kYXRpb24vVEVBTFNjcmlwdAoKLy8gVGhpcyBjb250cmFjdCBpcyBjb21wbGlhbnQgd2l0aCBhbmQvb3IgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIEFSQ3M6IFsgQVJDNCBdCgovLyBUaGUgZm9sbG93aW5nIHRlbiBsaW5lcyBvZiBURUFMIGhhbmRsZSBpbml0aWFsIHByb2dyYW0gZmxvdwovLyBUaGlzIHBhdHRlcm4gaXMgdXNlZCB0byBtYWtlIGl0IGVhc3kgZm9yIGFueW9uZSB0byBwYXJzZSB0aGUgc3RhcnQgb2YgdGhlIHByb2dyYW0gYW5kIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGFjdGlvbiBpcyBhbGxvd2VkCi8vIEhlcmUsIGFjdGlvbiByZWZlcnMgdG8gdGhlIE9uQ29tcGxldGUgaW4gY29tYmluYXRpb24gd2l0aCB3aGV0aGVyIHRoZSBhcHAgaXMgYmVpbmcgY3JlYXRlZCBvciBjYWxsZWQKLy8gRXZlcnkgcG9zc2libGUgYWN0aW9uIGZvciB0aGlzIGNvbnRyYWN0IGlzIHJlcHJlc2VudGVkIGluIHRoZSBzd2l0Y2ggc3RhdGVtZW50Ci8vIElmIHRoZSBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBjb250cmFjdCwgaXRzIHJlc3BlY3RpdmUgYnJhbmNoIHdpbGwgYmUgIipOT1RfSU1QTEVNRU5URUQiIHdoaWNoIGp1c3QgY29udGFpbnMgImVyciIKdHhuIEFwcGxpY2F0aW9uSUQKIQppbnQgNgoqCnR4biBPbkNvbXBsZXRpb24KKwpzd2l0Y2ggKmNhbGxfTm9PcCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbiAqY2FsbF9EZWxldGVBcHBsaWNhdGlvbiAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJLy8gVGhlIHJlcXVlc3RlZCBhY3Rpb24gaXMgbm90IGltcGxlbWVudGVkIGluIHRoaXMgY29udHJhY3QuIEFyZSB5b3UgdXNpbmcgdGhlIGNvcnJlY3QgT25Db21wbGV0ZT8gRGlkIHlvdSBzZXQgeW91ciBhcHAgSUQ/CgllcnIKCi8vIGFyYzIwMF9uYW1lKClieXRlWzMyXQoqYWJpX3JvdXRlX2FyYzIwMF9uYW1lOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBleGVjdXRlIGFyYzIwMF9uYW1lKClieXRlWzMyXQoJY2FsbHN1YiBhcmMyMDBfbmFtZQoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9uYW1lKCk6IFN0YXRpY0J5dGVzPDMyPgphcmMyMDBfbmFtZToKCXByb3RvIDAgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjI0CgkvLyByZXR1cm4gdGhpcy5uYW1lLnZhbHVlOwoJYnl0ZSAweDZlNjE2ZDY1IC8vICJuYW1lIgoJYXBwX2dsb2JhbF9nZXQKCXJldHN1YgoKLy8gYXJjMjAwX3N5bWJvbCgpYnl0ZVs4XQoqYWJpX3JvdXRlX2FyYzIwMF9zeW1ib2w6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX3N5bWJvbCgpYnl0ZVs4XQoJY2FsbHN1YiBhcmMyMDBfc3ltYm9sCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX3N5bWJvbCgpOiBTdGF0aWNCeXRlczw4PgphcmMyMDBfc3ltYm9sOgoJcHJvdG8gMCAxCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MjkKCS8vIHJldHVybiB0aGlzLnN5bWJvbC52YWx1ZTsKCWJ5dGUgMHg3Mzc5NmQ2MjZmNmMgLy8gInN5bWJvbCIKCWFwcF9nbG9iYWxfZ2V0CglyZXRzdWIKCi8vIGFyYzIwMF9kZWNpbWFscygpdWludDgKKmFiaV9yb3V0ZV9hcmMyMDBfZGVjaW1hbHM6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGV4ZWN1dGUgYXJjMjAwX2RlY2ltYWxzKCl1aW50OAoJY2FsbHN1YiBhcmMyMDBfZGVjaW1hbHMKCWl0b2IKCWR1cAoJYml0bGVuCglpbnQgOAoJPD0KCgkvLyBhcmMyMDBfZGVjaW1hbHMgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgOCBiaXRzCglhc3NlcnQKCWV4dHJhY3QgNyAxCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2RlY2ltYWxzKCk6IHVpbnQ4CmFyYzIwMF9kZWNpbWFsczoKCXByb3RvIDAgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjM0CgkvLyByZXR1cm4gdGhpcy5kZWNpbWFscy52YWx1ZTsKCWJ5dGUgMHg2NDY1NjM2OTZkNjE2YzczIC8vICJkZWNpbWFscyIKCWFwcF9nbG9iYWxfZ2V0CglidG9pCglyZXRzdWIKCi8vIGFyYzIwMF90b3RhbFN1cHBseSgpdWludDI1NgoqYWJpX3JvdXRlX2FyYzIwMF90b3RhbFN1cHBseToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX3RvdGFsU3VwcGx5CglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyBhcmMyMDBfdG90YWxTdXBwbHkgcmV0dXJuIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmMyMDBfdG90YWxTdXBwbHkoKTogdWludDI1NgphcmMyMDBfdG90YWxTdXBwbHk6Cglwcm90byAwIDEKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czozOQoJLy8gcmV0dXJuIHRoaXMudG90YWxTdXBwbHkudmFsdWU7CglieXRlIDB4NzQ2Zjc0NjE2YzVmNzM3NTcwNzA2Yzc5IC8vICJ0b3RhbF9zdXBwbHkiCglhcHBfZ2xvYmFsX2dldAoJcmV0c3ViCgovLyBhcmMyMDBfYmFsYW5jZU9mKGFkZHJlc3MpdWludDI1NgoqYWJpX3JvdXRlX2FyYzIwMF9iYWxhbmNlT2Y6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG93bmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG93bmVyKSBmb3IgYXJjMjAwX2JhbGFuY2VPZiBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmMyMDBfYmFsYW5jZU9mKGFkZHJlc3MpdWludDI1NgoJY2FsbHN1YiBhcmMyMDBfYmFsYW5jZU9mCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyBhcmMyMDBfYmFsYW5jZU9mIHJldHVybiB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjMjAwX2JhbGFuY2VPZihvd25lcjogQWRkcmVzcyk6IHVpbnQyNTYKYXJjMjAwX2JhbGFuY2VPZjoKCXByb3RvIDEgMQoKCS8vICppZjBfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo0NAoJLy8gdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjQ1CgkvLyByZXR1cm4gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuYmFsYW5jZXMob3duZXIpLnZhbHVlCglhc3NlcnQKCXJldHN1YgoKKmlmMF9lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo0NwoJLy8gcmV0dXJuIDx1aW50MjU2PjA7CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJcmV0c3ViCgovLyBhcmMyMDBfYWxsb3dhbmNlKGFkZHJlc3MsYWRkcmVzcyl1aW50MjU2CiphYmlfcm91dGVfYXJjMjAwX2FsbG93YW5jZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChzcGVuZGVyKSBmb3IgYXJjMjAwX2FsbG93YW5jZSBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAob3duZXIpIGZvciBhcmMyMDBfYWxsb3dhbmNlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hbGxvd2FuY2UoYWRkcmVzcyxhZGRyZXNzKXVpbnQyNTYKCWNhbGxzdWIgYXJjMjAwX2FsbG93YW5jZQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gYXJjMjAwX2FsbG93YW5jZSByZXR1cm4gdmFsdWUgb3ZlcmZsb3dlZCAyNTYgYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9hbGxvd2FuY2Uob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiB1aW50MjU2CmFyYzIwMF9hbGxvd2FuY2U6Cglwcm90byAyIDEKCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTIKCS8vIHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyBvd25lcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHNwZW5kZXI6IEFkZHJlc3MKCWNvbmNhdAoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTMKCS8vIHJldHVybiB0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9nZXQKCgkvLyBib3ggdmFsdWUgZG9lcyBub3QgZXhpc3Q6IHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS52YWx1ZQoJYXNzZXJ0CglyZXRzdWIKCippZjFfZW5kOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NTUKCS8vIHJldHVybiA8dWludDI1Nj4wOwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCXJldHN1YgoKLy8gdHJhbnNmZXIoZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgp0cmFuc2ZlcjoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjYzCgkvLyAhdGhpcy5iYWxhbmNlcyhmcm9tKS5leGlzdHMgJiYgZnJvbS5iYWxhbmNlID49IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWdsb2JhbCBNaW5CYWxhbmNlCgk+PQoJJiYKCipza2lwX2FuZDA6CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NjQKCS8vIHRoaXMuYmFsYW5jZXMoZnJvbSkudmFsdWUgPSA8dWludDI1Nj4wCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJveF9wdXQKCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjY2CgkvLyAhdGhpcy5iYWxhbmNlcyh0bykuZXhpc3RzICYmIHRvLmJhbGFuY2UgPj0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJZHVwCglieiAqc2tpcF9hbmQxCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglnbG9iYWwgTWluQmFsYW5jZQoJPj0KCSYmCgoqc2tpcF9hbmQxOgoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjY3CgkvLyB0aGlzLmJhbGFuY2VzKHRvKS52YWx1ZSA9IDx1aW50MjU2PjAKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKCWJveF9wdXQKCippZjNfZW5kOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzAKCS8vIGFzc2VydCh0aGlzLmJhbGFuY2VzKGZyb20pLmV4aXN0cywgTk9UX0VOT1VHSF9CQUxBTkNFKQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoKCS8vIG5vdCBlbm91Z2ggYmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzEKCS8vIGFzc2VydCh0aGlzLmJhbGFuY2VzKHRvKS5leGlzdHMsIEVNUFRZX1dBTExFVCkKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgoJLy8gZW1wdHkgd2FsbGV0LCBtdXN0IGhvbGQgbWluQmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzMKCS8vIHNlbmRlckJhbGFuY2UgPSB0aGlzLmJhbGFuY2VzKGZyb20pLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iYWxhbmNlcyhmcm9tKS52YWx1ZQoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjc0CgkvLyBhc3NlcnQoc2VuZGVyQmFsYW5jZSA+PSB2YWx1ZSwgTk9UX0VOT1VHSF9CQUxBTkNFKQoJZnJhbWVfZGlnIDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliPj0KCgkvLyBub3QgZW5vdWdoIGJhbGFuY2UKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjc2CgkvLyB0aGlzLmJhbGFuY2VzKGZyb20pLnZhbHVlID0gc2VuZGVyQmFsYW5jZSAtIHZhbHVlCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gc2VuZGVyQmFsYW5jZTogdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliLQoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gc2VuZGVyQmFsYW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo3NwoJLy8gdGhpcy5iYWxhbmNlcyh0bykudmFsdWUgPSB0aGlzLmJhbGFuY2VzKHRvKS52YWx1ZSArIHZhbHVlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJYm94X2dldAoKCS8vIGJveCB2YWx1ZSBkb2VzIG5vdCBleGlzdDogdGhpcy5iYWxhbmNlcyh0bykudmFsdWUKCWFzc2VydAoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliKwoJZHVwCgliaXRsZW4KCWludCAyNTYKCTw9CgoJLy8gdGhpcy5iYWxhbmNlcyh0bykudmFsdWUgKyB2YWx1ZSBvdmVyZmxvd2VkIDI1NiBiaXRzCglhc3NlcnQKCWJ5dGUgMHhGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGCgliJgoJZHVwCglsZW4KCWR1cAoJaW50IDMyCgktCglzd2FwCglzdWJzdHJpbmczCglib3hfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6NzkKCS8vIHRoaXMuYXJjMjAwX1RyYW5zZmVyLmxvZyh7IGZyb206IGZyb20sIHRvOiB0bywgdmFsdWU6IHZhbHVlIH0pCglieXRlIDB4Nzk4M2MzNWMgLy8gYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWNvbmNhdAoJY29uY2F0Cglsb2cKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo4MQoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wKKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXI6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX3RyYW5zZmVyIG11c3QgYmUgYSB1aW50MjU2Cglhc3NlcnQKCgkvLyB0bzogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAxICh0bykgZm9yIGFyYzIwMF90cmFuc2ZlciBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wKCWNhbGxzdWIgYXJjMjAwX3RyYW5zZmVyCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF90cmFuc2Zlcih0bzogQWRkcmVzcywgdmFsdWU6IHVpbnQyNTYpOiBib29sZWFuCmFyYzIwMF90cmFuc2ZlcjoKCXByb3RvIDIgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjg1CgkvLyByZXR1cm4gdGhpcy50cmFuc2Zlcih0aGlzLnR4bi5zZW5kZXIsIHRvLCB2YWx1ZSk7CglmcmFtZV9kaWcgLTIgLy8gdmFsdWU6IHVpbnQyNTYKCWZyYW1lX2RpZyAtMSAvLyB0bzogQWRkcmVzcwoJdHhuIFNlbmRlcgoJY2FsbHN1YiB0cmFuc2ZlcgoJcmV0c3ViCgovLyBhcHByb3ZlKG93bmVyOiBBZGRyZXNzLCBzcGVuZGVyOiBBZGRyZXNzLCB2YWx1ZTogdWludDI1Nik6IGJvb2xlYW4KYXBwcm92ZToKCXByb3RvIDMgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjg5CgkvLyBhc3NlcnQodGhpcy5hbGxvd2FuY2VzKFtvd25lciwgc3BlbmRlcl0pLmV4aXN0cyB8fCBzcGVuZGVyLmJhbGFuY2UgPj0gZ2xvYmFscy5taW5CYWxhbmNlLCBFTVBUWV9XQUxMRVQpCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJZHVwCglibnogKnNraXBfb3IwCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWdsb2JhbCBNaW5CYWxhbmNlCgk+PQoJfHwKCipza2lwX29yMDoKCS8vIGVtcHR5IHdhbGxldCwgbXVzdCBob2xkIG1pbkJhbGFuY2UKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjkxCgkvLyB0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkudmFsdWUgPSB2YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIG93bmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJY29uY2F0CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czo5MgoJLy8gdGhpcy5hcmMyMDBfQXBwcm92YWwubG9nKHsgb3duZXI6IG93bmVyLCBzcGVuZGVyOiBzcGVuZGVyLCB2YWx1ZTogdmFsdWUgfSkKCWJ5dGUgMHgxOTY5Zjg2NSAvLyBhcmMyMDBfQXBwcm92YWwoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJY29uY2F0Cgljb25jYXQKCWxvZwoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjk0CgkvLyByZXR1cm4gdHJ1ZTsKCWludCAxCglyZXRzdWIKCi8vIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCiphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmU6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX2FwcHJvdmUgbXVzdCBiZSBhIHVpbnQyNTYKCWFzc2VydAoKCS8vIHNwZW5kZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAoc3BlbmRlcikgZm9yIGFyYzIwMF9hcHByb3ZlIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sCgljYWxsc3ViIGFyYzIwMF9hcHByb3ZlCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF9hcHByb3ZlKHNwZW5kZXI6IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgphcmMyMDBfYXBwcm92ZToKCXByb3RvIDIgMQoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjk4CgkvLyByZXR1cm4gdGhpcy5hcHByb3ZlKHRoaXMudHhuLnNlbmRlciwgc3BlbmRlciwgdmFsdWUpOwoJZnJhbWVfZGlnIC0yIC8vIHZhbHVlOiB1aW50MjU2CglmcmFtZV9kaWcgLTEgLy8gc3BlbmRlcjogQWRkcmVzcwoJdHhuIFNlbmRlcgoJY2FsbHN1YiBhcHByb3ZlCglyZXRzdWIKCi8vIGFyYzIwMF90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpYm9vbAoqYWJpX3JvdXRlX2FyYzIwMF90cmFuc2ZlckZyb206CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHZhbHVlOiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAzCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHZhbHVlKSBmb3IgYXJjMjAwX3RyYW5zZmVyRnJvbSBtdXN0IGJlIGEgdWludDI1NgoJYXNzZXJ0CgoJLy8gdG86IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAodG8pIGZvciBhcmMyMDBfdHJhbnNmZXJGcm9tIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBmcm9tOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDIgKGZyb20pIGZvciBhcmMyMDBfdHJhbnNmZXJGcm9tIG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzIwMF90cmFuc2ZlckZyb20oYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpYm9vbAoJY2FsbHN1YiBhcmMyMDBfdHJhbnNmZXJGcm9tCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzIwMF90cmFuc2ZlckZyb20oZnJvbTogQWRkcmVzcywgdG86IEFkZHJlc3MsIHZhbHVlOiB1aW50MjU2KTogYm9vbGVhbgphcmMyMDBfdHJhbnNmZXJGcm9tOgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cAoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMDIKCS8vIHZhbHVlID09PSAwCglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCgliPT0KCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMDIKCS8vIHJldHVybiB0cnVlOwoJaW50IDEKCWIgKmFyYzIwMF90cmFuc2ZlckZyb20qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjEwNAoJLy8gYWxsb3dhbmNlID0gdGhpcy5hcmMyMDBfYWxsb3dhbmNlKGZyb20sIHRoaXMudHhuLnNlbmRlcikKCXR4biBTZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgljYWxsc3ViIGFyYzIwMF9hbGxvd2FuY2UKCWZyYW1lX2J1cnkgMCAvLyBhbGxvd2FuY2U6IHVuc2FmZSB1aW50MjU2CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA1CgkvLyBhc3NlcnQoYWxsb3dhbmNlID49IHZhbHVlLCBBTExPV0FOQ0VfSU5TVUZGSUNJRU5UKQoJZnJhbWVfZGlnIDAgLy8gYWxsb3dhbmNlOiB1bnNhZmUgdWludDI1NgoJZnJhbWVfZGlnIC0zIC8vIHZhbHVlOiB1aW50MjU2CgliPj0KCgkvLyBjYW4ndCBzcGVuZCBtb3JlIHRoYW4gYWxsb3dlZAoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA3CgkvLyBvd25lckJhbGFuY2UgPSB0aGlzLmFyYzIwMF9iYWxhbmNlT2YoZnJvbSkKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgljYWxsc3ViIGFyYzIwMF9iYWxhbmNlT2YKCWZyYW1lX2J1cnkgMSAvLyBvd25lckJhbGFuY2U6IHVuc2FmZSB1aW50MjU2CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTA4CgkvLyBhc3NlcnQob3duZXJCYWxhbmNlID49IHZhbHVlLCBOT1RfRU5PVUdIX0JBTEFOQ0UpCglmcmFtZV9kaWcgMSAvLyBvd25lckJhbGFuY2U6IHVuc2FmZSB1aW50MjU2CglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWI+PQoKCS8vIG5vdCBlbm91Z2ggYmFsYW5jZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTEwCgkvLyB0aGlzLmFsbG93YW5jZXMoW2Zyb20sIHRoaXMudHhuLnNlbmRlcl0pLnZhbHVlID0gYWxsb3dhbmNlIC0gdmFsdWUKCWZyYW1lX2RpZyAtMSAvLyBmcm9tOiBBZGRyZXNzCgl0eG4gU2VuZGVyCgljb25jYXQKCWZyYW1lX2RpZyAwIC8vIGFsbG93YW5jZTogdW5zYWZlIHVpbnQyNTYKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJYi0KCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIGFsbG93YW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMTEKCS8vIHRoaXMuYmFsYW5jZXMoZnJvbSkudmFsdWUgPSBvd25lckJhbGFuY2UgLSB2YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIGZyb206IEFkZHJlc3MKCWZyYW1lX2RpZyAxIC8vIG93bmVyQmFsYW5jZTogdW5zYWZlIHVpbnQyNTYKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJYi0KCWR1cAoJYml0bGVuCglpbnQgMjU2Cgk8PQoKCS8vIG93bmVyQmFsYW5jZSAtIHZhbHVlIG92ZXJmbG93ZWQgMjU2IGJpdHMKCWFzc2VydAoJYnl0ZSAweEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkYKCWImCglkdXAKCWxlbgoJZHVwCglpbnQgMzIKCS0KCXN3YXAKCXN1YnN0cmluZzMKCWJveF9wdXQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMTIKCS8vIHRoaXMuYmFsYW5jZXModG8pLnZhbHVlID0gdGhpcy5hcmMyMDBfYmFsYW5jZU9mKHRvKSArIHZhbHVlCglmcmFtZV9kaWcgLTIgLy8gdG86IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyB0bzogQWRkcmVzcwoJY2FsbHN1YiBhcmMyMDBfYmFsYW5jZU9mCglmcmFtZV9kaWcgLTMgLy8gdmFsdWU6IHVpbnQyNTYKCWIrCglkdXAKCWJpdGxlbgoJaW50IDI1NgoJPD0KCgkvLyB0aGlzLmFyYzIwMF9iYWxhbmNlT2YodG8pICsgdmFsdWUgb3ZlcmZsb3dlZCAyNTYgYml0cwoJYXNzZXJ0CglieXRlIDB4RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRgoJYiYKCWR1cAoJbGVuCglkdXAKCWludCAzMgoJLQoJc3dhcAoJc3Vic3RyaW5nMwoJYm94X3B1dAoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjExNAoJLy8gdGhpcy5hcmMyMDBfVHJhbnNmZXIubG9nKHsgZnJvbTogZnJvbSwgdG86IHRvLCB2YWx1ZTogdmFsdWUgfSkKCWJ5dGUgMHg3OTgzYzM1YyAvLyBhcmMyMDBfVHJhbnNmZXIoYWRkcmVzcyxhZGRyZXNzLHVpbnQyNTYpCglmcmFtZV9kaWcgLTEgLy8gZnJvbTogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHRvOiBBZGRyZXNzCgljb25jYXQKCWZyYW1lX2RpZyAtMyAvLyB2YWx1ZTogdWludDI1NgoJY29uY2F0Cgljb25jYXQKCWxvZwoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjExNgoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoKKmFyYzIwMF90cmFuc2ZlckZyb20qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMQoJcmV0c3ViCgovLyBzdXBwb3J0c0ludGVyZmFjZShieXRlWzRdKWJvb2wKKmFiaV9yb3V0ZV9zdXBwb3J0c0ludGVyZmFjZToKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gaW50ZXJmYWNlSUQ6IGJ5dGVbNF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgNAoJPT0KCgkvLyBhcmd1bWVudCAwIChpbnRlcmZhY2VJRCkgZm9yIHN1cHBvcnRzSW50ZXJmYWNlIG11c3QgYmUgYSBieXRlWzRdCglhc3NlcnQKCgkvLyBleGVjdXRlIHN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVbNF0pYm9vbAoJY2FsbHN1YiBzdXBwb3J0c0ludGVyZmFjZQoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBzdXBwb3J0c0ludGVyZmFjZShpbnRlcmZhY2VJRDogU3RhdGljQXJyYXk8Ynl0ZSwgND4pOiBib29sZWFuCnN1cHBvcnRzSW50ZXJmYWNlOgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxMjEKCS8vIGlkID0gYnRvaShpbnRlcmZhY2VJRCkKCWZyYW1lX2RpZyAtMSAvLyBpbnRlcmZhY2VJRDogU3RhdGljQXJyYXk8Ynl0ZSwgND4KCWJ0b2kKCWZyYW1lX2J1cnkgMCAvLyBpZDogdWludDY0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTIzCgkvLyByZXR1cm4gKAoJLy8gICAgICAgaWQgPT09IDB4NGUyMmEzYmEgfHwKCS8vICAgICAgIGlkID09PSAweGM3YmVhMDQwIHx8CgkvLyAgICAgICBpZCA9PT0gMHhkYTcwMjViOSB8fAoJLy8gICAgICAgaWQgPT09IDB4NGE5NjhmOGYgfHwKCS8vICAgICAgIGlkID09PSAweGI1NDIyMTI1IHx8CgkvLyAgICAgICBpZCA9PT0gMHg2NTdkMTNlYyB8fAoJLy8gICAgICAgaWQgPT09IDB4YjZhZTFhMjUgfHwKCS8vICAgICAgIGlkID09PSAweDg0ZWMxM2Q1IHx8CgkvLyAgICAgICBpZCA9PT0gMHhlYzk5NjA0MSB8fAoJLy8gICAgICAgaWQgPT09IDB4ODJlNTczYzQgfHwKCS8vICAgICAgIGlkID09PSAweGJiYjMxOWYzIHx8CgkvLyAgICAgICBpZCA9PT0gMHg3OTgzYzM1YyB8fAoJLy8gICAgICAgaWQgPT09IDB4MTk2OWY4NjUgfHwKCS8vICAgICAgIGlkID09PSAweGJjNGE1NDAwIHx8CgkvLyAgICAgICBpZCA9PT0gMHhjOThkZDA1NSB8fAoJLy8gICAgICAgaWQgPT09IDB4NjYzMDQyZmIKCS8vICAgICApOwoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4NGUyMmEzYmEKCT09CglkdXAKCWJueiAqc2tpcF9vcjEKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweGM3YmVhMDQwCgk9PQoJfHwKCipza2lwX29yMToKCWR1cAoJYm56ICpza2lwX29yMgoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4ZGE3MDI1YjkKCT09Cgl8fAoKKnNraXBfb3IyOgoJZHVwCglibnogKnNraXBfb3IzCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHg0YTk2OGY4ZgoJPT0KCXx8Cgoqc2tpcF9vcjM6CglkdXAKCWJueiAqc2tpcF9vcjQKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweGI1NDIyMTI1Cgk9PQoJfHwKCipza2lwX29yNDoKCWR1cAoJYm56ICpza2lwX29yNQoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4NjU3ZDEzZWMKCT09Cgl8fAoKKnNraXBfb3I1OgoJZHVwCglibnogKnNraXBfb3I2CglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiNmFlMWEyNQoJPT0KCXx8Cgoqc2tpcF9vcjY6CglkdXAKCWJueiAqc2tpcF9vcjcKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDg0ZWMxM2Q1Cgk9PQoJfHwKCipza2lwX29yNzoKCWR1cAoJYm56ICpza2lwX29yOAoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4ZWM5OTYwNDEKCT09Cgl8fAoKKnNraXBfb3I4OgoJZHVwCglibnogKnNraXBfb3I5CglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHg4MmU1NzNjNAoJPT0KCXx8Cgoqc2tpcF9vcjk6CglkdXAKCWJueiAqc2tpcF9vcjEwCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiYmIzMTlmMwoJPT0KCXx8Cgoqc2tpcF9vcjEwOgoJZHVwCglibnogKnNraXBfb3IxMQoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4Nzk4M2MzNWMKCT09Cgl8fAoKKnNraXBfb3IxMToKCWR1cAoJYm56ICpza2lwX29yMTIKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDE5NjlmODY1Cgk9PQoJfHwKCipza2lwX29yMTI6CglkdXAKCWJueiAqc2tpcF9vcjEzCglmcmFtZV9kaWcgMCAvLyBpZDogdWludDY0CglpbnQgMHhiYzRhNTQwMAoJPT0KCXx8Cgoqc2tpcF9vcjEzOgoJZHVwCglibnogKnNraXBfb3IxNAoJZnJhbWVfZGlnIDAgLy8gaWQ6IHVpbnQ2NAoJaW50IDB4Yzk4ZGQwNTUKCT09Cgl8fAoKKnNraXBfb3IxNDoKCWR1cAoJYm56ICpza2lwX29yMTUKCWZyYW1lX2RpZyAwIC8vIGlkOiB1aW50NjQKCWludCAweDY2MzA0MmZiCgk9PQoJfHwKCipza2lwX29yMTU6CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gemVyb0FkZHJlc3MoKWFkZHJlc3MKKmFiaV9yb3V0ZV96ZXJvQWRkcmVzczoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSB6ZXJvQWRkcmVzcygpYWRkcmVzcwoJY2FsbHN1YiB6ZXJvQWRkcmVzcwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIHplcm9BZGRyZXNzKCk6IEFkZHJlc3MKemVyb0FkZHJlc3M6Cglwcm90byAwIDEKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNDUKCS8vIHJldHVybiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXRzdWIKCi8vIGhhc0JveChhZGRyZXNzLGFkZHJlc3MpYm9vbAoqYWJpX3JvdXRlX2hhc0JveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gc3BlbmRlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChzcGVuZGVyKSBmb3IgaGFzQm94IG11c3QgYmUgYSBhZGRyZXNzCglhc3NlcnQKCgkvLyBvd25lcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAxIChvd25lcikgZm9yIGhhc0JveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBoYXNCb3goYWRkcmVzcyxhZGRyZXNzKWJvb2wKCWNhbGxzdWIgaGFzQm94CglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGhhc0JveChvd25lcjogQWRkcmVzcywgc3BlbmRlcjogQWRkcmVzcyk6IGJvb2xlYW4KaGFzQm94OgoJcHJvdG8gMiAxCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1MAoJLy8gc3BlbmRlciA9PT0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIHNwZW5kZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJPT0KCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNTEKCS8vIHJldHVybiB0aGlzLmJhbGFuY2VzKG93bmVyKS5leGlzdHM7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJcmV0c3ViCgoqaWY1X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1MwoJLy8gcmV0dXJuIHRoaXMuYWxsb3dhbmNlcyhbb3duZXIsIHNwZW5kZXJdKS5leGlzdHM7CglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJcmV0c3ViCgovLyBjcmVhdGVCYWxhbmNlQm94KGFkZHJlc3MpYm9vbAoqYWJpX3JvdXRlX2NyZWF0ZUJhbGFuY2VCb3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIG93bmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKG93bmVyKSBmb3IgY3JlYXRlQmFsYW5jZUJveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBjcmVhdGVCYWxhbmNlQm94KGFkZHJlc3MpYm9vbAoJY2FsbHN1YiBjcmVhdGVCYWxhbmNlQm94CglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUJhbGFuY2VCb3gob3duZXI6IEFkZHJlc3MpOiBib29sZWFuCmNyZWF0ZUJhbGFuY2VCb3g6Cglwcm90byAxIDEKCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvQXJjMjAwLmFsZ28udHM6MTU3CgkvLyAhdGhpcy5iYWxhbmNlcyhvd25lcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE1OAoJLy8gdGhpcy5iYWxhbmNlcyhvd25lcikudmFsdWUgPSA8dWludDI1Nj4wCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCglib3hfcHV0CgoqaWY2X2VuZDoKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE2MAoJLy8gcmV0dXJuIHRydWU7CglpbnQgMQoJcmV0c3ViCgovLyBjcmVhdGVBbGxvd2FuY2VCb3goYWRkcmVzcyxhZGRyZXNzKWJvb2wKKmFiaV9yb3V0ZV9jcmVhdGVBbGxvd2FuY2VCb3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHNwZW5kZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMCAoc3BlbmRlcikgZm9yIGNyZWF0ZUFsbG93YW5jZUJveCBtdXN0IGJlIGEgYWRkcmVzcwoJYXNzZXJ0CgoJLy8gb3duZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMSAob3duZXIpIGZvciBjcmVhdGVBbGxvd2FuY2VCb3ggbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlQWxsb3dhbmNlQm94KGFkZHJlc3MsYWRkcmVzcylib29sCgljYWxsc3ViIGNyZWF0ZUFsbG93YW5jZUJveAoJYnl0ZSAweDAwCglpbnQgMAoJdW5jb3ZlciAyCglzZXRiaXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBjcmVhdGVBbGxvd2FuY2VCb3gob3duZXI6IEFkZHJlc3MsIHNwZW5kZXI6IEFkZHJlc3MpOiBib29sZWFuCmNyZWF0ZUFsbG93YW5jZUJveDoKCXByb3RvIDIgMQoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNjQKCS8vICF0aGlzLmFsbG93YW5jZXMoW293bmVyLCBzcGVuZGVyXSkuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gb3duZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBzcGVuZGVyOiBBZGRyZXNzCgljb25jYXQKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL0FyYzIwMC5hbGdvLnRzOjE2NQoJLy8gdGhpcy5hbGxvd2FuY2VzKFtvd25lciwgc3BlbmRlcl0pLnZhbHVlID0gPHVpbnQyNTY+MAoJZnJhbWVfZGlnIC0xIC8vIG93bmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gc3BlbmRlcjogQWRkcmVzcwoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAoJYm94X3B1dAoKKmlmN19lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9BcmMyMDAuYWxnby50czoxNjcKCS8vIHJldHVybiB0cnVlOwoJaW50IDEKCXJldHN1YgoKLy8gbm9vcCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX25vb3A6CgkvLyBfbjogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBub29wKHVpbnQ2NCl2b2lkCgljYWxsc3ViIG5vb3AKCWludCAxCglyZXR1cm4KCi8vIG5vb3AoX246IHVpbnQ2NCk6IHZvaWQKbm9vcDoKCXByb3RvIDEgMAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czo3CgkvLyBhc3NlcnQodGhpcy53YXJkZW4uZXhpc3RzLCAndGhpcyBhcHAgY2FuIG5vdCB1cGRhdGUnKQoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoKCS8vIHRoaXMgYXBwIGNhbiBub3QgdXBkYXRlCglhc3NlcnQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6OAoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICdvbmx5IG1hbmFnZXIgY2FuIHVwZGF0ZScpCgl0eG4gU2VuZGVyCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyBvbmx5IG1hbmFnZXIgY2FuIHVwZGF0ZQoJYXNzZXJ0CglyZXRzdWIKCi8vIGRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfZGVsZXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIGRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIGRlbGV0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyBkZWxldGVBcHBsaWNhdGlvbigpOiB2b2lkCmRlbGV0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjEyCgkvLyBhc3NlcnQodGhpcy53YXJkZW4uZXhpc3RzLCAndGhpcyBhcHAgY2FuIG5vdCBiZSBkZWxldGVkJykKCXR4bmEgQXBwbGljYXRpb25zIDAKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0X2V4Cglzd2FwCglwb3AKCgkvLyB0aGlzIGFwcCBjYW4gbm90IGJlIGRlbGV0ZWQKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICdvbmx5IG1hbmFnZXIgY2FuIGRlbGV0ZScpCgl0eG4gU2VuZGVyCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2dldAoJPT0KCgkvLyBvbmx5IG1hbmFnZXIgY2FuIGRlbGV0ZQoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBhbW91bnQ6IDAsCgkvLyAgICAgICBzZW5kZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy53YXJkZW4udmFsdWUsCgkvLyAgICAgICBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLndhcmRlbi52YWx1ZSwKCS8vICAgICAgIHJla2V5VG86IHRoaXMud2FyZGVuLnZhbHVlLAoJLy8gICAgICAgZmVlOiBnbG9iYWxzLm1pblR4bkZlZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxNQoJLy8gYW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MTYKCS8vIHNlbmRlcjogdGhpcy5hcHAuYWRkcmVzcwoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE3CgkvLyByZWNlaXZlcjogdGhpcy53YXJkZW4udmFsdWUKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjE4CgkvLyBjbG9zZVJlbWFpbmRlclRvOiB0aGlzLndhcmRlbi52YWx1ZQoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCWl0eG5fZmllbGQgQ2xvc2VSZW1haW5kZXJUbwoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoxOQoJLy8gcmVrZXlUbzogdGhpcy53YXJkZW4udmFsdWUKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWFwcF9nbG9iYWxfZ2V0CglpdHhuX2ZpZWxkIFJla2V5VG8KCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjAKCS8vIGZlZTogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBNaW5UeG5GZWUKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBtYW5hZ2VyKClhZGRyZXNzCiphYmlfcm91dGVfbWFuYWdlcjoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gZXhlY3V0ZSBtYW5hZ2VyKClhZGRyZXNzCgljYWxsc3ViIG1hbmFnZXIKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBtYW5hZ2VyKCk6IEFkZHJlc3MKbWFuYWdlcjoKCXByb3RvIDAgMQoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjYKCS8vIHRoaXMud2FyZGVuLmV4aXN0cwoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXRfZXgKCXN3YXAKCXBvcAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czoyNwoJLy8gcmV0dXJuIHRoaXMud2FyZGVuLnZhbHVlOwoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCXJldHN1YgoKKmlmOF9lbmQ6CgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MjkKCS8vIHJldHVybiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZ2xvYmFsIFplcm9BZGRyZXNzCglyZXRzdWIKCi8vIGdyYW50KGFkZHJlc3Mpdm9pZAoqYWJpX3JvdXRlX2dyYW50OgoJLy8gbWFuYWdlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCAwIChtYW5hZ2VyKSBmb3IgZ3JhbnQgbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgZ3JhbnQoYWRkcmVzcyl2b2lkCgljYWxsc3ViIGdyYW50CglpbnQgMQoJcmV0dXJuCgovLyBncmFudChtYW5hZ2VyOiBBZGRyZXNzKTogdm9pZApncmFudDoKCXByb3RvIDEgMAoKCS8vIHNyYy9jb250cmFjdHMvbGliL093bmFibGUuYWxnby50czozMwoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy53YXJkZW4udmFsdWUsICd1bmF1dGhvcml6ZWQnKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gdW5hdXRob3JpemVkCglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjM0CgkvLyBtYW5hZ2VyID09PSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gbWFuYWdlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoJYnogKmlmOV9lbHNlCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBzcmMvY29udHJhY3RzL2xpYi9Pd25hYmxlLmFsZ28udHM6MzUKCS8vIHRoaXMud2FyZGVuLmRlbGV0ZSgpCglieXRlIDB4Nzc2MTcyNjQ2NTZlIC8vICJ3YXJkZW4iCglhcHBfZ2xvYmFsX2RlbAoJYiAqaWY5X2VuZAoKKmlmOV9lbHNlOgoJLy8gc3JjL2NvbnRyYWN0cy9saWIvT3duYWJsZS5hbGdvLnRzOjM3CgkvLyB0aGlzLndhcmRlbi52YWx1ZSA9IG1hbmFnZXIKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWZyYW1lX2RpZyAtMSAvLyBtYW5hZ2VyOiBBZGRyZXNzCglhcHBfZ2xvYmFsX3B1dAoKKmlmOV9lbmQ6CglyZXRzdWIKCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYnl0ZVszMl0sYnl0ZVs4XSx1aW50OCx1aW50MjU2KXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIHRvdGFsU3VwcGx5OiB1aW50MjU2Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyA1CglkdXAKCWxlbgoJaW50IDMyCgk9PQoKCS8vIGFyZ3VtZW50IDAgKHRvdGFsU3VwcGx5KSBmb3IgY3JlYXRlQXBwbGljYXRpb24gbXVzdCBiZSBhIHVpbnQyNTYKCWFzc2VydAoKCS8vIGRlY2ltYWxzOiB1aW50OAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAoJZHVwCglsZW4KCWludCAxCgk9PQoKCS8vIGFyZ3VtZW50IDEgKGRlY2ltYWxzKSBmb3IgY3JlYXRlQXBwbGljYXRpb24gbXVzdCBiZSBhIHVpbnQ4Cglhc3NlcnQKCWJ0b2kKCgkvLyBzeW1ib2w6IGJ5dGVbOF0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDMKCWR1cAoJbGVuCglpbnQgOAoJPT0KCgkvLyBhcmd1bWVudCAyIChzeW1ib2wpIGZvciBjcmVhdGVBcHBsaWNhdGlvbiBtdXN0IGJlIGEgYnl0ZVs4XQoJYXNzZXJ0CgoJLy8gbmFtZTogYnl0ZVszMl0KCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWR1cAoJbGVuCglpbnQgMzIKCT09CgoJLy8gYXJndW1lbnQgMyAobmFtZSkgZm9yIGNyZWF0ZUFwcGxpY2F0aW9uIG11c3QgYmUgYSBieXRlWzMyXQoJYXNzZXJ0CgoJLy8gbWFuYWdlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCgkvLyBhcmd1bWVudCA0IChtYW5hZ2VyKSBmb3IgY3JlYXRlQXBwbGljYXRpb24gbXVzdCBiZSBhIGFkZHJlc3MKCWFzc2VydAoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlWzMyXSxieXRlWzhdLHVpbnQ4LHVpbnQyNTYpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24obWFuYWdlcjogQWRkcmVzcywgbmFtZTogU3RhdGljQnl0ZXM8MzI+LCBzeW1ib2w6IFN0YXRpY0J5dGVzPDg+LCBkZWNpbWFsczogdWludDgsIHRvdGFsU3VwcGx5OiB1aW50MjU2KTogdm9pZApjcmVhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDUgMAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjEzCgkvLyB0aGlzLndhcmRlbi52YWx1ZSA9IG1hbmFnZXIKCWJ5dGUgMHg3NzYxNzI2NDY1NmUgLy8gIndhcmRlbiIKCWZyYW1lX2RpZyAtMSAvLyBtYW5hZ2VyOiBBZGRyZXNzCglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjE0CgkvLyB0aGlzLm5hbWUudmFsdWUgPSBuYW1lCglieXRlIDB4NmU2MTZkNjUgLy8gIm5hbWUiCglmcmFtZV9kaWcgLTIgLy8gbmFtZTogU3RhdGljQnl0ZXM8MzI+CglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjE1CgkvLyB0aGlzLnN5bWJvbC52YWx1ZSA9IHN5bWJvbAoJYnl0ZSAweDczNzk2ZDYyNmY2YyAvLyAic3ltYm9sIgoJZnJhbWVfZGlnIC0zIC8vIHN5bWJvbDogU3RhdGljQnl0ZXM8OD4KCWFwcF9nbG9iYWxfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9TbWFydEFzc2V0LmFsZ28udHM6MTYKCS8vIHRoaXMuZGVjaW1hbHMudmFsdWUgPSBkZWNpbWFscwoJYnl0ZSAweDY0NjU2MzY5NmQ2MTZjNzMgLy8gImRlY2ltYWxzIgoJZnJhbWVfZGlnIC00IC8vIGRlY2ltYWxzOiB1aW50OAoJaXRvYgoJZXh0cmFjdCA3IDEKCWFwcF9nbG9iYWxfcHV0CgoJLy8gc3JjL2NvbnRyYWN0cy9TbWFydEFzc2V0LmFsZ28udHM6MTcKCS8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgPSB0b3RhbFN1cHBseQoJYnl0ZSAweDc0NmY3NDYxNmM1ZjczNzU3MDcwNmM3OSAvLyAidG90YWxfc3VwcGx5IgoJZnJhbWVfZGlnIC01IC8vIHRvdGFsU3VwcGx5OiB1aW50MjU2CglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjE4CgkvLyB0aGlzLmluaXRpYWxpemVkLnZhbHVlID0gZmFsc2UKCWJ5dGUgMHg2OTZlNjk3NDY5NjE2YzY5N2E2NTY0IC8vICJpbml0aWFsaXplZCIKCWludCAwCglieXRlIDB4MDAKCWludCAwCgl1bmNvdmVyIDIKCXNldGJpdAoJYXBwX2dsb2JhbF9wdXQKCXJldHN1YgoKLy8gYm9vdHN0cmFwKHBheSl2b2lkCiphYmlfcm91dGVfYm9vdHN0cmFwOgoJLy8gdHhuOiBwYXkKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IHBheQoJPT0KCgkvLyBhcmd1bWVudCAwICh0eG4pIGZvciBib290c3RyYXAgbXVzdCBiZSBhIHBheSB0cmFuc2FjdGlvbgoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBib290c3RyYXAocGF5KXZvaWQKCWNhbGxzdWIgYm9vdHN0cmFwCglpbnQgMQoJcmV0dXJuCgovLyBib290c3RyYXAodHhuOiBQYXlUeG4pOiB2b2lkCmJvb3RzdHJhcDoKCXByb3RvIDEgMAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjIyCgkvLyB2ZXJpZnlQYXlUeG4odHhuLCB7CgkvLyAgICAgICBzZW5kZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYW1vdW50OiB7IGdyZWF0ZXJUaGFuRXF1YWxUbzogMiAqIGdsb2JhbHMubWluQmFsYW5jZSB9LAoJLy8gICAgICAgY2xvc2VSZW1haW5kZXJUbzogZ2xvYmFscy56ZXJvQWRkcmVzcywKCS8vICAgICAgIHJla2V5VG86IGdsb2JhbHMuemVyb0FkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBzZW5kZXIKCWZyYW1lX2RpZyAtMSAvLyB0eG46IFBheVR4bgoJZ3R4bnMgU2VuZGVyCgl0eG4gU2VuZGVyCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJzZW5kZXIiLCJleHBlY3RlZCI6InRoaXMudHhuLnNlbmRlciJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyB0eG46IFBheVR4bgoJZ3R4bnMgUmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJyZWNlaXZlciIsImV4cGVjdGVkIjoidGhpcy5hcHAuYWRkcmVzcyJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgYW1vdW50CglmcmFtZV9kaWcgLTEgLy8gdHhuOiBQYXlUeG4KCWd0eG5zIEFtb3VudAoJaW50IDIKCWdsb2JhbCBNaW5CYWxhbmNlCgkqCgk+PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJhbW91bnQiLCJjb25kaXRpb24iOiJncmVhdGVyVGhhbkVxdWFsVG8iLCJleHBlY3RlZCI6Ij49MiAqIGdsb2JhbHMubWluQmFsYW5jZSJ9Cglhc3NlcnQKCgkvLyB2ZXJpZnkgY2xvc2VSZW1haW5kZXJUbwoJZnJhbWVfZGlnIC0xIC8vIHR4bjogUGF5VHhuCglndHhucyBDbG9zZVJlbWFpbmRlclRvCglnbG9iYWwgWmVyb0FkZHJlc3MKCT09CgoJLy8gdHJhbnNhY3Rpb24gdmVyaWZpY2F0aW9uIGZhaWxlZDogeyJ0eG4iOiJ0eG4iLCJmaWVsZCI6ImNsb3NlUmVtYWluZGVyVG8iLCJleHBlY3RlZCI6Imdsb2JhbHMuemVyb0FkZHJlc3MifQoJYXNzZXJ0CgoJLy8gdmVyaWZ5IHJla2V5VG8KCWZyYW1lX2RpZyAtMSAvLyB0eG46IFBheVR4bgoJZ3R4bnMgUmVrZXlUbwoJZ2xvYmFsIFplcm9BZGRyZXNzCgk9PQoKCS8vIHRyYW5zYWN0aW9uIHZlcmlmaWNhdGlvbiBmYWlsZWQ6IHsidHhuIjoidHhuIiwiZmllbGQiOiJyZWtleVRvIiwiZXhwZWN0ZWQiOiJnbG9iYWxzLnplcm9BZGRyZXNzIn0KCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjI5CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLndhcmRlbi52YWx1ZSwgJ29ubHkgbWFuYWdlciBjYW4gY2FsbCBib290c3RyYXAnKQoJdHhuIFNlbmRlcgoJYnl0ZSAweDc3NjE3MjY0NjU2ZSAvLyAid2FyZGVuIgoJYXBwX2dsb2JhbF9nZXQKCT09CgoJLy8gb25seSBtYW5hZ2VyIGNhbiBjYWxsIGJvb3RzdHJhcAoJYXNzZXJ0CgoJLy8gc3JjL2NvbnRyYWN0cy9TbWFydEFzc2V0LmFsZ28udHM6MzAKCS8vIGFzc2VydCghdGhpcy5pbml0aWFsaXplZC52YWx1ZSAmJiAhdGhpcy5iYWxhbmNlcyh0aGlzLnR4bi5zZW5kZXIpLmV4aXN0cywgJ2FscmVhZHkgaW5pdGlhbGl6ZWQnKQoJYnl0ZSAweDY5NmU2OTc0Njk2MTZjNjk3YTY1NjQgLy8gImluaXRpYWxpemVkIgoJYXBwX2dsb2JhbF9nZXQKCWludCAwCglnZXRiaXQKCSEKCWR1cAoJYnogKnNraXBfYW5kMgoJdHhuIFNlbmRlcgoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCgkmJgoKKnNraXBfYW5kMjoKCS8vIGFscmVhZHkgaW5pdGlhbGl6ZWQKCWFzc2VydAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjMxCgkvLyB0aGlzLmluaXRpYWxpemVkLnZhbHVlID0gdHJ1ZQoJYnl0ZSAweDY5NmU2OTc0Njk2MTZjNjk3YTY1NjQgLy8gImluaXRpYWxpemVkIgoJaW50IDEKCWJ5dGUgMHgwMAoJaW50IDAKCXVuY292ZXIgMgoJc2V0Yml0CglhcHBfZ2xvYmFsX3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjMyCgkvLyB0aGlzLmJhbGFuY2VzKHRoaXMudHhuLnNlbmRlcikudmFsdWUgPSB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlCgl0eG4gU2VuZGVyCglieXRlIDB4NzQ2Zjc0NjE2YzVmNzM3NTcwNzA2Yzc5IC8vICJ0b3RhbF9zdXBwbHkiCglhcHBfZ2xvYmFsX2dldAoJYm94X3B1dAoKCS8vIHNyYy9jb250cmFjdHMvU21hcnRBc3NldC5hbGdvLnRzOjMzCgkvLyB0aGlzLmFyYzIwMF9UcmFuc2Zlci5sb2coewoJLy8gICAgICAgZnJvbTogZ2xvYmFscy56ZXJvQWRkcmVzcywKCS8vICAgICAgIHRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICB2YWx1ZTogdGhpcy50b3RhbFN1cHBseS52YWx1ZQoJLy8gICAgIH0pCglieXRlIDB4Nzk4M2MzNWMgLy8gYXJjMjAwX1RyYW5zZmVyKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KQoJZ2xvYmFsIFplcm9BZGRyZXNzCgl0eG4gU2VuZGVyCgljb25jYXQKCWJ5dGUgMHg3NDZmNzQ2MTZjNWY3Mzc1NzA3MDZjNzkgLy8gInRvdGFsX3N1cHBseSIKCWFwcF9nbG9iYWxfZ2V0Cgljb25jYXQKCWNvbmNhdAoJbG9nCglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oYWRkcmVzcyxieXRlWzMyXSxieXRlWzhdLHVpbnQ4LHVpbnQyNTYpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCgkvLyB0aGlzIGNvbnRyYWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgZ2l2ZW4gQUJJIG1ldGhvZCBmb3IgY3JlYXRlIE5vT3AKCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjMjAwX25hbWUoKWJ5dGVbMzJdIgoJbWV0aG9kICJhcmMyMDBfc3ltYm9sKClieXRlWzhdIgoJbWV0aG9kICJhcmMyMDBfZGVjaW1hbHMoKXVpbnQ4IgoJbWV0aG9kICJhcmMyMDBfdG90YWxTdXBwbHkoKXVpbnQyNTYiCgltZXRob2QgImFyYzIwMF9iYWxhbmNlT2YoYWRkcmVzcyl1aW50MjU2IgoJbWV0aG9kICJhcmMyMDBfYWxsb3dhbmNlKGFkZHJlc3MsYWRkcmVzcyl1aW50MjU2IgoJbWV0aG9kICJhcmMyMDBfdHJhbnNmZXIoYWRkcmVzcyx1aW50MjU2KWJvb2wiCgltZXRob2QgImFyYzIwMF9hcHByb3ZlKGFkZHJlc3MsdWludDI1Nilib29sIgoJbWV0aG9kICJhcmMyMDBfdHJhbnNmZXJGcm9tKGFkZHJlc3MsYWRkcmVzcyx1aW50MjU2KWJvb2wiCgltZXRob2QgInN1cHBvcnRzSW50ZXJmYWNlKGJ5dGVbNF0pYm9vbCIKCW1ldGhvZCAiemVyb0FkZHJlc3MoKWFkZHJlc3MiCgltZXRob2QgImhhc0JveChhZGRyZXNzLGFkZHJlc3MpYm9vbCIKCW1ldGhvZCAiY3JlYXRlQmFsYW5jZUJveChhZGRyZXNzKWJvb2wiCgltZXRob2QgImNyZWF0ZUFsbG93YW5jZUJveChhZGRyZXNzLGFkZHJlc3MpYm9vbCIKCW1ldGhvZCAibm9vcCh1aW50NjQpdm9pZCIKCW1ldGhvZCAibWFuYWdlcigpYWRkcmVzcyIKCW1ldGhvZCAiZ3JhbnQoYWRkcmVzcyl2b2lkIgoJbWV0aG9kICJib290c3RyYXAocGF5KXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzIwMF9uYW1lICphYmlfcm91dGVfYXJjMjAwX3N5bWJvbCAqYWJpX3JvdXRlX2FyYzIwMF9kZWNpbWFscyAqYWJpX3JvdXRlX2FyYzIwMF90b3RhbFN1cHBseSAqYWJpX3JvdXRlX2FyYzIwMF9iYWxhbmNlT2YgKmFiaV9yb3V0ZV9hcmMyMDBfYWxsb3dhbmNlICphYmlfcm91dGVfYXJjMjAwX3RyYW5zZmVyICphYmlfcm91dGVfYXJjMjAwX2FwcHJvdmUgKmFiaV9yb3V0ZV9hcmMyMDBfdHJhbnNmZXJGcm9tICphYmlfcm91dGVfc3VwcG9ydHNJbnRlcmZhY2UgKmFiaV9yb3V0ZV96ZXJvQWRkcmVzcyAqYWJpX3JvdXRlX2hhc0JveCAqYWJpX3JvdXRlX2NyZWF0ZUJhbGFuY2VCb3ggKmFiaV9yb3V0ZV9jcmVhdGVBbGxvd2FuY2VCb3ggKmFiaV9yb3V0ZV9ub29wICphYmlfcm91dGVfbWFuYWdlciAqYWJpX3JvdXRlX2dyYW50ICphYmlfcm91dGVfYm9vdHN0cmFwCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgTm9PcAoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgoJLy8gdGhpcyBjb250cmFjdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGdpdmVuIEFCSSBtZXRob2QgZm9yIGNhbGwgVXBkYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfRGVsZXRlQXBwbGljYXRpb246CgltZXRob2QgImRlbGV0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9kZWxldGVBcHBsaWNhdGlvbgoKCS8vIHRoaXMgY29udHJhY3QgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBnaXZlbiBBQkkgbWV0aG9kIGZvciBjYWxsIERlbGV0ZUFwcGxpY2F0aW9uCgllcnI=", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { "name": "SmartAsset", "desc": "", "methods": [ { "name": "arc200_name", "readonly": true, "args": [], "returns": { "type": "byte[32]" } }, { "name": "arc200_symbol", "readonly": true, "args": [], "returns": { "type": "byte[8]" } }, { "name": "arc200_decimals", "readonly": true, "args": [], "returns": { "type": "uint8" } }, { "name": "arc200_totalSupply", "readonly": true, "args": [], "returns": { "type": "uint256" } }, { "name": "arc200_balanceOf", "readonly": true, "args": [ { "name": "owner", "type": "address" } ], "returns": { "type": "uint256" } }, { "name": "arc200_allowance", "readonly": true, "args": [ { "name": "owner", "type": "address" }, { "name": "spender", "type": "address" } ], "returns": { "type": "uint256" } }, { "name": "arc200_transfer", "args": [ { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" } ], "returns": { "type": "bool" } }, { "name": "arc200_approve", "args": [ { "name": "spender", "type": "address" }, { "name": "value", "type": "uint256" } ], "returns": { "type": "bool" } }, { "name": "arc200_transferFrom", "args": [ { "name": "from", "type": "address" }, { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" } ], "returns": { "type": "bool" }, "events": [ { "name": "arc200_Transfer", "args": [ { "name": "from", "type": "address" }, { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" } ], "desc": "" } ] }, { "name": "supportsInterface", "readonly": true, "args": [ { "name": "interfaceID", "type": "byte[4]" } ], "returns": { "type": "bool" } }, { "name": "zeroAddress", "readonly": true, "args": [], "returns": { "type": "address" } }, { "name": "hasBox", "readonly": true, "args": [ { "name": "owner", "type": "address" }, { "name": "spender", "type": "address" } ], "returns": { "type": "bool" } }, { "name": "createBalanceBox", "args": [ { "name": "owner", "type": "address" } ], "returns": { "type": "bool" } }, { "name": "createAllowanceBox", "args": [ { "name": "owner", "type": "address" }, { "name": "spender", "type": "address" } ], "returns": { "type": "bool" } }, { "name": "noop", "args": [ { "name": "_n", "type": "uint64" } ], "returns": { "type": "void" } }, { "name": "updateApplication", "args": [], "returns": { "type": "void" } }, { "name": "deleteApplication", "args": [], "returns": { "type": "void" } }, { "name": "manager", "readonly": true, "args": [], "returns": { "type": "address" } }, { "name": "grant", "args": [ { "name": "manager", "type": "address" } ], "returns": { "type": "void" } }, { "name": "createApplication", "args": [ { "name": "manager", "type": "address" }, { "name": "name", "type": "byte[32]" }, { "name": "symbol", "type": "byte[8]" }, { "name": "decimals", "type": "uint8" }, { "name": "totalSupply", "type": "uint256" } ], "returns": { "type": "void" } }, { "name": "bootstrap", "args": [ { "name": "txn", "type": "pay" } ], "returns": { "type": "void" }, "events": [ { "name": "arc200_Transfer", "args": [ { "name": "from", "type": "address" }, { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" } ], "desc": "" } ] } ], "events": [ { "name": "arc200_Transfer", "args": [ { "name": "from", "type": "address" }, { "name": "to", "type": "address" }, { "name": "value", "type": "uint256" } ], "desc": "" }, { "name": "arc200_Approval", "args": [ { "name": "owner", "type": "address" }, { "name": "spender", "type": "address" }, { "name": "value", "type": "uint256" } ], "desc": "" } ] } } /** * Defines an onCompletionAction of 'no_op' */ export type OnCompleteNoOp = { onCompleteAction?: 'no_op' | OnApplicationComplete.NoOpOC } /** * Defines an onCompletionAction of 'opt_in' */ export type OnCompleteOptIn = { onCompleteAction: 'opt_in' | OnApplicationComplete.OptInOC } /** * Defines an onCompletionAction of 'close_out' */ export type OnCompleteCloseOut = { onCompleteAction: 'close_out' | OnApplicationComplete.CloseOutOC } /** * Defines an onCompletionAction of 'delete_application' */ export type OnCompleteDelApp = { onCompleteAction: 'delete_application' | OnApplicationComplete.DeleteApplicationOC } /** * Defines an onCompletionAction of 'update_application' */ export type OnCompleteUpdApp = { onCompleteAction: 'update_application' | OnApplicationComplete.UpdateApplicationOC } /** * A state record containing a single unsigned integer */ export type IntegerState = { /** * Gets the state value as a BigInt. */ asBigInt(): bigint /** * Gets the state value as a number. */ asNumber(): number } /** * A state record containing binary data */ export type BinaryState = { /** * Gets the state value as a Uint8Array */ asByteArray(): Uint8Array /** * Gets the state value as a string */ asString(): string } export type AppCreateCallTransactionResult = AppCallTransactionResult & Partial & AppReference export type AppUpdateCallTransactionResult = AppCallTransactionResult & Partial export type AppClientComposeCallCoreParams = Omit & { sendParams?: Omit } export type AppClientComposeExecuteParams = Pick export type IncludeSchema = { /** * Any overrides for the storage schema to request for the created app; by default the schema indicated by the app spec is used. */ schema?: Partial } /** * Defines the types of available calls and state of the SmartAsset smart contract. */ export type SmartAsset = { /** * Maps method signatures / names to their argument and return types. */ methods: & Record<'arc200_name()byte[32]' | 'arc200_name', { argsObj: { } argsTuple: [] returns: Uint8Array }> & Record<'arc200_symbol()byte[8]' | 'arc200_symbol', { argsObj: { } argsTuple: [] returns: Uint8Array }> & Record<'arc200_decimals()uint8' | 'arc200_decimals', { argsObj: { } argsTuple: [] returns: number }> & Record<'arc200_totalSupply()uint256' | 'arc200_totalSupply', { argsObj: { } argsTuple: [] returns: bigint }> & Record<'arc200_balanceOf(address)uint256' | 'arc200_balanceOf', { argsObj: { owner: string } argsTuple: [owner: string] returns: bigint }> & Record<'arc200_allowance(address,address)uint256' | 'arc200_allowance', { argsObj: { owner: string spender: string } argsTuple: [owner: string, spender: string] returns: bigint }> & Record<'arc200_transfer(address,uint256)bool' | 'arc200_transfer', { argsObj: { to: string value: bigint | number } argsTuple: [to: string, value: bigint | number] returns: boolean }> & Record<'arc200_approve(address,uint256)bool' | 'arc200_approve', { argsObj: { spender: string value: bigint | number } argsTuple: [spender: string, value: bigint | number] returns: boolean }> & Record<'arc200_transferFrom(address,address,uint256)bool' | 'arc200_transferFrom', { argsObj: { from: string to: string value: bigint | number } argsTuple: [from: string, to: string, value: bigint | number] returns: boolean }> & Record<'supportsInterface(byte[4])bool' | 'supportsInterface', { argsObj: { interfaceId: Uint8Array } argsTuple: [interfaceId: Uint8Array] returns: boolean }> & Record<'zeroAddress()address' | 'zeroAddress', { argsObj: { } argsTuple: [] returns: string }> & Record<'hasBox(address,address)bool' | 'hasBox', { argsObj: { owner: string spender: string } argsTuple: [owner: string, spender: string] returns: boolean }> & Record<'createBalanceBox(address)bool' | 'createBalanceBox', { argsObj: { owner: string } argsTuple: [owner: string] returns: boolean }> & Record<'createAllowanceBox(address,address)bool' | 'createAllowanceBox', { argsObj: { owner: string spender: string } argsTuple: [owner: string, spender: string] returns: boolean }> & Record<'noop(uint64)void' | 'noop', { argsObj: { n: bigint | number } argsTuple: [n: bigint | number] returns: void }> & Record<'updateApplication()void' | 'updateApplication', { argsObj: { } argsTuple: [] returns: void }> & Record<'deleteApplication()void' | 'deleteApplication', { argsObj: { } argsTuple: [] returns: void }> & Record<'manager()address' | 'manager', { argsObj: { } argsTuple: [] returns: string }> & Record<'grant(address)void' | 'grant', { argsObj: { manager: string } argsTuple: [manager: string] returns: void }> & Record<'createApplication(address,byte[32],byte[8],uint8,uint256)void' | 'createApplication', { argsObj: { manager: string name: Uint8Array symbol: Uint8Array decimals: number totalSupply: bigint | number } argsTuple: [manager: string, name: Uint8Array, symbol: Uint8Array, decimals: number, totalSupply: bigint | number] returns: void }> & Record<'bootstrap(pay)void' | 'bootstrap', { argsObj: { txn: TransactionToSign | Transaction | Promise } argsTuple: [txn: TransactionToSign | Transaction | Promise] returns: void }> /** * Defines the shape of the global and local state of the application. */ state: { global: { name?: BinaryState symbol?: BinaryState decimals?: BinaryState totalSupply?: BinaryState initialized?: BinaryState warden?: BinaryState } } } /** * Defines the possible abi call signatures */ export type SmartAssetSig = keyof SmartAsset['methods'] /** * Defines an object containing all relevant parameters for a single call to the contract. Where TSignature is undefined, a bare call is made */ export type TypedCallParams = { method: TSignature methodArgs: TSignature extends undefined ? undefined : Array } & AppClientCallCoreParams & CoreAppCallArgs /** * Defines the arguments required for a bare call */ export type BareCallArgs = Omit /** * Maps a method signature from the SmartAsset smart contract to the method's arguments in either tuple of struct form */ export type MethodArgs = SmartAsset['methods'][TSignature]['argsObj' | 'argsTuple'] /** * Maps a method signature from the SmartAsset smart contract to the method's return type */ export type MethodReturn = SmartAsset['methods'][TSignature]['returns'] /** * A factory for available 'create' calls */ export type SmartAssetCreateCalls = (typeof SmartAssetCallFactory)['create'] /** * Defines supported create methods for this smart contract */ export type SmartAssetCreateCallParams = | (TypedCallParams<'createApplication(address,byte[32],byte[8],uint8,uint256)void'> & (OnCompleteNoOp)) /** * A factory for available 'update' calls */ export type SmartAssetUpdateCalls = (typeof SmartAssetCallFactory)['update'] /** * Defines supported update methods for this smart contract */ export type SmartAssetUpdateCallParams = | TypedCallParams<'updateApplication()void'> /** * A factory for available 'delete' calls */ export type SmartAssetDeleteCalls = (typeof SmartAssetCallFactory)['delete'] /** * Defines supported delete methods for this smart contract */ export type SmartAssetDeleteCallParams = | TypedCallParams<'deleteApplication()void'> /** * Defines arguments required for the deploy method. */ export type SmartAssetDeployArgs = { deployTimeParams?: TealTemplateParams /** * A delegate which takes a create call factory and returns the create call params for this smart contract */ createCall?: (callFactory: SmartAssetCreateCalls) => SmartAssetCreateCallParams /** * A delegate which takes a update call factory and returns the update call params for this smart contract */ updateCall?: (callFactory: SmartAssetUpdateCalls) => SmartAssetUpdateCallParams /** * A delegate which takes a delete call factory and returns the delete call params for this smart contract */ deleteCall?: (callFactory: SmartAssetDeleteCalls) => SmartAssetDeleteCallParams } /** * Exposes methods for constructing all available smart contract calls */ export abstract class SmartAssetCallFactory { /** * Gets available create call factories */ static get create() { return { /** * Constructs a create call for the SmartAsset smart contract using the createApplication(address,byte[32],byte[8],uint8,uint256)void ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ createApplication(args: MethodArgs<'createApplication(address,byte[32],byte[8],uint8,uint256)void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams & (OnCompleteNoOp) = {}) { return { method: 'createApplication(address,byte[32],byte[8],uint8,uint256)void' as const, methodArgs: Array.isArray(args) ? args : [args.manager, args.name, args.symbol, args.decimals, args.totalSupply], ...params, } }, } } /** * Gets available update call factories */ static get update() { return { /** * Constructs an update call for the SmartAsset smart contract using the updateApplication()void ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ updateApplication(args: MethodArgs<'updateApplication()void'>, params: AppClientCallCoreParams & CoreAppCallArgs & AppClientCompilationParams = {}) { return { method: 'updateApplication()void' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } }, } } /** * Gets available delete call factories */ static get delete() { return { /** * Constructs a delete call for the SmartAsset smart contract using the deleteApplication()void ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ deleteApplication(args: MethodArgs<'deleteApplication()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return { method: 'deleteApplication()void' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } }, } } /** * Constructs a no op call for the arc200_name()byte[32] ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200Name(args: MethodArgs<'arc200_name()byte[32]'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_name()byte[32]' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } } /** * Constructs a no op call for the arc200_symbol()byte[8] ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200Symbol(args: MethodArgs<'arc200_symbol()byte[8]'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_symbol()byte[8]' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } } /** * Constructs a no op call for the arc200_decimals()uint8 ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200Decimals(args: MethodArgs<'arc200_decimals()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_decimals()uint8' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } } /** * Constructs a no op call for the arc200_totalSupply()uint256 ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200TotalSupply(args: MethodArgs<'arc200_totalSupply()uint256'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_totalSupply()uint256' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } } /** * Constructs a no op call for the arc200_balanceOf(address)uint256 ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200BalanceOf(args: MethodArgs<'arc200_balanceOf(address)uint256'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_balanceOf(address)uint256' as const, methodArgs: Array.isArray(args) ? args : [args.owner], ...params, } } /** * Constructs a no op call for the arc200_allowance(address,address)uint256 ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200Allowance(args: MethodArgs<'arc200_allowance(address,address)uint256'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_allowance(address,address)uint256' as const, methodArgs: Array.isArray(args) ? args : [args.owner, args.spender], ...params, } } /** * Constructs a no op call for the arc200_transfer(address,uint256)bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200Transfer(args: MethodArgs<'arc200_transfer(address,uint256)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_transfer(address,uint256)bool' as const, methodArgs: Array.isArray(args) ? args : [args.to, args.value], ...params, } } /** * Constructs a no op call for the arc200_approve(address,uint256)bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200Approve(args: MethodArgs<'arc200_approve(address,uint256)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_approve(address,uint256)bool' as const, methodArgs: Array.isArray(args) ? args : [args.spender, args.value], ...params, } } /** * Constructs a no op call for the arc200_transferFrom(address,address,uint256)bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static arc200TransferFrom(args: MethodArgs<'arc200_transferFrom(address,address,uint256)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'arc200_transferFrom(address,address,uint256)bool' as const, methodArgs: Array.isArray(args) ? args : [args.from, args.to, args.value], ...params, } } /** * Constructs a no op call for the supportsInterface(byte[4])bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static supportsInterface(args: MethodArgs<'supportsInterface(byte[4])bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'supportsInterface(byte[4])bool' as const, methodArgs: Array.isArray(args) ? args : [args.interfaceId], ...params, } } /** * Constructs a no op call for the zeroAddress()address ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static zeroAddress(args: MethodArgs<'zeroAddress()address'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'zeroAddress()address' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } } /** * Constructs a no op call for the hasBox(address,address)bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static hasBox(args: MethodArgs<'hasBox(address,address)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'hasBox(address,address)bool' as const, methodArgs: Array.isArray(args) ? args : [args.owner, args.spender], ...params, } } /** * Constructs a no op call for the createBalanceBox(address)bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static createBalanceBox(args: MethodArgs<'createBalanceBox(address)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'createBalanceBox(address)bool' as const, methodArgs: Array.isArray(args) ? args : [args.owner], ...params, } } /** * Constructs a no op call for the createAllowanceBox(address,address)bool ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static createAllowanceBox(args: MethodArgs<'createAllowanceBox(address,address)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'createAllowanceBox(address,address)bool' as const, methodArgs: Array.isArray(args) ? args : [args.owner, args.spender], ...params, } } /** * Constructs a no op call for the noop(uint64)void ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static noop(args: MethodArgs<'noop(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'noop(uint64)void' as const, methodArgs: Array.isArray(args) ? args : [args.n], ...params, } } /** * Constructs a no op call for the manager()address ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static manager(args: MethodArgs<'manager()address'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'manager()address' as const, methodArgs: Array.isArray(args) ? args : [], ...params, } } /** * Constructs a no op call for the grant(address)void ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static grant(args: MethodArgs<'grant(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'grant(address)void' as const, methodArgs: Array.isArray(args) ? args : [args.manager], ...params, } } /** * Constructs a no op call for the bootstrap(pay)void ABI method * * @param args Any args for the contract call * @param params Any additional parameters for the call * @returns A TypedCallParams object for the call */ static bootstrap(args: MethodArgs<'bootstrap(pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs) { return { method: 'bootstrap(pay)void' as const, methodArgs: Array.isArray(args) ? args : [args.txn], ...params, } } } /** * A client to make calls to the SmartAsset smart contract */ export class SmartAssetClient { /** * The underlying `ApplicationClient` for when you want to have more flexibility */ public readonly appClient: ApplicationClient private readonly sender: SendTransactionFrom | undefined /** * Creates a new instance of `SmartAssetClient` * * @param appDetails appDetails The details to identify the app to deploy * @param algod An algod client instance */ constructor(appDetails: AppDetails, private algod: Algodv2) { this.sender = appDetails.sender this.appClient = algokit.getAppClient({ ...appDetails, app: APP_SPEC }, algod) } /** * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type * * @param result The AppCallTransactionResult to be mapped * @param returnValueFormatter An optional delegate to format the return value if required * @returns The smart contract response with an updated return value */ protected mapReturnValue(result: AppCallTransactionResult, returnValueFormatter?: (value: any) => TReturn): AppCallTransactionResultOfType & TResult { if(result.return?.decodeError) { throw result.return.decodeError } const returnValue = result.return?.returnValue !== undefined && returnValueFormatter !== undefined ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue as TReturn | undefined return { ...result, return: returnValue } as AppCallTransactionResultOfType & TResult } /** * Calls the ABI method with the matching signature using an onCompletion code of NO_OP * * @param typedCallParams An object containing the method signature, args, and any other relevant parameters * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type * @returns The result of the smart contract call */ public async call(typedCallParams: TypedCallParams, returnValueFormatter?: (value: any) => MethodReturn) { return this.mapReturnValue>(await this.appClient.call(typedCallParams), returnValueFormatter) } /** * Idempotently deploys the SmartAsset smart contract. * * @param params The arguments for the contract calls and any additional parameters for the call * @returns The deployment result */ public deploy(params: SmartAssetDeployArgs & AppClientDeployCoreParams & IncludeSchema = {}): ReturnType { const createArgs = params.createCall?.(SmartAssetCallFactory.create) const updateArgs = params.updateCall?.(SmartAssetCallFactory.update) const deleteArgs = params.deleteCall?.(SmartAssetCallFactory.delete) return this.appClient.deploy({ ...params, updateArgs, deleteArgs, createArgs, createOnCompleteAction: createArgs?.onCompleteAction, }) } /** * Gets available create methods */ public get create() { const $this = this return { /** * Creates a new instance of the SmartAsset smart contract using the createApplication(address,byte[32],byte[8],uint8,uint256)void ABI method. * * @param args The arguments for the smart contract call * @param params Any additional parameters for the call * @returns The create result */ async createApplication(args: MethodArgs<'createApplication(address,byte[32],byte[8],uint8,uint256)void'>, params: AppClientCallCoreParams & AppClientCompilationParams & IncludeSchema & CoreAppCallArgs & (OnCompleteNoOp) = {}) { return $this.mapReturnValue, AppCreateCallTransactionResult>(await $this.appClient.create(SmartAssetCallFactory.create.createApplication(args, params))) }, } } /** * Gets available update methods */ public get update() { const $this = this return { /** * Updates an existing instance of the SmartAsset smart contract using the updateApplication()void ABI method. * * @param args The arguments for the smart contract call * @param params Any additional parameters for the call * @returns The update result */ async updateApplication(args: MethodArgs<'updateApplication()void'>, params: AppClientCallCoreParams & AppClientCompilationParams & CoreAppCallArgs = {}) { return $this.mapReturnValue, AppUpdateCallTransactionResult>(await $this.appClient.update(SmartAssetCallFactory.update.updateApplication(args, params))) }, } } /** * Gets available delete methods */ public get delete() { const $this = this return { /** * Deletes an existing instance of the SmartAsset smart contract using the deleteApplication()void ABI method. * * @param args The arguments for the smart contract call * @param params Any additional parameters for the call * @returns The delete result */ async deleteApplication(args: MethodArgs<'deleteApplication()void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return $this.mapReturnValue>(await $this.appClient.delete(SmartAssetCallFactory.delete.deleteApplication(args, params))) }, } } /** * Makes a clear_state call to an existing instance of the SmartAsset smart contract. * * @param args The arguments for the bare call * @returns The clear_state result */ public clearState(args: BareCallArgs & AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.appClient.clearState(args) } /** * Calls the arc200_name()byte[32] ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200Name(args: MethodArgs<'arc200_name()byte[32]'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200Name(args, params)) } /** * Calls the arc200_symbol()byte[8] ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200Symbol(args: MethodArgs<'arc200_symbol()byte[8]'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200Symbol(args, params)) } /** * Calls the arc200_decimals()uint8 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200Decimals(args: MethodArgs<'arc200_decimals()uint8'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200Decimals(args, params)) } /** * Calls the arc200_totalSupply()uint256 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200TotalSupply(args: MethodArgs<'arc200_totalSupply()uint256'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200TotalSupply(args, params)) } /** * Calls the arc200_balanceOf(address)uint256 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200BalanceOf(args: MethodArgs<'arc200_balanceOf(address)uint256'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200BalanceOf(args, params)) } /** * Calls the arc200_allowance(address,address)uint256 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200Allowance(args: MethodArgs<'arc200_allowance(address,address)uint256'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200Allowance(args, params)) } /** * Calls the arc200_transfer(address,uint256)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200Transfer(args: MethodArgs<'arc200_transfer(address,uint256)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200Transfer(args, params)) } /** * Calls the arc200_approve(address,uint256)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200Approve(args: MethodArgs<'arc200_approve(address,uint256)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200Approve(args, params)) } /** * Calls the arc200_transferFrom(address,address,uint256)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public arc200TransferFrom(args: MethodArgs<'arc200_transferFrom(address,address,uint256)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.arc200TransferFrom(args, params)) } /** * Calls the supportsInterface(byte[4])bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public supportsInterface(args: MethodArgs<'supportsInterface(byte[4])bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.supportsInterface(args, params)) } /** * Calls the zeroAddress()address ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public zeroAddress(args: MethodArgs<'zeroAddress()address'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.zeroAddress(args, params)) } /** * Calls the hasBox(address,address)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public hasBox(args: MethodArgs<'hasBox(address,address)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.hasBox(args, params)) } /** * Calls the createBalanceBox(address)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public createBalanceBox(args: MethodArgs<'createBalanceBox(address)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.createBalanceBox(args, params)) } /** * Calls the createAllowanceBox(address,address)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public createAllowanceBox(args: MethodArgs<'createAllowanceBox(address,address)bool'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.createAllowanceBox(args, params)) } /** * Calls the noop(uint64)void ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public noop(args: MethodArgs<'noop(uint64)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.noop(args, params)) } /** * Calls the manager()address ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public manager(args: MethodArgs<'manager()address'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.manager(args, params)) } /** * Calls the grant(address)void ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public grant(args: MethodArgs<'grant(address)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.grant(args, params)) } /** * Calls the bootstrap(pay)void ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The result of the call */ public bootstrap(args: MethodArgs<'bootstrap(pay)void'>, params: AppClientCallCoreParams & CoreAppCallArgs = {}) { return this.call(SmartAssetCallFactory.bootstrap(args, params)) } /** * Extracts a binary state value out of an AppState dictionary * * @param state The state dictionary containing the state value * @param key The key of the state value * @returns A BinaryState instance containing the state value, or undefined if the key was not found */ private static getBinaryState(state: AppState, key: string): BinaryState | undefined { const value = state[key] if (!value) return undefined if (!('valueRaw' in value)) throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`) return { asString(): string { return value.value }, asByteArray(): Uint8Array { return value.valueRaw } } } /** * Extracts a integer state value out of an AppState dictionary * * @param state The state dictionary containing the state value * @param key The key of the state value * @returns An IntegerState instance containing the state value, or undefined if the key was not found */ private static getIntegerState(state: AppState, key: string): IntegerState | undefined { const value = state[key] if (!value) return undefined if ('valueRaw' in value) throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`) return { asBigInt() { return typeof value.value === 'bigint' ? value.value : BigInt(value.value) }, asNumber(): number { return typeof value.value === 'bigint' ? Number(value.value) : value.value }, } } /** * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value */ public async getGlobalState(): Promise { const state = await this.appClient.getGlobalState() return { get name() { return SmartAssetClient.getBinaryState(state, 'name') }, get symbol() { return SmartAssetClient.getBinaryState(state, 'symbol') }, get decimals() { return SmartAssetClient.getBinaryState(state, 'decimals') }, get totalSupply() { return SmartAssetClient.getBinaryState(state, 'total_supply') }, get initialized() { return SmartAssetClient.getBinaryState(state, 'initialized') }, get warden() { return SmartAssetClient.getBinaryState(state, 'warden') }, } } public compose(): SmartAssetComposer { const client = this const atc = new AtomicTransactionComposer() let promiseChain:Promise = Promise.resolve() const resultMappers: Array any)> = [] return { arc200Name(args: MethodArgs<'arc200_name()byte[32]'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200Name(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200Symbol(args: MethodArgs<'arc200_symbol()byte[8]'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200Symbol(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200Decimals(args: MethodArgs<'arc200_decimals()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200Decimals(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200TotalSupply(args: MethodArgs<'arc200_totalSupply()uint256'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200TotalSupply(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200BalanceOf(args: MethodArgs<'arc200_balanceOf(address)uint256'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200BalanceOf(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200Allowance(args: MethodArgs<'arc200_allowance(address,address)uint256'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200Allowance(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200Transfer(args: MethodArgs<'arc200_transfer(address,uint256)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200Transfer(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200Approve(args: MethodArgs<'arc200_approve(address,uint256)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200Approve(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, arc200TransferFrom(args: MethodArgs<'arc200_transferFrom(address,address,uint256)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.arc200TransferFrom(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, supportsInterface(args: MethodArgs<'supportsInterface(byte[4])bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.supportsInterface(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, zeroAddress(args: MethodArgs<'zeroAddress()address'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.zeroAddress(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, hasBox(args: MethodArgs<'hasBox(address,address)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.hasBox(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, createBalanceBox(args: MethodArgs<'createBalanceBox(address)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.createBalanceBox(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, createAllowanceBox(args: MethodArgs<'createAllowanceBox(address,address)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.createAllowanceBox(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, noop(args: MethodArgs<'noop(uint64)void'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.noop(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, manager(args: MethodArgs<'manager()address'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.manager(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, grant(args: MethodArgs<'grant(address)void'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.grant(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, bootstrap(args: MethodArgs<'bootstrap(pay)void'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.bootstrap(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, get update() { const $this = this return { updateApplication(args: MethodArgs<'updateApplication()void'>, params?: AppClientComposeCallCoreParams & AppClientCompilationParams) { promiseChain = promiseChain.then(() => client.update.updateApplication(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return $this }, } }, get delete() { const $this = this return { deleteApplication(args: MethodArgs<'deleteApplication()void'>, params?: AppClientComposeCallCoreParams) { promiseChain = promiseChain.then(() => client.delete.deleteApplication(args, {...params, sendParams: {...params?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return $this }, } }, clearState(args?: BareCallArgs & AppClientComposeCallCoreParams & CoreAppCallArgs) { promiseChain = promiseChain.then(() => client.clearState({...args, sendParams: {...args?.sendParams, skipSending: true, atc}})) resultMappers.push(undefined) return this }, addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom) { promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit.getTransactionWithSigner(txn, defaultSender ?? client.sender))) return this }, async atc() { await promiseChain return atc }, async simulate(options?: SimulateOptions) { await promiseChain const result = await atc.simulate(client.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options })) return { ...result, returns: result.methodResults?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) } }, async execute(sendParams?: AppClientComposeExecuteParams) { await promiseChain const result = await algokit.sendAtomicTransactionComposer({ atc, sendParams }, client.algod) return { ...result, returns: result.returns?.map((val, i) => resultMappers[i] !== undefined ? resultMappers[i]!(val.returnValue) : val.returnValue) } } } as unknown as SmartAssetComposer } } export type SmartAssetComposer = { /** * Calls the arc200_name()byte[32] ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200Name(args: MethodArgs<'arc200_name()byte[32]'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_name()byte[32]'>]> /** * Calls the arc200_symbol()byte[8] ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200Symbol(args: MethodArgs<'arc200_symbol()byte[8]'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_symbol()byte[8]'>]> /** * Calls the arc200_decimals()uint8 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200Decimals(args: MethodArgs<'arc200_decimals()uint8'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_decimals()uint8'>]> /** * Calls the arc200_totalSupply()uint256 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200TotalSupply(args: MethodArgs<'arc200_totalSupply()uint256'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_totalSupply()uint256'>]> /** * Calls the arc200_balanceOf(address)uint256 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200BalanceOf(args: MethodArgs<'arc200_balanceOf(address)uint256'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_balanceOf(address)uint256'>]> /** * Calls the arc200_allowance(address,address)uint256 ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200Allowance(args: MethodArgs<'arc200_allowance(address,address)uint256'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_allowance(address,address)uint256'>]> /** * Calls the arc200_transfer(address,uint256)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200Transfer(args: MethodArgs<'arc200_transfer(address,uint256)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_transfer(address,uint256)bool'>]> /** * Calls the arc200_approve(address,uint256)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200Approve(args: MethodArgs<'arc200_approve(address,uint256)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_approve(address,uint256)bool'>]> /** * Calls the arc200_transferFrom(address,address,uint256)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ arc200TransferFrom(args: MethodArgs<'arc200_transferFrom(address,address,uint256)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'arc200_transferFrom(address,address,uint256)bool'>]> /** * Calls the supportsInterface(byte[4])bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ supportsInterface(args: MethodArgs<'supportsInterface(byte[4])bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'supportsInterface(byte[4])bool'>]> /** * Calls the zeroAddress()address ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ zeroAddress(args: MethodArgs<'zeroAddress()address'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'zeroAddress()address'>]> /** * Calls the hasBox(address,address)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ hasBox(args: MethodArgs<'hasBox(address,address)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'hasBox(address,address)bool'>]> /** * Calls the createBalanceBox(address)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ createBalanceBox(args: MethodArgs<'createBalanceBox(address)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'createBalanceBox(address)bool'>]> /** * Calls the createAllowanceBox(address,address)bool ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ createAllowanceBox(args: MethodArgs<'createAllowanceBox(address,address)bool'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'createAllowanceBox(address,address)bool'>]> /** * Calls the noop(uint64)void ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ noop(args: MethodArgs<'noop(uint64)void'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'noop(uint64)void'>]> /** * Calls the manager()address ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ manager(args: MethodArgs<'manager()address'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'manager()address'>]> /** * Calls the grant(address)void ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ grant(args: MethodArgs<'grant(address)void'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'grant(address)void'>]> /** * Calls the bootstrap(pay)void ABI method. * * @param args The arguments for the contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ bootstrap(args: MethodArgs<'bootstrap(pay)void'>, params?: AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, MethodReturn<'bootstrap(pay)void'>]> /** * Gets available update methods */ readonly update: { /** * Updates an existing instance of the SmartAsset smart contract using the updateApplication()void ABI method. * * @param args The arguments for the smart contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ updateApplication(args: MethodArgs<'updateApplication()void'>, params?: AppClientComposeCallCoreParams & AppClientCompilationParams): SmartAssetComposer<[...TReturns, MethodReturn<'updateApplication()void'>]> } /** * Gets available delete methods */ readonly delete: { /** * Deletes an existing instance of the SmartAsset smart contract using the deleteApplication()void ABI method. * * @param args The arguments for the smart contract call * @param params Any additional parameters for the call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ deleteApplication(args: MethodArgs<'deleteApplication()void'>, params?: AppClientComposeCallCoreParams): SmartAssetComposer<[...TReturns, MethodReturn<'deleteApplication()void'>]> } /** * Makes a clear_state call to an existing instance of the SmartAsset smart contract. * * @param args The arguments for the bare call * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions */ clearState(args?: BareCallArgs & AppClientComposeCallCoreParams & CoreAppCallArgs): SmartAssetComposer<[...TReturns, undefined]> /** * Adds a transaction to the composer * * @param txn One of: A TransactionWithSigner object (returned as is), a TransactionToSign object (signer is obtained from the signer property), a Transaction object (signer is extracted from the defaultSender parameter), an async SendTransactionResult returned by one of algokit utils helpers (signer is obtained from the defaultSender parameter) * @param defaultSender The default sender to be used to obtain a signer where the object provided to the transaction parameter does not include a signer. */ addTransaction(txn: TransactionWithSigner | TransactionToSign | Transaction | Promise, defaultSender?: SendTransactionFrom): SmartAssetComposer /** * Returns the underlying AtomicTransactionComposer instance */ atc(): Promise /** * Simulates the transaction group and returns the result */ simulate(options?: SimulateOptions): Promise> /** * Executes the transaction group and returns the results */ execute(sendParams?: AppClientComposeExecuteParams): Promise> } export type SimulateOptions = Omit[0], 'txnGroups'> export type SmartAssetComposerSimulateResult = { returns: TReturns methodResults: ABIResult[] simulateResponse: modelsv2.SimulateResponse } export type SmartAssetComposerResults = { returns: TReturns groupId: string txIds: string[] transactions: Transaction[] }